⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scblock.v

📁 rs编码vvhdl 希望能通过 我不晓得具体对大家有用否 希望懂rs编码的多多交流
💻 V
字号:
//*****************************************************************//// 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;    endcaseendalways@(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;   endcaseendsyndcell_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^19assign 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^20assign 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^21assign 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^22assign 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^23assign 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^24assign 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^25assign 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^26assign 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^27assign 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^28assign 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^29assign 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^30assign 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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -