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:
144: readenVal = get_value(aFormat)
145:
146: writtenCorrectly =
147: case aFormat
148: when VpiBinStrVal, VpiOctStrVal, VpiDecStrVal, VpiHexStrVal
149: if aValue =~ /[xz]/i
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:
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