在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 6822|回复: 25

[讨论] 对FPGA实现除法问题的疑问

[复制链接]
发表于 2016-4-26 18:02:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
最近在做ADC的校准模块,涉及到除法。但是本人之前没接触过除法,所以先找了一些资料来看。看了一些资料后,发现实现除法的方式有几种,基于乘法的除法、基于减法的除法、基于cordic算法的除法,等等……
      由于本人底子较薄,所以我就着重看了基于减法的除法运算,也就时循环移位除法,例子前不久Xilinx社区正好有一篇这样的文章发表(文章链接:http://xilinx.eetop.cn/viewnews-2659#sign_msg)。但是看了这篇文章和其他一些类似的文章后,我发现了如下问题:
      1)大家讲的一般都是被除数和除数位宽相同的情况,若被除数和除数位宽不同呢,该如何考虑,也就是商和余数的位宽是多少的问题?(假设被除数为48位,除数为24位,商和余数是多少位呢?)
      2)大家讲的一般都是无符号数的除法,那么对于有符号数呢?此时的除法该如何实现?
      PS:这个问题我自己在下面也探讨过,我将链接文章中的被除数改为-78(1100_1110),除数为34(0010_0010)保持不变,然后求商和余数。我试过两种办法,一是不考虑是否为有符号数,全部当无符号书处理,求得的结果显然是错误的;二是我将-78求补码(=0011_0010),然后再找文章中讲的那样进行运算发现结果仍然错误。
      3)如果一个被除数为1024,除数为1023,十进制数表示结果约为1.000977517106549364613880742913。在FPGA中,这个1024除以1023只能用商和余数的形式表示,如果我想将这个结果值再乘以一个数x,那么FPGA中该如何实现?

      help:请论坛中的大神看到此贴后帮帮忙,给小弟我解释或者答惑一些,谢谢啦!

相关帖子

 楼主| 发表于 2016-4-26 20:16:41 | 显示全部楼层
别沉了,顶一下,求助大神们
发表于 2016-4-27 00:24:49 | 显示全部楼层
1.如果是整数除法,48位/24位==(48-24)位。浮点的,根据需要的精度任意定。
2.一般都是无符号数运算。有些算法,除数例外。
3.只要记住小数点在哪就行,把它们作整数运算。
--以上如有错,请网友纠正。

链接中的除法,我粗略看了看,不是实用的算法,实验室练手用的。因为每步先要判断大小,这就相当于做了一次加减法了,然后可能还有一次减法。cordic除法也如此。

除法算法通常有:
恢复余数(Restoring)法、不恢复余数(Non-Restoring)法、SRT算法、预缩放(prescaling)算法。
前2种相对简单,易懂。弄清楚了,你那1,2,3就基本清楚了。
SRT算法较复杂。特别是高基的(High-radix)有点难。
预缩放算法是SRT的变种。

除法器有IP。不必自己设计。
发表于 2016-4-27 07:39:03 | 显示全部楼层
以上算法通常称为数字循环类算法。另外还有收敛类算法,包括Newton-Raphson算法,Goldschmidt算法。
 楼主| 发表于 2016-4-27 09:07:07 | 显示全部楼层
回复 3# 加油99       恩恩,好的,那我着重看看你所推荐的那两种除法算法,希望有所帮助。另外,对于除法有IP?这个我之前没有考虑过,我待会儿去看看……谢谢大神啦!
 楼主| 发表于 2016-4-27 09:08:25 | 显示全部楼层
回复 4# 加油99 恩恩,我先把我的校准模块搞完,再去研究这些算法,有不懂的地方我到时候请教哈!
发表于 2016-4-28 15:12:24 | 显示全部楼层
1、位宽不同可以把低位宽的高位补0,做成相同位宽,思路之一吧
2、有符号的,可以符号位单独处理,把数都转成正数,剩下就是无符号除法了
3、乘以一个固定的数?
    固定的数视情况可以选择:
    a   做个表,查找表
    b   把这个数分解,做成移位和加法的运算
发表于 2016-4-29 10:03:44 | 显示全部楼层
回复 1# 艾克0928


   xilinx 和altera 都是有做好的ip可以用的
 楼主| 发表于 2016-5-11 16:47:06 | 显示全部楼层
回复 8# typen
我现在需要将RTL代码拿到DC上进行综合,如果是生成的除法器IP核,那也可以拿到DC上进行综合吗?
 楼主| 发表于 2016-5-11 16:51:51 | 显示全部楼层
回复 7# vigorkylin
思路1我试过啦,还是可以的;
思路2倒是一个我没想到的做法;
至于乘以一个固定的数,a方案在我这里不可行,因为这个乘数过大,做成查找表就太浪费精力和资源了;b方案说的是移位,移位只适用于2的幂的乘数吧,对于非2的幂的乘数,分解有可能还是分解不完全吧,导致不能移位。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-12 18:54 , Processed in 0.032962 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表