---
title: "Signoff Checklist"
---

This document explains the recommended checklist items to review when transitioning from one [Development Stage]({{<relref "/doc/project/development_stages.md" >}}) to another, for design, verification, and [software device interface function (DIF)]({{< relref "doc/rm/device_interface_functions.md" >}}) stages.
It is expected that the items in each stage (D1, V1, S1, etc) are completed.

## D1

For a transition from D0 to D1, the following items are expected to be completed.

### SPEC_COMPLETE

The specification is 90% complete, all features are defined.
The specification is submitted into the repository as a markdown document.
It is acceptable to make changes for further clarification or more details after the D1 stage.

### CSR_DEFINED

The CSRs required to implement the primary programming model are defined.
The Hjson file defining the CSRs is checked into the repository.
It is acceptable to add or modify registers during the D2 stage in order to complete implementation.

### CLKRST_CONNECTED

Clock(s) and reset(s) are connected to all sub-modules.

### IP_TOP

The unit `.sv` exists and meets comportability requirements.

### IP_INSTANTIABLE

The unit is able to be instantiated and connected in top level RTL files.
The design must compile and elaborate cleanly without errors.
The unit must not break top level functionality such as propagating X through TL-UL interfaces, continuously asserting alerts or interrupts, or creating undesired TL-UL transactions.

### PHYSICAL_MACROS_DEFINED_80

All expected memories have been identified and representative macros instantiated.
All other physical elements (analog components, pads, etc) are identified and represented with a behavioral model.
It is acceptable to make changes to these physical macros after the D1 stage as long as they do not have a large impact on the expected resulting area (roughly "80% accurate").

### FUNC_IMPLEMENTED

The mainline functional path is implemented to allow for a basic functionality test by verification.
("Feature complete" is the target for D2 status.)

### ASSERT_KNOWN_ADDED

All the outputs of the IP have `ASSERT_KNOWN` assertions.

### LINT_SETUP

A lint flow is setup which compiles and runs.
It is acceptable to have lint warnings at this stage.

## D2

### NEW_FEATURES

Any new features added since D1 are documented and reviewed with DV/SW/FPGA.
The GitHub Issue, Pull Request, or RFC where the feature was discussed should be linked in the `Notes` section.

### BLOCK_DIAGRAM

Block diagrams have been updated to reflect the current design.

### DOC_INTERFACE

All IP block interfaces that are not autogenerated are documented.

### MISSING_FUNC

Any missing functionality is documented.

### FEATURE_FROZEN

Feature requests for this IP version are frozen at this time.

### FEATURE_COMPLETE

All features specified are implemented.

### AREA_CHECK

An area check has been completed either on FPGA or using Synopsys Design Compiler.

### PORT_FROZEN

All ports are implemented and their specification is frozen.

### ARCHITECTURE_FROZEN

All architectural state (RAMs, CSRs, etc) is implemented and the specification frozen.

### REVIEW_TODO

All TODOs have been reviewed and signed off.

### STYLE_X

