A data structure for working with register map information
Project description
r_map
A library for working with register map data.
The data source is abstracted such that if a user wants to work with a
particular data source, he/she may:
-
Provide an appropriately formatted serialized data source (probably the
easiest)
-
Create a parser of the source data and dynamically generate the data
structure using the provided data classes
Purpose
-
Easily utilize register map data
-
Be able to iterate through register map from arbitrary position
-
Provide conveniences for walking through data
-
Provide ability to serialize/deserialize data
-
Provide mechanism to easily subclass base element implementations
-
Provide means to register which elements are accessed in data base and create
a subtree from this data
Features
Key and attribute access
Key and attribute access to an elements sub elements. The key access is
particularly useful for cases where a sub element happens to have the name of a
reserved keyword in Python.
r_map1.reg.value = 10
r_map1['reg'].value = 10
That elements are not intended to be added to a node via key based assignment
like a dictionary. A method: _add is provided for that.
Key based assignment is not intended to be supported because it can result in a
sub element having an alias which would be confusing and is an unlikely usecase.
Simple Iteration
Iteration is supported by the base Node class and hence provided by all
subclasses.
For example:
for reg in reg_map:
for bf_ref in reg:
print(f"bitfield reference: {bf_ref.name} has value: {bf_ref.value}")
Register to bitfield value mapping
A register's value is based on its component bitfield's values. In fact, there
is an additional layer of indirection to support a register only having a
partial view to a bitfield. It's therefore possible for multiple registers to
have access to the same bitfield. Support for this level is complexity is baked
into the data structre and modelled with a class: BitFieldRef.
A full register map tree is serialized using a common dictionary with nodes
referencing others via their uuids.
For example:
"1b99635555e647638f8a1ff38a1e3cf1": {
"name": "root",
"type": "Node",
"children": [
"3e2f9ba277e44050b52b5111fd814008"
]
},
"3e2f9ba277e44050b52b5111fd814008": {
"name": "r_map1",
"descr": "An example register map containing r
"local_address": 268435456,
"type": "RegisterMap",
"children": [
"c897cf71021449bdbdc819e7255fcab7",
"569715f765f14ba09313796ee98b6db6"
]
},
"c897cf71021449bdbdc819e7255fcab7": {
"local_address": 0,
"name": "reg1",
"width": 32,
"type": "Register",
"children": [
"8cded8916e014bb3ab621e327f9c0ae8"
]
},
"8cded8916e014bb3ab621e327f9c0ae8": {
"reg_offset": 8,
"field_offset": 7,
"name": "bf1_ref",
"slice_width": 6,
"type": "BitFieldRef",
"children": [
"b138d3d5335442479f25ec4d57859cda"
]
},
"b138d3d5335442479f25ec4d57859cda": {
"access": "RW",
"name": "bf1",
"reset_val": 74565,
"width": 20,
"doc": "Some documentation to describe the bit
"type": "BitField",
"children": [
"ba75ebd0924a46f29f0dd1726fd5fb5f",
"36b5d3a221e6400bba2d76a303dac2c2"
]
},
"ba75ebd0924a46f29f0dd1726fd5fb5f": {
"name": "use_auto_inc",
"value": 20,
"type": "Enumeration"
},
"36b5d3a221e6400bba2d76a303dac2c2": {
"name": "use_auto_dec",
"value": 10,
"type": "Enumeration"
},
"569715f765f14ba09313796ee98b6db6": {
"local_address": 4,
"name": "reg2",
"width": 32,
"type": "Register",
"children": [
"14b8d11fea244200a6d0efee16d740f7",
"37a9c221ab77446aafe9f74ec14c78c6",
"6f695b3dbdd74cb3abaddf82c9594e4b"
]
},
"14b8d11fea244200a6d0efee16d740f7": {
"_alias": true,
"reg_offset": 0,
"field_offset": 0,
"name": "bf4_ref",
"slice_width": 2,
"_ref": "6f695b3dbdd74cb3abaddf82c9594e4b",
"type": "BitFieldRef"
},
"6f695b3dbdd74cb3abaddf82c9594e4b": {
"reg_offset": 5,
"field_offset": 2,
"name": "bf3_ref",
"slice_width": 5,
"type": "BitFieldRef",
"children": [
"28c6a9c6929a4ad2baabc18751ec21d3"
]
},
"28c6a9c6929a4ad2baabc18751ec21d3": {
"access": "R",
"name": "bf2",
"reset_val": 26505,
"width": 20,
"type": "BitField"
},
"37a9c221ab77446aafe9f74ec14c78c6": {
"_alias": true,
"reg_offset": 4,
"field_offset": 3,
"name": "bf2_ref",
"slice_width": 4,
"_ref": "8cded8916e014bb3ab621e327f9c0ae8",
"type": "BitFieldRef"
},
"root": "1b99635555e647638f8a1ff38a1e3cf1"
}
The _ref attribute facilitates modeling that one node can be an instance of
another. Which saves duplication of common information within the serialized
tree. The _alias attribute indicates that an instance can be an alias of
another. This simply means that the new instance's bitfields will be shared with
the source node.
r_map classes
Common Attributes
All tree objects have the following common attributes:
-
name
The name of the item
-
descr
A short description of the item
-
doc
A longer description of the item
Note that the descr and doc attributes could potentially be None or an empty
string.
There are other common attributes but as a user of an r_map tree, they are not
of interest.
RegisterMap
Used to hold register objects.
RegisterMap Attributes
Objects of this class have:
-
address
The starting address of the register map. This may not be awfully useful as
the most interesting addresses are probably those of the child Registers.
-
local_address
The aforementioned address is found dynamically by summing the local_address
with the local_addresses of the parent nodes in the tree hierarchy. Unless
you're using a subclassed FixedRegisterMap where the local_address ==
address.
RegisterMap Methods
-
read
This method can be used to read the current register map's data and update
the child register's values. It relies upon a
_block_read_funcfunctionhaving been added to it or some parent in the tree hierarchy.
-
write
Write the register map's child register values value to some destination.
Note that if there are gaps between adjacent child registers, zeroes are
written to those addresses.
This method relies upon a
_block_write_funchaving been added.
Register
Register Attributes
Objects of this class have the same attributes as RegisterMap objects and in
addition have a width attribute, indicating the width of the register.
These are children of RegisterMap instances.
Registers have the following additional attributes:
-
value
This is the current value of the register. It is dynamically computed based
on the current values from all of the child BitFieldRefs. It can be assigned
directly as well and the value will update the child bitfields accordingly.
-
reset_val
This is the reset value of the register
-
access
This indicates the access level for the register, dynamically computed based
on the child BitFieldRef's access levels. If different children have
different access levels, they will be
'|'.joined together.
Register Methods
-
read
This method can be used to read the current register's data and update the
register's value. It relies upon a
_reg_read_funcfunction having been addedto it or some parent in the tree hierarchy.
-
write
Write the register's value to some destination. Works similarly to the read
function above and similarly relies upon a
_reg_write_funchaving beenadded.
BitFieldRef
These ojects represent a contribution of a bitfield within a register. They
allow a register to provide access to only a portion of a bitfield.
Alternatively they also allow multiple registers to provide access to common
bitfields or for bitfields to span multiple registers.
BitFieldRef Attributes
Objects of this class are children of Register instances. They have the
following additional attributes:
-
reg_offset
This is the offset within the host register that the contribution from this
object's child bitfield starts at.
-
slice_width
This is the width of the slice from the child bitfield that this contribution
represents.
-
field_offset
This is like the reg_offset but instead its the offset within the child
bitfield that this contribution is taken from.
-
value
This is the value of the contribution of the child's bitfield, shifted up by
reg_offset -
Represents what
valueabove would be at reset time. -
bf
This attribute returns the child bitfield of the bitfield reference.
BitField
BitField Attributes
Objects of this class represent a bitfield.
They have the following additional attributes:
-
width
The width of the bit field in bits
-
reset_val
The value of this bit field at reset.
-
access
The access level of the reset_val. This is currently just for documentation
sake but could conceivably be used by the user. It would contain a string
such as 'RW' or 'R' for example.
-
value
This is the current value of the bitfield.
BitField
BitField Methods
-
reset
Reset the value of this bitfield to the value specified by
reset_val. -
annotation
Find the name of a child annotation, should its value match the current
value, otherwise, return the value in hex.
Enumeration
Objects of this class are used to represent an enumeration. They are children of
BitField objects. They can be assigned directly to a BitField's value.
Enumeration Attributes
Enumeration objects have a value Attribute to provide the value of it.
Notes
-
the
_nb_attrsclass attribute is used to control what is serialized in eachclass instance.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file r_map-0.9.0-py3-none-any.whl.
File metadata
- Download URL: r_map-0.9.0-py3-none-any.whl
- Upload date:
- Size: 23.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1251e5fe7ac6f4abad706b229e9cc8487db5ea5bb8df3a326d0311549d4857ef
|
|
| MD5 |
d9989ebf71ed94fdb1d0d842821495ac
|
|
| BLAKE2b-256 |
4535ed315aae4326e55bee4cd50d1cd6cef7079e5633849c060d561d10ab915b
|