74181ALU设计说明.docx
《74181ALU设计说明.docx》由会员分享,可在线阅读,更多相关《74181ALU设计说明.docx(7页珍藏版)》请在冰豆网上搜索。
![74181ALU设计说明.docx](https://file1.bdocx.com/fileroot1/2023-8/3/8b9cd244-78df-44c0-9035-2eceb9214f5c/8b9cd244-78df-44c0-9035-2eceb9214f5c1.gif)
74181ALU设计说明
算术逻辑单元ALU的设计
班级:
计科1201班
学号:
1208030113
姓名:
何志强
设计日期:
2014-11-20
西安科技大学计算机科学与技术学院
1.实验题目算数逻辑单元ALU的设计
2.实验目的设计一个简单的算数逻辑单元,并用Verilog实现,得到仿真波形。
3.实验设备
安装有modelsim和Quartus2的PC机一台
4.实验原理
算术逻辑单元ALU集成了各种算术运算和逻辑运算部件的功能,包括加、减、乘、除等数值运算、逻辑运算、移位运算等。
把这些功能集成在一个逻辑部件ALU之中,使得ALU具有算术运算和逻辑运算功能。
这种设计方法可以使得功能比较紧凑,简化对逻辑运算部件和算术运算部件的使用。
同时还能最大限度的复用某些逻辑部件,从而减少逻辑电路的使用。
3.1
设计ALU首先要对各种算数逻辑运算进行编码。
表1为本文设计的处理器实用的ALU功能编码表。
表1ALU功能编码表
算术逻辑单元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)begin
case(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;
endcase
end
assignF=F9[7:
0];
assignCO=F9[8];
endmodule
//////////////////////////
`include"ALU181.v"
moduleTestA;
reg[7:
0]a,b;
reg[3:
0]s;
regm,cn;
wire[7:
0]f;
wireco,fz;
initial
begin
a=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;
end
ALU181Aalu181a1(.S(s),.A(a),.B(b),.F(f),.M(m),.CN(cn),.CO(co),.FZ(fz));
endmodule
6.实验结果分析
实验结果:
在这个实验中,我以74181ALU为设计实例,用verilog实现,在测试时使用的变量值分别为:
a=8'b00001101;b=8'b01001001;s=4'b1001;m=0;cn=0;a,b的值采用了多组进行测试,基本实现了74181ALU的所有功能。