Column Processing Element (pe_col.sv)
Back to Systolic Gauss-Jordan.
Source file: rtl/systolic_gauss_jordan/pe_col.sv
Elementary Processing element used across the systolic mesh Trapezoidal mesh (trapeziod_mesh.sv)
which processes incoming columns (non-pivot members of each row). The opcode (op_o/op_i) enums are defined in Shared package (gj_pkg.sv)
Ports
Inputs
clk: clock signalrst: reseten_i: enabledata_i: data bit inop_i: op signal in
Outputs
op_o: op signal outdata_o: data bit outstate_o: internal register state out
Behaviour
receives opcodes (
op_o/op_i) from pivot element (Trapezoidal mesh (pe_diag.sv)) which are transferred horizontallyreceives data bits (
data_in) vertically which are used to update internal registerrand determinedata_outbased on opcodes.
Transition table
Notes:
ris the current stored bit.r_nextis the next stored bit.data_o_nextis the combinational value later registered intodata_o.op_ois the registered copy ofop_iwhenrst = 0anden_i = 1.
Enabled data path (rst = 0, en_i = 1)
|
|
|
|
|
|
Meaning |
|---|---|---|---|---|---|---|
|
|
|
|
|
|
Forward vertical data unchanged |
|
|
|
|
|
|
Emit stored bit and load incoming bit |
|
|
|
|
|
|
Same local state update as |
|
|
|
|
|
|
Add incoming bit into the vertical stream over GF(2) |
default |
|
|
|
|
|
Fallback behaves like pass |
Test
Test file:
test_pe_col.pyverifies truth table
make -C test/systolic_gauss_jordan TEST=pe_col