# Reggen -- Register generator

Reggen is a python3 tool to read register descriptions in hjson and
generate various output formats. Currently it 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 repo.

### 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:
```
$ pip3 install --user hjson
$ pip3 install --user mistletoe
$ pip3 install --user mako
```


### Register JSON Format

To ensure things stay up to date, the register json format information
is documented by the tool itself. Documentation can be generated by
running the tool to produce markdown and processing that into html.

```
$ cd $REPO_TOP/util
$ python3 reggen/regtool.py --doc | python3 docgen/docgen.py -c > /tmp/outdoc.html
```

### Examples using standalone regtool

Normally for documentation the docgen tool will automatically use
reggen. See the examples in the docgen module.

The regtool provides a standalone way to run reggen. In the future
this will be used to generate other formats like verilog and header
files.

Note that the same example inputs are used here as for docgen.

Generate html from the register description and be verbose. Since
embeddable html is generated the css is not included so the output
will look messy (TODO should the css be added for the standalone
case?):

```
$ cd $REPO_TOP/util
$ ./regtool.py -v -d docgen/examples/uartregs.hjson > /tmp/outuart.html
```

Generate standard json from the register description:

```
$ cd $REPO_TOP/util
$ ./regtool.py -v -j docgen/examples/uartregs.hjson > /tmp/outuart.json
```

Generate compact json and use it to generate html:

```
$ cd $REPO_TOP/util
$ ./regtool.py -v -c docgen/examples/uartregs.hjson | python3 reggen/regtool.py -v -d > /tmp/outuart.html
```

Generate RTL from register definition:
```
$ cd $REPO_TOP/util
$ mkdir /tmp/rtl
$ ./regtool.py -r -t /tmp/rtl ../hw/ip/uart/doc/uart_reg.hjson
```

Generate DV UVM class from register definition:

```console
$ cd $REPO_TOP/util
$ mkdir /tmp/dv
$ ./regtool.py -s -t /tmp/dv ../hw/ip/uart/doc/uart_reg.hjson
```

If target directory is not specified, tool creates `{module}_regs.sv` file under
the `hw/ip/{module}/dv/` directory.
