hdl_registers.generator.python package

Submodules

hdl_registers.generator.python.accessor module

class hdl_registers.generator.python.accessor.PythonAccessorGenerator(register_list: RegisterList, output_folder: Path)

Bases: RegisterCodeGenerator

Generate a Python class to read/write/print register and field values on a target device. Field and register values are represented using their native Python types, for easy handling. Meaning, no manual type casting back and forth for the user.

See the Python code generator article for usage details. See also PythonRegisterAccessorInterface.

Needs to have the result from the PythonPickleGenerator generator in the same output folder.

COMMENT_START: str = '#'
SHORT_DESCRIPTION = 'Python accessor'
get_code(**kwargs: Any) str

Get Python code for accessing register and field values.

property output_file: Path

Result will be placed in this file.

hdl_registers.generator.python.pickle module

class hdl_registers.generator.python.pickle.PythonPickleGenerator(register_list: RegisterList, output_folder: Path)

Bases: RegisterCodeGenerator

Generate a Python pickle of the RegisterList object, along with a Python module to re-create the pickle in a simple way.

See the Python code generator article for usage details.

COMMENT_START: str = '#'
SHORT_DESCRIPTION = 'Python pickle'
__init__(register_list: RegisterList, output_folder: Path)
Parameters:
  • register_list – Registers and constants from this register list will be included in the generated artifacts.

  • output_folder – Result file will be placed in this folder.

create(**kwargs: Any) Path

Create the binary pickle also, apart from the class file.

Note that this is a little bit hacky, preferably each generator should produce only one file.

get_code(**kwargs: Any) str

Save register list object to binary file (pickle) and create a python class that recreates it.

property output_file: Path

Result will be placed in this file.

property should_create: bool

Since this generator creates two files, where one is binary, it is impossible to do the version/hash check. Hence, set it to “always create”. The mechanism “create if needed” should not be used for this generator anyway, since this generator is not designed to run in real-time like e.g. the VHDL generator.

hdl_registers.generator.python.register_accessor_interface module

class hdl_registers.generator.python.register_accessor_interface.PythonRegisterAccessorInterface

Bases: ABC

Interface base class for accessing register values on a target system. To be used with code generated by PythonAccessorGenerator. See the Python generator documentation for usage details.

In order to use PythonAccessorGenerator class to read/write/print register and field values, you must implement the methods of this interface in a subclass. You must implement them to use whichever method you have available to access register values on your target (SSH, telnet, UART, …). These details vary greatly in different projects, and is something that hdl-registers can not provide a generic solution for.

The byte address that shall be accessed, in both the methods, is

register_list_base_address + register_address

where register_list_base_address is the the base address of the requested register list on your register bus. Logic for finding this base address, probably using register_list_name, must be implemented given the layout of your system.

You are free to raise any exceptions you want in your implementation of the methods. For example, unknown register list name, invalid address, timeout, bus error, etc. Exceptions will not be caught by PythonAccessorGenerator code, but will instead be propagated to the user wherever the accessor is used.

abstract read_register(register_list_name: str, register_address: int) int

Read the value of a register.

Parameters:
  • register_list_name – Name of the register list that the requested register belongs to.

  • register_address – Byte address of the register, within the register list.

Returns:

The register value that was read, as an unsigned 32-bit number.

abstract write_register(register_list_name: str, register_address: int, register_value: int) None

Write a register.

Parameters:
  • register_list_name – Name of the register list that the requested register belongs to.

  • register_address – Byte address of the register, within the register list.

  • register_value – The value that shall be written, as an unsigned 32-bit number.

hdl_registers.generator.python.reserved_keywords module