算术运算单元ALU的设计.docx

上传人:b****7 文档编号:10620417 上传时间:2023-02-21 格式:DOCX 页数:10 大小:221.52KB
下载 相关 举报
算术运算单元ALU的设计.docx_第1页
第1页 / 共10页
算术运算单元ALU的设计.docx_第2页
第2页 / 共10页
算术运算单元ALU的设计.docx_第3页
第3页 / 共10页
算术运算单元ALU的设计.docx_第4页
第4页 / 共10页
算术运算单元ALU的设计.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

算术运算单元ALU的设计.docx

《算术运算单元ALU的设计.docx》由会员分享,可在线阅读,更多相关《算术运算单元ALU的设计.docx(10页珍藏版)》请在冰豆网上搜索。

算术运算单元ALU的设计.docx

算术运算单元ALU的设计

算术运算单元ALU的设计

1设计要求概述:

1.进行两个四位二进制数的运算;

2.算术运算:

A+B,A-B,A+1,A-1;

3.逻辑运算:

AandB,AorB,Anot,AxorB;

2功能模块整体结构设计

1.总体设计概述

总体电路设计原理图

算术运算单元ALU总体上由五个模块组成:

A±B模块、A±1模块、A与B和A或B模块、A异或B和A非、控制模块。

通过这五个模块实现两个四位二进制数的算术运算和逻辑运算。

2.各个模块的详细描述

⑴A±B模块

A+B可以直接通过74283两个四位二进制数加法器直接实现;A—B可以转换成A加上B的补码实现。

同时再设计一个转换控制端M,M=0时实现A+B,M=1时实现A-B,最后添加一个总的控制端K0,K0=.0时该模块不输出结果,K0=1时该模块工作。

A±B模块原理图

A+B仿真图如下:

A-B仿真图如下:

⑵A±1模块

A+1如同A+B一样可以直接通过74283两个四位二进制数加法器实现,只要把B设置成1;A-1可以转换成A加上1的补码实现,同时设置一个转换控制端M,M=0时实现A+1功能,M=1时实现A-1功能。

最后设计一个总的控制端K1,K1=0时该模块不输出结果,K1=1时该模块正常工作。

A±1模块原理图

A+1仿真图

A-1仿真图

⑶A与B和A或B模块

A与B直接通过四个与门实现,A或B直接通过四个或门实现。

同时设计一个转换控制端M,M=0时A与B工作,M=1时A或B工作,最后设计一个总的控制端K2,K2=0时该模块不输出结果,K2=1时该模块正常工作。

A与B和A或B模块原理图

A与B仿真图

A或B仿真图

⑷A异或B和A非模块

A异或B直接通过四个异或门实现,A非直接通过四个非门实现。

同时设计一个转换控制端M,M=0时实现A异或B,M=1时实现A非。

最后设计一个总的控制端K3,K3=0时该模块不输出结果,K3=1时该模块正常工作。

A异或B仿真图

A非仿真图

⑸控制模块

控制模块可以通过2位二进制译码器实现,依次控制上述四个模块的总控制端K0、K1、K2、K3,从而可以分别独立实现各个模块的功能。

2位二进制译码器真值表

输入端

输出端

C1

C2

K0

K1

K2

K3

0

0

1

0

0

0

0

1

0

1

0

0

1

0

0

0

1

0

1

1

0

0

0

1

 

 

 

 

 

 

控制模块原理图

3设计分析

ALU算数运算逻辑单元,可以对两个4位操作数执行3种算数运算和5种逻辑运算。

输入信号为4位r信号,4位s信号以及进位信号cin,输出信号为f[3,0]、进位输出信号c4、进位生成信号g_bar、进位传输信号p_bar和溢出标志ovr。

ALU的输出信号f[3.0]还反馈到寄存器和存储器。

指令码

ALU单元选择

I5

I4

I3

0

0

0

r+s

0

0

1

s-r

0

1

0

r-s

0

1

1

rors

1

0

0

rands

