module systol_B1 (EXP) is ------------------------------------------------------------------------------- process MAIN [Y: WIRE] is hide X: WIRE in par X in GENERATOR [X] || ARRAY [X, Y] (W1, W2, W3) end par end hide end process ------------------------------------------------------------------------------- process GENERATOR [X: WIRE] is X (X1); X (X2); X (X3); X (X4); X (X5); X (X6); X (X7); X (X8); stop end process ------------------------------------------------------------------------------- process ZERO [Y: WIRE] is loop Y (0 of EXP) end loop end process ------------------------------------------------------------------------------- process ARRAY [X0: WIRE, Y3: WIRE] (W1, W2, W3: EXP) is hide X1, X2, X3: WIRE in par X1, X2, X3 in BROADCAST [X0, X1, X2, X3] || hide Y0, Y1, Y2: WIRE in par Y0 -> ZERO [Y0] || Y0, Y1 -> CELL [X1, Y0, Y1] (W1, 1) || Y1, Y2 -> CELL [X2, Y1, Y2] (W2, 2) || Y2 -> CELL [X3, Y2, Y3] (W3, 3) end par end hide end par end hide end process ------------------------------------------------------------------------------- process CELL [X_IN, Y_IN, Y_OUT: WIRE] (W: EXP, in var K: NAT) is var X, Y: EXP in loop X_IN (?X); if K > 1 then K := K - 1 else Y_IN (?Y); Y_OUT (Y + (W * X)) end if end loop end var end process ------------------------------------------------------------------------------- process BROADCAST [IN0, OUT1, OUT2, OUT3: WIRE] is var X: EXP in loop IN0 (?X); OUT3 (X); OUT2 (X); OUT1 (X) end loop end var end process ------------------------------------------------------------------------------- end module