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

📄 divider32.v

📁 组成原理大作业--基于MIPS的运算器设计
💻 V
字号:
module divider32(a,b,out1,r1,zero); //32位阵列除法器 input [31:0] a,b;  //两个32位的输入 output [31:0] out1,r1;//out为商,r是余数 output zero; //结果是否为0 wire [31:0] out,r,temp[32:1];  //32个32-bit的临时变量用以存储上一个ALU的值并扩展后送到下一个输入 wire [31:0] curcout,curout1,curout[31:0]; wire curoverflow,curzero,curcout1;//调用的ALU模块的溢出和ZERO assign temp[1][31:1]=curout1[30:0]; //把第一个ALU输出的低31位放到temp中高31位 assign temp[1][0]=a[31];//把操作数最高位放到temp的最低位 assign temp[2][31:1]=curout[0][30:0];//同上,以下均是把上一个ALU的输出的低31位放到temp的高31位,temp的最低位为操作数 assign temp[2][0]=a[30];      assign temp[3][31:1]=curout[1][30:0]; assign temp[3][0]=a[29];  assign temp[4][31:1]=curout[2][30:0]; assign temp[4][0]=a[28]; assign temp[5][31:1]=curout[3][30:0]; assign temp[5][0]=a[27]; assign temp[6][31:1]=curout[4][30:0]; assign temp[6][0]=a[26];  assign temp[7][31:1]=curout[5][30:0]; assign temp[7][0]=a[25]; assign temp[8][31:1]=curout[6][30:0]; assign temp[8][0]=a[24]; assign temp[9][31:1]=curout[7][30:0]; assign temp[9][0]=a[23];  assign temp[10][31:1]=curout[8][30:0]; assign temp[10][0]=a[22]; assign temp[11][31:1]=curout[9][30:0]; assign temp[11][0]=a[21]; assign temp[12][31:1]=curout[10][30:0]; assign temp[12][0]=a[20];  assign temp[13][31:1]=curout[11][30:0]; assign temp[13][0]=a[19]; assign temp[14][31:1]=curout[12][30:0]; assign temp[14][0]=a[18]; assign temp[15][31:1]=curout[13][30:0]; assign temp[15][0]=a[17];  assign temp[16][31:1]=curout[14][30:0]; assign temp[16][0]=a[16]; assign temp[17][31:1]=curout[15][30:0]; assign temp[17][0]=a[15]; assign temp[18][31:1]=curout[16][30:0]; assign temp[18][0]=a[14];  assign temp[19][31:1]=curout[17][30:0]; assign temp[19][0]=a[13]; assign temp[20][31:1]=curout[18][30:0]; assign temp[20][0]=a[12]; assign temp[21][31:1]=curout[19][30:0]; assign temp[21][0]=a[11];  assign temp[22][31:1]=curout[20][30:0]; assign temp[22][0]=a[10]; assign temp[23][31:1]=curout[21][30:0]; assign temp[23][0]=a[9]; assign temp[24][31:1]=curout[22][30:0]; assign temp[24][0]=a[8];  assign temp[25][31:1]=curout[23][30:0]; assign temp[25][0]=a[7]; assign temp[26][31:1]=curout[24][30:0]; assign temp[26][0]=a[6]; assign temp[27][31:1]=curout[25][30:0]; assign temp[27][0]=a[5];  assign temp[28][31:1]=curout[26][30:0]; assign temp[28][0]=a[4]; assign temp[29][31:1]=curout[27][30:0]; assign temp[29][0]=a[3]; assign temp[30][31:1]=curout[28][30:0]; assign temp[30][0]=a[2];  assign temp[31][31:1]=curout[29][30:0]; assign temp[31][0]=a[1]; assign temp[32][31:1]=curout[30][30:0]; assign temp[32][0]=a[31]; assign out[0]=curcout[31];  //每个ALU的进位给每个积位 assign out[1]=curcout[30]; assign out[2]=curcout[29]; assign out[3]=curcout[28]; assign out[4]=curcout[27]; assign out[5]=curcout[26]; assign out[6]=curcout[25]; assign out[7]=curcout[24]; assign out[8]=curcout[23]; assign out[9]=curcout[22]; assign out[10]=curcout[21]; assign out[11]=curcout[20]; assign out[12]=curcout[19]; assign out[13]=curcout[18]; assign out[14]=curcout[17]; assign out[15]=curcout[16]; assign out[16]=curcout[15]; assign out[17]=curcout[14]; assign out[18]=curcout[13]; assign out[19]=curcout[12]; assign out[20]=curcout[11]; assign out[21]=curcout[10]; assign out[22]=curcout[9]; assign out[23]=curcout[8]; assign out[24]=curcout[7]; assign out[25]=curcout[6]; assign out[26]=curcout[5]; assign out[27]=curcout[4]; assign out[28]=curcout[3]; assign out[29]=curcout[2]; assign out[30]=curcout[1]; assign out[31]=curcout[0]; assign r=curout[31]; //最后一个ALU的输出即余数 assign out1=b[31]?((b<a)?1:0):out; assign zero=(out1=='h00000000)?1:0; assign r1=b[31]?((b<a)?(a-b):a):r; alu32 u0(0,b,'b0110,curout1,curcout1,overflow,curzero);//??33?ALU alu32 u1(temp[1],b,curcout1?'b0110:'b0010,curout[0],curcout[0],overflow,curzero); alu32 u2(temp[2],b,curcout[0]?'b0110:'b0010,curout[1],curcout[1],overflow,curzero); alu32 u3(temp[3],b,curcout[1]?'b0110:'b0010,curout[2],curcout[2],overflow,curzero); alu32 u4(temp[4],b,curcout[2]?'b0110:'b0010,curout[3],curcout[3],overflow,curzero); alu32 u5(temp[5],b,curcout[3]?'b0110:'b0010,curout[4],curcout[4],overflow,curzero); alu32 u6(temp[6],b,curcout[4]?'b0110:'b0010,curout[5],curcout[5],overflow,curzero); alu32 u7(temp[7],b,curcout[5]?'b0110:'b0010,curout[6],curcout[6],overflow,curzero); alu32 u8(temp[8],b,curcout[6]?'b0110:'b0010,curout[7],curcout[7],overflow,curzero); alu32 u9(temp[9],b,curcout[7]?'b0110:'b0010,curout[8],curcout[8],overflow,curzero); alu32 u10(temp[10],b,curcout[8]?'b0110:'b0010,curout[9],curcout[9],overflow,curzero); alu32 u11(temp[11],b,curcout[9]?'b0110:'b0010,curout[10],curcout[10],overflow,curzero); alu32 u12(temp[12],b,curcout[10]?'b0110:'b0010,curout[11],curcout[11],overflow,curzero); alu32 u13(temp[13],b,curcout[11]?'b0110:'b0010,curout[12],curcout[12],overflow,curzero); alu32 u14(temp[14],b,curcout[12]?'b0110:'b0010,curout[13],curcout[13],overflow,curzero); alu32 u15(temp[15],b,curcout[13]?'b0110:'b0010,curout[14],curcout[14],overflow,curzero); alu32 u16(temp[16],b,curcout[14]?'b0110:'b0010,curout[15],curcout[15],overflow,curzero); alu32 u17(temp[17],b,curcout[15]?'b0110:'b0010,curout[16],curcout[16],overflow,curzero); alu32 u18(temp[18],b,curcout[16]?'b0110:'b0010,curout[17],curcout[17],overflow,curzero); alu32 u19(temp[19],b,curcout[17]?'b0110:'b0010,curout[18],curcout[18],overflow,curzero); alu32 u20(temp[20],b,curcout[18]?'b0110:'b0010,curout[19],curcout[19],overflow,curzero); alu32 u21(temp[21],b,curcout[19]?'b0110:'b0010,curout[20],curcout[20],overflow,curzero); alu32 u22(temp[22],b,curcout[20]?'b0110:'b0010,curout[21],curcout[21],overflow,curzero); alu32 u23(temp[23],b,curcout[21]?'b0110:'b0010,curout[22],curcout[22],overflow,curzero); alu32 u24(temp[24],b,curcout[22]?'b0110:'b0010,curout[23],curcout[23],overflow,curzero); alu32 u25(temp[25],b,curcout[23]?'b0110:'b0010,curout[24],curcout[24],overflow,curzero); alu32 u26(temp[26],b,curcout[24]?'b0110:'b0010,curout[25],curcout[25],overflow,curzero); alu32 u27(temp[27],b,curcout[25]?'b0110:'b0010,curout[26],curcout[26],overflow,curzero); alu32 u28(temp[28],b,curcout[26]?'b0110:'b0010,curout[27],curcout[27],overflow,curzero); alu32 u29(temp[29],b,curcout[27]?'b0110:'b0010,curout[28],curcout[28],overflow,curzero); alu32 u30(temp[30],b,curcout[28]?'b0110:'b0010,curout[29],curcout[29],overflow,curzero); alu32 u31(temp[31],b,curcout[29]?'b0110:'b0010,curout[30],curcout[30],overflow,curzero); alu32 u32(temp[32],b,curcout[30]?'b0110:'b0010,curout[31],curcout[31],overflow,curzero);endmodule

⌨️ 快捷键说明

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