Class: HDLRuby::High::SystemI
- Inherits:
-
Low::SystemI
- Object
- Base::SystemI
- Low::SystemI
- HDLRuby::High::SystemI
- Includes:
- SingletonExtend
- Defined in:
- lib/HDLRuby/hruby_high.rb
Overview
Describes a high-level system instance.
Constant Summary collapse
Constants included from Low::Low2Symbol
Low::Low2Symbol::Low2SymbolPrefix, Low::Low2Symbol::Low2SymbolTable, Low::Low2Symbol::Symbol2LowTable
Instance Attribute Summary
Attributes inherited from Low::SystemI
Attributes included from Low::Hparent
Instance Method Summary collapse
-
#call(*connects) ⇒ Object
Connects signals of the system instance according to +connects+.
-
#get_export(name) ⇒ Object
Gets an exported element (signal or system instance) by +name+.
-
#initialize(name, systemT) ⇒ SystemI
constructor
Creates a new system instance of system type +systemT+ named +name+.
-
#method_missing(m, *args, &ruby_block) ⇒ Object
Missing methods are looked for in the public namespace of the system type.
-
#namespace ⇒ Object
Gets the private namespace.
-
#open(&ruby_block) ⇒ Object
Opens for extension.
-
#public_namespace ⇒ Object
Gets the public namespace.
-
#to_low(name = self.name) ⇒ Object
Converts the instance to HDLRuby::Low and set its +name+.
-
#to_ref ⇒ Object
Converts to a new reference.
-
#type ⇒ Object
The type of a systemI: for now Void (may change in the future).
Methods included from SingletonExtend
Methods inherited from Low::SystemI
#add_systemT, #each_arrow_deep, #each_behavior, #each_behavior_deep, #each_block_deep, #each_connection, #each_connection_deep, #each_inner, #each_inout, #each_input, #each_output, #each_sensitive_deep, #each_signal, #each_signal_deep, #each_statement_deep, #each_systemI, #each_systemT, #eql?, #get_by_name, #get_inner, #get_inout, #get_input, #get_output, #get_signal, #get_systemI, #hash, #replace_names!, #set_name!, #set_systemT, #to_c, #to_ch, #to_high, #to_vhdl, #with_port!, #with_var!
Methods included from Low::Low2Symbol
Methods included from Low::Hparent
Constructor Details
#initialize(name, systemT) ⇒ SystemI
Creates a new system instance of system type +systemT+ named +name+.
1894 1895 1896 1897 1898 1899 1900 1901 |
# File 'lib/HDLRuby/hruby_high.rb', line 1894 def initialize(name, systemT) # Initialize the system instance structure. super(name,systemT) # Sets the hdl-like access to the system instance. obj = self # For using the right self within the proc High.space_reg(name) { obj } end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(m, *args, &ruby_block) ⇒ Object
Missing methods are looked for in the public namespace of the system type.
1990 1991 1992 1993 |
# File 'lib/HDLRuby/hruby_high.rb', line 1990 def method_missing(m, *args, &ruby_block) # print "method_missing in class=#{self.class} with m=#{m}\n" self.public_namespace.send(m,*args,&ruby_block) end |
Instance Method Details
#call(*connects) ⇒ Object
Connects signals of the system instance according to +connects+.
NOTE: +connects+ can be a hash table where each entry gives the correspondance between a system's signal name and an external signal to connect to, or a list of signals that will be connected in the order of declaration.
1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 |
# File 'lib/HDLRuby/hruby_high.rb', line 1925 def call(*connects) # Checks if it is a connection through is a hash. if connects.size == 1 and connects[0].respond_to?(:to_h) and !connects[0].is_a?(HRef) then # Yes, perform a connection by name connects = connects[0].to_h # Performs the connections. connects.each do |key,value| # Gets the signal corresponding to connect. signal = self.get_signal(key) # Check if it is an output. isout = self.get_output(key) # Convert it to a reference. ref = RefObject.new(self.to_ref,signal) # Make the connection. if isout then value <= ref else ref <= value end end else # No, perform a connection is order of declaration connects.each.with_index do |csig,i| # puts "csig=#{csig.name} i=#{i}" # puts "systemT inputs=#{systemT.each_input.to_a.size}" # Gets i-est signal to connect ssig = self.systemT.get_interface_with_included(i) # Check if it is an output. isout = self.systemT.get_output_with_included(ssig.name) # puts "ssig=#{ssig.name} isout=#{isout}" # Convert it to a reference. ssig = RefObject.new(self.to_ref,ssig) # Make the connection. if isout then csig <= ssig else ssig <= csig end end end end |
#get_export(name) ⇒ Object
Gets an exported element (signal or system instance) by +name+.
1969 1970 1971 |
# File 'lib/HDLRuby/hruby_high.rb', line 1969 def get_export(name) return @systemT.get_export(name) end |
#namespace ⇒ Object
Gets the private namespace.
2004 2005 2006 2007 |
# File 'lib/HDLRuby/hruby_high.rb', line 2004 def namespace # self.systemT.scope.namespace self.systemT.namespace end |
#open(&ruby_block) ⇒ Object
Opens for extension.
NOTE: actually executes +ruby_block+ in the context of the systemT.
1978 1979 1980 1981 1982 1983 1984 |
# File 'lib/HDLRuby/hruby_high.rb', line 1978 def open(&ruby_block) # Extend the eigen system. @systemT.run(&ruby_block) # Update the methods. @systemT.eigenize(self) self.eigen_extend(@systemT.public_namespace) end |
#public_namespace ⇒ Object
Gets the public namespace.
1999 2000 2001 |
# File 'lib/HDLRuby/hruby_high.rb', line 1999 def public_namespace self.systemT.public_namespace end |
#to_low(name = self.name) ⇒ Object
Converts the instance to HDLRuby::Low and set its +name+.
2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 |
# File 'lib/HDLRuby/hruby_high.rb', line 2011 def to_low(name = self.name) # puts "to_low with #{self} (#{self.name}) #{self.systemT}" # Converts the system of the instance to HDLRuby::Low systemTlow = self.systemT.to_low # Creates the resulting HDLRuby::Low instance systemIlow = HDLRuby::Low::SystemI.new(High.names_create(name), systemTlow) # Adds the other systemTs. self.each_systemT do |systemT| systemIlow.add_systemT(systemT.to_low) unless systemT == self.systemT end return systemIlow end |
#to_ref ⇒ Object
Converts to a new reference.
1909 1910 1911 1912 1913 1914 1915 1916 1917 |
# File 'lib/HDLRuby/hruby_high.rb', line 1909 def to_ref if self.name.empty? then # No name, happens if inside the systemI so use this. return this else # A name. return RefObject.new(this,self) end end |
#type ⇒ Object
The type of a systemI: for now Void (may change in the future).
1904 1905 1906 |
# File 'lib/HDLRuby/hruby_high.rb', line 1904 def type return void end |