资源描述
计算机组成原理实验
实验四 ALU得设计与实现
专业班级:计算机科学与技术
学号: 0936008 姓名:冯帆
学号: 0936036 姓名:张琪
实验地点: 理工楼901
实验四 ALU得设计与实现
一、实验目得
1、理解ALU得功能与其在处理器中得地位。
2、掌握ALU得结构化(分模块、分层次)得设计方法。
3、掌握ALU得Verilog语言描述方法。
二、实验内容
1、学习ALU得设计方法。
2、用Verilog语言采用行为描述得方法完成74181得逻辑设计。
3、用Verilog语言采用结构描述得方法完成74181得逻辑设计。
4、学习用宏模块得方法定制并调用 ALU 。
三、实验仪器及设备:
PC机+ QuartusⅡ 9、0 + DE270
四、实验步骤:
1.打开Quartus软件,新建工程,并新建一个verilog文件。
2.编写verilog程序。首先,查找74181得功能表,用always模块与case语句实现其功能。然后,设计ALU得过程中,利用p函数与g函数实现超前进位功能。
3.附程序代码如下:
module ALU_74181
(
input [3:0] a,
input [3:0] b,
input [3:0] s, //选择信号
input m, //m=1执行逻辑运算,反之执行算术运算
input cn, //低位得进位或者就是高位得借位
output [3:0] f,
output aeqb, //输出,当a=b时输出1,当a!=b时,输出0
output c4, //对应74181得Cn+4
output p, //p函数
output g //g函数
);
reg [3:0] result; //定义中间变量result存放结果
wire [4:0]temp; //定义中间变量temp存放选择变量s与m
wire p0,p1,p2,p3; //进位产生信号
wire g0,g1,g2,g3; //进位传递信号
assign temp={s,m};
always(temp or a or b)
begin
case (temp) //case语句实现74181得 32种功能
5'b00000: result=a;
5'b00001: result=!a;
5'b00010: result=a|b;
5'b00011: result=(!a|b);
5'b00100: result=(a|!b);
5'b00101: result=!a&b;
5'b00110: result=4'b1111;//补码运算,1得补码就是1111
5'b00111: result=0;
5'b01000: result=a+(a&!b);
5'b01001: result=!(a&b);
5'b01010: result=!b;
5'b01011: result=(a|!b)+(a&!b);
5'b01100: result=a^b;
5'b01101: result=ab+4'b1111;
5'b01110: result=a&(!(b+4'b1111));
5'b01111: result=a&!b;
5'b10000: result=a+a&b;
5'b10001: result=(!a)|b;
5'b10010: result=a+b;
5'b10011: result=!(a^b);
5'b10100: result=(a|!b)+a&b;
5'b10101: result=b;
5'b10110: result=a&b+4'b1111;
5'b10111: result=a&b;
5'b11000: result=a+a;
5'b11001: result=1;
5'b11010: result=(a|b)+a;
5'b11011: result=(a|!b);
5'b11100: result=(a|!b)+a;
5'b11101: result=(a|b);
5'b11110: result=a+4'b1111;
5'b11111: result=a;
default : result = 4'b0000; //默认情况,给result赋值为0
endcase
end
assign f=result; //将中间变量result得值赋给f
//片与片之间得超前进位
assign g0=a[0]&b[0]; //g函数就是a与b得与
assign g1=a[1]&b[1];
assign g2=a[2]&b[0];
assign g3=a[3]&b[0];
assign p0=a[0]^b[0]; //p函数就是a与b得异或
assign p1=a[1]^b[1];
assign p2=a[2]^b[2];
assign p3=a[3]^b[3];
assign c4=g3|(g2&p3)|(g1&p2&p3)|(g0&p0&p1&p2)|(cn&p0&p1&p2&p3);
//g3 + p3g2 + p3p2g1 + p3p2p1g0 + p3p2p1p0cn
assign p=p0&p1&p2&p3;
assign g=g3+g2&p3+g1&p2&p3+g0&p1&p2&p3;
assign aeqb=(a==b)?1'b1:1'b0;
endmodule
4.编译并仿真得出结果。仿真结果如下图:
五、实验思考。
1. ALU得功能就是什么,它在整机系统中得地位如何?
答:ALU就是多功能算数逻辑运算单元,不仅能进行多种算术运算与逻辑运算,如与、或、非、异或循环、移位、求补、清零、加、减、乘、除等,而且具有先行进位逻辑,从而能实现高速运算。ALU就是CPU得核心部分,也就是CPU得重要组成部分。一台计算机最主要得功能就就是指向运算得功能,而ALU恰恰具有这样得功能,可以说多功能运算时据算计得灵魂,没有运算,计算机将不会具有如此强大得功能。
2. ALU就是典型得组合逻辑,为什么在P157得实现中要加入时钟信号,其目得就是什么?
答:处于整机同步得需要,这样可以保证ALU产生得结果能够适时得送到总线,以便数据进行正确得读写。
3. 74181 ALU内部加法运算用得就是超前进位算法吗?
答:就是。74181得设计在内部得实现就是通过超前进位,而后又利用了p函数与g函数实现了片与片之间得超前进位功能。4位之间采用先行进位公式,每一位得进位公式可递推如下: G = A and B P = A xor B
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就是本片(组)得最后进位输出。逻辑表达式表明,这就是一个先行进位逻辑,可以实现高速运算。
展开阅读全文