ALU的设计与实现Word格式文档下载.doc
《ALU的设计与实现Word格式文档下载.doc》由会员分享,可在线阅读,更多相关《ALU的设计与实现Word格式文档下载.doc(5页珍藏版)》请在冰豆网上搜索。
3、用Verilog语言采用结构描述的方法完成74181的逻辑设计。
4、学习用宏模块的方法定制并调用ALU。
三、实验仪器及设备:
PC机+QuartusⅡ9.0+DE2-70
四、实验步骤:
1.打开Quartus软件,新建工程,并新建一个verilog文件。
2.编写verilog程序。
首先,查找74181的功能表,用always模块和case语句实现其功能。
然后,设计ALU的过程中,利用p函数和g函数实现超前进位功能。
3.附程序代码如下:
moduleALU_74181
(
input[3:
0]a,
0]b,
0]s,//选择信号
inputm,//m=1执行逻辑运算,反之执行算术运算
inputcn,//低位的进位或者是高位的借位
output[3:
0]f,
outputaeqb,//输出,当a=b时输出1,当a!
=b时,输出0
outputc4,//对应74181的Cn+4
outputp,//p函数
outputg//g函数
);
reg[3:
0]result;
//定义中间变量result存放结果
wire[4:
0]temp;
//定义中间变量temp存放选择变量s和m
wirep0,p1,p2,p3;
//进位产生信号
wireg0,g1,g2,g3;
//进位传递信号
assigntemp={s,m};
always@(temporaorb)
begin
case(temp)//case语句实现74181的32种功能
5'
b00000:
result=a;
b00001:
result=!
a;
b00010:
result=a|b;
b00011:
result=(!
a|b);
b00100:
result=(a|!
b);
b00101:
a&
b;
b00110:
result=4'
b1111;
//补码运算,-1的补码是1111
b00111:
result=0;
b01000:
result=a+(a&
!
b01001:
(a&
b01010:
b01011:
b)+(a&
b01100:
result=a^b;
b01101:
result=a-b+4'
b01110:
result=a&
(!
(b+4'
b1111));
b01111:
b10000:
result=a+a&
b10001:
a)|b;
b10010:
result=a+b;
b10011:
(a^b);
b10100:
b)+a&
b10101:
result=b;
b10110:
b+4'
b10111:
b11000:
result=a+a;
b11001:
result=1;
b11010:
result=(a|b)+a;
b11011:
b11100:
b)+a;
b11101:
result=(a|b);
b11110:
result=a+4'
b11111:
default:
result=4'
b0000;
//默认情况,给result赋值为0
endcase
end
assignf=result;
//将中间变量result的值赋给f
//片与片之间的超前进位
assigng0=a[0]&
b[0];
//g函数是a与b的与
assigng1=a[1]&
b[1];
assigng2=a[2]&
assigng3=a[3]&
assignp0=a[0]^b[0];
//p函数是a和b的异或
assignp1=a[1]^b[1];
assignp2=a[2]^b[2];
assignp3=a[3]^b[3];
assignc4=g3|(g2&
p3)|(g1&
p2&
p3)|(g0&
p0&
p1&
p2)|(cn&
p3);
//g3+p3g2+p3p2g1+p3p2p1g0+p3p2p1p0cn
assignp=p0&
p3;
assigng=g3+g2&
p3+g1&
p3+g0&
assignaeqb=(a==b)?
1'
b1:
b0;
endmodule
4.编译并仿真得出结果。
仿真结果如下图:
五、实验思考。
1.ALU的功能是什么,它在整机系统中的地位如何?
答:
ALU是多功能算数逻辑运算单元,不仅能进行多种算术运算和逻辑运算,如与、或、非、异或循环、移位、求补、清零、加、减、乘、除等,而且具有先行进位逻辑,从而能实现高速运算。
ALU是CPU的核心部分,也是CPU的重要组成部分。
一台计算机最主要的功能就是指向运算的功能,而ALU恰恰具有这样的功能,可以说多功能运算时据算计的灵魂,没有运算,计算机将不会具有如此强大的功能。
2.ALU是典型的组合逻辑,为什么在P157的实现中要加入时钟信号,其目的是什么?
处于整机同步的需要,这样可以保证ALU产生的结果能够适时的送到总线,以便数据进行正确的读写。
3.74181ALU内部加法运算用的是超前进位算法吗?
是。
74181的设计在内部的实现是通过超前进位,而后又利用了p函数和g函数实现了片与片之间的超前进位功能。
4位之间采用先行进位公式,每一位的进位公式可递推如下:
G=AandBP=AxorB
c1 =g0+p0c0
c2 =g1+p1c1
=g1+p1(g0+p0c0)
=g1+p1g0+p1p0c0
c3 =g2+p2c2
=g2+p2(g1+p1g0+p1p0c0)
=g2+p2g1+p2p1g0+p2p1p0c0
c4 =g3+p3c3=g3+p3(g2+p2g1+p2p1g0+p2p1p0c0)
=g3+p3g2+p3p2g1+p3p2p1g0+p3p2p1p0c0
其中G称为进位发生输出,P称为进位传送输出。
这样,对一片ALU来说,可有三个进位输出。
C4是本片(组)的最后进位输出。
逻辑表达式表明,这是一个先行进位逻辑,可以实现高速运算。