算术运算单元ALU的设计.docx
- 文档编号:10620417
- 上传时间:2023-02-21
- 格式:DOCX
- 页数:10
- 大小:221.52KB
算术运算单元ALU的设计.docx
《算术运算单元ALU的设计.docx》由会员分享,可在线阅读,更多相关《算术运算单元ALU的设计.docx(10页珍藏版)》请在冰豆网上搜索。
算术运算单元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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算术 运算 单元 ALU 设计