📄 multiply2.v
字号:
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 + -