Commit Graph

13 Commits

Author SHA1 Message Date
cah
ce61fd1e85 fix: rewrite sat_add/sat_sub for Yosys compatibility
Use overflow detection instead of $signed comparison.
Use function assignment instead of return statements.
Yosys parser can't handle return with complex concatenation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 21:18:09 -07:00
cah
f2e419e25d fix: flatten LLR interface to packed vector for Yosys compatibility
Yosys doesn't support unpacked array ports. Changed llr_in/llr_input
from `logic signed [Q-1:0] llr[N]` to `logic [N*Q-1:0] llr` packed
vector. Also fixed blocking assignment in INIT loops (Verilator
BLKLOOPINIT requirement).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 21:07:29 -07:00
cah
c74ab93ae5 test: add noisy, max_iter, and back-to-back cocotb tests
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 21:04:51 -07:00
cah
90bd916ee3 fix: refactor cn_min_sum task for iverilog compatibility
Replace unpacked array parameter with 8 individual ports.
Icarus Verilog (used by cocotb) doesn't support unpacked
dimensions in task/function ports.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 20:54:13 -07:00
cah
885554102f test: add cocotb LDPC basic decode test with firmware
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 20:47:34 -07:00
cah
dd6578c2e6 docs: write proposal README for ChipFoundry contest
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 20:36:40 -07:00
cah
714da5e98a docs: add Apache 2.0 license and AI disclosure
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 20:33:54 -07:00
cah
81cffda1cb feat: add OpenLane hardening config for LDPC decoder (50 MHz)
- config.json: 20ns clock period, AREA 2 synth strategy, 2800x1760um die
- pin_order.cfg: Wishbone pins on south, outputs on north
- base_ldpc.sdc: Caravel-calibrated timing constraints adapted for LDPC ports
- Updated wrapper config to reference ldpc_decoder_top macro

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 20:08:39 -07:00
cah
412c51a632 fix: three RTL bugs found by vector-driven testbench
- Magnitude overflow for -32 in cn_min_sum (clamp to 31)
- Converged flag cleared prematurely in IDLE (move to INIT)
- msg_cn2vn zeroing race in first iteration (bypass old_msg read)

All 20 test vectors now pass bit-exact against Python model.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 19:55:42 -07:00
cah
55eb487f5f fix: set unconnected VN->CN messages to +MAX in min-sum
Prevents magnitude 0 from unconnected columns dominating the
minimum computation and zeroing all CN->VN messages.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 19:06:38 -07:00
cah
5b92587f51 feat: add generated test vector data for cocotb and firmware
Add test_data.py (cocotb Python module) and test_vectors.h (C header)
with 20 test vectors from the Python behavioral model. LLR data is
packed 5 per 32-bit word matching the wishbone interface format.
11 converged vectors for positive testing, 9 non-converged for
negative testing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 18:37:37 -07:00
cah
5d615876ae feat: integrate LDPC decoder into Caravel wrapper
- Copy ldpc_decoder_core.sv and wishbone_interface.sv from standalone RTL
- Create Caravel-adapted ldpc_decoder_top.sv with USE_POWER_PINS,
  32-bit address (lower 8 bits passed through), and wb_sel_i port
- Replace user_proj_example in user_project_wrapper.v with LDPC decoder
  instantiation, active-high to active-low reset inversion, and tie-offs
  for unused outputs (la_data_out, io_out, io_oeb, user_irq[2:1])
- Update includes.rtl.caravel_user_project with LDPC RTL file list
- Fix invalid hex literal in VERSION_ID (0xLD -> 0x1D)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 18:22:45 -07:00
2ba96a115d Initial commit 2026-02-23 20:42:11 -07:00