基于FPGA的32位除法器设计.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于FPGA的32位除法器设计 卿振军,李皓,陈冲,王磊 (微电子与固体电子学院) 摘 要: 介绍了一种使用可编程逻辑器件FPGA和VHDL语言实现32位除法器的设计方法。该除法器不仅可以实现有符号数运算,也可以实现无符号数的运算。除法器采用节省FPGA逻辑资源的时序方式设计,主要由移位、比较和减法三种操作构成。由于优化了程序结构,因此程序浅显易懂,算法简单,不需要分层次分模块进行。并使用Altera公司的Quartus软件对该除法器进行编译、仿真,得到了完全正确的结果。 关键词:FPGA;VHDL;除法器;减法;移位 0 引 言 除法是数值计算和数据分析中最常用的运算之一, 许多高级运算如平方根、 指数、三角函数等都与其有关。 在FPGA中,有加、减、乘、除的算法指令,但除法中除数必须是2的幂, 因此无法实现除数为任意数的除法。然而,除法器是微处理器的一个重要运算单元, 除法器的运算速度、性能、 功耗等都会影响系统的整体性能,相对于其他运算操作,除法很复杂且其操作的效率很低,所以研究的人很少,但是对除法的忽视会导致系统整体性能的下降。因此当前不但应该研究除法,而且研究的重点应该放在提升运算速度上。如今大部分电子系统的最大位宽只有32位,因此本文用 VHDL编写了实现32位数相除的除法器。 本文设计的除法器,不仅能实现有符号数的运算,也可以实现无符号数的运算。 1 设计原理 除法器的设计主要有两种方法,一是基于乘法操作,另一是基于减法操作。基于乘法操作的算法是把除法看做乘法的逆运算,实现时需要顺次进行,因此运算速度较慢且需要耗费大量的逻辑资源,在FPGA中实现是不推荐此种方法,在此也不做讨论和采用;与此相比,在FPGA环境下,基于减法的操作不仅速度快,而且节省资源,而且通过除数与被除数的符号位判断,还能够实现有符号数运算,本次除法器的设计即采用基于减法的操作。 除法的数学运算公式为: A = B * Q + R 其中,A为被除数,B为除数,Q为商数,R为余数。 实现原理与步骤阐述如下: 要方便的利用FPGA的特性进行求商运算,需先阐明一个运算关系。二进制下数值的左右移位等同于此数与2的n次幂的乘法,左移n位后低位补零结果等于原数值与2的n次幂的乘积,右移n位后高位补零结果等于原数值除以2的n次幂的结果。例如: 十进制数14,二进制表示为1110。 原数左移2位并补零后为 111000,即56,56=14*2*2。 原数右移1位并补零后为 0111,即7,7=14/2。 利用这个移位的性质,结合FPGA方便的移位操作,可以实现快速的除法运算。一个被除数A,仍以1110(14)为例,可以表示为,可以由最高位或者最低位开始,任意截取连续的几位数据去做运算,相当于原数据进行了移位后进行的运算,运算结果只需要再进行逆向的移位操作即可得到正确的结果。例如,当被除数B为0011(3)时,可以从1110的最高位开始,“提取”最高位出来移位至最低位后与被除数0011作比较和减法操作,1110最高位1(1),相当于1000右移了3位,0001小于0011(3),次步骤的商Qt只能是0(十进制),将商再左移3位得到0000,余数R=A – B * Qt =1000。再取A的次高位与上一步骤的余数相加,共同重复上述过程,所得的商和余数也各自叠加,直至被除数A所有位数都被轮询完毕。最后所得的商和余数既是所要求的结果。 在FPGA环境下,鉴于移位和数据扩展及截取操作的方便性,上述过程,可以简化,将数据提取以及移位、叠加合并,全部用移位实现。具体操作可按下属过程执行: 将被除数A扩展至其原宽度的两倍,A占据低位,高位补零,扩展后用A_ext表示。如A=1110,则A_ext 将被除数B扩展至其原宽度的两倍,B占据高位,低位补零,扩展后用B_ext表示。如B=0011,则B_ext 迭代运算:A_ext左移一位,低位补零,取移位后的高半部分数据,用A_ext_h表示,与被除数B作比较。此例中为0001对比0011。 若A_ext_h > B,则商加1,A_ext_h=A_ext_h-B,否则商不加,也不做此减法操作。此时为方便,可用原A_ext的低位做为商Qt的存储空间,因为此时A_ext的低位的有效位已经被左移用作运算,低位补位的0没有实际意义,只起占位作用。同时,此步骤的余数Rt=A_ext_h – B * Qt=0001,但在这种移位方法中,余数保持在A_ext_h中原有的位置即可,省去了按位加减和移位操作。 重复上面4步,直至数据A的所有位都经过了轮询。最后,运算完毕的A_ext的低半部分即为商,高半部分即为余数。 上述过程只阐述了无符号运算的

文档评论(0)

mx597651661 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档