Add gen_verilator_vectors.py to convert test_vectors.json into hex files
for $readmemh, and tb_ldpc_vectors.sv to drive 20 test vectors through
the RTL decoder and verify bit-exact matching against the Python model.
All 11 converged vectors pass with exact decoded word, convergence flag,
and zero syndrome weight. All 9 non-converged vectors match the Python
model's decoded word, iteration count, and syndrome weight exactly.
Three RTL bugs fixed in ldpc_decoder_core.sv during testing:
- Magnitude overflow: -32 (6'b100000) negation overflowed 5-bit field
to 0; now clamped to max magnitude 31
- Converged flag persistence: moved clearing from IDLE to INIT so host
can read results after decode completes
- msg_cn2vn zeroing: bypass stale array reads on first iteration
(iter_cnt==0) to avoid Verilator scheduling issues with large 3D
array initialization
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>