基于FPGA的计算器设计.docx
- 文档编号:24493116
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:38
- 大小:344.35KB
基于FPGA的计算器设计.docx
《基于FPGA的计算器设计.docx》由会员分享,可在线阅读,更多相关《基于FPGA的计算器设计.docx(38页珍藏版)》请在冰豆网上搜索。
基于FPGA的计算器设计
研究生课程论文
课程名称FPGA及片上系统SOPC应用
授课学期学年
第一学期
学院X
专业C
学号C1
C
任课教师C
论文题目基于FPGA的计算器设计
交稿日期2014年01月09日
成绩
X
基于FPGA的计算器设计
研究生:
XX指导老师:
XX
摘要
本文介绍了一个简单计算器的设计,基于硬件描述语言VHDL采用了现场可编程逻辑器件FPGA进行设计,并在Altera公司的QuartusⅡ软件上实现仿真。
系统由键控模块、运算、存储模块和译码显示模块四个部分组成,计算部分为加法器、减法器、乘法器和除法器,存储部分需要3个存储器来实现:
部累加器(acc)、输入寄存器(reg)以及结果暂存器(ans)。
显示部分由四个七段译码管组成,分别来显示输入数字,输入部分采用外接键盘,外部的8个按键他们能以单键和组合键的形式完成0~9999之的‘加’、‘减’、‘乘’、‘除’、‘符号变换’、‘存储数据’和‘读取数据’等七种功能运算其结构简单,易于实现。
关键词:
FPGA;VHDL;计算器;设计
ThedesignofcalculatorbasedonFPGA
GraduateStudent:
DongdongFanSupervisor:
ShuxiangSong
Abstract
Thisarticledescribesthedesignofasimplecalculator,thedesignusesFieldProgrammableGateArrayFPGAbasedonVHDLhardwaredescriptionlanguagetodesignandAltera'sQuartusⅡinsoftwareforemulation.Thissystemiscomponentedbythekeycontrolmodule,computing,storageanddecodingdisplaymoduleofthefourparts,thecomputingpartincludeadder,subtractor,multiplieranddivider,Storagepartneedsthreememorytohelpachieved:
internalaccumulator(acc),inputregister(reg)aswellastheresultsofregisters(ans).Displaypartismadeupfourdecoderof7sections,respectivelytoshowthenumberofinput.The8keystheycanbysinglecombinedkeyformstobecompletedaddition,multiplication,divisionarithmeticoperatorandsymboltransform,storeddataandreadsevenfunctionofoperationwithin0to9999numbers.itsstructureissimpleandeasytoimplement.
Keywords:
FPGA;VHDL;calclute;design
第1章引言
1.1课程设计的目的与意义
在人类学会交易的时候,计算也随之产生,而算盘作为计算最实用的工具存在了几千年。
算盘亦称珠算,是中国人民创造的一种计算工具,素有“中国计算机”之称。
算盘产生于汉代之前,是由古代的“筹算”演变而来的,珠算一词,最早见于汉末三国时代徐岳撰《数术记遗》,书中有“珠算,控带四时,经纬三才”的记述。
明清时期,算盘的应用已很广泛,关于算盘制造规格,后来出现的各种规格的算盘,都是在此基础上发展起来的。
算盘构造简单,便于掌握,使用方便,成为计算理财不可缺少的工具。
可是随着人类文明的进步和科学技术的不断发展。
算盘已经越来越不能满足一些高强度、高难度、高速度的复杂计算。
这时,一种新的电子产品问世了,它就是电子计算器。
电子计算器的发明是跨时代的,它比算盘计算的速度要快几百几千倍,计算的结果要比算盘更精确,操作的方法要更方便,更简单易学,计算的围更广,并且小巧、轻便。
它已经成为人们日常生活中不可缺少的一种计算工具,为我们的生活提供了很大的方便。
而随着计算机的普及,越来越多人在使用计算机,越来越多的工作离不开计算机,可以说计算机已经成为现代社会中不可或缺的工具,而电子计算器功能也以软件的形式进入计算机的软件世界,这不仅给人们带来了更大的便利,更为人们引入了更快的计算速度和更强大的运算功能。
1.2国外发展现状
(1)国外情况
在国外,电子计算器在集成电路发明后,只用短短几年时间就完成了技术飞跃,经过激烈的市场竞争,现在的计算器技术己经相当成熟。
计算器已慢慢地脱离原来的“辅助计算工具”的功能定位,正向着多功能化、可编程化方向发展,在各个领域都得到了广泛的应用。
用计算器不仅可以实现各种各样复杂的数学计算还可以用来编制、运行程序,甚至解方程组,图形计算器还可以进行图形处理。
计算器置的软件允许用户进行类似于对计算机的文件和目录管理等操作,允许用户对图形界面进行定制,同时各种新技术也被应用到计算器里使计算器功能越来越强大。
可以说,计算器就是一个“微微型”的计算机。
(2)国情况
国也有厂商利用计算器芯片开发新的产品,但对计算器技术的研究、计算器芯片的设计还处于起步阶段。
计算器的主要功能还是在于“计算”,不妨称之为“低档计算器”。
即便是对这种计算器,很多厂商也只从事计算器的组装、销售业务。
一些IC设计公司、芯片提供商也开始研究计算器技术。
第2章FPGA技术及硬件描述语言
2.1EDA技术及其发展
1.使电子设计成果以自主知识产权的方式得以明确表达和确认成为可能;
2.在仿真和设计两方面支持标准硬件描述语言的功能强大的EDA软件不断推出;
3.电子技术全方位纳入EDA领域;
4.EDA使得电子领域各学科的界限更加模糊,更加互为包容;
5.Soc高效低成本设计技术的成熟。
2.2FPGA技术
(1)FPGA技术的发展现状
FPGA是英文FieldProgrammableGateArray的缩写,即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。
它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
FPGA芯片叫板微处理器,如果没有微处理器,电脑会怎样?
答案令人惊讶---它的处理速度比常规电脑更快,而且快出很多倍!
尽管FPGA芯片的时钟频率要低于奔腾处理器,但是由于FPGA芯片可并行处理各种不同的运算,所以可完成许多复杂的任务。
例如网页显示,全球天气建摸及基因组合核对等,而且处理速度比奔腾处理器或数字信号处理器快得多。
在通用计算方面,FPGA仍然不敌Intel的处理器。
对于那些只需要进行重复单任务操作的机器而言,使用FPGA芯片显然是大材小用。
与FPGA对应的还有DSP处理器,DSP处理器速度虽然很快,并对许多DSP应用来说很有用,但仍有一些应用要求性能再进一步提升,而FPGA提供了更高的性能。
FPGA可以生成一个定制硬件设计,从而控制逻辑能够在硬件中实现,不必再利用精确的时钟周期来实现控制功能。
目前的FPGA设计一般采用Top-down(自顶向下)的设计方法。
先将系统划分为各个功能子模块,在系统级层次上进行行为描述,再对这些子模块进一步进行行为描述。
图2.1应用FPGA开发流程
2.3硬件描述语言VHDL
硬件描述语言是EDA技术的重要组成部分,VHDL是作为电子设计主流硬件的描述语言。
VHDL语言具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,从而大大简化了硬件设计任务,提高了设计效率和可靠性。
自顶向下的设计流程:
图2.2基于VHDL的自顶向下设计方法
第3章系统总体设计
系统总体设计框图如图1.3所示。
此设计由计算部分、存储部分、显示部分和输入部分组成。
图3.1计算器的系统组成框图
3.1计算器的计算部分
完成0~9999之的数,9999的二进制表示为10011100001111,在这一部分中,可以将每一个数均表示成16位二进制数统一进行运算,各个计算数之间的计算可以直接使用VHDL语言中的运算符来实现。
但在显示时,必须将个位、十位、百位,千位分开显示,设计时使用比较的方法来实现计算器的功能要求。
3.2计算器的存储部分
存储部分需要3个存储器来实现:
部累加器(acc)、输入寄存器(reg)以及结果暂存器(ans)。
在存放数字时,将数字放入acc或者reg里面,当第一次按下数字键时,表示该数字是个位。
当第二次按下数字键时,表示这次输入的是个位,是十位,上一次输入的所以要把第一次输入的数字乘以10,再加上第二次输入的数字,来得到最终输入的数字。
当第三次按下数字键时,要将第一次输入的数字乘以100,再加上第二次输入的数字乘以10,再加上第二次输入的数字,来得到最终输入的数字。
当第四次按下数字键时,要将第一次输入的数字乘以1000,再加上第二次输入的数字乘以100,再加上第三次输入的数字乘以10,再加上第四次输入的数字,来得到最终输入的数字。
当进行第一次计算时,第一个数字存放在acc里面。
按下运算符以后,第二个数字放在reg里面。
当再按下运算符号或者等号时,第一次计算的结果将存放在ans里面,同时reg清零,等待下一个数字的输入。
进行第二次运算时,将ans里面的结果与reg里面新输入的数字进行运算,再将运算结果存放在ans里面,直到最后按下等号按键的时候,显示最终的运算结果。
3.3计算器的显示部分
显示部分是系统的输出部分,用于显示按键值及计算结果,由于数字系统的数据运算都是二进制的,而输出表达式都是BCD码,为了满足BCD码的译码显示,最方便的方法就是利用译码程序在FPGA中实现。
本文采用的是共阴极七段数码管,显示数字时需要将对应管脚置为高电平,输出时,从左到右,按从高到低位的顺序依次接g、f、e、d、c、b、a。
七段译码器的基本结构如图3.2所示。
图3.2七段译码器的结构
其VHDL语言描述如下所示。
在这段程序中,indata是输入4位二进制数的端口,outdata是输出7位译码的端口,用WITH语句来实现译码。
WITHindataSELECT
outdata<="1111110"WHEN"0000",--显示0
"0110000"WHEN"0001",--显示1
"1101101"WHEN"0010",--显示2
"1111001"WHEN"0011",
"0110011"WHEN"0100",
"1011011"WHEN"0101",
"1011111"WHEN"0110",
"1110000"WHEN"0111",
"1111111"WHEN"1000",
"1101111"WHEN"1001",--显示9
"0000000"WHENOTHERS;--其它的输入按键均不显示。
计算器显示部分的设计和实现,实际上就是七段译码器的设计和实现,四个七段译码器分别显示的是个位、十位、百位、千位。
输入第一个数字后至再一次按下数字按键输入第二个数字前,三个七段译码器显示的都是第一个数字。
当开始输入第二个数字的时候显示第二个数字,再次按下运算按键到输入第三个数字前,显示的是前两个数字的运算结果,以此类推,当最后按下等号键的时候,显示最终的运算结果。
3.4计算器的输入部分
计算器输入部分的设计最主要的是按键译码电路的设计和实现。
计算器的输入部分是由外部的8个按键他们能以单键和组合键的形式完成0——9十个数字按键、加减乘除四则运算的运算符按键、一个等号按键和一个清零按。
设计所要做的是对按键信息进行译码,使其在计算器部可以使用。
数字按键译码电路的主体部分VHDL语言描述如下。
PROCESS(inclk,reset)
BEGIN
IFreset='1'THEN
outnum<="0000";
ELSIFinclk'EVENTANDinclk='1'THEN
CASEinnumIS
WHEN"00000001"=>outnum<="0000";outflag<='1';--按下第一个键表示输入0
WHEN"00000010"=>outnum<="0001";outflag<='1';--按下第二个键表示输入0
WHEN"00000100"=>outnum<="0010";outflag<='1';--以下类似
WHEN"00001000"=>outnum<="0011";outflag<='1';
WHEN"00010000"=>outnum<="0100";outflag<='1';
WHEN"00100000"=>outnum<="0101";outflag<='1';
WHEN"01000000"=>outnum<="0110";outflag<='1';
WHEN"10000000"=>outnum<="0111";outflag<='1';
WHEN"10000001"=>outnum<="1000";outflag<='1';
WHEN"10000010"=>outnum<="1001";outflag<='1';
WHENOTHERS=>outnum<=outnum;outflag<='0';--不按键时保持
ENDCASE;
ENDIF;
ENDPROCESS;
在本次设计的程序中,设reset是异步复位信号的输入端口,inclk是时钟信号的输入端口,innum端口用来表示输入的按键向量,outnum端口用来表示输入的按键动作对应的输出数字,outflag端口用来输出是否有按键动作,它主要实现的是按下什么就输出什么。
一共有千、百、十、个位,初始值都为低电平“0”,当按下哪个位时哪个位上的电平就跳为高电平(有且仅有一个为高电平),这时就有相应的输出。
那千、百、十、个位分别对应的是0—9这十个数字,所以当第一个位(从左往右位数依次增高)为高电平时显示0,……,第千个位上位高电平时,相应的显示为9。
如果按下的键是加号、减号、乘号、除号或者是等于号时,也是不显示的,所以也可以称作数字按键译码电路。
第4章计算器的VHDL设计
4.1加法器的设计与仿真
全加器是组合逻辑电路中最常见也最实用的一种,考虑低位进位的加法运算就是全加运算,实现全加运算的电路称为全加器。
设计16位的全加器思路非常简单且清晰,第一种方法就是先设计一个半加器和一个或门,然后两个半加器合并成一个一位的全加器,最后用16个一位的全加器组合成为一个16位的全加器;第二种方法就是先设计一个一位的全加器,然后在用16个串联或并联就组成了一个16位的全加器,而本次设计采用采用的
4.1一位全加器的级联原理图
程序如附录中加法程序,经QuartusⅡ编译后建立.vwf,设置被加数a为十进制数9999(可设置0—9999的任意数字),设置加数b99999仿真后所得结果如图4.2所示。
9999+9999=19998,仿真结果正确,可知此加法器设计有效。
图4.2加法器仿真9999+9999=19998
4.2减法器的设计与仿真
设计一个16位二进制数的减法器,利用二进制的减法原理,减法变加法多次调用一位全加器一位全减器的原理框图如图4.3所示。
由图可以看出,此减法器共需要两个输入端口和一个输出端口。
减法器的设计可以引用加法器,即通过对减数的求补,再与被减数相加得到最终的结果,所以需要增设一个进位位输入端口和进位位的输出端口。
图4.3一位全减器的原理框图
可以设a端口为被减数,b端口为减数,ci为输入借位位,s为结果的输出端口,co为借位的输出端口。
此减法器可以进行位数扩展,每增加一位需要多引用一个加法器,程序如附录中减法程序,经QuartusⅡ编译后建立.vmf文件,设置被减数a为十进制数1999(可设置0—9999的任意数字),设置减数b为999,仿真后所得结果如图4.4所示。
1999-999=1000,仿真结果正确,可知此减法器设计有效。
图4.4减法器仿真1999-999=1000
4.3乘法器的设计与仿真
乘法器是数字系统中的基本逻辑器件,在很多应用中都会出现如各种滤波器的设计、矩阵的运算等。
这里设计的是一个16×16的乘法器。
依据乘法器的原理,可以绘出其原理框图如图4.5所示。
图4.5乘法器的原理框图
可设a端口为被乘数(一个16位二进制数),b端口为乘数(一个16位二进制数),y为乘法运算的结果的输出端口。
乘法器模块图如附录中所示。
程序如附录中乘法程序,经QuartusⅡ编译后建立.vmf文件,设置被乘数a为十进制数9999,设置乘数b为1000,仿真后所得结果如图4.6所示。
9999*1000=9999000,仿真结果正确,可知此乘法器设计有效。
图4.6乘法器仿真9999*1000=9999000
4.4除法器的设计与仿真
另类除法器的算法可分为两类:
基于减法操作和基于乘法操作的算法。
基于乘法的除法把除法看成是乘法的逆运算。
如下面的式子所示:
A=B×Q+R
对于16位无符号被除数a,先将a转换成高16位是0,低16位是a的数temp—a。
在每个周期开始时temp—a向左移动一位,最后一位补零,然后判断temp—a的高16位是否大于等于除数b,如是则temp—a的高16位减去b并且加I,得到的新值仍赋给temp—a;如不是直接进入下一步。
上面的移位、比较、减法(减法视情况而定)要进行16次,经过16个周期后,运算结束,所得到的temp—a的高16位为余数,低16位为商。
将移位、比较和相减放在同一个循环中,去除了不必要的延时,增加了设计的可靠性。
对于32位有符号数的除法,算法与上面类似,只是需要判断商和余数是正数还是负数。
当you—WU为1时进行有符号数运算,否则进行无符号数运算。
图4.7除法器的原理框图
设a端口为被除数,b端口为除数,s端口为商,y端口为余数,程序如附件中除法程序,经QuartusⅡ编译后建立.vmf文件,设置被除数为十进制数9088除数为90,仿真所得结果如图4.8所示。
计算得到9088÷90=100……88,仿真结果正确,由此可知此除法器设计有效。
图4.8除法器仿真9088÷90=100……88
第5章结束语
课程设计是本学期最后一次将自己所学理论与实际相结合的机会,通过这次比较完整的基于FPGA的计算器的设计,我自己的理论与实践相结合的能力有了大幅度的提升。
在温习了所学专业知识的基础上,同时通过查阅专业书籍、相关文献资来解决实际工程问题,这锻炼了我的综合运用各项知识和资源的能力。
我采用的是分模块的设计方法,各个模块的设计我都是随着设计的不断深入而不断熟悉并学会应用的。
由于以前没有经常使用VHDL语言,在编程过程中难免会与到反复调试自己也看不出的问题,幸好有实验室同学的解答,在此表示感!
而且通过对整体的掌控,对局部的取舍,以及对细节的斟酌处理,都使我的实际动手经验得到了极大的丰富,由于程序编写与处理是一项非常繁琐非常令人头疼的工作,完成了这些,也使我的意志、抗压能力及耐力都得到了不同程度的提升。
这一次的设计让我积累很多的解决实际问题的经验,如加法器,除法器有多种方法描述,使我的头脑更加灵活,这必然会让我在未来的学习、工作中表现出更高的应变能力,更强的沟通力和理解力。
通过这次的设计,我对FPGA技术、VHDL语言以及QuartusⅡ的使用都有了深入的了解。
虽然设计中容较多,过程繁琐但这也造就了我丰富的收获。
从未知道的原理,不一定就难,关键是要动手去做,模块化设计,各个击破解决,相信下一次做其它设计时我会做的更好。
参考文献:
[1]朱正伟.EDA技术及应用.[M].:
清华大学,2005.
[2]王彦.基于FPGA的工程设计与应用[M].:
电子科技大学,2007.
[3]黄智伟.FPGA系统设计与实践[M].:
电子工业,2005.
[3]江思敏.VHDL数字电路及系统设计[M].:
机械工业,2006.
[5]卢毅,赖杰.VHDL与数字电路设计[M].:
科学,2001.
[6]松,黄继业.EDA技术实用教程[M].第二版.:
科学,2005.
[7]徐志军,徐光辉.CPLD/FPGA的开发与应用[M].:
电子工业,2002.
[8]育人.8位计算器的指令系统与硬件结构[J].微电子技术,2000,28(3).
[9]朱卫华,留平.可任意设置计算精度的整数除法器的设计[J].国外电子测量技术。
2008,
27
(2):
16.18
附录
1.1位全加器源程序f_adder.vhd如下:
LIBRARYIEEE;--半加器
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYh_adderIS
PORT(a,b:
INSTD_LOGIC;
so,co:
OUTSTD_LOGIC);
ENDENTITYh_adder;
ARCHITECTUREbehaveOFh_adderIS
BEGIN
so<=aXORb;co<=aANDb;
ENDbehave;
--********************************
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;--或门逻辑
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYor2aIS
PORT(a,b:
INSTD_LOGIC;
c:
OUTSTD_LOGIC);
ENDENTITYor2a;
ARCHITECTUREoneOFor2aIS
BEGIN
c<=aORb;
ENDone;
--********************************
LIBRARYIEEE;--1位全加器顶层设计
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYf_adderIS
PORT(ain,bin,cin:
INSTD_LOGIC;
sumf,coutf:
OUTSTD_LOGIC);
ENDENTITYf_adder;
ARCHITECTUREfd1OFf_adderIS
COMPONENTh_adder
PORT(a,b:
INSTD_LOGIC;
so,co:
OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTor2a
PORT(a,b:
INSTD_LOGIC;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGA 计算器 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)