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

📄 cseeblock.v

📁 Reed-Solomon 信道编码广泛应用于DVB中
💻 V
📖 第 1 页 / 共 2 页
字号:
// Module that computes term with degree five.            //// Constructed by a variable-constant multiplier with     //// alpha^5 as constant.                                   ////********************************************************//module degree5_cell(in, out, clock, load, compute);input [7:0] in;output [7:0] out;input clock, load, compute;wire [7:0] outmux;wire [7:0] outmult, outreg;register8_wl register(outmux, outreg, clock, load);mux2_to_1 multiplexer(in, outmult, outmux, compute);//Multipy variable-alpha^5assign outmult[0] = outreg[3] ^ outreg[7];assign outmult[1] = outreg[4];assign outmult[2] = (outreg[3] ^ outreg[5]) ^ outreg[7];assign outmult[3] = (outreg[3] ^ outreg[4]) ^ (outreg[6] ^ outreg[7]);assign outmult[4] = (outreg[3] ^ outreg[4]) ^ outreg[5];assign outmult[5] = (outreg[0] ^ outreg[4]) ^ (outreg[5] ^ outreg[6]);assign outmult[6] = (outreg[1] ^ outreg[5]) ^ (outreg[6] ^ outreg[7]);assign outmult[7] = (outreg[2] ^ outreg[6]) ^ outreg[7];assign out = outreg;endmodule//********************************************************//// Module that computes term with degree six.            //// Constructed by a variable-constant multiplier with     //// alpha^6 as constant.                                   ////********************************************************//module degree6_cell(in, out, clock, load, compute);input [7:0] in;output [7:0] out;input clock, load, compute;wire [7:0] outmux;wire [7:0] outmult, outreg;register8_wl register(outmux, outreg, clock, load);mux2_to_1 multiplexer(in, outmult, outmux, compute);//Multipy variable-alpha^6assign outmult[0] = (outreg[2] ^ outreg[6]) ^ outreg[7];assign outmult[1] = outreg[3] ^ outreg[7];assign outmult[2] = (outreg[2] ^ outreg[4]) ^ (outreg[6] ^ outreg[7]);assign outmult[3] = (outreg[2] ^ outreg[3]) ^ (outreg[5] ^ outreg[6]);assign outmult[4] = (outreg[2] ^ outreg[3]) ^ outreg[4];assign outmult[5] = (outreg[3] ^ outreg[4]) ^ outreg[5];assign outmult[6] = (outreg[0] ^ outreg[4]) ^ (outreg[5] ^ outreg[6]);assign outmult[7] = (outreg[1] ^ outreg[5]) ^ (outreg[6] ^ outreg[7]);assign out = outreg;endmodule//********************************************************//// Module that computes term with degree seven.        //// Constructed by a variable-constant multiplier with     //// alpha^7 as constant.                                   ////********************************************************//module degree7_cell(in, out, clock, load, compute);input [7:0] in;output [7:0] out;input clock, load, compute;wire [7:0] outmux;wire [7:0] outmult, outreg;register8_wl register(outmux, outreg, clock, load);mux2_to_1 multiplexer(in, outmult, outmux, compute);//Multipy variable-alpha^7assign outmult[0] = (outreg[1] ^ outreg[5]) ^ (outreg[6] ^ outreg[7]);assign outmult[1] = (outreg[2] ^ outreg[6]) ^ outreg[7];assign outmult[2] = (outreg[1] ^ outreg[3]) ^ (outreg[5] ^ outreg[6]);assign outmult[3] = (outreg[1] ^ outreg[2]) ^ (outreg[4] ^ outreg[5]);assign outmult[4] = (outreg[1] ^ outreg[2]) ^ (outreg[3] ^ outreg[7]);assign outmult[5] = (outreg[2] ^ outreg[3]) ^ outreg[4];assign outmult[6] = (outreg[3] ^ outreg[4]) ^ outreg[5];assign outmult[7] = (outreg[0] ^ outreg[4]) ^ (outreg[5] ^ outreg[6]);assign out = outreg;endmodule//********************************************************//// Module that computes term with degree eight.          //// Constructed by a variable-constant multiplier with     //// alpha^8 as constant.                                   ////********************************************************//module degree8_cell(in, out, clock, load, compute);input [7:0] in;output [7:0] out;input clock, load, compute;wire [7:0] outmux;wire [7:0] outmult, outreg;register8_wl register(outmux, outreg, clock, load);mux2_to_1 multiplexer(in, outmult, outmux, compute);//Multipy variable-alpha^8assign outmult[0] = (outreg[0] ^ outreg[4]) ^ (outreg[5] ^ outreg[6]);assign outmult[1] = (outreg[1] ^ outreg[5]) ^ (outreg[6] ^ outreg[7]);assign outmult[2] = ((outreg[0] ^ outreg[2]) ^ (outreg[4] ^ outreg[5])) ^ outreg[7];assign outmult[3] = (outreg[0] ^ outreg[1]) ^ (outreg[3] ^ outreg[4]);assign outmult[4] = (outreg[0] ^ outreg[1]) ^ (outreg[2] ^ outreg[6]);assign outmult[5] = (outreg[1] ^ outreg[2]) ^ (outreg[3] ^ outreg[7]);assign outmult[6] = (outreg[2] ^ outreg[3]) ^ outreg[4];assign outmult[7] = (outreg[3] ^ outreg[4]) ^ outreg[5];assign out = outreg;endmodule//********************************************************//// Module that computes term with degree sixteen.          //// Constructed by a variable-constant multiplier with     //// alpha^16 as constant.                                   ////********************************************************//module degree16_cell(in, out, clock, load, compute);input [7:0] in;output [7:0] out;input clock, load, compute;wire [7:0] outmux;wire [7:0] outmult, outreg;register8_wl register(outmux, outreg, clock, load);mux2_to_1 multiplexer(in, outmult, outmux, compute);//Multipy variable-alpha^16assign outmult[0] = (outreg[2] ^ outreg[5]) ^ outreg[7];assign outmult[1] = outreg[3] ^ outreg[6];assign outmult[2] = (outreg[0] ^ outreg[2]) ^ (outreg[4] ^ outreg[5]);assign outmult[3] = ((outreg[0] ^ outreg[1]) ^ (outreg[2] ^ outreg[3])) ^ (outreg[6] ^ outreg[7]);assign outmult[4] = (outreg[1] ^ outreg[3]) ^ (outreg[4] ^ outreg[5]);assign outmult[5] = (outreg[2] ^ outreg[4]) ^ (outreg[5] ^ outreg[6]);assign outmult[6] = ((outreg[0] ^ outreg[3]) ^ (outreg[5] ^ outreg[6])) ^ outreg[7];assign outmult[7] = (outreg[1] ^ outreg[4]) ^ (outreg[6] ^ outreg[7]);assign out = outreg;endmodule//********************************************************//// Module that computes term with degree fifty-one.       //// Constructed by a variable-constant multiplier with     //// alpha^51 as constant.                                  ////********************************************************//module degree51_cell(in, out);input [7:0] in;output [7:0] out;assign out[0] = in[5] ^ in[7];assign out[1] = in[0] ^ in[6];assign out[2] = in[1] ^ in[5];assign out[3] = ((in[0] ^ in[2]) ^ (in[5] ^ in[6])) ^ in[7];assign out[4] = (in[1] ^ in[3]) ^ (in[5] ^ in[6]);assign out[5] = (in[2] ^ in[4]) ^ (in[6] ^ in[7]);assign out[6] = (in[3] ^ in[5]) ^ in[7];assign out[7] = in[4] ^ in[6];endmodule//*************************************************************//// Module that computes term with degree one hundred and two.  //// Constructed by a variable-constant multiplier with          //// alpha^102 as constant.                                      ////*************************************************************//module degree102_cell(in, out);input [7:0] in;output [7:0] out;assign out[0] = in[2] ^ in[7];assign out[1] = in[3];assign out[2] = (in[0] ^ in[2]) ^ (in[4] ^ in[7]);assign out[3] = ((in[1] ^ in[2]) ^ (in[3] ^ in[5])) ^ in[7];assign out[4] = (in[3] ^ in[4]) ^ (in[6] ^ in[7]);assign out[5] = (in[4] ^ in[5]) ^ in[7];assign out[6] = (in[0] ^ in[5]) ^ in[6];assign out[7] = (in[1] ^ in[6]) ^ in[7];endmodule//*******************************************************************//// Module that computes term with degree one hundred and fifty-three.//// Constructed by a variable-constant multiplier with                //// alpha^153 as constant.                                            ////*******************************************************************//module degree153_cell(in, out);input [7:0] in;output [7:0] out;assign out[0] = (in[1] ^ in[4]) ^ (in[5] ^ in[6]);assign out[1] = ((in[0] ^ in[2]) ^ (in[5] ^ in[6])) ^ in[7];assign out[2] = (in[3] ^ in[4]) ^ (in[5] ^ in[7]);assign out[3] = in[1];assign out[4] = ((in[0] ^ in[1]) ^ (in[2] ^ in[4])) ^ (in[5] ^ in[6]);assign out[5] = ((in[1] ^ in[2]) ^ (in[3] ^ in[5])) ^ (in[6] ^ in[7]);assign out[6] = ((in[2] ^ in[3]) ^ (in[4] ^ in[6])) ^ in[7];assign out[7] = ((in[0] ^ in[3]) ^ (in[4] ^ in[5])) ^ in[7];endmodule//*******************************************************************//// Module that computes term with degree two hundred and four.       //// Constructed by a variable-constant multiplier with                //// alpha^204 as constant.                                            ////*******************************************************************//module degree204_cell(in, out);input [7:0] in;output [7:0] out;assign out[0] = ((in[0] ^ in[1]) ^ (in[2] ^ in[4])) ^ in[6];assign out[1] = ((in[1] ^ in[2]) ^ (in[3] ^ in[5])) ^ in[7];assign out[2] = (in[0] ^ in[1]) ^ in[3];assign out[3] = in[0] ^ in[6];assign out[4] = ((in[0] ^ in[2]) ^ (in[4] ^ in[6])) ^ in[7];assign out[5] = (in[1] ^ in[3]) ^ (in[5] ^ in[7]);assign out[6] = (in[0] ^ in[2]) ^ (in[4] ^ in[6]);assign out[7] = ((in[0] ^ in[1]) ^ (in[3] ^ in[5])) ^ in[7];endmodule//***********************************************************//// Invers Multiplication module for GF(2^8) is formed by AND //// and XOR gates. This module is derived directly from       //// Fermat Theorem, which state that                          //// beta^(-1) = beta^2.beta^(2^2).beta^(2^3).beta^(2^4)       ////            .beta^(2^5).beta^(2^6).beta^(2^7),             //// for beta member of GF(2^8).                               //// Note: this module is only used in CSEE block              ////***********************************************************//module inverscomb(in, out);input [7:0] in;output [7:0] out;wire [7:0] alpha1, alpha2, alpha3, alpha4, alpha5, alpha6, alpha7,            temp1, temp2, temp3, temp4, temp5, temp6;           assign alpha1[7] = in[6];assign alpha1[6] = in[3] ^ in[5] ^ in[6];assign alpha1[5] = in[5];assign alpha1[4] = (in[2] ^ in[4]) ^ (in[5] ^ in[7]);assign alpha1[3] = in[4] ^ in[6];assign alpha1[2] = (in[1] ^ in[4]) ^ (in[5] ^ in[6]);assign alpha1[1] = in[7];assign alpha1[0] = (in[0] ^ in[4]) ^ (in[6] ^ in[7]);assign alpha2[7] = alpha1[6];assign alpha2[6] = alpha1[3] ^ alpha1[5] ^ alpha1[6];assign alpha2[5] = alpha1[5];assign alpha2[4] = (alpha1[2] ^ alpha1[4]) ^ (alpha1[5] ^ alpha1[7]);assign alpha2[3] = alpha1[4] ^ alpha1[6];assign alpha2[2] = (alpha1[1] ^ alpha1[4]) ^ (alpha1[5] ^ alpha1[6]);assign alpha2[1] = alpha1[7];assign alpha2[0] = (alpha1[0] ^ alpha1[4]) ^ (alpha1[6] ^ alpha1[7]);assign alpha3[7] = alpha2[6];assign alpha3[6] = alpha2[3] ^ alpha2[5] ^ alpha2[6];assign alpha3[5] = alpha2[5];assign alpha3[4] = (alpha2[2] ^ alpha2[4]) ^ (alpha2[5] ^ alpha2[7]);assign alpha3[3] = alpha2[4] ^ alpha2[6];assign alpha3[2] = (alpha2[1] ^ alpha2[4]) ^ (alpha2[5] ^ alpha2[6]);assign alpha3[1] = alpha2[7];assign alpha3[0] = (alpha2[0] ^ alpha2[4]) ^ (alpha2[6] ^ alpha2[7]);assign alpha4[7] = alpha3[6];assign alpha4[6] = alpha3[3] ^ alpha3[5] ^ alpha3[6];assign alpha4[5] = alpha3[5];assign alpha4[4] = (alpha3[2] ^ alpha3[4]) ^ (alpha3[5] ^ alpha3[7]);assign alpha4[3] = alpha3[4] ^ alpha3[6];assign alpha4[2] = (alpha3[1] ^ alpha3[4]) ^ (alpha3[5] ^ alpha3[6]);assign alpha4[1] = alpha3[7];assign alpha4[0] = (alpha3[0] ^ alpha3[4]) ^ (alpha3[6] ^ alpha3[7]);assign alpha5[7] = alpha4[6];assign alpha5[6] = alpha4[3] ^ alpha4[5] ^ alpha4[6];assign alpha5[5] = alpha4[5];assign alpha5[4] = (alpha4[2] ^ alpha4[4]) ^ (alpha4[5] ^ alpha4[7]);assign alpha5[3] = alpha4[4] ^ alpha4[6];assign alpha5[2] = (alpha4[1] ^ alpha4[4]) ^ (alpha4[5] ^ alpha4[6]);assign alpha5[1] = alpha4[7];assign alpha5[0] = (alpha4[0] ^ alpha4[4]) ^ (alpha4[6] ^ alpha4[7]);assign alpha6[7] = alpha5[6];assign alpha6[6] = alpha5[3] ^ alpha5[5] ^ alpha5[6];assign alpha6[5] = alpha5[5];assign alpha6[4] = (alpha5[2] ^ alpha5[4]) ^ (alpha5[5] ^ alpha5[7]);assign alpha6[3] = alpha5[4] ^ alpha5[6];assign alpha6[2] = (alpha5[1] ^ alpha5[4]) ^ (alpha5[5] ^ alpha5[6]);assign alpha6[1] = alpha5[7];assign alpha6[0] = (alpha5[0] ^ alpha5[4]) ^ (alpha5[6] ^ alpha5[7]);assign alpha7[7] = alpha6[6];assign alpha7[6] = alpha6[3] ^ alpha6[5] ^ alpha6[6];assign alpha7[5] = alpha6[5];assign alpha7[4] = (alpha6[2] ^ alpha6[4]) ^ (alpha6[5] ^ alpha6[7]);assign alpha7[3] = alpha6[4] ^ alpha6[6];assign alpha7[2] = (alpha6[1] ^ alpha6[4]) ^ (alpha6[5] ^ alpha6[6]);assign alpha7[1] = alpha6[7];assign alpha7[0] = (alpha6[0] ^ alpha6[4]) ^ (alpha6[6] ^ alpha6[7]);lcpmult multip1(alpha1, alpha2, temp1);lcpmult multip2(alpha3, alpha4, temp2);lcpmult multip3(alpha5, alpha6, temp3);lcpmult multip4(temp1, temp2, temp4);lcpmult multip5(temp3, alpha7, temp5);lcpmult multip6(temp4, temp5, temp6);assign out = temp6;endmodule

⌨️ 快捷键说明

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