ofb_mib: Verification Report¶
1. Test results¶
Run on 2026-10-07 with GHDL 6.0.0 (mcode), VUnit 5.0.0.dev7, UVVM 2026.03.20: python run.py "*ofb_mib*".
| Testbench | Tests | Passed |
|---|---|---|
ofb_mib_tb |
10 | 10 |
Full regression of the repository: 209 of 209 tests pass (with the PRBS test registers of MG-5). VSG reports no errors and no warnings.
2. Summary¶
All test cases pass and cover every requirement of the specification.
Code coverage (QuestaSim, docs/coverage.md): the first measurement showed registers whose write, clear or read path no test used (counter clears, W1C of several flags, CRC-8, frame and sequence counters, idle limit, time-slots 63 to 32, lane events, SEC interrupt) and no test of the counter saturation (MG-ST-02). TC-MG-08 and TC-MG-09 cover them and passed without a design change; every statement and branch is covered.
Code coverage after the PRBS test registers (MG-5): two branches were not covered. The saturation of the 48-bit word
counter needs 2^48 words (about 20 days at the line rate), and the read of an undefined lane register no longer
exists, because every word of the 32-byte lane stride is now a register (TC-MG-08 read two of them as undefined).
All counters now use one saturating increment (satInc), which TC-MG-09 covers; the last branch of the lane read
decode is the word counter, as in the VC decode; TC-MG-08 reads and writes the registers of a lane beyond
NumLanes_g instead. Rerun: the MIB covers 268 of 268 statements and 134 of 134 branches.
Register map: TC-MG-01 reads every fixed reset value of the register description (regs/ofb_regs.yml) back through
the generated package ofb_regs_pkg; a reset value changed in the description fails TC-MG-01 (mutation check).
PRBS test registers (TC-MG-10): an error counter that ignores the hold bit fails the test (mutation check: 15 instead of 10 counted words).
Defects found during verification:
| Finding | Fix |
|---|---|
| ECSS table audit (5.9.4e): the Link Reset command cleared only the Data Link status; the lane event flags and the flags of bandwidth use were kept | The command clears the status of all layers, the EDAC status excepted (MG-ST-01, TC-MG-04) |
| The sticky bandwidth flags latched the undefined value of the status crossing before its first transfer (simulation) | The sticky flags accumulate the crossed status only 32 cycles after reset (first fix with to_01 replaced: not synthesizable, found with lint/synth_check.py) |
Every event was counted twice and every command gave two pulses: olo_ft_cc_pulse stretches its output pulses to two cycles of the output clock |
ofb_cc_pulse (edge detector after olo_ft_cc_pulse), also used in the input VC buffer of the Data Link layer, where the same effect doubled the FCT requests |
First build of the VCK190 design: the latches of olo_ft_cc_pulse can lose commands and events (gate and data follow the input pulse) |
ofb_cc_pulse without latch: handshake with single-cycle output pulses (ofb_pkg report) |