# File lib/ruby-vpi/vpi.rb, line 113
113:     def put_value aValue, aFormat = nil, aTime = nil, aDelay = VpiNoDelay
114:       aFormat =
115:         if aFormat
116:           resolve_prop_type(aFormat)
117:         else
118:           get_value_wrapper(VpiObjTypeVal).format
119:         end
120: 
121:       newVal = S_vpi_value.new
122:       newVal.format = aFormat
123: 
124:       case aFormat
125:         when VpiBinStrVal, VpiOctStrVal, VpiDecStrVal, VpiHexStrVal, VpiStringVal
126:           newVal.value.str = aValue.to_s
127: 
128:         when VpiScalarVal
129:           newVal.value.scalar = aValue
130: 
131:         when VpiIntVal
132:           newVal.format = VpiHexStrVal
133:           newVal.value.str = aValue.to_i.to_s(16)
134: 
135:         when VpiRealVal
136:           newVal.value.real = aValue.to_f
137: 
138:         when VpiTimeVal
139:           newVal.value.time = aValue
140: 
141:         when VpiVectorVal
142:           newVal.value.vector = aValue
143: 
144:         when VpiStrengthVal
145:           newVal.value.strength = aValue
146: 
147:         else
148:           raise "unknown S_vpi_value.format: #{newVal.format}"
149:       end
150: 
151:       vpi_put_value self, newVal, aTime, aDelay
152: 
153:       # ensure that value was written correctly
154:         readenVal = get_value(aFormat)
155: 
156:         writtenCorrectly =
157:           case aFormat
158:             when VpiBinStrVal, VpiOctStrVal, VpiDecStrVal, VpiHexStrVal
159:               if aValue =~ /[xz]/i  # TODO: verify 'z' behavior
160:                 readenVal =~ /[xz]/i
161:               else
162:                 readenVal == aValue.to_s
163:               end
164: 
165:             when VpiStringVal
166:               readenVal == aValue.to_s
167: 
168:             when VpiIntVal
169:               # allow for register overflow when limit reached
170:               readenVal == (aValue.to_i % (2 ** self.vpiSize))
171: 
172:             when VpiRealVal
173:               readenVal == aValue.to_f
174: 
175:             else
176:               true
177:           end
178: 
179:         unless writtenCorrectly
180:           raise "value written (#{aValue.inspect}) does not match value read (#{readenVal.inspect}) from handle #{self}"
181:         end
182: 
183:       aValue
184:     end