OpenCores
URL https://opencores.org/ocsvn/rs_decoder_31_19_6/rs_decoder_31_19_6/trunk

Subversion Repositories rs_decoder_31_19_6

[/] [rs_decoder_31_19_6/] [trunk/] [SCBLOCK.V] - Diff between revs 2 and 4

Show entire file | Details | Blame | View Log

Rev 2 Rev 4
?rev1line?
?rev2line?
 
//*****************************************************************//
 
// Syndrome Computation                                            //
 
// This block consists mainly of 12 cells. Each cell computes      //
 
// syndrome value Si, for i=0,...,11.                              //
 
// At the end of received word block, all cells store the syndrome //
 
// values, while SC block set its flag (errdetect) if one or more  //
 
// syndrome values are not zero.                                   //
 
// Ref.: "High-speed VLSI Architecture for Parallel Reed-Solomon   //
 
//        Decoder", IEEE Trans. on VLSI, April 2003.               //
 
//*****************************************************************//
 
module SCblock(recword, clock1, clock2, active_sc, reset, syndvalue0,
 
               syndvalue1, syndvalue2, syndvalue3, syndvalue4,
 
               syndvalue5, syndvalue6, syndvalue7, syndvalue8,
 
               syndvalue9, syndvalue10, syndvalue11, errdetect,
 
               en_sccell, evalsynd, holdsynd);
 
 
 
input [4:0] recword;
 
input clock1, clock2, active_sc, reset, evalsynd, holdsynd, en_sccell;
 
output [4:0] syndvalue0, syndvalue1, syndvalue2, syndvalue3, syndvalue4,
 
             syndvalue5, syndvalue6, syndvalue7, syndvalue8, syndvalue9,
 
             syndvalue10, syndvalue11;
 
output errdetect;
 
 
 
reg errdetect;
 
reg [1:0] state, nxt_state;
 
parameter [1:0] st0=0, st1=1, st2=2;
 
 
 
always@(state or active_sc or evalsynd)
 
begin
 
    case(state)
 
        st0:   begin
 
               if(active_sc)
 
                  nxt_state <= st1;
 
               else
 
                  nxt_state <= st0;
 
               end
 
        st1:   begin
 
               if(evalsynd)
 
                  nxt_state <= st2;
 
               else
 
                  nxt_state <= st1;
 
               end
 
        st2:   nxt_state <= st0;
 
        default: nxt_state <= st0;
 
    endcase
 
end
 
 
 
always@(posedge clock2 or negedge reset)
 
begin
 
   if(~reset)
 
      state <= st0;
 
   else
 
      state <=  nxt_state;
 
end
 
 
 
always@(state or syndvalue0 or syndvalue1 or syndvalue2 or syndvalue3 or
 
        syndvalue4 or syndvalue5 or syndvalue6 or syndvalue7 or syndvalue8 or
 
        syndvalue9 or syndvalue10 or syndvalue11)
 
begin
 
    case(state)
 
        st0:   errdetect <= 0;
 
        st1:   errdetect <= 0;
 
        st2:   begin
 
               if (syndvalue0 || syndvalue1 || syndvalue2 || syndvalue3 ||
 
                   syndvalue4 || syndvalue5 || syndvalue6 || syndvalue7 ||
 
                   syndvalue8 || syndvalue9 || syndvalue10 || syndvalue11)
 
                  errdetect <= 1;
 
               else
 
                  errdetect <= 0;
 
               end
 
        default:errdetect = 0;
 
   endcase
 
end
 
 
 
syndcell_0 cell_0(recword, clock1, en_sccell, holdsynd, syndvalue0);
 
syndcell_1 cell_1(recword, clock1, en_sccell, holdsynd, syndvalue1);
 
syndcell_2 cell_2(recword, clock1, en_sccell, holdsynd, syndvalue2);
 
syndcell_3 cell_3(recword, clock1, en_sccell, holdsynd, syndvalue3);
 
syndcell_4 cell_4(recword, clock1, en_sccell, holdsynd, syndvalue4);
 
syndcell_5 cell_5(recword, clock1, en_sccell, holdsynd, syndvalue5);
 
syndcell_6 cell_6(recword, clock1, en_sccell, holdsynd, syndvalue6);
 
syndcell_7 cell_7(recword, clock1, en_sccell, holdsynd, syndvalue7);
 
syndcell_8 cell_8(recword, clock1, en_sccell, holdsynd, syndvalue8);
 
syndcell_9 cell_9(recword, clock1, en_sccell, holdsynd, syndvalue9);
 
syndcell_10 cell_10(recword, clock1, en_sccell, holdsynd, syndvalue10);
 
