blob: f7beb6914f6d1b817948b9f2f6d0e8e8bfb4b1d7 [file] [log] [blame]
<!-- Copy this file to hw/ip/${name}/dv/plan.md and make changes as needed. For
convenience '${name}' in the document can be searched and replaced easily with the
desired IP (with case sensitivity!). Also, use the testbench block diagram here:
https://drive.google.com/open?id=1LfnTSutIW5E6zSCOCf4-scS8MQ8lXhPAPgSfFx2Aqh0
as a starting point and modify it to reflect your ${name} testbench and save it
to hw/ip/${name}/dv/tb.svg. It should get linked and rendered under the block
diagram section below. Once done, remove this comment before making a PR. -->
{{% lowrisc-doc-hdr Foo DV Plan }}
{{% toc 3 }}
## Current status
* [${name.upper()} regression dashboard](../../../dv/regressions/weekly/${name}/dashboard.html)
* Design milestone: D#
* Verification milestone: [V#](v#_cl.md)
## Design features
For detailed information on ${name.upper()} design features, please see the
[${name.upper()} design specification](../doc/${name}.md).
## Testplan
<!-- TODO add automation to get the testplan hjson to expand here -->
{{% path to testplan hjson }}
## Testbench architecture
${name.upper()} testbench has been constructed based on the
[CIP testbench architecture](../../../dv/sv/cip_lib/README.md).
<!-- TODO if ${name.upper()} is not a CIP, then indicated that it is extended from DV
library instead, if applicable. -->
### Block diagram
![Block diagram](tb.svg)
### Testbench
Top level testbench is located at `hw/ip/${name}/dv/tb/tb.sv`. It instantiates the
${name.upper()} DUT module `hw/ip/${name}/rtl/${name}.sv`. In addition, it instantiates several
interfaces for driving/sampling clock and reset, devmode, interrupts, alerts and
tilelink host.
### Common DV utility components
* [common_ifs](../../../dv/sv/common_ifs/README.md)
* [dv_utils_pkg](../../../dv/sv/dv_utils/README.md)
* [csr_utils_pkg](../../../dv/sv/csr_utils/README.md)
### Compile-time configurations
[list compile time configurations, if any]
### Local types & methods
The following local types and methods defined in `foo_env_pkg` are in use:
[list parameters, types & methods]
### UVC/agent 1
[Describe here or add link to its README]
### UVC/agent 2
[Describe here or add link to its README]
### RAL
The ${name.upper()} RAL model is constructed using the
[regtool.py script](../../../../util/doc/rm/RegisterTool.md)
and is placed at `env/foo_reg_block.sv`.
### Reference models
[Describe reference models in use if applicable, example: SHA256/HMAC]
### Stimulus strategy
#### Test sequences
All test sequences reside in `hw/ip/${name}/dv/env/seq_lib`. The `foo_base_vseq`
virtual sequence is extended from `cip_base_vseq` and serves as a starting point.
All test sequences are extended from it. It provides commonly used handles,
variables, functions and tasks that the test sequences can simple use / call.
Some of the most commonly used tasks / functions are as
follows:
* task 1:
* task 2:
#### Functional coverage
To ensure high quality constrained random stimulus, it is necessary to develop
functional coverage model. The following covergroups have been developed to prove
that the test intent has been adequately met:
* cg1:
* cg2:
### Self-checking strategy
#### Scoreboard
The `foo_scoreboard` is primarily used for end to end checking. It creates the
following analysis ports to retrieve the data monitored by corresponding
interface agents:
* analysis port1:
* analysis port2:
<!-- explain inputs monitored, flow of data and outputs checked -->
#### Assertions
* TLUL assertions: The `tb/foo_bind.sv` binds the `tlul_assert` assertions
to ${name} to ensure TileLink interface protocol compliance.
* assert prop 1:
* assert prop 2:
## Building and running tests
We are using our in-house developed
[regression tool](../../../dv/tools/README.md)
for building and running our tests and regressions. Please take a look at the link
for detailed information on the usage, capabilities, features and known
issues. Here's how to run a basic sanity test:
```
$ cd hw/ip/${name}/dv
$ make TEST_NAME=foo_sanity
```
### Test list
Tests developed towards executing the testplan are specifed in `hw/ip/${name}/dv/sim/tests`.
### Regression list
Regressions are specified in `hw/ip/${name}/dv/sim/regressions`.