ALU的设计与实现.doc

上传人:wj 文档编号:7393995 上传时间:2023-05-11 格式:DOC 页数:5 大小:46.50KB
下载 相关 举报
ALU的设计与实现.doc_第1页
第1页 / 共5页
ALU的设计与实现.doc_第2页
第2页 / 共5页
ALU的设计与实现.doc_第3页
第3页 / 共5页
ALU的设计与实现.doc_第4页
第4页 / 共5页
ALU的设计与实现.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

ALU的设计与实现.doc

《ALU的设计与实现.doc》由会员分享,可在线阅读,更多相关《ALU的设计与实现.doc(5页珍藏版)》请在冰点文库上搜索。

ALU的设计与实现.doc

计算机组成原理实验

实验四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+DE2-70

四、实验步骤:

1.打开Quartus软件,新建工程,并新建一个verilog文件。

2.编写verilog程序。

首先,查找74181的功能表,用always模块和case语句实现其功能。

然后,设计ALU的过程中,利用p函数和g函数实现超前进位功能。

3.附程序代码如下:

moduleALU_74181

input[3:

0]a,

input[3:

0]b,

input[3:

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;

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=a-b+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

assignf=result;//将中间变量result的值赋给f

//片与片之间的超前进位

assigng0=a[0]&b[0];//g函数是a与b的与

assigng1=a[1]&b[1];

assigng2=a[2]&b[0];

assigng3=a[3]&b[0];

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&p0&p1&p2&p3);

//g3+p3g2+p3p2g1+p3p2p1g0+p3p2p1p0cn

assignp=p0&p1&p2&p3;

assigng=g3+g2&p3+g1&p2&p3+g0&p1&p2&p3;

assignaeqb=(a==b)?

1'b1:

1'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是本片(组)的最后进位输出。

逻辑表达式表明,这是一个先行进位逻辑,可以实现高速运算。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2