syndcell_11 cell_11(recword, clock1, en_sccell, holdsynd, syndvalue11);
 
 
 
endmodule
 
 
 
 
 
//*****************************/
 
// Syndrome Computation Cells //
 
//****************************//
 
 
 
//**************************************************//
 
//syndcell_0 computes R(alpha^19) for 31 clock cycles//
 
//**************************************************//
 
module syndcell_0(recword, clock, enable, hold, synvalue0);
 
 
 
input [0:4] recword;
 
input clock;
 
input enable, hold;
 
output [0:4] synvalue0;
 
 
 
wire [0:4] outreg;
 
wire [0:4] outadder;
 
wire [0:4] outmult;
 
 
 
//multiply recword with constant alpha^19
 
assign outmult[0] = outreg[3] ^ outreg[4];
 
assign outmult[1] = outreg[0] ^ outreg[4];
 
assign outmult[2] = (outreg[0] ^ outreg[1]) ^ (outreg[3] ^ outreg[4]);
 
assign outmult[3] = (outreg[1] ^ outreg[2]) ^ outreg[4];
 
assign outmult[4] = outreg[2] ^ outreg[3];
 
 
 
register5_wlh register5bit(outadder, outreg, enable, hold, clock);
 
gfadder   adder(recword, outmult, outadder);
 
assign synvalue0 = outreg;
 
 
 
endmodule
 
 
 
//**************************************************//
 
//syndcell_1 computes R(alpha^20) for 31 clock cycles//
 
//**************************************************//
 
module syndcell_1(recword, clock, enable, hold, synvalue1);
 
 
 
input [0:4] recword;
 
input clock;
 
input enable, hold;
 
output [0:4] synvalue1;
 
 
 
wire [0:4] outreg;
 
wire [0:4] outadder;
 
wire [0:4] outmult;
 
 
 
//multiply recword with constant alpha^20
 
assign outmult[0] = outreg[2] ^ outreg[3];
 
assign outmult[1] = outreg[3] ^ outreg[4];
 
assign outmult[2] = (outreg[0] ^ outreg[4]) ^ (outreg[2] ^ outreg[3]);
 
assign outmult[3] = (outreg[0] ^ outreg[1]) ^ (outreg[3] ^ outreg[4]);
 
assign outmult[4] = (outreg[1] ^ outreg[2]) ^ outreg[4];
 
 
 
register5_wlh register5bit(outadder, outreg, enable, hold, clock);
 
gfadder   adder(recword, outmult, outadder);
 
assign synvalue1 = outreg;
 
 
 
endmodule
 
 
 
//**************************************************//
 
//syndcell_2 computes R(alpha^21) for 31 clock cycles//
 
//**************************************************//
 
module syndcell_2(recword, clock, enable, hold, synvalue2);
 
 
 
input [0:4] recword;
 
input clock;
 
input enable, hold;
 
output [0:4] synvalue2;
 
 
 
wire [0:4] outreg;
 
wire [0:4] outadder;
 
wire [0:4] outmult;
 
 
 
//multiply recword with constant alpha^21
 
assign outmult[0] = (outreg[1] ^ outreg[2]) ^ outreg[4];
 
assign outmult[1] = outreg[2] ^ outreg[3];
 
assign outmult[2] = (outreg[1] ^ outreg[2]) ^ outreg[3];
 
assign outmult[3] = (outreg[0] ^ outreg[2]) ^ (outreg[3] ^ outreg[4]);
 
assign outmult[4] = (outreg[0] ^ outreg[1]) ^ (outreg[3] ^ outreg[4]);
 
 
 
register5_wlh register5bit(outadder, outreg, enable, hold, clock);
 
gfadder   adder(recword, outmult, outadder);
 
assign synvalue2 = outreg;
 
 
 
endmodule
 
 
 
//**************************************************//
 
//syndcell_3 computes R(alpha^22) for 31 clock cycles//
 
//**************************************************//
 
module syndcell_3(recword, clock, enable, hold, synvalue3);
 
 
 
input [0:4] recword;
 
input clock;
 
input enable, hold;
 
output [0:4] synvalue3;
 
 
 
wire [0:4] outreg;
 
wire [0:4] outadder;
 
wire [0:4] outmult;
 
 
 
//multiply recword with constant alpha^22
 
assign outmult[0] = (outreg[0] ^ outreg[1]) ^ (outreg[3] ^ outreg[4]);
 
assign outmult[1] = (outreg[1] ^ outreg[2]) ^ outreg[4];
 
assign outmult[2] = (outreg[0] ^ outreg[1]) ^ (outreg[2] ^ outreg[4]);
 
assign outmult[3] = (outreg[1] ^ outreg[2]) ^ outreg[3];
 