1

0

1

(notrands)

1

1

0

rxors

1

1

1

not(rxors)

 

 

 

 

ALU功能选择

源代码:

ALU算数逻辑运算单元的主要功能是根据指令码的要求,分别对两个操作执行算数逻辑运算单元的VHDL程序实现如下:

libraryieee;

useieee.std_logic_1164.all;

useieee.numeric_std.all;

useieee.std_logic_unsigned.all;

entityaluis

port(r,s:

inunsigned(3downto0);

alu_ctrl:

instd_logic_vector(2downto0);

cin:

instd_logic;

f:

bufferunsigned(3downto0);

g_bar,p_bar:

bufferstd_logic;

c4:

bufferstd_logic;

ovr:

bufferstd_logic);

endalu;

architecturert1ofaluis

signalr1,s1,f1:

unsigned(4downto0);

begin

r1<='0'&r;

s1<='0'&s;

process(r1,s1,cin,alu_ctrl)

begin

casealu_ctrlis

when"000"=>ifcin='0'thenf1<=r1+s1;

elsef1<=r1+s1+1;

endif;

when"001"=>ifcin='0'thenf1<=s1+not(r1);

elsef1<=s1+not(r1)+1;

endif;

when"010"=>ifcin='0'thenf1<=r1+not(s1);

elsef1<=r1+not(s1)+1;

endif;

when"011"=>f1<=r1ors1;

when"100"=>f1<=r1ands1;

when"101"=>f1<=(notr1)ands1;

when"110"=>f1<=r1xors1;

when"111"=>f1<=not(r1xors1);

whenothers=>null;

endcase;

endprocess;

f<=f1(3downto0);

c4<=f1(4);

g_bar<=not(

(r(3)ands(3))or

((r(3)ors(3))and(r

(2)ands

(2)))or

((r(3)ors(3))and(r

(2)ors

(2))and(r

(1)ands

(1)))or

((r(3)ors(3))and(r

(2)ors

(2))and(r

(1)ands

(1))and

(r(0)ands(0))));

p_bar<=not(

(r(3)ors(3))and(r

(2)ors

(2))and(r

(1)ands

(1))and(r(0)ands(0)));

ovr<='1'when(f1(4)/=f1(3))else'0';

endrt1;

4逻辑仿真与时序仿真的实现

5结果分析及总结

由运行结果可知,当指令码alu_ctrl为0时,执行加法运算,即r+s,如果进位为1,则再加上进位,即r+s+1,图中2加4加进位1得7,相加之后没有进位,进位输出c4即为0,溢出标志ovr为0。

通过这次EDA课程设计,我收获颇多。

刚开始看到题目脑海中一点思路没有,后来通过耐心思考,逐渐把各个模块做出来了,但是在做整体模块中我遇到了A±B模块、A±1模块进位输出有冲突的问题,我于是回过头来重新思考这两个模块,终于我发现问题所在,整体模块输出成功。

在这次EDA课程设计中,我不仅学习到了一些新知识,而且锻炼了动手实践能力。

最后,在此感谢学校给我们安排的这一次课程设计,还有各位老师在设计过程中给与我的指导和帮助。

6参考文献

1黄正瑾.在系统编程技术及其应用.南京:

东南大学出版社,1997

2彭介华.电子技术课程设计指导.北京:

高等教育出版社,1997

3李国丽,朱维勇.电子技术实验指导书.合肥:

中国科技大学出版社,2000

4潘松,黄继业.EDA技术实用教程.北京:

科学出版社,2002

5郑家龙,王小海,章安元.集成电子技术基础教程.北京:

高等教育出版社,2002

6宋万杰,罗丰,吴顺君.CPLD技术及其应用.西安:

西安电子科技大学出版社,1999

7张昌凡,龙永红,彭涛.可编程逻辑器件及VHDL设计技术.广州:

华南工学院出版社,2001

8卢杰,赖毅.VHDL与数字电路设计.北京:

科学出版社,2001

 

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1