Class: Udb::Mmr
- Inherits:
-
TopLevelDatabaseObject
- Object
- DatabaseObject
- TopLevelDatabaseObject
- Udb::Mmr
- Includes:
- HasFields
- Defined in:
- lib/udb/obj/mmr.rb
Overview
Memory-Mapped Register (MMR) definition
MMRs are registers accessed via physical memory addresses rather than the CSR address space. They reuse the same field definitions as CSRs but have a physical address instead of a 12-bit CSR address, and no privilege mode or IDL sw_read/sw_write integration.
Instance Attribute Summary collapse
- #name ⇒ String readonly
Instance Method Summary collapse
- #==(other) ⇒ Object
-
#affected_by?(ext_ver) ⇒ Boolean
included
from HasFields
Whether or not the presence of ext_ver affects this register definition.
-
#base ⇒ nil
MMRs have no base restriction.
- #bitfield_type(cfg_arch, effective_xlen = nil) ⇒ T.untyped
-
#defined_in_all_bases? ⇒ Boolean
True if this MMR is defined regardless of the effective XLEN.
-
#defined_in_base32? ⇒ Boolean
True if this MMR is defined when XLEN is 32.
-
#defined_in_base64? ⇒ Boolean
True if this MMR is defined when XLEN is 64.
-
#defined_in_base?(xlen) ⇒ Boolean
True if this MMR is defined when XLEN is xlen.
-
#dynamic_length? ⇒ Boolean
False -- MMR lengths are always static.
-
#exists_in_cfg?(cfg_arch) ⇒ Boolean
Whether or not the MMR is possibly implemented given the supplied config options.
-
#field(field_name) ⇒ CsrField?
included
from HasFields
Field named 'field_name' if it exists, and nil otherwise.
-
#field?(field_name) ⇒ Boolean
included
from HasFields
True if a field named 'field_name' is defined.
-
#field_hash ⇒ Hash<String,CsrField>
included
from HasFields
Hash of fields, indexed by field name.
-
#fields ⇒ Array<CsrField>
included
from HasFields
All known fields of this register.
-
#fields_for(effective_xlen) ⇒ Array<CsrField>
included
from HasFields
All known fields when XLEN ==
effective_xlen. -
#format_changes_with_xlen? ⇒ Boolean
Whether or not the format changes with XLEN (always false for MMR).
-
#length(_effective_xlen = nil) ⇒ Integer
Length in bits of the register.
-
#length_pretty(_effective_xlen = nil) ⇒ String
Pretty-printed length string.
- #long_name ⇒ Object
-
#max_length ⇒ Integer
The largest length of this MMR (same as length since it's always fixed).
-
#min_length ⇒ Integer
Smallest length of the MMR (same as length since it's always fixed).
-
#optional_in_cfg?(cfg_arch) ⇒ Boolean
included
from HasFields
Whether or not the register is optional in the config.
-
#physical_address ⇒ Integer
Physical memory address of the register.
-
#possible_fields ⇒ Array<CsrField>
included
from HasFields
All implemented fields, excluding fields defined by unimplemented extensions.
-
#possible_fields_for(effective_xlen) ⇒ Array<CsrField>
included
from HasFields
All implemented fields at the given effective XLEN.
-
#priv_mode ⇒ String
Stubs for Sorbet — CsrField.parent is T.any(Csr, Mmr) but these methods are only called on CSR-backed fields, never on MMR fields.
-
#wavedrom_desc(cfg_arch, effective_xlen, exclude_unimplemented: false, optional_type: 2) ⇒ Hash
included
from HasFields
A representation of the WaveDrom drawing for the register.
-
#writable ⇒ Boolean
included
from HasFields
Whether or not the register can be written by software.
Constructor Details
This class inherits a constructor from Udb::TopLevelDatabaseObject
Instance Attribute Details
#name ⇒ String (readonly)
23 24 25 |
# File 'lib/udb/obj/mmr.rb', line 23 def name @name end |
Instance Method Details
#==(other) ⇒ Object
25 26 27 28 29 30 31 |
# File 'lib/udb/obj/mmr.rb', line 25 def ==(other) if other.is_a?(Mmr) name == other.name else raise ArgumentError, "Mmr is not comparable to #{other.class.name}" end end |
#affected_by?(ext_ver) ⇒ Boolean Originally defined in module HasFields
Returns Whether or not the presence of ext_ver affects this register definition.
#base ⇒ nil
Returns MMRs have no base restriction.
81 |
# File 'lib/udb/obj/mmr.rb', line 81 def base = nil |
#bitfield_type(cfg_arch, effective_xlen = nil) ⇒ T.untyped
101 |
# File 'lib/udb/obj/mmr.rb', line 101 def bitfield_type(cfg_arch, effective_xlen = nil) = raise NotImplementedError, "MMR does not have a bitfield type" |
#defined_in_all_bases? ⇒ Boolean
Returns true if this MMR is defined regardless of the effective XLEN.
75 |
# File 'lib/udb/obj/mmr.rb', line 75 def defined_in_all_bases? = true |
#defined_in_base32? ⇒ Boolean
Returns true if this MMR is defined when XLEN is 32.
69 |
# File 'lib/udb/obj/mmr.rb', line 69 def defined_in_base32? = true |
#defined_in_base64? ⇒ Boolean
Returns true if this MMR is defined when XLEN is 64.
72 |
# File 'lib/udb/obj/mmr.rb', line 72 def defined_in_base64? = true |
#defined_in_base?(xlen) ⇒ Boolean
Returns true if this MMR is defined when XLEN is xlen.
78 |
# File 'lib/udb/obj/mmr.rb', line 78 def defined_in_base?(xlen) = true |
#dynamic_length? ⇒ Boolean
Returns false -- MMR lengths are always static.
64 65 66 |
# File 'lib/udb/obj/mmr.rb', line 64 def dynamic_length? false end |
#exists_in_cfg?(cfg_arch) ⇒ Boolean
Returns whether or not the MMR is possibly implemented given the supplied config options.
91 92 93 |
# File 'lib/udb/obj/mmr.rb', line 91 def exists_in_cfg?(cfg_arch) @exists_in_cfg ||= defined_by_condition.could_be_satisfied_by_cfg_arch?(cfg_arch) end |
#field(field_name) ⇒ CsrField? Originally defined in module HasFields
Returns field named 'field_name' if it exists, and nil otherwise.
#field?(field_name) ⇒ Boolean Originally defined in module HasFields
Returns true if a field named 'field_name' is defined.
#field_hash ⇒ Hash<String,CsrField> Originally defined in module HasFields
Returns Hash of fields, indexed by field name.
#fields ⇒ Array<CsrField> Originally defined in module HasFields
Returns All known fields of this register.
#fields_for(effective_xlen) ⇒ Array<CsrField> Originally defined in module HasFields
Returns All known fields when XLEN == effective_xlen.
#format_changes_with_xlen? ⇒ Boolean
Returns Whether or not the format changes with XLEN (always false for MMR).
84 85 86 |
# File 'lib/udb/obj/mmr.rb', line 84 def format_changes_with_xlen? false end |
#length(_effective_xlen = nil) ⇒ Integer
Returns Length in bits of the register.
43 44 45 |
# File 'lib/udb/obj/mmr.rb', line 43 def length(_effective_xlen = nil) @data["length"] end |
#length_pretty(_effective_xlen = nil) ⇒ String
Returns Pretty-printed length string.
59 60 61 |
# File 'lib/udb/obj/mmr.rb', line 59 def length_pretty(_effective_xlen = nil) "#{@data['length']}-bit" end |
#long_name ⇒ Object
38 39 40 |
# File 'lib/udb/obj/mmr.rb', line 38 def long_name @data["long_name"] end |
#max_length ⇒ Integer
Returns The largest length of this MMR (same as length since it's always fixed).
49 50 51 |
# File 'lib/udb/obj/mmr.rb', line 49 def max_length @data["length"] end |
#min_length ⇒ Integer
Returns Smallest length of the MMR (same as length since it's always fixed).
54 55 56 |
# File 'lib/udb/obj/mmr.rb', line 54 def min_length @data["length"] end |
#optional_in_cfg?(cfg_arch) ⇒ Boolean Originally defined in module HasFields
Returns whether or not the register is optional in the config.
#physical_address ⇒ Integer
Returns Physical memory address of the register.
34 35 36 |
# File 'lib/udb/obj/mmr.rb', line 34 def physical_address @data["physical_address"] end |
#possible_fields ⇒ Array<CsrField> Originally defined in module HasFields
Returns All implemented fields, excluding fields defined by unimplemented extensions.
#possible_fields_for(effective_xlen) ⇒ Array<CsrField> Originally defined in module HasFields
Returns All implemented fields at the given effective XLEN.
#priv_mode ⇒ String
Stubs for Sorbet — CsrField.parent is T.any(Csr, Mmr) but these methods are only called on CSR-backed fields, never on MMR fields.
98 |
# File 'lib/udb/obj/mmr.rb', line 98 def priv_mode = raise NotImplementedError, "MMR does not have a privilege mode" |
#wavedrom_desc(cfg_arch, effective_xlen, exclude_unimplemented: false, optional_type: 2) ⇒ Hash Originally defined in module HasFields
Returns A representation of the WaveDrom drawing for the register.
#writable ⇒ Boolean Originally defined in module HasFields
Returns Whether or not the register can be written by software.