The IP block conforms to the [style guide regarding X usage](https://github.com/lowRISC/style-guides/blob/master/VerilogCodingStyle.md#dont-cares-xs).

### LINT_PASS

The lint flow passes cleanly.
Any lint waiver files have been reviewed.

### CDC_SETUP

A CDC checking run has been set up (if tooling is available).
The CDC checking run shows no must-fix errors, and a waiver file has been created.

### FPGA_TIMING

The IP block is synthesized as part of the continuous integration checking and meets timing there.

### CDC_SYNCMACRO

All CDC synchronization flops use behavioral synchronization macros (e.g. `prim_flop_2sync`) not manually created flops.

### SEC_CM_DOCUMENTED

Any appropriate security counter-measures have been documented and reviewed.
The implementation of security countermeasures can be delayed until D3 if:
- The addition of those countermeasures would not negatively impact PPA by more than 10%, and
- The software interface would not be materially affected by those countermeasures

Where the area impact of countermeasures can be reliably estimated, it is acceptable to insert dummy logic at D2 in order to meet the above criteria.

### SEC_RND_CNST

Compile-time random netlist constants (such as LFSR seeds or scrambling constants) are exposed to topgen via the `randtype` parameter mechanism in the comportable IP Hjson file.
Default random seeds and permutations for LFSRs can be generated with [the gen-lfsr-seed.py script](https://github.com/lowRISC/opentitan/blob/master/util/design/gen-lfsr-seed.py).
See also the related [GitHub issue #2229](https://github.com/lowRISC/opentitan/issues/2229).

## D2S

### SEC_CM_ASSETS_LISTED

List the assets and corresponding countermeasures in canonical format in the IP Hjson (the canonical naming is checked by the reggen tool for correctness).

This list could look, for example, as follows:
```python
# Inside the rstmgr.hjson

countermeasures: [
  { name: "BUS.INTEGRITY",
    desc: "Bus integrity check."
  },
  { name: "RST.INTEGRITY",
    desc: "Reset integrity checks."
  },
  { name: "RST.SHADOW_LOGIC",
    desc: "Shadow reset logic."
  }
  # ...
]

```

For a full list of permitted asset and countermeasure types, see the [countermeasure.py](https://github.com/lowRISC/opentitan/blob/master/util/reggen/countermeasure.py) script that implements the name checks.

Note the SEC_CM_DOCUMENTED item in the D2 checklist, which is a precursor to this step.

### SEC_CM_IMPLEMENTED

Any appropriate security counter-measures are implemented.


Note:

- For duplicated counters [`prim_count`](https://github.com/lowRISC/opentitan/blob/master/hw/ip/prim/rtl/prim_count.sv) must be used.
- For duplicated LFSRs [`prim_double_lfsr`](https://github.com/lowRISC/opentitan/blob/master/hw/ip/prim/rtl/prim_double_lfsr.sv) must be used.
- For redundantly encoded FSMs, [the sparse-fsm-encode.py script](https://github.com/lowRISC/opentitan/blob/master/util/design/sparse-fsm-encode.py) must be used to generate the encoding (in conjunction with the [`prim_sparse_fsm_flop`](https://github.com/lowRISC/opentitan/blob/master/hw/ip/prim/rtl/prim_sparse_fsm_flop.sv)) primitive.
- For multibit signals, the `mubi` types in [`prim_mubi_pkg`](https://github.com/lowRISC/opentitan/blob/master/hw/ip/prim/rtl/prim_mubi_pkg.sv) should be used if possible.

### SEC_CM_RTL_REVIEWED

If deemed necessary by the security council, an offline review of the RTL code sections pertaining to the assets and countermeasures listed in SEC_CM_ASSETS_LISTED has been performed.

### SEC_CM_COUNCIL_REVIEWED

Security council has reviewed the asset list and associated documentation (SEC_CM_ASSETS_LISTED, SEC_CM_DOCUMENTED) and deems the defenses implemented appropriate.

The security council decides whether an additional RTL review of the relevant code sections is necessary (SEC_CM_RTL_REVIEWED).

## D3

### NEW_FEATURES_D3

Any approved new features since D2 have been documented and reviewed with DV/SW/FPGA

### TODO_COMPLETE

All TODOs are resolved.

### LINT_COMPLETE

The lint checking flow is clean.
Any lint waiver files have been reviewed and signed off by the technical steering committee.

### CDC_COMPLETE

The CDC checking flow is clean.
CDC waiver files have been reviewed and signed off by the technical steering committee.

### REVIEW_RTL

A simple design review has been conducted by an independent designer.

### REVIEW_DELETED_FF

Any deleted flops have been reviewed and signed off.

### REVIEW_SW_CSR

Any design changes which affect CSRs have been reviewed by the software team.

### REVIEW_SW_FATAL_ERR

Any fatal error mechanisms have been reviewed by the software team.

### REVIEW_SW_CHANGE

Any other software-visible design changes have been reviewed by the software team.

### REVIEW_SW_ERRATA

All known "Won't Fix" bugs and "Errata" have been reviewed by the software team.

### SEC_NON_RESET_FLOPS

A review of sensitive security-critical storage flops was completed.
Where appropriate, non-reset flops are used to store secure material.

### SEC_SHADOW_REGS

Shadow registers are implemented for all appropriate storage of critical control functions.

## V1

To transition from V0 to V1, the following items are expected to be completed.
The prefix "SIM" is applicable for simulation-based DV approaches, whereas the prefix "FPV" is applicable for formal property-based verification approaches.

### DV_DOC_DRAFT_COMPLETED

A DV document has been drafted, indicating the overall DV goals, strategy, the testbench environment details with diagram(s) depicting the flow of data, UVCs, checkers, scoreboard, interfaces, assertions and the rationale for the chosen functional coverage plan.
Details may be missing since most of these items are not expected to be fully understood at this stage.

### TESTPLAN_COMPLETED

A testplan has been written (in HJson format) indicating:
- Testpoints (a list of planned tests), each mapping to a design feature, with a description highlighting the goal of the test and optionally, the stimulus and the checking procedure.
- The functional coverage plan captured as a list of covergroups, with a description highlighting which feature is expected to be covered by each covergroup.
  It may optionally contain additional details such as coverpoints and crosses of individual aspects of the said feature that is covered.

### TB_TOP_CREATED

A top level testbench has been created with the DUT instantiated.
The following interfaces are connected (as applicable): TileLink, clocks and resets, interrupts and major DUT interfaces.
Some minor interfaces may not be connected at this point.
Inputs for which interfaces have not yet been created are tied off to 0.

### PRELIMINARY_ASSERTION_CHECKS_ADDED

All available interface assertion monitors are connected (example: tlul_assert).

### SIM_TB_ENV_CREATED

A UVM environment has been created with major interface agents and UVCs connected and instantiated.
TLM port connections have been made from UVC monitors to the scoreboard.

### SIM_RAL_MODEL_GEN_AUTOMATED

A RAL model is generated using [regtool]({{< relref "/util/reggen/README.md" >}}) and instantiated in the UVM environment.

### CSR_CHECK_GEN_AUTOMATED

A CSR check is generated using [regtool]({{< relref "/util/reggen/README.md" >}}) and bound in the TB environment.

### TB_GEN_AUTOMATED

Full testbench automation has been completed if applicable.
This may be required for verifying multiple flavors of parameterized DUT designs.

### SIM_SMOKE_TEST_PASSING

A smoke test exercising the basic functionality of the main DUT datapath is passing.
The functionality to test (and to what level) may be driven by higher level (e.g. chip) integration requirements.
These requirements are captured when the testplan is reviewed by the key stakeholders, and the test(s) updated as necessary.

### SIM_CSR_MEM_TEST_SUITE_PASSING

CSR test suites have been added for ALL interfaces (including, but not limited to the DUT's SW device acess port, JTAG access port etc.) that have access to the system memory map:
- HW reset test (test all resets)
- CSR read/write
- Bit Bash
- Aliasing

Memory test suites have been added for ALL interfaces that have access to the system memory map if the DUT has memories:
- Mem walk

All these tests should verify back to back accesses with zero delays, along with partial reads and partial writes.

### FPV_MAIN_ASSERTIONS_PROVEN

Each input and each output of the module is part of at least one assertion.
Assertions for the main functional path are implemented and proven.

### SIM_ALT_TOOL_SETUP

The smoke regression passes cleanly (with no warnings) with one additional tool apart from the primary tool selected for signoff.

### SIM_SMOKE_REGRESSION_SETUP

A small suite of tests has been identified as the smoke regression suite and is run regularly to check code health.
If the testbench has more than one build configuration, then each configuration has at least one test added to the smoke regression suite.

### SIM_NIGHTLY_REGRESSION_SETUP

A nightly regression for running all constrained-random tests with multiple random seeds (iterations) has been setup.
Directed, non-random tests need not be run with multiple iterations.
Selecting the number of iterations depends on the coverage, the mean time between failure and the available compute resources.
For starters, it is recommended to set the number of iterations to 100 for each test.
It may be trimmed down once the test has stabilized, and the same level of coverage is achieved with fewer iterations.
The nightly regression should finish overnight so that the results are available the next morning for triage.

### FPV_REGRESSION_SETUP

An FPV regression has been set up by adding the module to the `hw/formal/fpv_all` script.

### SIM_COVERAGE_MODEL_ADDED

A structural coverage collection model has been checked in.
This is a simulator-specific file (i.e. proprietary format) that captures which hierarchies and what types of coverage are collected.
For example, pre-verified sub-modules (including some `prim` components pre-verified thoroughly with FPV) can be black-boxed - it is sufficient to only enable the IO toggle coverage of their ports.
A functional coverage shell object has been created - this may not contain coverpoints or covergroups yet, but it is primed for development post-V1.

### TB_LINT_SETUP

[VeribleLint](https://google.github.io/verible/verilog_lint.html) for the testbench is [set up]({{< relref "hw/lint/doc/README.md" >}}) to run in nightly regression, with appropriate waivers.
* For a constrained random testbench, an entry has been added to `hw/<top-level-design>/lint/<top-level-design>_dv_lint_cfgs.hjson`
* For an FPV testbench, an entry has been added to `hw/<top-level-design>/lint/<top-level-design>_fpv_lint_cfgs.hjson`

### PRE_VERIFIED_SUB_MODULES_V1

Sub-modules that are pre-verified with their own testbenches have already reached V1 or a higher stage.
The coverage level of the pre-verified sub-modules that are not tracked (i.e., not taken through the verification milestones), meets or exceeds the V1 milestone requirement.
They are clearly cited in the DV document and the coverage of these sub-modules can be excluded in the IP-level testbench.

### DESIGN_SPEC_REVIEWED

The design / micro-architecture specification has been reviewed and signed off.
If a product requirements document (PRD) exists, then ensure that the design specification meets the product requirements.

### TESTPLAN_REVIEWED

The draft DV document (proposed testbench architecture) and the complete testplan have been reviewed with key stakeholders (as applicable):
- DUT designer(s)
- 1-2 peer DV engineers
- Software engineer (DIF developer)
- Chip architect / design lead
- Chip DV lead
- Security architect

### STD_TEST_CATEGORIES_PLANNED

The following categories of post-V1 tests have been focused on during the testplan review (as applicable):
- Security / leakage
- Error scenarios
- Power
- Performance
- Debug
- Stress

### V2_CHECKLIST_SCOPED

The V2 checklist has been reviewed to understand the scope and estimate effort.

## V2

To transition from V1 to V2, the following items are expected to be completed.
The prefix "SIM" is applicable for simulation-based DV approaches, whereas the prefix "FPV" is applicable for formal property-based verification approaches.

### DESIGN_DELTAS_CAPTURED_V2

It is possible for the design to have undergone some changes since the DV document and testplan were reviewed in the V0 stage.
All design deltas have been captured adequately and appropriately in the DV document and the testplan.

### DV_DOC_COMPLETED

The DV document is fully complete.

### FUNCTIONAL_COVERAGE_IMPLEMENTED

The functional coverage plan is fully implemented.
All covergoups have been created and sampled in the reactive components of the testbench (passive interfaces, monitors and scoreboards).

### ALL_INTERFACES_EXERCISED

For simulations, interfaces are connected to all ports of the DUT and are exercised.
For an FPV testbench, assertions have been added for all interfaces including sidebands.

### ALL_ASSERTION_CHECKS_ADDED

All planned assertions have been written and enabled.

### SIM_TB_ENV_COMPLETED

A UVM environment has been fully developed with end-to-end checks in the scoreboard enabled.

### SIM_ALL_TESTS_PASSING

All tests in the testplan have been written and are passing with at least one random seed.

### FPV_ALL_ASSERTIONS_WRITTEN

All assertions (except security countermeasure assertions) are implemented and are 90% proven.
Each output of the module has at least one forward and one backward assertion check.
The FPV proof run converges within reasonable runtime.

### FPV_ALL_ASSUMPTIONS_REVIEWED

All assumptions have been implemented and reviewed.

### SIM_FW_SIMULATED

Chip-level tests exist to verify example firmware code (DIFs) in simulation.

### SIM_NIGHTLY_REGRESSION_V2

A nightly regression with multiple random seeds is 90% passing.

### SIM_CODE_COVERAGE_V2

Line, toggle, fsm (state & transition), branch and assertion code coverage has reached 90%.
Toggle coverage of the ports of the DUT and all pre-verified sub-modules have individually reached 90% in both directions (1->0 and 0->1).

### SIM_FUNCTIONAL_COVERAGE_V2

Functional coverage has reached 70%.

### FPV_CODE_COVERAGE_V2

Branch, statement and functional code coverage for FPV testbenches has reached 90%.

### FPV_COI_COVERAGE_V2

COI coverage for FPV testbenches has reached 75%.

### TB_LINT_PASS

The lint checking flow for the testbench passes cleanly.
Any waiver files have been reviewed.

### PRE_VERIFIED_SUB_MODULES_V2

Sub-modules that are pre-verified with their own testbenches have already reached V2 or a higher stage.
The coverage level of the pre-verified sub-modules that are not tracked (i.e., not taken through the verification milestones), meets or exceeds the V2 milestone requirement.

### SEC_CM_PLANNED

<!-- TODO, add the link to security hardening guidelines doc -->
Security countermeasures are planned and documented.
- Common countermeasure features (such as shadowed reg, hardened counter etc) can be tested by importing common sec_cm testplans, tests and adding the bind file `cm_sec_bind`.
- Additional checks and sequences may be needed to verify those features. Document those in the individual testplan.
- Create testplan for non-common countermeasures.

### NO_HIGH_PRIORITY_ISSUES_PENDING

All high priority (tagged P0 and P1) design bugs have been addressed and closed.
If the bugs were found elsewhere, ensure that they are reproduced deterministically in DV (through additional tests or by tweaking existing tests as needed) and have the design fixes adequately verified.

### ALL_LOW_PRIORITY_ISSUES_ROOT_CAUSED

All low priority (tagged P2 and P3) design bugs have been root-caused.
They may be deferred to post V2 for closure.

### DV_DOC_TESTPLAN_REVIEWED

The DV document and testplan are complete and have been reviewed by key stakeholders (as applicable):
- DUT designer(s)
- 1-2 peer DV engineers
- Chip architect / design lead
- Chip DV lead
- Security architect

This review will focus on the design deltas captured in the tesplan since the last review.
In addition, the fully implemented functional coverage plan, the observed coverage and the coverage exclusions are expected to be scrutinized to ensure there are no verification holes or any gaps in achieving the required stimulus quality, before the work towards progressing to V3 can commence.

### V3_CHECKLIST_SCOPED

The V3 checklist has been reviewed to understand the scope and estimate effort.

## V2S

### FPV_SEC_CM_PROVEN

<!-- TODO, add the link to cm verif methodology doc -->
All security countermeasure assertions are proven in FPV.

### SIM_SEC_CM_VERIFIED

<!-- TODO, add the link to cm verif methodology doc -->
Security countermeasures are verified in simulation.

## V3

To transition from V2 to V3, the following items are expected to be completed.
The prefix "SIM" is applicable for simulation-based DV approaches, whereas the prefix "FPV" is applicable for formal property-based verification approaches.

### DESIGN_DELTAS_CAPTURED_V3

Although rare, it is possible for the design to have undergone some last-minute changes since V2.
All additional design deltas have been captured adequately and appropriately in the DV document and the testplan.

### X_PROP_ANALYSIS_COMPLETED

X Propagation analysis has been completed.

### FPV_ASSERTIONS_PROVEN_AT_V3

All assertions are implemented and 100% proven.
There are no undetermined or unreachable properties.

### SIM_NIGHTLY_REGRESSION_AT_V3

A nightly regression with multiple random seeds is 100% passing (with 1 week minimum soak time).

### SIM_CODE_COVERAGE_AT_100

Line, toggle, fsm (state & transition), branch and assertion code coverage has reached 100%.

### SIM_FUNCTIONAL_COVERAGE_AT_100

Functional coverage has reached 100%.

### FPV_CODE_COVERAGE_AT_100

Branch, statement and functional code coverage for FPV testbenches has reached 100%.

### FPV_COI_COVERAGE_AT_100

COI coverage for FPV testbenches has reached 100%.

### ALL_TODOS_RESOLVED

There are no remaining TODO items anywhere in the testbench code, including common components and UVCs.

### NO_TOOL_WARNINGS_THROWN

There are no compile-time or run-time warnings thrown by the simulator.

### TB_LINT_COMPLETE

The lint flow for the testbench is clean.
Any lint waiver files have been reviewed and signed off by the technical steering committee.

### PRE_VERIFIED_SUB_MODULES_V3

Sub-modules that are pre-verified with their own testbenches have already reached the V3 stage.
The coverage level of the pre-verified sub-modules that are not tracked (i.e., not taken through the verification milestones), meets the V3 milestone requirement.

### NO_ISSUES_PENDING

All design and testbench bugs have been addressed and closed.

## S1

For a transition from S0 to S1, the following items are expected to be completed.

### DIF_EXISTS

`dif_<ip>.h` and, optionally, `dif_<ip>.c` exist in `sw/device/lib/dif`.

### DIF_USED_IN_TREE

All existing non-production code in the tree which uses the device does so via the DIF or a production driver.

### DIF_TEST_UNIT

Software unit tests exist for the DIF in `sw/device/tests/dif` named `dif_<ip>_unittest.cc`.

### DIF_TEST_SMOKE

Smoke tests exist for the DIF in `sw/device/tests` named `<ip>_smoketest.c`.

This should perform a basic test of the main datapath of the hardware module by the embedded core, via the DIF, and should be able to be run on all OpenTitan platforms (including FPGA, simulation, and DV).
This test will be shared with DV.

Smoke tests are for diagnosing major issues in both software and hardware, and with this in mind, they should execute quickly.
Initially we expect this kind of test to be written by hardware designers for debugging issues during module development.
This happens long before a DIF is implemented, so there are no requirements on how these should work, though we suggest they are placed in `sw/device/tests/<ip>/<ip>.c` as this has been the convention until now.
Later, when a DIF is written, the DIF author is responsible for updating this test to use the DIF, and for moving this test into the aforementioned location.

## S2

For a transition from S1 to S2, the following items are expected to be completed.

### DIF_FEATURES

The DIF has functions to cover all specified hardware functionality.

### DIF_HW_USAGE_REVIEWED

The DIF's usage of its respective IP device has been reviewed by the device's hardware designer.

### DIF_HW_FEATURE_COMPLETE

The DIF's respective device IP is at least stage D2.

### DIF_HW_PARAMS

The DIF uses automatically generated HW parameters and register definitions.

### DIF_DOC_HW

The HW IP Programmer's guide references specific DIF APIs that can be used for operations.

### DIF_CODE_STYLE

The DIF follows DIF-specific guidelines in [`sw/device/lib/dif/README.md`]({{< relref "sw/device/lib/dif/README.md" >}}) and the OpenTitan C style guidelines.

### DIF_DV_TESTS

Chip-level DV testing for the IP using DIFs has been started.

## S3

For a transition from S2 to S3, the following items are expected to be completed.

### DIF_HW_DESIGN_COMPLETE

The DIF's respective device IP is at least stage D3.

### DIF_HW_VERIFICATION_COMPLETE

The DIF's respective device IP is at least stage V3.

### DIF_REVIEW_C_STABLE

The C interface and its implementation have been fully re-reviewed, with a view to the interface not changing in future.

### DIF_TEST_UNIT_COMPLETE

Unit tests exist to cover (at least):

- Device Initialisation
- All Device FIFOs (including when empty, full, and adding data)
- All Device Registers
- All DIF Functions
- All DIF return codes

### DIF_TODO_COMPLETE

All DIF TODOs are complete.
