Systolic GF(2) solver
src/main/scala/chipsldpc/GaussJordan/ contains a binary processing-element
mesh and a framed row-stream solver.
Processing elements and mesh
GjOpcode fixes the two-bit row protocol:
Value |
Operation |
Column behavior |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
PeDiag detects and stores pivots. PeCol applies the diagonal opcode to its
local bit. Both use active-high synchronous reset and hold registered state
when en_i is low.
TrapezoidMeshConfig(n, liftedCols, reduceHopDelay, exposeFullState) creates
n rows and n + liftedCols columns. Data moves down, opcodes move right, and
the reduce token moves between diagonal cells after reduceHopDelay enabled
clocks. Optional state exports are packed row-major. Emitted module names are
pe_col, pe_diag, and trapeziod_mesh.
Framed solver
SystolicGf2SolverConfig(width, maxRows) fixes the coefficient width and row
capacity. One frame uses four Decoupled channels:
Channel |
Direction |
Payload |
|---|---|---|
|
input |
runtime row count and active coefficient columns |
|
input |
one |
|
output |
logical slot, bit value, and |
|
output |
consistency flag and solver clocks |
The solver handles one right-hand side per frame. It reverses active coefficient columns at the mesh boundary because the physical mesh gives the highest column first pivot priority. The public stream remains in ascending logical-slot order. For a consistent rank-deficient system, dependent or free slots are zero in the returned canonical witness.
The internal mesh uses width rows, one lifted RHS column, a reduce-hop delay
of three, and no full-state debug export. With a row accepted on every feed
clock, a nonempty frame reports
solver clocks. A zero-row frame reports zero. Gaps while rows are supplied add feed clocks. Solution and result backpressure do not change the captured solver count.
Inconsistent frames emit no solution records. Consistent frames with nonzero
activeCols emit exactly that many records before the result.
Inspect and test
./scripts/emit.sh pe-col
./scripts/emit.sh pe-diag
./scripts/emit.sh trapezoid-mesh
./mill chipsLDPC.test.testOnly chipsldpc.GaussJordan.GaussJordanPESpec
./mill chipsLDPC.test.testOnly chipsldpc.GaussJordan.TrapezoidMeshSpec
./mill chipsLDPC.test.testOnly chipsldpc.GaussJordan.SystolicGf2SolverSpec
The full solver is also instantiated by Filtered OSD-0.