module Origen::SubBlocks::RegBaseAddress

Public Instance Methods

base_address() click to toggle source
# File lib/origen/sub_blocks.rb, line 154
def base_address
  reg_base_address
end
reg_base_address(options = {}) click to toggle source
# File lib/origen/sub_blocks.rb, line 109
def reg_base_address(options = {})
  if options[:relative]
    reg_base_address_for_domain(options)
  else
    total_reg_base_address = reg_base_address_for_domain(options)
    if parent
      total_reg_base_address += parent.reg_base_address(options)
    end
    total_reg_base_address
  end
end
reg_base_address_for_domain(options) click to toggle source
# File lib/origen/sub_blocks.rb, line 121
def reg_base_address_for_domain(options)
  if @reg_base_address
    if @reg_base_address.is_a?(Hash)
      if options[:domain]
        if options[:domain].is_a?(Hash)
          domains = options[:domain].keys
        else
          domains = [options[:domain]].flatten
        end
        bases = domains.map do |d|
          @reg_base_address.with_indifferent_access[d]
        end.compact
        if bases.empty?
          @reg_base_address[:default] || 0
        else
          if bases.size > 1
            fail 'Multiple base addresses found, specify the domain you want, e.g. reg.address(domain: :ahb)'
          else
            bases.first
          end
        end
      else
        @reg_base_address[:default] || 0
      end
    else
      @reg_base_address
    end
  else
    0
  end
end