Working with Python API
The recommended way of defining your registers and fields is to use a .toml data file. However depending on your needs it might make sense to define them directly in Python instead. This page will showcase a simple example of how to get started with this.
The Python code below sets up a RegisterList
with two Registers
and some
fields
.
After this it performs a VHDL code generation.
Register TOML format example.
1import sys
2from pathlib import Path
3
4from hdl_registers.generator.vhdl.register_package import VhdlRegisterPackageGenerator
5from hdl_registers.register_list import RegisterList
6from hdl_registers.register_modes import REGISTER_MODES
7
8
9def main(output_folder: Path) -> None:
10 """
11 Set up some dummy registers and fields using the Python API.
12 """
13 register_list = RegisterList(name="caesar")
14
15 register = register_list.append_register(
16 name="config", mode=REGISTER_MODES["r_w"], description="Configuration register."
17 )
18
19 register.append_bit_vector(
20 name="tuser",
21 description="Value to set for **TUSER** in the data stream.",
22 width=4,
23 default_value="0101",
24 )
25
26 register.append_integer(
27 name="increment",
28 description="Offset that will be added to data.",
29 min_value=-4,
30 max_value=3,
31 default_value=0,
32 )
33
34 register = register_list.append_register(
35 name="status", mode=REGISTER_MODES["r"], description="General status register."
36 )
37
38 VhdlRegisterPackageGenerator(register_list=register_list, output_folder=output_folder).create()
39
40
41if __name__ == "__main__":
42 main(output_folder=Path(sys.argv[1]))
The articles in the the menubar on the left all showcase how to utilize the different features using the Python API as well as a TOML file. Please read these articles for further information.