VHDL实现32位除法器(可选有无符号运算).docVIP

VHDL实现32位除法器(可选有无符号运算).doc

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
除法器模块说明 前言 在本项目中,需要用到非2的整数次幂的除法操作,所以不能通过移位操作来完成,而且不允许使用既有的IP核,这样,就需要在VHDL环境下自建一个除法功能模块,以在环路计算中实现除法操作。 任务分析 此除法模块必须能够被重复调用,实现环路计算时对此模块时分复用,以达到节约逻辑资源的目的。另外,经过对环路数据的计算,需要除法操作的数据可以控制在二进制下32位宽度以内,所以,本次除法器的设计是以32位有符号数的运算为目的的。 设计原理 除法器的设计主要有两种方法,一是基于乘法操作,另一是基于减法操作。基于乘法操作的算法是把除法看做乘法的逆运算,实现时需要顺次进行,因此运算速度较慢且需要耗费大量的逻辑资源,在FPGA中实现是不推荐此种方法,在此也不做讨论和采用;与此相比,在FPGA环境下,基于减法的操作不仅速度快,而且节省资源,而且通过除数与被除数的符号位判断,还能够实现有符号数运算,本次除法器的设计即采用基于减法的操作。 除法的数学运算公式为:A = B * Q + R (1) 其中,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的低半部分即为商,高半部分即为余数。 上述过程只阐述了无符号运算的办法,有符号数运算与此方法相同,只是在运算前先将有符号数转换成无符号数运算并提取原数据符号,计算完毕后再根据提取的符号位将结果逆变换回有符号数结果即可。 代码实现 相应FPGA代码编写完毕后经过了静态时序仿真验证。代码如下: process(clk,reset) begin if(reset=1)then sign_quo = 0; sign_res = 0; elsif(clkevent and clk=1)then if(dat_load_en=1)then sign_quo = (divisor(31) xor dividend(31)) and sign_sel; --有符号数除法运算时商的符号 sign_res = dividend(31) and

文档评论(0)

153****9595 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档