📄 mult32.v
字号:
module mult32(ina,inb,out1,overflow,zero); //32位快速乘法器 input [31:0] ina,inb;//输入,两个32位的数 output [31:0] out1;//输出,一个32位的数 output overflow,zero;//标志位overflow(溢出),zero(是否为0) wire [63:0] out;//临时变量,用于记录64位的积 wire [31:0] temp[32:1];//32个32-bit的临时变量用以存储上一个加法器的值并扩展后送到下一个输入 wire [31:0] curcout,curout[31:0]; //curcout为32个ALU的最高位进位;curout是32个ALU的输出 wire curoverflow,curzero; //调用的ALU模块的溢出和ZERO assign temp[1][30:0]=curout[0][31:1]; //把第一个ALU输出的高31位放到temp中 assign temp[1][31]=curcout[0]; //把第一个ALU的最高位进位放到temp的最高位 assign temp[2][30:0]=curout[1][31:1];//同上,以下均是把上一个ALU的输出的高31位放到temp的低31位,最高位上一个ALU结果的最高位进位 assign temp[2][31]=curcout[1]; assign temp[3][30:0]=curout[2][31:1]; assign temp[3][31]=curcout[2]; assign temp[4][30:0]=curout[3][31:1]; assign temp[4][31]=curcout[3]; assign temp[5][30:0]=curout[4][31:1]; assign temp[5][31]=curcout[4]; assign temp[6][30:0]=curout[5][31:1]; assign temp[6][31]=curcout[5]; assign temp[7][30:0]=curout[6][31:1]; assign temp[7][31]=curcout[6]; assign temp[8][30:0]=curout[7][31:1]; assign temp[8][31]=curcout[7]; assign temp[9][30:0]=curout[8][31:1]; assign temp[9][31]=curcout[8]; assign temp[10][30:0]=curout[9][31:1]; assign temp[10][31]=curcout[9]; assign temp[11][30:0]=curout[10][31:1]; assign temp[11][31]=curcout[10]; assign temp[12][30:0]=curout[11][31:1]; assign temp[12][31]=curcout[11]; assign temp[13][30:0]=curout[12][31:1]; assign temp[13][31]=curcout[12]; assign temp[14][30:0]=curout[13][31:1]; assign temp[14][31]=curcout[13]; assign temp[15][30:0]=curout[14][31:1]; assign temp[15][31]=curcout[14]; assign temp[16][30:0]=curout[15][31:1]; assign temp[16][31]=curcout[15]; assign temp[17][30:0]=curout[16][31:1]; assign temp[17][31]=curcout[16]; assign temp[18][30:0]=curout[17][31:1]; assign temp[18][31]=curcout[17]; assign temp[19][30:0]=curout[18][31:1]; assign temp[19][31]=curcout[18]; assign temp[20][30:0]=curout[19][31:1]; assign temp[20][31]=curcout[19]; assign temp[21][30:0]=curout[20][31:1]; assign temp[21][31]=curcout[20]; assign temp[22][30:0]=curout[21][31:1]; assign temp[22][31]=curcout[21]; assign temp[23][30:0]=curout[22][31:1]; assign temp[23][31]=curcout[22]; assign temp[24][30:0]=curout[23][31:1]; assign temp[24][31]=curcout[23]; assign temp[25][30:0]=curout[24][31:1]; assign temp[25][31]=curcout[24]; assign temp[26][30:0]=curout[25][31:1]; assign temp[26][31]=curcout[25]; assign temp[27][30:0]=curout[26][31:1]; assign temp[27][31]=curcout[26]; assign temp[28][30:0]=curout[27][31:1]; assign temp[28][31]=curcout[27]; assign temp[29][30:0]=curout[28][31:1]; assign temp[29][31]=curcout[28]; assign temp[30][30:0]=curout[29][31:1]; assign temp[30][31]=curcout[29]; assign temp[31][30:0]=curout[30][31:1]; assign temp[31][31]=curcout[30]; assign temp[32][30:0]=curout[31][31:1]; assign temp[32][31]=curcout[31]; assign out[0]=curout[0][0]; //每个ALU的最低位送给每个积位 assign out[1]=curout[1][0]; assign out[2]=curout[2][0]; assign out[3]=curout[3][0]; assign out[4]=curout[4][0]; assign out[5]=curout[5][0]; assign out[6]=curout[6][0]; assign out[7]=curout[7][0]; assign out[8]=curout[8][0]; assign out[9]=curout[9][0]; assign out[10]=curout[10][0]; assign out[11]=curout[11][0]; assign out[12]=curout[12][0]; assign out[13]=curout[13][0]; assign out[14]=curout[14][0]; assign out[15]=curout[15][0]; assign out[16]=curout[16][0]; assign out[17]=curout[17][0]; assign out[18]=curout[18][0]; assign out[19]=curout[19][0]; assign out[20]=curout[20][0]; assign out[21]=curout[21][0]; assign out[22]=curout[22][0]; assign out[23]=curout[23][0]; assign out[24]=curout[24][0]; assign out[25]=curout[25][0]; assign out[26]=curout[26][0]; assign out[27]=curout[27][0]; assign out[28]=curout[28][0]; assign out[29]=curout[29][0]; assign out[30]=curout[30][0]; assign out[31]=curout[31][0]; assign out[63:32]=temp[32]; //最后一个ALU的输出的高32位扩展后送到积的高32位 assign overflow=(out[63:32]==32'b0)?0:1;//只要高32位不为0就确定为溢出 assign zero=(out[31:0]==0); //判断结果是否为0 assign out1=out[31:0];//得到最终的32位积 alu32 uu1((inb[0])?ina:32'b0,32'b0,'b0010,curout[0],curcout[0],curoverflow,curzero);//调用32次ALU进行加法运算 alu32 uu2((inb[1])?ina:32'b0,temp[1],'b0010,curout[1],curcout[1],curoverflow,curzero); alu32 uu3((inb[2])?ina:32'b0,temp[2],'b0010,curout[2],curcout[2],curoverflow,curzero); alu32 uu4((inb[3])?ina:32'b0,temp[3],'b0010,curout[3],curcout[3],curoverflow,curzero); alu32 uu5((inb[4])?ina:32'b0,temp[4],'b0010,curout[4],curcout[4],curoverflow,curzero); alu32 uu6((inb[5])?ina:32'b0,temp[5],'b0010,curout[5],curcout[5],curoverflow,curzero); alu32 uu7((inb[6])?ina:32'b0,temp[6],'b0010,curout[6],curcout[6],curoverflow,curzero); alu32 uu8((inb[7])?ina:32'b0,temp[7],'b0010,curout[7],curcout[7],curoverflow,curzero); alu32 uu9((inb[8])?ina:32'b0,temp[8],'b0010,curout[8],curcout[8],curoverflow,curzero); alu32 uu10((inb[9])?ina:32'b0,temp[9],'b0010,curout[9],curcout[9],curoverflow,curzero); alu32 uu11((inb[10])?ina:32'b0,temp[10],'b0010,curout[10],curcout[10],curoverflow,curzero); alu32 uu12((inb[11])?ina:32'b0,temp[11],'b0010,curout[11],curcout[11],curoverflow,curzero); alu32 uu13((inb[12])?ina:32'b0,temp[12],'b0010,curout[12],curcout[12],curoverflow,curzero); alu32 uu14((inb[13])?ina:32'b0,temp[13],'b0010,curout[13],curcout[13],curoverflow,curzero); alu32 uu15((inb[14])?ina:32'b0,temp[14],'b0010,curout[14],curcout[14],curoverflow,curzero); alu32 uu16((inb[15])?ina:32'b0,temp[15],'b0010,curout[15],curcout[15],curoverflow,curzero); alu32 uu17((inb[16])?ina:32'b0,temp[16],'b0010,curout[16],curcout[16],curoverflow,curzero); alu32 uu18((inb[17])?ina:32'b0,temp[17],'b0010,curout[17],curcout[17],curoverflow,curzero); alu32 uu19((inb[18])?ina:32'b0,temp[18],'b0010,curout[18],curcout[18],curoverflow,curzero); alu32 uu20((inb[19])?ina:32'b0,temp[19],'b0010,curout[19],curcout[19],curoverflow,curzero); alu32 uu21((inb[20])?ina:32'b0,temp[20],'b0010,curout[20],curcout[20],curoverflow,curzero); alu32 uu22((inb[21])?ina:32'b0,temp[21],'b0010,curout[21],curcout[21],curoverflow,curzero); alu32 uu23((inb[22])?ina:32'b0,temp[22],'b0010,curout[22],curcout[22],curoverflow,curzero); alu32 uu24((inb[23])?ina:32'b0,temp[23],'b0010,curout[23],curcout[23],curoverflow,curzero); alu32 uu25((inb[24])?ina:32'b0,temp[24],'b0010,curout[24],curcout[24],curoverflow,curzero); alu32 uu26((inb[25])?ina:32'b0,temp[25],'b0010,curout[25],curcout[25],curoverflow,curzero); alu32 uu27((inb[26])?ina:32'b0,temp[26],'b0010,curout[26],curcout[26],curoverflow,curzero); alu32 uu28((inb[27])?ina:32'b0,temp[27],'b0010,curout[27],curcout[27],curoverflow,curzero); alu32 uu29((inb[28])?ina:32'b0,temp[28],'b0010,curout[28],curcout[28],curoverflow,curzero); alu32 uu30((inb[29])?ina:32'b0,temp[29],'b0010,curout[29],curcout[29],curoverflow,curzero); alu32 uu31((inb[30])?ina:32'b0,temp[30],'b0010,curout[30],curcout[30],curoverflow,curzero); alu32 uu32((inb[31])?ina:32'b0,temp[31],'b0010,curout[31],curcout[31],curoverflow,curzero); endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -