Class: Symbol
- Inherits:
-
Object
- Object
- Symbol
- Defined in:
- lib/HDLRuby/hruby_high.rb,
lib/HDLRuby/hruby_low2sym.rb
Overview
Extends the symbol class for auto declaration of input or output.
Constant Summary collapse
Instance Method Summary collapse
-
#to_hdr ⇒ Object
Convert to the equivalent HDLRuby object if any, returns nil if not.
-
#to_value ⇒ Object
(also: #to_expr)
Converts to a new value.
-
#to_value? ⇒ Boolean
Tell if the expression can be converted to a value.
Instance Method Details
#to_hdr ⇒ Object
Convert to the equivalent HDLRuby object if any, returns nil if not.
50 51 52 |
# File 'lib/HDLRuby/hruby_low2sym.rb', line 50 def to_hdr return Low2Symbol::Symbol2LowTable[self] end |
#to_value ⇒ Object Also known as: to_expr
Converts to a new value.
Returns nil if no value can be obtained from it.
5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 |
# File 'lib/HDLRuby/hruby_high.rb', line 5159 def to_value str = self.to_s return nil if str[0] != "_" # Bit string are prefixed by "_" # Get and check the type # type = str[0] type = str[1] if ["0", "1", "z", "Z", "o", "d", "h"].include?(type) then # Default binary type = "b" else # Not a default type # str = str[1..-1] str = str[2..-1] end return nil unless ["b","u","s"].include?(type) # Remove the "_" str = str.delete("_") return nil if str.empty? # Get the width if any. if str[0].match(/[0-9]/) then width = str.scan(/[0-9]*/)[0] else width = nil end # puts "width=#{width}" old_str = str # Save the string it this state since its first chars # can be erroneously considered as giving the width str = str[width.size..-1] if width # Get the base and the value base = str[0] # puts "base=#{base}\n" unless ["b", "o", "d", "h"].include?(base) then # No base found, default is bit base = "b" # And the width was actually a part of the value. value = old_str width = nil else # Get the value. value = str[1..-1] end # puts "value=#{value}" # Compute the bit width and the value case base when "b" then # base 2, compute the width width = width ? width.to_i : value.size # Check the value return nil unless value.match(/^[0-1zxZX]+$/) when "o" then # base 8, compute the width width = width ? width.to_i : value.size * 3 # Check the value if value.match(/^[0-7xXzZ]+$/) then # 4-state value, conpute the correspondig bit string. value = value.each_char.map do |c| c = c.upcase if c == "X" or c.upcase == "Z" then c * 3 else c.to_i(8).to_s(2).rjust(3,"0") end end.join else # Invalid value return nil end when "d" then # base 10, compute the width width = width ? width.to_i : value.to_i.to_s(2).size + 1 # Check the value return nil unless value.match(/^[0-9]+$/) # Compute it (base 10 values cannot be 4-state!) value = value.to_i.to_s(2) when "h" then # base 16, compute the width width = width ? width.to_i : value.size * 4 # Check the value if value.match(/^[0-9a-fA-FxXzZ]+$/) then # 4-state value, conpute the correspondig bit string. value = value.each_char.map do |c| c = c.upcase if c == "X" or c.upcase == "Z" then c * 4 else c.to_i(16).to_s(2).rjust(4,"0") end end.join else # Invalid value return nil end else # Unknown base return nil end # Compute the type. case type when "b" then type = bit[width] when "u" then type = unsigned[width] when "s" then type = signed[width] else # Unknown type return nil end # puts "type.width=#{type.width}, value=#{value}" # Create and return the value. return Value.new(type,value) end |
#to_value? ⇒ Boolean
Tell if the expression can be converted to a value.
5152 5153 5154 |
# File 'lib/HDLRuby/hruby_high.rb', line 5152 def to_value? return true end |