| # Register generator `reggen` and `regtool` |
| |
| The utility script `regtool.py` and collateral under `reggen` are Python |
| tools to read register descriptions in Hjson and generate various output |
| formats. The tool can output HTML documentation, standard JSON, compact |
| standard JSON (whitespace removed) and Hjson. The example commands assume |
| `$REPO_TOP` is set to the toplevel directory of the repository. |
| |
| ### Setup |
| |
| If packages have not previously been installed you will need to set a |
| few things up. First use `pip3` to install some required packages: |
| |
| ```console |
| $ pip3 install --user hjson |
| $ pip3 install --user mistletoe |
| $ pip3 install --user mako |
| ``` |
| |
| ### Register JSON Format |
| |
| For details on the register JSON format, see the |
| [register tool documentation]({{< relref "doc/rm/register_tool/index.md" >}}). |
| To ensure things stay up to date, the register JSON format information |
| is documented by the tool itself. |
| The documentation can be generated by running the following commands: |
| |
| ```console |
| $ cd $REPO_TOP/util |
| $ ./build_docs.py |
| ``` |
| Under the hood, the `build_docs.py` tool will automatically use the `reggen` |
| tool to produce Markdown and processing that into HTML. |
| |
| ### Examples using standalone regtool |
| |
| Normally for documentation the `build_docs.py` tool will automatically |
| use `reggen`. The script `regtool.py` provides a standalone way to run |
| `reggen`. See the |
| [register tool documentation]({{< relref "doc/rm/register_tool/index.md" >}}) |
| for details about how to invoke the tool. |
| |
| The following shows an example of how to generate RTL from a register |
| description: |
| |
| ```console |
| $ cd $REPO_TOP/util |
| $ mkdir /tmp/rtl |
| $ ./regtool.py -r -t /tmp/rtl ../hw/ip/uart/data/uart.hjson |
| $ ls /tmp/rtl |
| uart_reg_pkg.sv uart_reg_top.sv |
| ``` |
| |
| The following shows an example of how to generate a DV UVM class from |
| a register description: |
| |
| ```console |
| $ cd $REPO_TOP/util |
| $ mkdir /tmp/dv |
| $ ./regtool.py -s -t /tmp/dv ../hw/ip/uart/data/uart.hjson |
| $ ls /tmp/dv |
| uart_reg_block.sv |
| ``` |
| |
| The following shows an example of how to generate a FPV csr read write assertion |
| module from a register description: |
| |
| ```console |
| $ cd $REPO_TOP/util |
| $ mkdir /tmp/fpv/vip |
| $ ./regtool.py -f -t /tmp/fpv/vip ../hw/ip/uart/data/uart.hjson |
| $ ls /tmp/fpv |
| uart_csr_assert_fpv.sv |
| ``` |
| |
| If the target directory is not specified, the tool creates the DV file |
| under the `hw/ip/{module}/dv/` directory. |