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