assign outmult[4] = (outreg[0] ^ outreg[2]) ^ (outreg[3] ^ outreg[4]);
 
 
 
register5_wlh register5bit(outadder, outreg, enable, hold, clock);
 
gfadder   adder(recword, outmult, outadder);
 
assign synvalue3 = outreg;
 
 
 
endmodule
 
 
 
//***************************************************//
 
//syndcell_4 computes R(alpha^23) for 31 clock cycles//
 
//**************************************************//
 
module syndcell_4(recword, clock, enable, hold, synvalue4);
 
 
 
input [0:4] recword;
 
input clock;
 
input enable, hold;
 
output [0:4] synvalue4;
 
 
 
wire [0:4] outreg;
 
wire [0:4] outadder;
 
wire [0:4] outmult;
 
 
 
//multiply recword with constant alpha^23
 
assign outmult[0] = (outreg[0] ^ outreg[2]) ^ (outreg[3] ^ outreg[4]);
 
assign outmult[1] = (outreg[0] ^ outreg[1]) ^ (outreg[3] ^ outreg[4]);
 
assign outmult[2] = (outreg[0] ^ outreg[1]) ^ outreg[3];
 
assign outmult[3] = (outreg[0] ^ outreg[1]) ^ (outreg[2] ^ outreg[4]);
 
assign outmult[4] = (outreg[1] ^ outreg[2]) ^ outreg[3];
 
 
 
register5_wlh register5bit(outadder, outreg, enable, hold, clock);
 
gfadder   adder(recword, outmult, outadder);
 
assign synvalue4 = outreg;
 
 
 
endmodule
 
 
 
//***************************************************//
 
//syndcell_5 computes R(alpha^24) for 31 clock cycles//
 
//***************************************************//
 
module syndcell_5(recword, clock, enable, hold, synvalue5);
 
 
 
input [0:4] recword;
 
input clock;
 
input enable, hold;
 
output [0:4] synvalue5;
 
 
 
wire [0:4] outreg;
 
wire [0:4] outadder;
 
wire [0:4] outmult;
 
 
 
//multiply recword with constant alpha^24
 
assign outmult[0] = (outreg[1] ^ outreg[2]) ^ outreg[3];
 
assign outmult[1] = (outreg[0] ^ outreg[2]) ^ (outreg[3] ^ outreg[4]);
 
assign outmult[2] = (outreg[0] ^ outreg[2]) ^ outreg[4];
 
assign outmult[3] = (outreg[0] ^ outreg[1]) ^ outreg[3];
 
assign outmult[4] = (outreg[0] ^ outreg[1]) ^ (outreg[2] ^ outreg[4]);
 
 
 
register5_wlh register5bit(outadder, outreg, enable, hold, clock);
 
gfadder   adder(recword, outmult, outadder);
 
assign synvalue5 = outreg;
 
 
 
endmodule
 
 
 
//***************************************************//
 
//syndcell_6 computes R(alpha^25) for 31 clock cycles//
 
//***************************************************//
 
module syndcell_6(recword, clock, enable, hold, synvalue6);
 
 
 
input [0:4] recword;
 
input clock;
 
input enable, hold;
 
output [0:4] synvalue6;
 
 
 
wire [0:4] outreg;
 
wire [0:4] outadder;
 
wire [0:4] outmult;
 
 
 
//multiply recword with constant alpha^25
 
assign outmult[0] = (outreg[0] ^ outreg[1]) ^ (outreg[2] ^ outreg[4]);
 
assign outmult[1] = (outreg[1] ^ outreg[2]) ^ outreg[3];
 
assign outmult[2] = outreg[1] ^ outreg[3];
 
assign outmult[3] = (outreg[0] ^ outreg[2]) ^ outreg[4];
 
assign outmult[4] = (outreg[0] ^ outreg[1]) ^ outreg[3];
 
 
 
register5_wlh register5bit(outadder, outreg, enable, hold, clock);
 
gfadder   adder(recword, outmult, outadder);
 
assign synvalue6 = outreg;
 
 
 
endmodule
 
 
 
//***************************************************//
 
//syndcell_7 computes R(alpha^26) for 31 clock cycles//
 
//***************************************************//
 
module syndcell_7(recword, clock, enable, hold, synvalue7);
 
 
 
input [0:4] recword;
 
input clock;
 
input enable, hold;
 
output [0:4] synvalue7;
 
 
 
wire [0:4] outreg;
 
wire [0:4] outadder;
 
wire [0:4] outmult;
 
 
 
//multiply recword with constant alpha^26
 
assign outmult[0] = (outreg[0] ^ outreg[1]) ^ outreg[3];
 
