You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Root cause of real-FPGA hang (hw_emu unaffected):
AXISBRLater feeds bootstrapping key (BK) data to ExternalProductMiddle
via 4 AXI4-Stream register slices per polynomial half. Previously each
slice received TREADY := trgswinready(k) independently, while
trgswinvalid(k) = Cat(tvalidvec).andR (requires ALL 4 valid). When one
HBM bus momentarily stalled (TVALID=0), the other 3 slices saw
TREADY=1 and consumed their data, but TRGSWBatchMemory saw wen=0 and
discarded it. This silently corrupted the BK accumulation, causing
MULandACC to miss outflag events, finreg to stall short of its target,
and BlindRotate to hang in FINWAIT forever.
Fix: require all 4 buses to be simultaneously valid before any slice
advances (TREADY := trgswinready(k) && allValid). This is correct
because HomGate dispatches all 4 buses in lock-step; the depth-8 slices
absorb the small SLR-crossing skew.
Why hw_emu was unaffected: simulated HBM delivers all buses in
lock-step every cycle, so the AND was always 1 and the bug never fired.
Also includes diagnostic infrastructure added during investigation:
- BRBack_top.v: axis18 debug stream packs 4×8-bit saturating counters
(feedback ch0/ch1, BK ch0/ch4 beat counts) for live hang diagnosis
- HomGate_top.v + HomGate_control_s_axi.v: 4th debug register at
AXI-lite 0x20c captures the BRBack axis18 debug word
- xrt_regread.cpp: decode and print the new brback_dbg register with
expected reference values in the 5-second polling output
- build_brback_xo.tcl: copy RTL sources into ip_repo/src to work
around ipx::package_project file-copy reliability issue
Result: gate 0 = 1.32ms, gate 1 = 1.25ms, PASS on Alveo U280 @ 300MHz
Timing: WNS = 0.016ns, all constraints met, zero violations.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
0 commit comments