blob: 550f9fccc898018b73062815dff567f92a929996 [file] [log] [blame] [view]
---
title: "Fpvgen: Initial FPV testbench generation tool"
---
# Overview
`fpvgen` is a Python tool that can be used to generate the initial boilerplate code for an FPV testbench.
It takes as input a SystemVerilog module file representing the top-level of an IP to be tested with FPV, and generates the following folders and files in the output directory (which defaults to `../fpv` with respect to the module file provided):
```console
.
├── fpv // default output folder
│   ├── <ip-name>_fpv.core
│   ├── tb
│   │   ├── <ip-name>_bind_fpv.sv
│   │   └── <ip-name>_fpv.sv
│   └── vip
│   └── <ip-name>_assert_fpv.sv
└── rtl // folder containing the SV module file
   ├── <ip-name>.sv
...
```
The `<ip-name>_fpv.sv` is the FPV testbench that can be used to instantiate different parameterizations of the DUT to be tested.
`<ip-name>_bind_fpv.sv` contains the bind statement which binds the verification IP `<ip-name>_assert_fpv.sv` to all DUT instances.
If the IP is flagged as being comportable using the `-c` switch, the CSR FPV assertions are bound to the module as well.
# Examples
Generating a non-comportable IP can be done as follows (using the LFSR as an example):
```console
util/fpvgen.py hw/ip/prim/rtl/prim_lfsr.sv
```
If the IP is comportable, only the `-c` switch has to be added.
E.g., using the `pinmux` comportable IP as an example:
```console
util/fpvgen.py -c hw/ip/pinmux/rtl/pinmux.sv
```
If needed, the default output directory can be overridden using the `-o` switch.
# Help Output
This is the help output from the tool (switch `-h`).
```console
usage: fpvgen [-h] [-o OUTDIR] [-c] file
Boilerplate code generator for FPV testbenches. Can be used for
comportable or non-comportable IPs.
The generator creates the FuseSoC core file and two additional
subfolders 'tb' and 'vip' in the output directory. It will place stubs
for the testbench and bind files into the 'tb' subfolder, and a stub for
the FPV assertions into the 'vip' (verification IP) subfolder.
The generator needs the path to the top-level module of the IP to be
tested. E.g., suppose we would like to generate an FPV testbench for a
FIFO primitive located at 'hw/ip/prim/rtl/prim_fifo_sync.sv' we can
invoke the generator as follows:
util/fpvgen.py hw/ip/prim/rtl/prim_fifo_sync.sv
By default, the output directory is assumed to be '../fpv' with respect
to the toplevel module, but this can be overriden using the -eo switch.
Further if the IP is comportable, this can be indicated using the -c
switch, which causes the generator to add a bind statement for the CSR
FPV assertions in the testbench.
positional arguments:
file Relative path to the SystemVerilog file of the module
for which the code shall be generated. This can be a
primitive or a comportable IP (for which the -c switch
should be set).
optional arguments:
-h, --help show this help message and exit
-o OUTDIR, --outdir OUTDIR
Path where to place the testbench code. This is
defaults to '../fpv' w.r.t. to the module path. For
instance, if the module path is
'hw/ip/mymod/rtl/mymod.sv', the FPV testbench would be
generated under hw/ip/mymod/fpv.
-c, --is_cip Indicates whether this is a comportable IP. If yes,
FPV assertions for the TL-UL interface and CSRs are
automatically bound in the testbench. Note however
that these CSR assertions need to be generated
separately using the regtool automation.
```