Module: RgGen::SystemVerilog::RTL::BitFieldIndex
- Defined in:
- lib/rggen/systemverilog/rtl/bit_field_index.rb
Constant Summary collapse
- EXPORTED_METHODS =
[ :local_index, :local_indexes, :loop_variables, :flat_loop_index, :array_size ].freeze
Class Method Summary collapse
Instance Method Summary collapse
- #array_size ⇒ Object
- #flat_loop_index ⇒ Object
- #local_index ⇒ Object
- #local_indexes ⇒ Object
- #loop_variables ⇒ Object
Class Method Details
.included(feature) ⇒ Object
11 12 13 14 15 |
# File 'lib/rggen/systemverilog/rtl/bit_field_index.rb', line 11 def self.included(feature) feature.module_eval do EXPORTED_METHODS.each { |m| export m } end end |
Instance Method Details
#array_size ⇒ Object
42 43 44 45 46 |
# File 'lib/rggen/systemverilog/rtl/bit_field_index.rb', line 42 def array_size return unless inside_loop? [*register.array_size(hierarchical: true), *bit_field.sequence_size] end |
#flat_loop_index ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/rggen/systemverilog/rtl/bit_field_index.rb', line 30 def flat_loop_index return unless inside_loop? size = array_size factors = Array.new(size.size) { |i| size[(i + 1)..].inject(1, :*) } factors .zip(loop_variables) .map { |f, v| f == 1 && v || "#{f}*#{v}" } .join('+') end |
#local_index ⇒ Object
17 18 19 |
# File 'lib/rggen/systemverilog/rtl/bit_field_index.rb', line 17 def local_index create_identifier(local_index_name) end |
#local_indexes ⇒ Object
21 22 23 |
# File 'lib/rggen/systemverilog/rtl/bit_field_index.rb', line 21 def local_indexes [*register.local_indexes, local_index_name] end |
#loop_variables ⇒ Object
25 26 27 28 |
# File 'lib/rggen/systemverilog/rtl/bit_field_index.rb', line 25 def loop_variables (inside_loop? || nil) && [*register.loop_variables, local_index].compact end |