Module: RgGen::SystemVerilog::RTL::RegisterIndex
- Includes:
- PartialSum
- Defined in:
- lib/rggen/systemverilog/rtl/register_index.rb
Constant Summary collapse
- EXPORTED_METHODS =
[ :loop_variables, :local_loop_variables, :local_index, :local_indexes, :index, :inside_loop? ].freeze
Class Method Summary collapse
Instance Method Summary collapse
- #index(offset_or_offsets = nil) ⇒ Object
- #inside_loop? ⇒ Boolean
- #local_index ⇒ Object
- #local_indexes ⇒ Object
- #local_loop_variables ⇒ Object
- #loop_variables ⇒ Object
Class Method Details
.included(feature) ⇒ Object
15 16 17 18 19 20 21 22 23 |
# File 'lib/rggen/systemverilog/rtl/register_index.rb', line 15 def self.included(feature) feature.module_eval do EXPORTED_METHODS.each { |m| export m } pre_build do @base_index = files_and_registers.sum(&:count) end end end |
Instance Method Details
#index(offset_or_offsets = nil) ⇒ Object
52 53 54 55 56 57 |
# File 'lib/rggen/systemverilog/rtl/register_index.rb', line 52 def index(offset_or_offsets = nil) offset_or_offsets .then(&method(:index_operands)) .then(&method(:partial_sums)) .then(&method(:reduce_indexes)) end |
#inside_loop? ⇒ Boolean
59 60 61 |
# File 'lib/rggen/systemverilog/rtl/register_index.rb', line 59 def inside_loop? component.array? || upper_register_file&.inside_loop? || false end |
#local_index ⇒ Object
40 41 42 43 44 45 46 |
# File 'lib/rggen/systemverilog/rtl/register_index.rb', line 40 def local_index (component.array? || nil) && local_index_coefficients .zip(local_loop_variables) .map { |operands| product(operands, false) } .join('+') end |
#local_indexes ⇒ Object
48 49 50 |
# File 'lib/rggen/systemverilog/rtl/register_index.rb', line 48 def local_indexes [*upper_register_file&.local_indexes, local_index] end |
#local_loop_variables ⇒ Object
30 31 32 33 34 35 36 37 38 |
# File 'lib/rggen/systemverilog/rtl/register_index.rb', line 30 def local_loop_variables (component.array? || nil) && begin start_depth = (upper_register_file&.loop_variables&.size || 0) + 1 Array.new(component.array_size.size) do |i| create_identifier(loop_index(i + start_depth)) end end end |
#loop_variables ⇒ Object
25 26 27 28 |
# File 'lib/rggen/systemverilog/rtl/register_index.rb', line 25 def loop_variables (inside_loop? || nil) && [*upper_register_file&.loop_variables, *local_loop_variables] end |