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