The default DUT has 16 one-bit serial inputs and 16 one-bit serial outputs.
All active-low signal names end in _n. Inputs are driven before and sampled
on the positive edge of clock.
| Signal | Direction | Meaning |
|---|---|---|
reset_n |
input | asynchronous active-low reset |
frame_n[p] |
input | low for the complete input packet on source p |
valid_n[p] |
input | low when din[p] is a valid payload bit |
din[p] |
input | serial header and payload bit |
busy_n[p] |
output | high when a valid payload bit can advance |
frameo_n[p] |
output | low while destination p owns an output frame |
valido_n[p] |
output | low when dout[p] is a valid payload bit |
dout[p] |
output | routed serial payload bit |
- Keep
frame_nhigh for at least one idle clock between packets. - Drive
frame_nlow with destination bitA0. - Drive
A1,A2, andA3on the next three clocks (LSB first). - Drive a required route-valid marker bit of
1. - Keep
valid_nhigh for four additional arbitration/settling clocks.dinis ignored during these clocks. - Drive payload bytes LSB first. A bit is accepted only when
valid_n == 0 && busy_n == 1; otherwise hold it and its frame state. - Raise
frame_nwith the final accepted payload bit.valid_nmay remain low for that final bit, then returns high.
clock edge : 0 1 2 3 4 5 6 7 8 9 ... final
frame_n : 1 0 0 0 0 0 0 0 0 0 ... 1
din : X A0 A1 A2 A3 1 X X X D0 ... Dn
valid_n : 1 1 1 1 1 1 1 1 1 0 ... 0
The four settling clocks reflect the characterized baseline driver. This observed behavior takes precedence over the older source comment that depicts only three don't-care clocks.
The authoritative characterized sample is
legacy/characterization/golden_smoke_trace.csv. It records every relevant
input and legacy output pin for the source 3 → destination 7 A5/3C packet. The
differential runner reconstructs and byte-compares this trace before declaring
compatibility.
Each destination can be owned by at most one source. A grant is retained until
the source raises frame_n. Waiting sources see busy_n == 0; the granted
source sees busy_n == 1. A global rotating priority head selects among
simultaneous requests and advances after ownership changes.
Malformed headers terminate the source request and set an internal protocol error indication. The production pin interface remains compatible with the legacy router and therefore adds no new error output.