Class: HDLRuby::Low::Event
- Inherits:
-
Base::Event
- Object
- Base::Event
- HDLRuby::Low::Event
- Includes:
- Hparent, Low2Symbol
- Defined in:
- lib/HDLRuby/hruby_db.rb,
lib/HDLRuby/hruby_low.rb,
lib/HDLRuby/hruby_low2c.rb,
lib/HDLRuby/hruby_low2sym.rb,
lib/HDLRuby/hruby_low2vhd.rb,
lib/HDLRuby/hruby_low2high.rb,
lib/HDLRuby/hruby_low_mutable.rb,
lib/HDLRuby/hruby_low_skeleton.rb
Overview
Describes an event.
Direct Known Subclasses
Constant Summary
Constants included from Low2Symbol
Low2Symbol::Low2SymbolPrefix, Low2Symbol::Low2SymbolTable, Low2Symbol::Symbol2LowTable
Instance Attribute Summary collapse
-
#ref ⇒ Object
readonly
The reference of the event.
-
#type ⇒ Object
readonly
The type of event.
Attributes included from Hparent
Instance Method Summary collapse
-
#eql?(obj) ⇒ Boolean
Comparison for hash: structural comparison.
-
#hash ⇒ Object
Hash function.
-
#initialize(type, ref) ⇒ Event
constructor
Creates a new +type+ sort of event on signal refered by +ref+.
-
#on_edge? ⇒ Boolean
Tells if there is a positive or negative edge event.
-
#reassign_expressions!(node2reassign) ⇒ Object
Replace node by corresponding replacement from +node2reassign+ that is a table whose entries are: +node+ the node to replace +rep+ the replacement of the node +ref+ the reference where to reassign the node.
-
#set_ref!(ref) ⇒ Object
Sets the reference to +ref+.
-
#set_type!(type) ⇒ Object
Sets the type.
-
#to_c(level = 0) ⇒ Object
Generates the C text of the equivalent HDLRuby::High code.
-
#to_high(level = 0) ⇒ Object
Generates the text of the equivalent HDLRuby::High code.
Methods included from Low2Symbol
Methods included from Hparent
Constructor Details
#initialize(type, ref) ⇒ Event
Creates a new +type+ sort of event on signal refered by +ref+.
2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 |
# File 'lib/HDLRuby/hruby_low.rb', line 2198 def initialize(type,ref) # Check and set the type. @type = type.to_sym # Check and set the reference. unless ref.is_a?(Ref) raise AnyError, "Invalid class for a reference: #{ref.class}" end @ref = ref # And set the parent of ref. ref.parent = self end |
Instance Attribute Details
#ref ⇒ Object (readonly)
The reference of the event.
2195 2196 2197 |
# File 'lib/HDLRuby/hruby_low.rb', line 2195 def ref @ref end |
#type ⇒ Object (readonly)
The type of event.
2192 2193 2194 |
# File 'lib/HDLRuby/hruby_low.rb', line 2192 def type @type end |
Instance Method Details
#eql?(obj) ⇒ Boolean
Comparison for hash: structural comparison.
2211 2212 2213 2214 2215 2216 |
# File 'lib/HDLRuby/hruby_low.rb', line 2211 def eql?(obj) return false unless obj.is_a?(Event) return false unless @type.eql?(obj.type) return false unless @ref.eql?(obj.ref) return true end |
#hash ⇒ Object
Hash function.
2219 2220 2221 |
# File 'lib/HDLRuby/hruby_low.rb', line 2219 def hash return [@type,@ref].hash end |
#on_edge? ⇒ Boolean
Tells if there is a positive or negative edge event.
NOTE: checks if the event type is :posedge or :negedge
2226 2227 2228 |
# File 'lib/HDLRuby/hruby_low.rb', line 2226 def on_edge? return (@type == :posedge or @type == :negedge) end |
#reassign_expressions!(node2reassign) ⇒ Object
Replace node by corresponding replacement from +node2reassign+ that is a table whose entries are: +node+ the node to replace +rep+ the replacement of the node +ref+ the reference where to reassign the node.
444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 |
# File 'lib/HDLRuby/hruby_low_mutable.rb', line 444 def reassign_expressions!(node2reassign) # Build the replacement table. node2rep = node2reassign.map {|n,r| [n,r[0]] }.to_h # Performs the replacement. node2rep_done = {} # The performed replacements. # Replace on the sons of the reference. node2rep_done.merge!(self.ref.replace_expressions!(node2rep)) # Shall we replace the ref? rep = node2rep[self.ref] if rep then # Yes, do it. rep = rep.clone node = self.ref # node.set_parent!(nil) self.set_ref!(rep) node2rep_done[node] = rep end # Assign the replaced nodes. node2rep_done.each do |node,rep| reassign = node2reassign[node][1].clone self.parent.parent. add_connection(Connection.new(reassign,node.clone)) end end |
#set_ref!(ref) ⇒ Object
Sets the reference to +ref+.
431 432 433 434 435 436 437 |
# File 'lib/HDLRuby/hruby_low_mutable.rb', line 431 def set_ref!(ref) # Check and set the reference. unless ref.is_a?(Ref) raise AnyError, "Invalid class for a reference: #{ref.class}" end @ref = ref end |
#set_type!(type) ⇒ Object
Sets the type.
425 426 427 428 |
# File 'lib/HDLRuby/hruby_low_mutable.rb', line 425 def set_type!(type) # Check and set the type. @type = type.to_sym end |
#to_c(level = 0) ⇒ Object
Generates the C text of the equivalent HDLRuby::High code. +level+ is the hierachical level of the object.
724 725 726 727 728 729 730 |
# File 'lib/HDLRuby/hruby_low2c.rb', line 724 def to_c(level = 0) edge = "ANYEDGE" edge = "POSEDGE" if self.type == :posedge edge = "NEGEDGE" if self.type == :negedge return "make_event(#{edge}," + "#{self.ref.resolve.to_c_signal(level+1)})" end |
#to_high(level = 0) ⇒ Object
Generates the text of the equivalent HDLRuby::High code. +level+ is the hierachical level of the object.
293 294 295 |
# File 'lib/HDLRuby/hruby_low2high.rb', line 293 def to_high(level = 0) return self.ref.to_high(level) + ".#{self.type}" end |