EDA计算器设计大作业.docx
《EDA计算器设计大作业.docx》由会员分享,可在线阅读,更多相关《EDA计算器设计大作业.docx(23页珍藏版)》请在冰点文库上搜索。
EDA计算器设计大作业
计算器设计
专业:
电子信息工程
设计者:
摘要
本文介绍了一个简单的计算器的设计,该设计采用了现场可编程逻辑器件FPGA设计,并基于VHDL语言实现加减乘除功能,并用十进制显示在数码管上。
系统由计算部分、输入部分、选择部分、输出部分组成,计算部分为加法器、减法器、乘法器和除法器组成。
使用Altera公司的QuartusII开发软件进行功能仿真并给出仿真波形,并下载到试验箱,用实验箱上的按键开关模拟输入,用数码管显示十进制计算结果。
通过外部按键可以完成四位二进制数的加、减、乘、除四种运算功能,其结果简单,易于实现。
关键字:
VHDL,计算器,QuartusII
一.实验目的
1、熟悉QuartusII软件的相关操作,掌握数字电路设计的基本流程。
2、介绍QuartusII的软件,掌握基本的设计思路,软件环境参数配置,仿真,管脚分配,下载等基本操作。
3、了解VHDL或原理图设计方法与定制IP模块的思想。
4、掌握并行加法器,减法器乘法器以及除法器的设计思路及工作原理。
5、设计一个能完成加减乘除功能并以十进制显示结果的简单计算器。
二、流程图
•当输入为00时输出加法结果
•当输入为01时输出减法结果
•当输入为10时输出乘法结果
•当输入为11时输出除法结果
三.顶层原理图
创新:
四个模块输出均为十六进制数,为了输出方便观察,设计了8位除法器,将输出变为十进制数显示在数码管上。
DATAIN[1..0]为输入控制端,通过试验箱上两个拨码开关控制输入。
A[3..0]和B[3..0]是两个四位二进制输入数,当DATAIN为00时进行加法运算,当DATAIN为01时进行减法运算,当DATA为10时进行乘法运算,当DATA为11是进行除法运算。
结果用十进制显示三个共阳静态LED数码管上,除法的余数单独显示在右下角的七段驱动共阳数码管中的一个上。
四、各个模块
(1)加法器模块
1、封装元件
当CLR为‘1’时清零,输出为零
当CLR为‘0’时,输入两个四位二进制数,输出两个数之和,S[3..0]为和,S[4]为进位。
2、加法器程序
3、仿真结果
当CLR为1时,输出为0;当CLR为0时,进行加法运算。
S[3..0]为相加后得到的和,S[7..4]为相加后的进位。
4、硬件运行结果
从左到右,前三个数码管为结果,用十进制显示:
第一个为百位,第二个为十位,第三个为个位。
第五个为加数,第六个为被加数。
(2)减法器模块
1、封装元件
设计思想:
减去一个数等于加上这个数的补码。
对减数求补码,再调用加法器
当CLR为‘1’时清零,输出为零
当CLR为‘0’时,a是四位二进制被减数,b时四位二进制减数。
S为相减的结果,co为借位,当co为0时代表a减b是整数,否则为负数或者0。
2、减法器程序
3、仿真结果
CLR为清零,当CLR为1时清零,输出为0;当CLR为0时进行减法运算,a、b为两个四位二进制输入,s为输出,当co为0时,代表s为正,当co为1时代表co为负,当被减数小于减数时,s为相减得到的结果的补码。
4、硬件运行结果
从左到右,前三个数码管用十进制显示结果:
第一个代表正负,为0时代表正,为1时代表负。
第五个为减数,第六个为被减数。
(3)乘法器模块
1、封装元件
当clr为‘1’时输出为0
当clr为‘0’时,a与b相乘输出y
2、乘法器的设计思想
用并行相乘的方法。
通过开关和键盘,两组分别输入4bit的数据进行乘法运算时,先求出部分积,即求得二进制数据的乘数和被乘数逐位相乘,之后运用二进制加法进行加和。
举例如下,10X9=90:
•--10×9=90
•--1010
•--X1001=
•---------------
•--00001010
•--00000000--部分积
•--00000000
•-01010000
•----------------------------
•--1011010=90
•这里加法的结果就是所求结果。
3、乘法器程序
4、仿真结果
clr为清零,当clr为1时进行乘法运算,a、b为两个四位二进制输入,y为十六进制输出。
5、硬件运行结果
从左到右,前三个数码管用十进制显示结果:
第一个为百位,第二个为十位,第三个为个位。
第五个为乘数,第六个为被乘数。
(4)除法器模块
1、封装元件
当clr为‘1’时,输出为0。
当clr为‘0’时,a与b相除输出s,s高四位为商,低四位为余
2、除法器设计思想
•f:
=a;g:
=b;e:
=(others=>‘0’);--f等于被除数,g等于除数
•foriin1to15loop--e为商
•if(f>=g)thenf:
=f-g;e:
=e+1;
•elseexit;
•endif;
•endloop;
•s(7downto4)<=e;s(3downto0)<=f;
•利用循环的思想设计除法器。
S高四位为商,第四位为余数
3、除法器程序
4、仿真结果
当clr=‘1’时清零,当clr=‘0’时进行除法运算。
a、b为四位二进制数,a为被除数,b为除数,s高四位为商,s低四位为余数。
5、硬件运行结果
从左到右,前三个数码管用十进制显示计算后的商,第一个为百位,第二个为十位,第三个为个位。
第五个数码管为除数,第六个数码管为被除数。
右下角一个数码管显示运算得到的余数。
(5)8位除法器
1、封装元件
作用:
用于把十六进制显示的输出换成十进制显示。
方法:
被除数除以10时,余数为个位;得到的商除以10,得到的余数为十位;得到的商再除以10,得到的余数为百位。
2、8位除法器设计思想
•利用移位减法原理设计除法器
•首先在被除数前面补7个零,赋值为Remain7,除数后面补7个零,赋值为diver7。
若Remain7大于diver7,则shang(7)为‘1’,Remain6<=Remain7-diver7。
否则shang(7)为‘0’,Remain6<=Remain7;
•Diver6等于diver7左移一位,后面补零。
再重复上一个步骤,得出shang(6),……直到得出shang(0)为止
•Remain是中间与diver相减的得到的数,diver保存除数移位后的数;
说明:
8位除法器不能用四位除法器那循环的方法,因为,如果用循环的方法,由于循环次数太多,在电脑上要运行半个小时以上,不能用。
3、8位除法器程序
4、仿真结果
(6)数码管七段译码电路
1、封装元件
作用:
用于在一个七段共阳数码管显示除法器的余数。
2、共阴极七段显示码十六进制转换表
十六进制码
共阴极七段显示码
Num
D8
D4
D2
D1
g
f
e
d
c
b
a
0
0
0
0
0
0
1
1
1
1
1
1
1
0
0
0
1
0
0
0
0
1
1
0
2
0
0
1
0
1
0
1
1
0
1
1
3
0
0
1
1
1
0
0
1
1
1
1
4
0
1
0
0
1
1
0
0
1
1
0
5
0
1
0
1
1
1
0
1
1
0
1
6
0
1
1
0
1
1
1
1
1
0
1
7
0
1
1
1
0
0
0
0
1
1
1
8
1
0
0
0
1
1
1
1
1
1
1
9
1
0
0
1
1
1
0
1
1
1
1
A
1
0
1
0
1
1
1
0
1
1
1
B
1
0
1
1
1
1
1
1
1
0
0
C
1
1
0
0
0
1
1
1
0
0
1
D
1
1
0
1
1
0
1
1
1
1
0
E
1
1
1
0
1
1
1
1
0
0
1
F
1
1
1
1
1
1
1
0
0
0
1
3、七段译码器程序
4、仿真结果
(7)选择模块
1、封装元件
•当Q为“00”时进行加法运算
•当Q为“01”时进行减法运算
•当Q为“10”时进行乘法运算
•当Q为“11”时进行除法运算
2、程序
五、管脚锁定
六、小结与收获
回顾本次大作业完成的整个过程,觉得收获很多,主要有以下几个方面。
(1)通过整个过程的设计完成,锻炼了分析、解决问题的能力,熟练掌握了QuartusII的原理图输入方式,并对硬件描述语言有了初步的认识和运用,认识到QuartusII用于电路仿真的强大功能;
(2)完成过程中,关于电路的设计,有多种不同的实现方法,经过和同学讨论,交流想法,尽量选择简单易行的方法,同时灵活运用各种逻辑门电路,锻炼了逻辑思维能力;
(3)通过整个过程的完成,最终在实验箱上顺利得到了正确的结果,虽然只是一个简易的、功能很少的计算器,但毕竟是自己亲手操作完成的,觉得很有成就感,这也增加了我对数字电子技术的兴趣。