Skip to content
STIMSMITH

Handshaking Mechanism

Concept

The handshaking mechanism is a runtime status-reporting facility, provided by the RISCV-DV instruction generator, that allows a core under test to communicate execution state to the testbench during program execution. In Ibex's RTL/ISS co-simulation flow it compensates for the inability of ISS golden models to model traps caused by external stimulus (interrupts, debug requests, memory faults), enabling verification that the core entered the proper interrupt handler, entered Debug Mode, or updated CSRs correctly.

First seen 6/6/2026
Last seen 6/6/2026
Evidence 1 chunks
Wiki v1

WIKI

Handshaking Mechanism

Purpose and Motivation

In an end-to-end RTL/ISS co-simulation flow, the final stage normally parses the trace log produced by the core and the trace log produced by the chosen golden-model ISS, and compares the sets of register writebacks (correct data, to the correct registers, in the correct order) to determine correctness of a given simulation.

READ FULL ARTICLE →

NEIGHBORHOOD

No graph connections found for this entity yet. It may appear in future ingestion runs.

explore full graph →

RELATIONSHIPS

7 connections
RTL/ISS co-simulation ← uses 1e
RTL/ISS co-simulation uses the handshaking mechanism from RISCV-DV to support external stimulus scenarios.
signature address uses → 1e
The handshaking mechanism uses a specific signature address (0x8ffffffc) for communication.
riscv-dv ← implements 1e
RISCV-DV implements the handshaking mechanism used in the co-simulation flow.
core_ibex_base_test.sv ← implements 1e
core_ibex_base_test.sv implements API tasks for the handshaking mechanism.
core_ibex_test_lib.sv ← uses 1e
core_ibex_test_lib.sv uses the handshaking mechanism during real simulations.
Debug Mode uses → 1e
The handshaking mechanism is used to verify that the core has entered Debug Mode correctly.
CSR uses → 1e
The handshaking mechanism supports verification of correct CSR updates during external stimulus scenarios.

CITATIONS

7 sources
7 citations — click to expand
[1] The handshaking mechanism is provided by the RISCV-DV instruction generator and allows the core to send status information to the testbench during program execution. Verification — Ibex Documentation
[2] The handshaking mechanism is used in the Ibex end-to-end RTL/ISS co-simulation flow because ISS models cannot model traps due to external stimulus, and it enables verification that the core entered the proper interrupt handler, entered Debug Mode properly, and updated CSRs correctly. Verification — Ibex Documentation
[3] The signature address used by the Ibex testbench for the handshaking is 0x8ffffffc. Verification — Ibex Documentation
[4] API tasks for the handshaking mechanism are provided in dv/uvm/core_ibex/tests/core_ibex_base_test.sv, and example real-simulation usage is in dv/uvm/core_ibex/tests/core_ibex_test_lib.sv. Verification — Ibex Documentation
[5] The handshaking mechanism is extensively used to provide runtime verification for situations involving external debug requests, interrupt assertions, and memory faults. Verification — Ibex Documentation
[6] Complementing the handshake, the trace-log comparison is modified to compare only the final values of every register at the end of the test, because the ISS trace log lacks execution information from the debug ROM and interrupt handler code. Verification — Ibex Documentation
[7] The full co-simulation flow, including use of the handshaking mechanism, is controlled by the Makefile at dv/uvm/core_ibex/Makefile. Verification — Ibex Documentation