Class: HDLRuby::High::Program
- Inherits:
-
Low::Program
- Object
- Low::Program
- HDLRuby::High::Program
- Includes:
- Hmissing
- Defined in:
- lib/HDLRuby/hruby_high.rb,
lib/HDLRuby/hruby_rcsim.rb
Overview
Describes a program.
Constant Summary
Constants included from Hmissing
Hmissing::High, Hmissing::NAMES
Instance Attribute Summary collapse
-
#namespace ⇒ Object
readonly
Returns the value of attribute namespace.
-
#rccode ⇒ Object
readonly
Extends the Program class for hybrid Ruby-C simulation.
Attributes inherited from Low::Program
Attributes included from Low::Hparent
Instance Method Summary collapse
-
#actport(*evs) ⇒ Object
Adds new activation ports.
-
#code(*codes) ⇒ Object
Adds new code files.
-
#initialize(lang, func, &ruby_block) ⇒ Program
constructor
Create a program in language +lang+ with start function named +func+ and built through +ruby_block+.
-
#inport(ports = {}) ⇒ Object
Adds new input ports.
-
#outport(ports = {}) ⇒ Object
Adds new output ports.
-
#to_low ⇒ Object
Converts the if to HDLRuby::Low.
-
#to_rcsim(rcowner) ⇒ Object
Generate the C description of the code comming from object whose C description is +rcowner+.
Methods included from Hmissing
Methods inherited from Low::Program
#add_actport, #add_code, #add_inport, #add_outport, #each_actport, #each_code, #each_inport, #each_outport
Methods included from Low::Hparent
#absolute_ref, #hierarchy, #no_parent!, #scope
Constructor Details
#initialize(lang, func, &ruby_block) ⇒ Program
Create a program in language +lang+ with start function named +func+ and built through +ruby_block+.
2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 |
# File 'lib/HDLRuby/hruby_high.rb', line 2520 def initialize(lang, func, &ruby_block) # Create the program. super(lang,func) # Create the namespace for the program. @namespace = Namespace.new(self) # Build the program object. High.space_push(@namespace) High.top_user.instance_eval(&ruby_block) High.space_pop end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class HDLRuby::High::Hmissing
Instance Attribute Details
#namespace ⇒ Object (readonly)
Returns the value of attribute namespace.
2516 2517 2518 |
# File 'lib/HDLRuby/hruby_high.rb', line 2516 def namespace @namespace end |
#rccode ⇒ Object (readonly)
Extends the Program class for hybrid Ruby-C simulation. NOTE: produce a low-level Code, and not program. For now, Program is a high-level interface for software description and is not ment to be simulated as is. It may hcange in the future though.
534 535 536 |
# File 'lib/HDLRuby/hruby_rcsim.rb', line 534 def rccode @rccode end |
Instance Method Details
#actport(*evs) ⇒ Object
Adds new activation ports.
2548 2549 2550 |
# File 'lib/HDLRuby/hruby_high.rb', line 2548 def actport(*evs) evs.each(&method(:add_actport)) end |
#code(*codes) ⇒ Object
Adds new code files.
2553 2554 2555 |
# File 'lib/HDLRuby/hruby_high.rb', line 2553 def code(*codes) codes.each(&method(:add_code)) end |
#inport(ports = {}) ⇒ Object
Adds new input ports.
2558 2559 2560 |
# File 'lib/HDLRuby/hruby_high.rb', line 2558 def inport(ports = {}) ports.each { |k,v| self.add_inport(k,v) } end |
#outport(ports = {}) ⇒ Object
Adds new output ports.
2563 2564 2565 |
# File 'lib/HDLRuby/hruby_high.rb', line 2563 def outport(ports = {}) ports.each { |k,v| self.add_outport(k,v) } end |
#to_low ⇒ Object
Converts the if to HDLRuby::Low.
2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 |
# File 'lib/HDLRuby/hruby_high.rb', line 2532 def to_low # Create the resulting program. progL = HDLRuby::Low::Program.new(self.language,self.function) # Add the wakening events. self.each_actport { |ev| progL.add_actport(ev.to_low) } # Add the code files. self.each_code { |ev| progL.add_code(code) } # Add the input signals references. self.each_inport { |p| progL.add_inport(p[0],p[1].to_low) } # Add the output signals references. self.each_outport { |p| progL.add_outport(p[0],p[1].to_low) } # Return the resulting program. return progL end |
#to_rcsim(rcowner) ⇒ Object
Generate the C description of the code comming from object whose C description is +rcowner+. NOTE: also update the table of signals accessed from software code.
540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 |
# File 'lib/HDLRuby/hruby_rcsim.rb', line 540 def to_rcsim(rcowner) # puts "to_rcsim for program=#{self}" # Create the code C object. # puts "make code with self.class=#{self.class}" @rccode = RCSim.rcsim_make_code(self.language.to_s, self.function.to_s) # Set the owner. RCSim.rcsim_set_owner(@rccode,rcowner) # Create and add the events. if self.each_actport.any? then RCSim.rcsim_add_code_events(@rccode, self.each_actport.map do|ev| ev.to_rcsim(@rccode) end) end # Create the software interface. if self.language == :ruby then # Loads the code files. self.each_code do |code| Kernel.require("./"+code.to_s) end # Add the input ports. self.each_inport do |sym, sig| RubyHDL.inport(sym,sig.rcsignalI) end # Add the output ports. self.each_outport do |sym, sig| RubyHDL.outport(sym,sig.rcsignalI) end elsif self.language == :c then # Loads the code file: only the last one remains. self.each_code do |code| code = code.to_s # Check if the file exists. unless File.file?(code) then # The code name may be not complete, # try ".so", ".bundle" or ".dll" extensions. if File.file?(code+".so") then code += ".so" elsif File.file?(code + ".bundle") then code += ".bundle" elsif File.file?(code + ".dll") then code += ".dll" else # Code not found. raise "C code library not found: " + code end end RCSim.rcsim_load_c(@rccode,code,self.function.to_s) end # Add the input ports. self.each_inport do |sym, sig| RCSim::CPorts[sym] = sig.rcsignalI end # Add the output ports. self.each_outport do |sym, sig| RCSim::CPorts[sym] = sig.rcsignalI end end return @rccode end |