113: def put_value aValue, aFormat = nil, aTime = nil, aDelay = VpiNoDelay
114: aFormat =
115: if aFormat
116: resolve_prop_type(aFormat)
117: else
118: get_value_wrapper(VpiObjTypeVal).format
119: end
120:
121: newVal = S_vpi_value.new
122: newVal.format = aFormat
123:
124: case aFormat
125: when VpiBinStrVal, VpiOctStrVal, VpiDecStrVal, VpiHexStrVal, VpiStringVal
126: newVal.value.str = aValue.to_s
127:
128: when VpiScalarVal
129: newVal.value.scalar = aValue
130:
131: when VpiIntVal
132: newVal.format = VpiHexStrVal
133: newVal.value.str = aValue.to_i.to_s(16)
134:
135: when VpiRealVal
136: newVal.value.real = aValue.to_f
137:
138: when VpiTimeVal
139: newVal.value.time = aValue
140:
141: when VpiVectorVal
142: newVal.value.vector = aValue
143:
144: when VpiStrengthVal
145: newVal.value.strength = aValue
146:
147: else
148: raise "unknown S_vpi_value.format: #{newVal.format}"
149: end
150:
151: vpi_put_value self, newVal, aTime, aDelay
152:
153:
154: readenVal = get_value(aFormat)
155:
156: writtenCorrectly =
157: case aFormat
158: when VpiBinStrVal, VpiOctStrVal, VpiDecStrVal, VpiHexStrVal
159: if aValue =~ /[xz]/i
160: readenVal =~ /[xz]/i
161: else
162: readenVal == aValue.to_s
163: end
164:
165: when VpiStringVal
166: readenVal == aValue.to_s
167:
168: when VpiIntVal
169:
170: readenVal == (aValue.to_i % (2 ** self.vpiSize))
171:
172: when VpiRealVal
173: readenVal == aValue.to_f
174:
175: else
176: true
177: end
178:
179: unless writtenCorrectly
180: raise "value written (#{aValue.inspect}) does not match value read (#{readenVal.inspect}) from handle #{self}"
181: end
182:
183: aValue
184: end