Skip to main content

Generate Python Register Access Layer (RAL) from SystemRDL

Project description

CI linting: pylint Checked with mypy PyPI - Python Version Documentation Status Downloads

Introduction

PeakRDL Python is used to generate a python based Register Access Layer (RAL) from SystemRDL.

Documentation

See the peakrdl-python Documentation for more details

Getting Started

Installation

  1. Install a recent version of Python 3
  2. Install peakrdl-python
    python3 -m pip install peakrdl-python
    
  3. (Optional) Install peakrdl, this is needed if you want to use peakrdl python from the command line
    python3 -m pip install peakrdl
    

Demo

This demonstration relies on downloading the systemRDL example from Accelera, available here: accelera-generic_example.rdl. This demonstration also assumes that peakrdl has been installed.

  1. Build the Register Access Layer (RAL) from the systemRDL code
    peakrdl python accelera-generic_example.rdl -o .
    
    This will create a python package called some_register_map containing the python RAL
  2. In addition to the RAL, peakrdl-python also generates a simulator that can be used to exercise the RAL without connecting to real hardware. Enter the following code into a file:
    """
    A demonstration of using peakrdl-python using the accelera generic example
    """
    # import the top level RAL class
    from some_register_map.reg_model import RegModel
    # import the simulator class
    from some_register_map.sim import Simulator
    
    from some_register_map.lib import NormalCallbackSet
    
    if __name__ == '__main__':
        # create an instance of the RAL with the callbacks directed at the hardware simulator
        hw_sim = Simulator(0)
        ral = RegModel(callbacks=NormalCallbackSet(read_callback=hw_sim.read,
                                                   write_callback=hw_sim.write))
    
        # read chip ID
        chip_id_part_number = ral.chip_id_reg.part_num.read()
        chip_id_revision_number = ral.chip_id_reg.part_num.read()
        print(f'Chip ID:{chip_id_part_number}.{chip_id_revision_number}')
    
    save it as some_register_map_demo.py
  3. Run the example
    python3 -m some_register_map_demo
    
    This will generate the following output on the console:
    Chip ID:0.0
    

Usage

To make use of the RAL with real hardware or a different simulation, the callbacks will need to be connected to the appropriate access function in order to perform an address space reads and writes

Upgrading from previous versions (some important changes)

Upgrading from pre 0.9.0

In order to address a major limitation of peakrdl-python that prevented it from implementing the full systemRDL specification, a breaking API change was needed for handling blocks:

  • registers (in register array)
  • memory entries in a memory

Users are encouraged to upgrade in order to avoid this limitation. However, there is a legacy mode to support users with existing designs, see: Legacy Block Callback and Block Access in the documentation

Upgrading from pre 1.2.0

Version 1.2 introduced a new way to define the enumerations for the field encoding. This allows metadata from the systemRDL to propagate through to the generated code. This may break advanced usage of the python enumerations. User are encouraged to use the new feature, however, if there are problems with the old enumeration types (based on IntEnum) can be used, see Legacy Enumeration Types in the documentation

Upgrading from pre 2.0.0

Version 2.0.0 introduced a significant change to the process for building the register model python code. This change was intended to reduce the size of the generated code by only generating python classes for systemRDL components that required unique classes. The previous versions were more conservative and tended to generate a lot of duplicate classes.

Version 2.1.0 has improved this to ensure field encoding enumerations were correctly deduplicated.

The implementation requires a hash to be generated of each node in order to determine whether it is unique or not. This hash was incorperated within the class names which resulted in the code changing each time it was regenerated, version 2.1.0 introduces a option to either:

  • The builtin python hash function, this is fast but is a salted hash so changes hashes export to export
  • Use the SHA256 hash from the python hashlib standard library, this may slow down the export of large register models but will be consistent, therefore is useful if the resultant code is being checked into a version control system (such as GIT) and the differences are being reviewed

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 Distribution

peakrdl_python-2.3.0.tar.gz (173.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

peakrdl_python-2.3.0-py3-none-any.whl (142.8 kB view details)

Uploaded Python 3

File details

Details for the file peakrdl_python-2.3.0.tar.gz.

File metadata

  • Download URL: peakrdl_python-2.3.0.tar.gz
  • Upload date:
  • Size: 173.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for peakrdl_python-2.3.0.tar.gz
Algorithm Hash digest
SHA256 44501dd018071fa6b179e3d8c60bce2aff59f0959363c740776235c9b36072f6
MD5 a79068b9b45afd8968ec4866a01c121f
BLAKE2b-256 948e12c9b87bdbeb10b316ffdb0545ecf0c31805cccb7ce6a29c50eb68e6e3bf

See more details on using hashes here.

File details

Details for the file peakrdl_python-2.3.0-py3-none-any.whl.

File metadata

  • Download URL: peakrdl_python-2.3.0-py3-none-any.whl
  • Upload date:
  • Size: 142.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for peakrdl_python-2.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3a3db2ae4c554104fa0b7e998998a8ad7754587c04499f454b92e10879ddbd3e
MD5 5f88ee65768913370f0eabfe4bd2de25
BLAKE2b-256 126ba8f6c114aac3a63206bfe2594832a3c99acceb353eb9a230c9baefbfc0d9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page