138: def put_value aValue, aFormat = nil, aTime = nil, aDelay = VpiNoDelay
139: aFormat =
140: if aFormat
141: resolve_prop_type(aFormat)
142: else
143: get_value_wrapper(VpiObjTypeVal).format
144: end
145:
146: newVal = S_vpi_value.new
147: newVal.format = aFormat
148:
149: case aFormat
150: when VpiBinStrVal, VpiOctStrVal, VpiDecStrVal, VpiHexStrVal, VpiStringVal
151: newVal.value.str = aValue.to_s
152:
153: when VpiScalarVal
154: newVal.value.scalar = aValue
155:
156: when VpiIntVal
157: newVal.format = VpiHexStrVal
158: newVal.value.str = aValue.to_i.to_s(16)
159:
160: when VpiRealVal
161: newVal.value.real = aValue.to_f
162:
163: when VpiTimeVal
164: newVal.value.time = aValue
165:
166: when VpiVectorVal
167: newVal.value.vector = aValue
168:
169: when VpiStrengthVal
170: newVal.value.strength = aValue
171:
172: else
173: raise "unknown S_vpi_value.format: #{newVal.format}"
174: end
175:
176: vpi_put_value self, newVal, aTime, aDelay
177:
178:
179: readenVal = get_value(aFormat)
180:
181: writtenCorrectly =
182: case aFormat
183: when VpiBinStrVal, VpiOctStrVal, VpiDecStrVal, VpiHexStrVal
184: if aValue =~ /[xz]/i
185: readenVal =~ /[xz]/i
186: else
187: readenVal == aValue.to_s
188: end
189:
190: when VpiStringVal
191: readenVal == aValue.to_s
192:
193: when VpiIntVal
194:
195: readenVal == (aValue.to_i % (2 ** self.vpiSize))
196:
197: when VpiRealVal
198: readenVal == aValue.to_f
199:
200: else
201: true
202: end
203:
204: unless writtenCorrectly
205: raise "value written (#{aValue.inspect}) does not match value read (#{readenVal.inspect}) from handle #{self}"
206: end
207:
208: aValue
209: end