# File lib/ruby-vpi/vpi.rb, line 147
147:       def put_value aValue, aFormat = nil, aTime = nil, aDelay = VpiNoDelay
148:         aFormat =
149:           if aFormat
150:             resolve_prop_type(aFormat)
151:           else
152:             get_value_wrapper(VpiObjTypeVal).format
153:           end
154: 
155:         newVal = S_vpi_value.new(:format => aFormat)
156: 
157:         case aFormat
158:           when VpiBinStrVal, VpiOctStrVal, VpiDecStrVal, VpiHexStrVal, VpiStringVal
159:             newVal.value.str      = aValue.to_s
160: 
161:           when VpiScalarVal
162:             newVal.value.scalar   = aValue
163: 
164:           when VpiIntVal
165:             newVal.format         = VpiHexStrVal
166:             newVal.value.str      = aValue.to_i.to_s(16)
167: 
168:           when VpiRealVal
169:             newVal.value.real     = aValue.to_f
170: 
171:           when VpiTimeVal
172:             newVal.value.time     = aValue
173: 
174:           when VpiVectorVal
175:             newVal.value.vector   = aValue
176: 
177:           when VpiStrengthVal
178:             newVal.value.strength = aValue
179: 
180:           else
181:             raise "unknown S_vpi_value.format: #{newVal.format}"
182:         end
183: 
184:         vpi_put_value(self, newVal, aTime, aDelay)
185: 
186:         # ensure that value was written correctly
187:           readenVal = get_value(aFormat)
188: 
189:           writtenCorrectly =
190:             case aFormat
191:               when VpiBinStrVal, VpiOctStrVal, VpiDecStrVal, VpiHexStrVal
192:                 if aValue =~ /[xz]/i  # TODO: verify 'z' behavior
193:                   readenVal =~ /[xz]/i
194:                 else
195:                   readenVal == aValue.to_s
196:                 end
197: 
198:               when VpiStringVal
199:                 readenVal == aValue.to_s
200: 
201:               when VpiIntVal
202:                 # allow for register overflow when limit reached
203:                 readenVal == (aValue.to_i % (2 ** vpi_get(VpiSize, self)))
204: 
205:               when VpiRealVal
206:                 readenVal == aValue.to_f
207: 
208:               else
209:                 true
210:             end
211: 
212:           unless writtenCorrectly
213:             raise "value written (#{aValue.inspect}) does not match value read (#{readenVal.inspect}) on handle #{self}"
214:           end
215: 
216:         aValue
217:       end