基于 FPGA的32位除法器设计汇总.docx
《基于 FPGA的32位除法器设计汇总.docx》由会员分享,可在线阅读,更多相关《基于 FPGA的32位除法器设计汇总.docx(10页珍藏版)》请在冰豆网上搜索。
基于FPGA的32位除法器设计汇总
目录
摘要1
第1章绪论2
第2章设计原理3
2.1除法运算分析3
2.2除法器算法的实现4
2.2.1除法器无符号数的除法4
2.2.2除法器有符号数的除法4
第3章软件介绍及设计过程5
3.1QuartusII简介5
3.2程序设计过程6
3.3仿真结果7
结论8
参考文献9
附录1源程序10
摘要
介绍了一种使用可编程逻辑器件FPGA和VHDL语言实现32位除法器的设计方法。
该除法器不仅可以实现有符号数运算,也可以实现无符号数的运算。
除法器采用节省FPGA逻辑资源的时序方式设计,主要由移位、比较和减法三种操作构成。
由于优化了程序结构,因此程序浅显易懂,算法简单,不需要分层次分模块进行。
并使用Altera公司的QuartusⅡ软件对该除法器进行编译、仿真,得到了完全正确的结果。
关键词:
FPGA;VHDL;除法器;减法;移位
第1章绪论
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言VHDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。
VHDL是一种全方位的硬件描述语言,包括系统行为级、寄存器传输级和逻辑门级多个设计层次,支持结构、数据流和行为3种描述形式的混合描述,因此VHDL几乎覆盖了以往各种硬件描述语言的功能,整个自顶向下或自底向上的电路设计过程都可以用VHDL来完成。
另外,VHDL还有以下优点:
VHDL的宽范围描述能力使它成为高层次设计的核心,将设计人员的工作重心转移到了系统功能的实现和调试上,只需要花较少的精力用于物理实现;VHDL可以用简洁明确的代码描述来进行复杂控制逻辑的设计,灵活且方便,而且也便于设计结果的交流、保存和重用;VHDL的设计不依赖于特定的器件,方便了工艺的转换。
VHDL是一个标准语言,为众多的EDA场上支持,因此移植性好[2]。
本次课程设计通过利用QuartusII软件实现32位除法器。
从而对EDA技术进一步的熟悉、了解和掌握。
通过本课程的学习,可以了解硬件描述语言编程方法,掌握VHDL编程方法。
除法是数值计算和数据分析中最常用的运算之一,许多高级运算如平方根、指数、三角函数等都与其有关。
在FPGA中,有加、减、乘、除的算法指令,但除法中除数必须是2的幂,因此无法实现除数为任意数的除法。
然而除法器是微处理器的一个重要运算单元,除法器的运算速度、性能、功耗等都会影响系统的整体性能,相对于其他运算操作,除法很复杂且其操作的效率很低,所以研究的人很少引,但是对除法的忽视会导致系统整体性能的下降。
因此当前不但应该研究除法,而且研究的重点应该放在提升运算速度上。
如今大部分电子系统的最大位宽只有32位,因此本文用VHDL编写了实现32位数相除的除法器。
本文设计的除法器,不仅能实现有符号数的运算,也可以实现无符号数的运算。
除法器是电子技术领域的基础模块,在电子电路设计中得到广泛地应用。
然而相对于加法和乘法等其他操作,除法操作的效率很低。
出现这种情况的原因除了除法本身的复杂性外,还与人们普遍认为除法是不频繁的操作有关。
作为微处理器的一个重要的运算单元,除法器的运算速度、性能、功耗等都会影响系统的整体性能,所以对除法效率的忽视会导致系统整体性能的下降。
硬件除法器的运算速度比软件实现方法快得多,但为了提升运算速度,就要以硬件资源的消耗为代价。
第2章设计原理
2.1除法运算分析
除法器的算法可分为两类:
基于减法操作和基于乘法操作的算法。
数字循环是最简单,运用最广泛的一类算法,以减法为基本的操作,在每一次迭代中求固定位数的商。
在最早的Resorting方法中,每次尝试在余数中减去除数,然后判断得到的结果,如果结果为正就上商1,否则上商0,并恢复余数,最后移位进行下一次迭代。
Resorting方法一次迭代的框图如图1所示:
在这种方法中一次迭代需要2次加法运算,这样增加了不必要延时,Non_resorting方法把下一次迭代中和减法合并,这样在每次迭代中根据上一次上商的结果进行操作,如果上次上商为1,这次迭代用余数减去除数,否则用余数加上除数,然后和Resorting方法一样得到本次迭代的商。
。
还有就是基于乘法的算法,把除法看成是乘法的逆运算。
如下面的式子所示:
A=B×Q+R其中A为被除数,B为除数,Q为商,R为余数。
这样的算法主要有SRT,Newton-Raphson和Goldschmidt算法等。
除法在很多方面与乘法不同,最重要的区别就是在乘法中所有的部分乘积都可以并行生成,而在除法中每个商的位都是以一种顺序的过程确定的,因此速度较慢。
而以FPGA为硬件基础,基于减法的除法器算法不仅节省资源,速度也较快。
2.2除法器算法的实现
2.2.1除法器无符号数的除法
本设计中的除法器,巧用VHDL语言,将有符号数和无符号数的除法结合在一起,节省了资源,也提高了速度。
其算法如下:
对于32位无符号被除数a,先将a转换成高32位是0低32位是a的数temp_a。
在每个周期开始时temp_a向左移动一位,最后一位补零,然后判断temp_a的高32位是否大于等于除数b,如是则temp_a的高32位减去b并且加I,得到的新值仍赋给temp_a;如不是直接进入下一步。
上面的移位、比较、减法(减法视情况而定)要进行32次,经过32个周期后,运算结束,所得到的temp_a的高32位为余数,低32位为商。
将移位、比较和相减放在同一个循环中,去除了不必要的延时,增加了设计的可靠性。
2.2.2除法器有符号数的除法
对于32位有符号数的除法,算法与上面类似,只是需要判断商和余数是正数还是负数。
令d=a(31)⊕b(31),如果d=0则被除数与除数同为正数或者负数,最终商为正数;如果d=1说明被除数与除数一个为正一个为负,最终商为负数。
被除数是负数时余数为负,否则为正。
有符号数的除法采用的算法是将被除数与除数均变成无符号的32位数,紧接着的计算过程与无符号数除法一样。
最后根据d的值对商作处理,如果d=0商不需任何处理,如果d=1则将商取反加1才是正确的结果。
余数的调整则根据被除数的符号位进行。
32位除法器的框图如图1。
当you_wu为1时进行有符号数运算,否则进行无符号数运算。
图1除法器逻辑框图
第3章软件介绍及设计过程
3.1QuartusII简介
AlteraQuartusII作为一种可编程逻辑的设计环境,由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。
当前官方提供下载的最新版本是v12.1。
AlteraQuartusII(3.0和更高版本)设计软件是业界唯一提供FPGA和固定功能HardCopy器件统一设计流程的设计工具。
工程师使用同样的低价位工具对StratixFPGA进行功能验证和原型设计,又可以设计HardCopyStratix器件用于批量成品。
系统设计者现在能够用QuartusII软件评估HardCopyStratix器件的性能和功耗,相应地进行最大吞吐量设计。
Altera的QuartusII可编程逻辑软件属于第四代PLD开发平台。
该平台支持一个工作组环境下的设计要求,其中包括支持基于Internet的协作设计。
Quartus平台与Cadence、ExemplarLogic、MentorGraphics、Synopsys和Synplicity等EDA供应商的开发工具相兼容。
改进了软件的LogicLock模块设计功能,增添了FastFit编译选项,推进了网络编辑性能,而且提升了调试能力。
3.2程序设计过程
由设计原理知道本设计用的最多的操作就是移位、比较和减法。
有设计者指出分别用3个模块实现移位、比较和减法,再加上控制模块共4个模块。
可是此方法实现的仅是8位无符号数的运算,不能实现有符号数运算且程序很复杂,占用的FPGA资源也多。
也有人提出将被除数作为被减数、除数作为减数,作减法,差重新置入被减数,反复相减,直到被减数小于减数为止,记录能够相减的次数即得到商的整数部分⋯。
这样做不仅占用的逻辑资源很多,而且随着被除数与除数差值的增大、相减的次数增多,速度也就降低。
本设计不分模块,仅用两个进程,巧妙使用loop语句便可方便的实现32位有符号和无符号数除法。
另外需要注意的是,被除数与除数的临时存储单元temp_a和temp_b必须设为变量,如果设置成信号即使编译完全正确,也得不到正确的仿真结果。
循环变量n的初值不能在设定变量时设置,必须在循环开始前设置,否则程序将成为死循环,只有注意到上面两点,loop语句才能真的起到巧妙的作用。
本设计采用QuartusII编写程序代码、编译、执行结果如下两图所示:
图2程序代码
图3编译、执行结果
3.3仿真结果
利用QuartusII软件进行无符号数的运算除法器的仿真图如下:
图4无符号数的运算除法器的仿真图
利用QuartusII软件进行有符号数的运算除法器的仿真图如下:
图5有符号数的运算除法器的仿真图
图4和图5是32位除法器的仿真图。
图4中令you_wu为0,实现无符号数相除,图5中you_wu为1,实现有符号数相除。
本设计运行速度较快,当两个值相差很大的数(不管是有符号数还是无符号数)相除时,速度优势将更加明显。
另外图4和图5中没有任何毛刺,说明该除法器性能很稳定,不仅速度较快,而且没有竞争冒险,是一个成功的设计。
结论
在FPGA的设计中,要关心两个参数:
逻辑资源的占用率和速度。
本文给出的32位除法器占用的逻辑资源较少;而速度主要取决于系统时钟,如果系统时钟为50MHz,则完成32位数除法所需时间不到1txs。
文中有关代码均经QuartusII编译通过,可以用于实际系统设计。
为期近两周的EDA课程设计就这样结束了,设计首先对EDA课程的到了复习和应用,并且对所学的知识的到了应用。
本次课程设计通过理论与实践的相结合,对理论知识的掌握更佳的熟练。
最后,感谢学校给我们这次机会,锻炼了我们的动手能力。
通过这次课程设计让我将理论知识应用到实践中,当然也让我意识到自身理论知识的缺乏和动手能力有待提高,让我明白在以后的学习中应该更应该努力钻研。
同时也感谢指导老师在设计过程中的辅导以及同学的帮助
参考文献
[1]朱卫华,郑留平.可任意设置计算精度的整数除法器的设计[J].国外电子测量技术。
2008,27
(2):
16.18.
[2]栗素娟,阎保定,朱清智.基于FPGA的快速浮点除法器IP核的实现[J].河南科技大学学报:
自然科学版,2008,29(6):
34-3%
[3]刘志刚,汪旭东,郑关东.基于SRT算法的单精度浮点除法器[J].电子技术应用,2007,33(1O):
56-58.
[4]潘明,许勇.基于加减交替法除法器的FPGA设计与实现[J].微计算机信息,2008,24(9-2):
141.143.
[5]基于VHDL的8位除法器的实现[J].微计算机信息.2006,22(12-3):
277-278.
[6]姜咏江.基于QuartusII的计算机核心设计[M].北京:
清华大学出版社,2006.
[7]张静亚.FPGA系统设计中资源分配的分析和研究[J].信息化研究,2009,35(3):
37-39.
附录1源程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.a