# File lib/ruby-vpi/vpi.rb, line 141
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:       # ensure that value was written correctly
182:         readenVal = get_value(aFormat)
183: 
184:         writtenCorrectly =
185:           case aFormat
186:             when VpiBinStrVal, VpiOctStrVal, VpiDecStrVal, VpiHexStrVal
187:               if aValue =~ /[xz]/i  # TODO: verify 'z' behavior
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:               # allow for register overflow when limit reached
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