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

📄 multiply2.v

📁 18bit的booth乘法器 采用booth2编码 Wallace压缩树 以及超前进位结合进位选择的36bit高性能加法器
💻 V
📖 第 1 页 / 共 2 页
字号:
module multiply_test(mul,mul_1,mul_2);    output [35:0] mul,mul_1,mul_2;    reg [17:0] A,B;    multiply2 m1 (mul,mul_1,mul_2,A,B);    initial    begin     /*A=18'b010101010101010101;     B=18'b111110101011011111;     #200     A=18'b110111010101010101;     B=18'b111111101011011111;     #200     A=18'b010101110101110101;     B=18'b111010101011011111;     #200     A=18'b000101010101010101;     B=18'b101110001011011111;     #200     A=18'b010001010101010101;     B=18'b101100111111011111;     #200     A=18'b110101010101010101;     B=18'b101100111111011111;     #200     A=18'b010001110101010101;     B=18'b001000111111011111;     #200     A=18'b010101010101010101;     B=18'b000100111111011111;     #200     A=18'b110001111101110101;     B=18'b101111111111011111;     #200     A=18'b110001010101010101;     B=18'b101100111111011111;*/     A=18'b010101010101010101;     B=18'b111110101011011111;     #200     A=18'b000000000000000000;     B=18'b111111101011011111;     #200     A=18'b111111111111111111;     B=18'b000000000000000000;     #200     A=18'b000000000000000000;     B=18'b000000000000000000;     #200     A=18'b011111111111111111;     B=18'b111111111111111111;          end   endmodulemodule multiply2(mul,mul_1,mul_2,A,B);    output [35:0] mul;    output [35:0] mul_1,mul_2;    input [17:0] A,B;    wire [21:0]P0;    wire [20:0]P1,P2,P3,P4,P5,P6,P7;    wire [19:0]P8;    wire [8:0] Q;    wire [35:0] mul_1,mul_2;    wire x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46,x47,x48,x49,x50,x51,x52,x53,x54,x55;    wire m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16,m17,m18,m19,m20,m21,m22,m23,m24,m25,m26,m27,m28,m29,m30,m31,m32,m33,m34,m35,m36,m37,m38,m39,m40,m41,m42,m43,m44,m45,m46,m47,m48,m49,m50,m51,m52,m53,m54,m55,m56,m57,m58,m59,m60,m61,m62,m63,m64,m65,m66,m67,m68,m69,m70,m71,m72,m73,m74,m75,m76,m77,m78,m79,m80,m81,m82,m83,m84,m85,m86,m87,m88,m89,m90,m91,m92,m93,m94,m95,m96,m97,m98,m99,m100;    wire m101,m102,m103,m104,m105,m106,m107,m108,m109,m110,m111,m112,m113,m114,m115,m116,m117,m118,m119,m120,m121,m122,m123,m124,m125,m126,m127,m128,m129,m130,m131,m132,m133;    wire [35:0] y;    wire [29:0] z;    wire [33:0] h;    wire [30:0] k;    booth_top b1 (P0,P1,P2,P3,P4,P5,P6,P7,P8,Q,A,B);    ADDH H1 (y[0],m1,P5[0],Q[5]);    ADDH H2 (y[1],m2,P4[3],P5[1]);    ADD4_2 A1 (y[2],x1,m3,P4[4],P5[2],P6[0],Q[6],1'b0);        ADD4_2 A2 (y[3],x2,m4,P3[7],P4[5],P5[3],P6[1],x1);        ADD4_2 A3 (y[4],x3,m5,P1[12],P2[10],P3[8],P4[6],1'b0);    ADD4_2 A4 (y[5],x4,m6,P5[4],P6[2],P7[0],Q[7],x2);        ADD4_2 A5 (y[6],x5,m7,P0[15],P1[13],P2[11],P3[9],x3);    ADD4_2 A6 (y[7],x6,m8,P4[7],P5[5],P6[3],P7[1],x4);        ADD4_2 A7 (y[8],x7,m9,P2[12],P3[10],P4[8],P5[6],x5);    ADD4_2 A8 (y[9],x8,m10,P6[4],P7[2],P8[0],Q[8],x6);        ADD4_2 A9 (y[10],x9,m11,P1[15],P2[13],P3[11],P4[9],x7);    ADD4_2 A10 (y[11],x10,m12,P5[7],P6[5],P7[3],P8[1],x8);        ADD4_2 A11 (y[12],x11,m13,P1[16],P2[14],P3[12],P4[10],x9);    ADD4_2 A12 (y[13],x12,m14,P5[8],P6[6],P7[4],P8[2],x10);          ADD4_2 A13 (y[14],x13,m15,P1[17],P2[15],P3[13],P4[11],x11);    ADD4_2 A14 (y[15],x14,m16,P5[9],P6[7],P7[5],P8[3],x12);        ADD4_2 A15 (y[16],x15,m17,P1[18],P2[16],P3[14],P4[12],x13);    ADD4_2 A16 (y[17],x16,m18,P5[10],P6[8],P7[6],P8[4],x14);        ADD4_2 A17 (y[18],x17,m19,P1[19],P2[17],P3[15],P4[13],x15);    ADD4_2 A18 (y[19],x18,m20,P5[11],P6[9],P7[7],P8[5],x16);        ADD4_2 A19 (y[20],x19,m21,P1[20],P2[18],P3[16],P4[14],x17);    ADD4_2 A20 (y[21],x20,m22,P5[12],P6[10],P7[8],P8[6],x18);        ADDF F1 (y[22],m23,P2[19],P3[17],P4[15]);    ADD4_2 A21 (y[23],x21,m24,P5[13],P6[11],P7[9],P8[7],x20);        ADDF F2 (y[24],m25,P2[20],P3[18],P4[16]);    ADD4_2 A22 (y[25],x22,m26,P5[14],P6[12],P7[10],P8[8],x21);        ADD4_2 A23 (y[26],x23,m27,P5[15],P6[13],P7[11],P8[9],x22);        ADD4_2 A24 (y[27],x24,m28,P5[16],P6[14],P7[12],P8[10],x23);        ADD4_2 A25 (y[28],x25,m29,P5[17],P6[15],P7[13],P8[11],x24);        ADD4_2 A26 (y[29],x26,m30,P5[18],P6[16],P7[14],P8[12],x25);        ADD4_2 A27 (y[30],x27,m31,P5[19],P6[17],P7[15],P8[13],x26);        ADD4_2 A28 (y[31],x28,m32,P5[20],P6[18],P7[16],P8[14],x27);        ADDF F3 (y[32],m33,P6[19],P7[17],P8[15]);        ADDF F4 (y[33],m34,P6[20],P7[18],P8[16]);        ADDH H3 (y[34],m35,P7[19],P8[17]);        ADDH H4 (y[35],m36,P7[20],P8[18]);    ////////////////////////////////////////////////////////////////        ADD4_2 A29 (z[0],x29,m37,P1[4],P2[2],P3[0],Q[3],1'b0);        ADD4_2 A30 (z[1],x30,m38,P0[7],P1[5],P2[3],P3[1],x29);        ADD4_2 A31 (z[2],x31,m39,P2[4],P3[2],P4[0],Q[4],x30);        ADD4_2 A32 (z[3],x32,m40,P1[7],P2[5],P3[3],P4[1],x31);        ADD4_2 A33 (z[4],x33,m41,P2[6],P3[4],P4[2],y[0],x32);        ADD4_2 A34 (z[5],x34,m42,P2[7],P3[5],y[1],m1,x33);        ADD4_2 A35 (z[6],x35,m43,P2[8],P3[6],y[2],m2,x34);        ADD4_2 A36 (z[7],x36,m44,P1[11],P2[9],y[3],m3,x35);        ADD4_2 A37 (z[8],x37,m45,P0[14],y[4],y[5],m4,x36);        ADD4_2 A38 (z[9],x38,m46,y[6],m5,y[7],m6,x37);        ADD4_2 A39 (z[10],x39,m47,y[8],m7,y[9],m8,x38);    //////    ADD4_2 A40 (z[11],x40,m48,y[10],m9,y[11],m10,x39);    ADD4_2 A41 (z[12],x41,m49,y[12],m11,y[13],m12,x40);    ADD4_2 A42 (z[13],x42,m50,y[14],m13,y[15],m14,x41);    ADD4_2 A43 (z[14],x43,m51,y[16],m15,y[17],m16,x42);    ADD4_2 A44 (z[15],x44,m52,y[18],m17,y[19],m18,x43);    //    ADD4_2 A45 (z[16],x45,m53,y[20],m19,y[21],m20,x44);    //    ADD4_2 A46 (z[17],x46,m54,x19,m21,y[23],m22,x45);    ADD4_2 A47 (z[18],x47,m55,y[24],m23,y[25],m24,x46);    ADD4_2 A48 (z[19],x48,m56,P4[17],m25,y[26],m26,x47);    ADD4_2 A49 (z[20],x49,m57,P3[20],P4[18],y[27],m27,x48);    //    ADDF F5 (z[21],m58,P4[19],y[28],m28);    ADDF F6 (z[22],m59,P4[20],y[29],m29);        ADDH H5 (z[23],m60,y[30],m30);    ADDH H6 (z[24],m61,y[31],m31);        ADDF F7 (z[25],m62,y[32],x28,m32);        ADDH H7 (z[26],m63,y[33],m33);    ADDH H8 (z[27],m64,y[34],m34);    ADDH H9 (z[28],m65,y[35],m35);    ADDH H10 (z[29],m66,P8[19],m36);        //////////////////////////////////////////////////////////////        ADDF F8 (h[0],m67,P0[2],P1[0],Q[1]);    ADDH H11 (h[1],m68,P0[3],P1[1]);    ADD4_2 A50 (h[2],x50,m69,P0[4],P1[2],P2[0],Q[2],1'b0);    ADDF F9 (h[3],m70,P0[5],P1[3],P2[1]);    ADDH H12 (h[4],m71,P0[6],z[0]);    ADDH H13 (h[5],m72,z[1],m37);    ADD4_2 A51 (h[6],x51,m73,P0[8],P1[6],z[2],m38,1'b0);    ADDF F10 (h[7],m74,P0[9],z[3],m39);        ADD4_2 A52 (h[8],x52,m75,P0[10],P1[8],z[4],m40,1'b0);    ADD4_2 A53 (h[9],x53,m76,P0[11],P1[9],z[5],m41,x52);    ADD4_2 A54 (h[10],x54,m77,P0[12],P1[10],z[6],m42,x53);        ADDF F11 (h[11],m78,P0[13],z[7],m43);        ADDH H14 (h[12],m79,z[8],m44);    ADDH H15 (h[13],m80,z[9],m45);        ADD4_2 A55 (h[14],x55,m81,P0[16],P1[14],z[10],m46,1'b0);    ADDF F12 (h[15],m82,P0[17],z[11],m47);    ADDF F13 (h[16],m83,P0[18],z[12],m48);    ADDF F14 (h[17],m84,P0[19],z[13],m49);    ADDF F15 (h[18],m85,P0[20],z[14],m50);    ADDF F16 (h[19],m86,P0[21],z[15],m51);        ADDH H16 (h[20],m87,z[16],m52);        ADDF F17 (h[21],m88,y[22],z[17],m53);    ADDH H17 (h[22],m89,z[18],m54);        ADDF F18 (h[23],m90,P3[19],z[19],m55);    ADDH H18 (h[24],m91,z[20],m56);    ADDF F19 (h[25],m92,z[21],x49,m57);        ADDH H19 (h[26],m93,z[22],m58);    ADDH H20 (h[27],m94,z[23],m59);    ADDH H21 (h[28],m95,z[24],m60);    ADDH H22 (h[29],m96,z[25],m61);    ADDH H23 (h[30],m97,z[26],m62);    ADDH H24 (h[31],m98,z[27],m63);    ADDH H25 (h[32],m99,z[28],m64);    ADDH H26 (h[33],m100,z[29],m65);        ///////////////////////////////////////////////////////////    ADDF F20 (k[0],m101,h[3],x50,m69);    ADDH H27 (k[1],m102,h[4],m70);    ADDH H28 (k[2],m103,h[5],m71);    ADDH H29 (k[3],m104,h[6],m72);    ADDF F30 (k[4],m105,h[7],x51,m73);    ADDH H30 (k[5],m106,h[8],m74);    ADDH H31 (k[6],m107,h[9],m75);    ADDH H32 (k[7],m108,h[10],m76);    ADDF F31 (k[8],m109,h[11],x54,m77);    ADDH H33 (k[9],m110,h[12],m78);    ADDH H34 (k[10],m111,h[13],m79);    ADDH H35 (k[11],m112,h[14],m80);    ADDF F32 (k[12],m113,h[15],x55,m81);        ADDH H36 (k[13],m114,h[16],m82);    ADDH H37 (k[14],m115,h[17],m83);    ADDH H38 (k[15],m116,h[18],m84);    ADDH H39 (k[16],m117,h[19],m85);    ADDH H40 (k[17],m118,h[20],m86);    ADDH H41 (k[18],m119,h[21],m87);    ADDH H42 (k[19],m120,h[22],m88);    ADDH H43 (k[20],m121,h[23],m89);    ADDH H44 (k[21],m122,h[24],m90);    ADDH H45 (k[22],m123,h[25],m91);    ADDH H46 (k[23],m124,h[26],m92);    ADDH H47 (k[24],m125,h[27],m93);    ADDH H48 (k[25],m126,h[28],m94);    ADDH H49 (k[26],m127,h[29],m95);    ADDH H50 (k[27],m128,h[30],m96);    ADDH H51 (k[28],m129,h[31],m97);    ADDH H52 (k[29],m130,h[32],m98);    ADDH H53 (k[30],m131,h[33],m99);    assign mul_1[35:0]={k[30:0],h[2:0],P0[1],P0[0]};    assign mul_2[35:0]={m130,m129,m128,m127,m126,m125,m124,m123,m122,m121,m120,m119,m118,m117,m116,m115,m114,m113,m112,m111,m110,m109,m108,m107,m106,m105,m104,m103,m102,m101,1'b0,m68,m67,2'b00,Q[0]};        ADD36_2 T0 (mul,mul_1,mul_2); endmodule module booth_top(P0,P1,P2,P3,P4,P5,P6,P7,P8,Q,A,B);    input [17:0] A,B;    output [21:0]P0;    output [20:0]P1,P2,P3,P4,P5,P6,P7;    output [19:0]P8;    output [8:0] Q;    wire [2:0] s;    assign s[2:0]={A[1:0],1'b0};    booth2 b0 (P0[18:0],Q[0],s[2:0],B[17:0]);    booth2 b1 (P1[18:0],Q[1],A[3:1],B[17:0]);    booth2 b2 (P2[18:0],Q[2],A[5:3],B[17:0]);    booth2 b3 (P3[18:0],Q[3],A[7:5],B[17:0]);    booth2 b4 (P4[18:0],Q[4],A[9:7],B[17:0]);    booth2 b5 (P5[18:0],Q[5],A[11:9],B[17:0]);    booth2 b6 (P6[18:0],Q[6],A[13:11],B[17:0]);    booth2 b7 (P7[18:0],Q[7],A[15:13],B[17:0]);    booth2 b8 (P8[18:0],Q[8],A[17:15],B[17:0]);    assign P0[21:19]={~P0[18],P0[18],P0[18]};    assign P1[20:19]={1'b1,~P1[18]};    assign P2[20:19]={1'b1,~P2[18]};    assign P3[20:19]={1'b1,~P3[18]};    assign P4[20:19]={1'b1,~P4[18]};    assign P5[20:19]={1'b1,~P5[18]};    assign P6[20:19]={1'b1,~P6[18]};    assign P7[20:19]={1'b1,~P7[18]};    assign P8[19]=~P8[18];endmodule    module booth2(P,Q,A,B);input [2:0] A;input [17:0] B;output [18:0] P;output Q;reg [18:0] P;reg Q;reg [18:0] t;always @(A or B)begin    case(A[2:0])        3'b000:        begin         P[18:0]=0;        Q=1'b0;        end        3'b001:        begin         P[18:0]={B[17],B[17:0]};        Q=1'b0;        end        3'b010:         begin        P[18:0]={B[17],B[17:0]};        Q=1'b0;        end        3'b011:         begin        P[18:0]={B[17:0],1'b0};        Q=1'b0;        end        3'b100:         begin            t[18:0]={B[17:0],1'b0};            P[18:0]=~t[18:0];            Q=1'b1;        end        3'b101:        begin            P[17:0]=~B[17:0];            P[18]=P[17];            Q=1'b1;        end        3'b110:        begin            P[17:0]=~B[17:0];            P[18]=P[17];            Q=1'b1;        end        3'b111:         begin        P[18:0]=0;        Q=1'b0;        endendcaseendendmodulemodule ADD36_2(sum,A,B);    output [35:0] sum;    input [35:0] A,B;    reg [35:0] c,c1;    reg c2;    reg [35:0] g,p,g1,p1;    reg [35:0] sum0,sum1,sum;    always @(A or B)    begin    g[0]=A[0]&B[0];    p[0]=A[0]^B[0];    sum0[0]=p[0];    c[0]=1'b0;        g[1]=A[1]&B[1];    p[1]=A[1]^B[1];    c[1]=g[0];    sum0[1]=p[1]^c[1];            g[2]=A[2]&B[2];    p[2]=A[2]^B[2];    c[2]=(p[1]&g[0])|g[1];    sum0[2]=p[2]^c[2];            g[3]=A[3]&B[3];    p[3]=A[3]^B[3];    c[3]=(p[2]&((p[1]&g[0])|g[1]))|g[2];    sum0[3]=p[3]^c[3];            g1[0]=A[0]&B[0];    p1[0]=A[0]^B[0];    sum1[0]=~p1[0];    c1[0]=1'b1;    g1[1]=A[1]&B[1];    p1[1]=A[1]^B[1];    c1[1]=p1[0]|g1[0];    sum1[1]=p1[1]^c1[1];            g1[2]=A[2]&B[2];    p1[2]=A[2]^B[2];    c1[2]=(p1[1]&(p1[0]|g1[0]))|g1[1];    sum1[2]=p1[2]^c1[2];            g1[3]=A[3]&B[3];    p1[3]=A[3]^B[3];    c1[3]=(p1[2]&((p1[1]&(p1[0]|g1[0]))|g1[1]))|g1[2];    sum1[3]=p1[3]^c1[3];        ////////////////////////////////    g[4]=A[4]&B[4];    p[4]=A[4]^B[4];    sum0[4]=p[4];    c[4]=1'b0;    g[5]=A[5]&B[5];    p[5]=A[5]^B[5];    c[5]=g[4];    sum0[5]=p[5]^c[5];            g[6]=A[6]&B[6];    p[6]=A[6]^B[6];    c[6]=(p[5]&g[4])|g[5];    sum0[6]=p[6]^c[6];            g[7]=A[7]&B[7];    p[7]=A[7]^B[7];    c[7]=(p[6]&((p[5]&g[4])|g[5]))|g[6];    sum0[7]=p[7]^c[7];            g1[4]=A[4]&B[4];    p1[4]=A[4]^B[4];    sum1[4]=~p1[4];    c1[4]=1'b1;    g1[5]=A[5]&B[5];    p1[5]=A[5]^B[5];    c1[5]=p1[4]|g1[4];     sum1[5]=p1[5]^c1[5];            g1[6]=A[6]&B[6];    p1[6]=A[6]^B[6];    c1[6]=(p1[5]&(p1[4]|g1[4]))|g1[5];    sum1[6]=p1[6]^c1[6];            g1[7]=A[7]&B[7];    p1[7]=A[7]^B[7];    c1[7]=(p1[6]&((p1[5]&(p1[4]|g1[4]))|g1[5]))|g1[6];    sum1[7]=p1[7]^c1[7];        //////////////////////////////////

⌨️ 快捷键说明

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