Skip to content
STIMSMITH

ASSERT_KNOWN Assertion

Concept WIKI v1 · 7/16/2026

ASSERT_KNOWN is a SystemVerilog assertion used in OpenTitan hardware IP design to verify that all outputs of an IP block are driven to known (non-X, non-Z) values. Including these assertions on every output is a required checklist item for transitioning from development stage D0 to D1.

ASSERT_KNOWN Assertion

Overview

ASSERT_KNOWN is an assertion macro used in OpenTitan's SystemVerilog hardware design (RTL) to check that an IP block's outputs are always driven to well-defined logic values (not X or Z) during simulation. It is one of the standard immediate or concurrent assertion idioms adopted across OpenTitan hardware IP.

Purpose

The ASSERT_KNOWN assertion exists to catch design issues such as:

  • Uninitialized flops or signals that propagate X values during simulation.
  • Outputs that are inadvertently left undriven (high-impedance) when they should always carry a defined value.
  • Incorrect default or reset values that allow unknown values to leak to downstream blocks.

By catching these problems early in simulation, ASSERT_KNOWN improves debuggability and reduces the risk of silicon surprises caused by unknown-propagation issues.

Usage Requirement (D1 Signoff Checklist)

According to the OpenTitan Signoff Checklist, one of the design-stage (D0 → D1) requirements is:

All the outputs of the IP have ASSERT_KNOWN assertions.

In other words, every output port of an IP block must be guarded by an ASSERT_KNOWN check that fires (or logs an error) whenever the signal carries an unknown value in simulation. This requirement helps ensure that:

  • The unit does not inadvertently propagate X values through downstream interfaces.
  • The block does not break top-level functionality by leaving outputs in unknown states at the boundary.

Relation to D1 Preconditions

The D1 checklist also requires that the unit be able to be instantiated and connected at the top level RTL, and that it must not break top-level functionality — for example, propagating X through TileLink-UL interfaces, continuously asserting alerts or interrupts, or creating undesired TileLink-UL transactions. Adding ASSERT_KNOWN on every output directly supports this requirement by giving verification engineers a clear signal when an output is not properly driven.

Where It Fits

ASSERT_KNOWN is part of the broader set of RTL design checks used in OpenTitan hardware IPs. It is typically applied in the unit-level SystemVerilog (.sv) file alongside other assertions that cover interface protocols, FIFO pointers, FSM state encoding, and security-relevant behavior.

See Also

LINKED ENTITIES

1 links

CITATIONS

2 sources
2 citations
[1] All the outputs of the IP have ASSERT_KNOWN assertions is a D0-to-D1 signoff checklist requirement. Signoff Checklist - OpenTitan Documentation
[2] ASSERT_KNOWN helps prevent the unit from propagating X through TileLink-UL interfaces and other top-level interfaces, which is required for D1 signoff. Signoff Checklist - OpenTitan Documentation