Class: HDLRuby::High::Event
- Inherits:
-
Low::Event
- Object
- Base::Event
- Low::Event
- HDLRuby::High::Event
- Defined in:
- lib/HDLRuby/hruby_high.rb,
lib/HDLRuby/hruby_rsim.rb,
lib/HDLRuby/std/clocks.rb,
lib/HDLRuby/hruby_rcsim.rb
Overview
Extends the Event class for hybrid Ruby-C simulation.
Constant Summary
Constants included from Low::Low2Symbol
Low::Low2Symbol::Low2SymbolPrefix, Low::Low2Symbol::Low2SymbolTable, Low::Low2Symbol::Symbol2LowTable
Instance Attribute Summary collapse
-
#rcevent ⇒ Object
readonly
Returns the value of attribute rcevent.
Attributes inherited from Low::Event
Attributes included from Low::Hparent
Instance Method Summary collapse
-
#*(times) ⇒ Object
Creates a new event activated every +times+ occurences of the current event.
-
#invert ⇒ Object
Inverts the event: create a negedge if posedge, a posedge if negedge.
-
#to_event ⇒ Object
Converts to a new event.
-
#to_low ⇒ Object
Converts the event to HDLRuby::Low.
-
#to_rcsim(rcowner) ⇒ Object
Generate the C description of the event comming from object whose C description is +rcowner+.
Methods inherited from Low::Event
#each_deep, #eql?, #hash, #initialize, #on_edge?, #reassign_expressions!, #set_ref!, #set_type!, #to_c, #to_hdr, #to_high
Methods included from Low::Low2Symbol
Methods included from Low::Hparent
#hierarchy, #no_parent!, #scope
Constructor Details
This class inherits a constructor from HDLRuby::Low::Event
Instance Attribute Details
#rcevent ⇒ Object (readonly)
Returns the value of attribute rcevent.
391 392 393 |
# File 'lib/HDLRuby/hruby_rcsim.rb', line 391 def rcevent @rcevent end |
Instance Method Details
#*(times) ⇒ Object
Creates a new event activated every +times+ occurences of the current event.
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
# File 'lib/HDLRuby/std/clocks.rb', line 143 def *(times) # The event must be an edge unless (self.type == :posedge or self.type == :negedge) then raise "Only posedge or negedge events can be multiplied." end # +times+ must be a value. times = times.to_value # Creates the clock for the new event. clock = nil # There are two cases: times is even or times is odd. if times.even? then # Even case: make a clock inverted every times/2 occurance of # current event. clock = HDLRuby::High::Std::make_clock(self,times/2) else # Odd case: make a clock raised every times occurance using # both event and inverted event clock = HDLRuby::High::Std::make_2edge_clock(self,times) end # Use the clock to create the new event. return clock.posedge end |
#invert ⇒ Object
Inverts the event: create a negedge if posedge, a posedge if negedge.
NOTE: raise an execption if the event is neigther pos nor neg edge.
3636 3637 3638 3639 3640 3641 3642 3643 3644 |
# File 'lib/HDLRuby/hruby_high.rb', line 3636 def invert if self.type == :posedge then return Event.new(:negedge,self.ref.to_ref) elsif self.type == :negedge then return Event.new(:posedge,self.ref.to_ref) else raise AnyError, "Event cannot be inverted: #{self.type}" end end |
#to_event ⇒ Object
Converts to a new event.
3629 3630 3631 |
# File 'lib/HDLRuby/hruby_high.rb', line 3629 def to_event return Event.new(self.type,self.ref.to_ref) end |
#to_low ⇒ Object
Converts the event to HDLRuby::Low.
3647 3648 3649 3650 3651 3652 3653 3654 |
# File 'lib/HDLRuby/hruby_high.rb', line 3647 def to_low # return HDLRuby::Low::Event.new(self.type,self.ref.to_low) eventL = HDLRuby::Low::Event.new(self.type,self.ref.to_low) # # For debugging: set the source high object # eventL.properties[:low2high] = self.hdr_id # self.properties[:high2low] = eventL return eventL end |
#to_rcsim(rcowner) ⇒ Object
Generate the C description of the event comming from object whose C description is +rcowner+
395 396 397 398 399 400 401 402 403 |
# File 'lib/HDLRuby/hruby_rcsim.rb', line 395 def to_rcsim(rcowner) # Create the event C object. @rcevent = RCSim.rcsim_make_event(self.type,self.ref.to_rcsim) # Set the owner. RCSim.rcsim_set_owner(@rcevent,rcowner) return @rcevent end |