assign outmult[1] = (outreg[0] ^ outreg[1]) ^ (outreg[2] ^ outreg[4]);
 
assign outmult[2] = outreg[0] ^ outreg[2];
 
assign outmult[3] = outreg[1] ^ outreg[3];
 
assign outmult[4] = (outreg[0] ^ outreg[2]) ^ outreg[4];
 
 
 
register5_wlh register5bit(outadder, outreg, enable, hold, clock);
 
gfadder   adder(recword, outmult, outadder);
 
assign synvalue7 = outreg;
 
 
 
endmodule
 
 
 
//***************************************************//
 
//syndcell_8 computes R(alpha^27) for 31 clock cycles//
 
//***************************************************//
 
module syndcell_8(recword, clock, enable, hold, synvalue8);
 
 
 
input [0:4] recword;
 
input clock;
 
input enable, hold;
 
output [0:4] synvalue8;
 
 
 
wire [0:4] outreg;
 
wire [0:4] outadder;
 
wire [0:4] outmult;
 
 
 
//multiply recword with constant alpha^27
 
assign outmult[0] = (outreg[0] ^ outreg[2]) ^ outreg[4];
 
assign outmult[1] = (outreg[0] ^ outreg[1]) ^ outreg[3];
 
assign outmult[2] = outreg[1];
 
assign outmult[3] = outreg[0] ^ outreg[2];
 
assign outmult[4] = outreg[1] ^ outreg[3];
 
 
 
register5_wlh register5bit(outadder, outreg, enable, hold, clock);
 
gfadder   adder(recword, outmult, outadder);
 
assign synvalue8 = outreg;
 
 
 
endmodule
 
 
 
//***************************************************//
 
//syndcell_9 computes R(alpha^28) for 31 clock cycles//
 
//***************************************************//
 
module syndcell_9(recword, clock, enable, hold, synvalue9);
 
 
 
input [0:4] recword;
 
input clock;
 
input enable, hold;
 
output [0:4] synvalue9;
 
 
 
wire [0:4] outreg;
 
wire [0:4] outadder;
 
wire [0:4] outmult;
 
 
 
//multiply recword with constant alpha^28
 
assign outmult[0] = outreg[1] ^ outreg[3];
 
assign outmult[1] = (outreg[0] ^ outreg[2]) ^ outreg[4];
 
assign outmult[2] = outreg[0];
 
assign outmult[3] = outreg[1];
 
assign outmult[4] = outreg[0] ^ outreg[2];
 
 
 
register5_wlh register5bit(outadder, outreg, enable, hold, clock);
 
gfadder   adder(recword, outmult, outadder);
 
assign synvalue9 = outreg;
 
 
 
endmodule
 
 
 
//****************************************************//
 
//syndcell_10 computes R(alpha^29) for 31 clock cycles//
 
//****************************************************//
 
module syndcell_10(recword, clock, enable, hold, synvalue10);
 
 
 
input [0:4] recword;
 
input clock;
 
input enable, hold;
 
output [0:4] synvalue10;
 
 
 
wire [0:4] outreg;
 
wire [0:4] outadder;
 
wire [0:4] outmult;
 
 
 
//multiply recword with constant alpha^29
 
assign outmult[0] = outreg[0] ^ outreg[2];
 
assign outmult[1] = outreg[1] ^ outreg[3];
 
assign outmult[2] = outreg[4];
 
assign outmult[3] = outreg[0];
 
assign outmult[4] = outreg[1];
 
 
 
register5_wlh register5bit(outadder, outreg, enable, hold, clock);
 
gfadder   adder(recword, outmult, outadder);
 
assign synvalue10 = outreg;
 
 
 
endmodule
 
 
 
//****************************************************//
 
//syndcell_11 computes R(alpha^30) for 31 clock cycles//
 
//****************************************************//
 
module syndcell_11(recword, clock, enable, hold, synvalue11);
 
 
 
input [0:4] recword;
 
input clock;
 
input enable, hold;
 
output [0:4] synvalue11;
 
 
 
wire [0:4] outreg;
 
wire [0:4] outadder;
 
wire [0:4] outmult;
 
 
 
//multiply recword with constant alpha^30
 
assign outmult[0] = outreg[1];
 
assign outmult[1] = outreg[0] ^ outreg[2];
 
assign outmult[2] = outreg[3];
 
assign outmult[3] = outreg[4];
 
assign outmult[4] = outreg[0];
 
 
 
register5_wlh register5bit(outadder, outreg, enable, hold, clock);
 
gfadder   adder(recword, outmult, outadder);
 
assign synvalue11 = outreg;
 
 
 
endmodule

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.