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