算术逻辑单元ALU的设计班级:计科1201班学号:1208030113姓名:何志强设计日期:2014-11-20西安科技大学计算机科学与技术学院1.实验题目算数逻辑单元ALU的设计2.实验目的设计一个简单的算数逻辑单元,并用Verilog实现,得到仿真波形。3.实验设备安装有modelsim和Quartus2的PC机一台4.实验原理算术逻辑单元ALU集成了各种算术运算和逻辑运算部件的功能,包括加、减、乘、除等数值运算、逻辑运算、移位运算等。把这些功能集成在一个逻辑部件ALU之中,使得ALU具有算术运算和逻辑运算功能。这种设计方法可以使得功能比较紧凑,简化对逻辑运算部件和算术运算部件的使用。同时还能最大限度的复用某些逻辑部件,从而减少逻辑电路的使用。设计ALU首先要对各种算数逻辑运算进行编码。表1为本文设计的处理器实用的ALU功能编码表。表1ALU功能编码表指令类型功能编号00000AANDB000001AORB100010ANORB200011AXORB300100A减B,有符号400101A加B,有符号500110A减B,无符号600111A加B,无符号7比较指令01000AB,无符号比较801001AB,有符号比较9加载指令01010把B的低16位加载到B的高16位上,低16位置零1001011B逻辑右移A位1101100B逻辑左移A位1201101B算术右移A位1301110对A首1计数1401111对A首0计数1510000A乘B,无符号乘1610001A乘B,有符号乘1710010(HI,LO)-(HI,LO)+(rs*rt)UNSIGNED1810011(HI,LO)-(HI,LO)+(rs*rt)SIGNED1910100(HI,LO)-(HI,LO)-(rs*rt)UNSIGNED2010101(HI,LO)-(HI,LO)-(rs*rt)SIGNED2110110(HI余数,LO商)-rs/rt,无符号除2210111(HI余数,LO商)-rs/rt,有符号除23乘法指令除法指令乘加减指令CONTROL[4..0]逻辑指令加减运算指令移位指令首0、1计数指令算术逻辑单元ALU的实现算术逻辑单元ALU的内部详细设计算术逻辑单元ALU的Verilog的实现moduleALU181A(S,A,B,F,M,CN,CO,FZ);input[3:0]S;input[7:0]A,B;inputM,CN;output[7:0]F;outputCO,FZ;wire[7:0]F;wireCO;wire[8:0]A9,B9;regFZ;reg[8:0]F9;assignA9={1'b0,A};assignB9={1'b0,B};always@(MorCNorA9orB9orS)begincase(S)4'b0000:if(M==0)F9=A9+CN;elseF9=~A9;4'b0001:if(M==0)F9=(A9|B9)+CN;elseF9=(~A9)&B9;4'b0010:if(M==0)F9=(A9|(~B9))+CN;elseF9=~A9;4'b0011:if(M==0)F9=9'b000000000-CN;elseF9=9'b000000000;4'b0100:if(M==0)F9=A9+(A9&~B9)+CN;elseF9=~(A9&B9);4'b0101:if(M==0)F9=((A9+B9)+(A9&~B9)+CN);elseF9=~B9;4'b0110:if(M==0)F9=A9-B9-CN;elseF9=A9^B9;4'b0111:if(M==0)F9=A9+(~B9)-CN;elseF9=A9&(~B9);4'b1000:if(M==0)F9=A9+(A9&B9)+CN;elseF9=(~A9)+B9;4'b1001:if(M==0)F9=A9+B9+CN;elseF9=~(A9^B9);4'b1010:if(M==0)F9=A9+(~B9)+(A9&B9)+CN;elseF9=B9;4'b1011:if(M==0)F9=(A9&B9)+CN;elseF9=(A9&B9);4'b1100:if(M==0)F9=A9+A9+CN;elseF9=9'b000000001;4'b1101:if(M==0)F9=(A9+B9)+A9+CN;elseF9=A9+(~B9);4'b1110:if(M==0)F9=A9+(~B9)+A9+CN;elseF9=A9+B9;4'b1111:if(M==0)F9=A9-CN;elseF9=A9;default:F9=9'b000000000;endcaseendassignF=F9[7:0];assignCO=F9[8];endmodule//////////////////////////`includeALU181.vmoduleTestA;reg[7:0]a,b;reg[3:0]s;regm,cn;wire[7:0]f;wireco,fz;initialbegina=8'b00000001;b=8'b00000001;s=4'b1001;m=0;cn=0;#2000a=8'b10001001;b=8'b00000001;s=4'b1001;m=0;cn=0;#2000a=8'b00010001;b=8'b01001011;s=4'b1001;m=0;cn=0;#2000a=8'b01001001;b=8'b01001001;s=4'b1001;m=0;cn=0;#2000a=8'b11000001;b=8'b10101001;s=4'b1001;m=0;cn=0;#2000a=8'b01010001;b=8'b01000011;s=4'b1001;m=0;cn=0;#2000a=8'b00001101;b=8'b01001001;s=4'b1001;m=0;cn=0;endALU181Aalu181a1(.S(s),.A(a),.B(b),.F(f),.M(m),.CN(cn),.CO(co),.FZ(fz));endmodule6.实验结果分析实验结果:在这个实验中,我以74181ALU为设计实例,用verilog实现,在测试时使用的变量值分别为:a=8'b00001101;b=8'b01001001;s=4'b1001;m=0;cn=0;a,b的值采用了多组进行测试,基本实现了74181ALU的所有功能。