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

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜全文
查看: 9878|回复: 25

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

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

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

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

×
最近在做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 09:07:07 | 显示全部楼层
回复 3# 加油99       恩恩,好的,那我着重看看你所推荐的那两种除法算法,希望有所帮助。另外,对于除法有IP?这个我之前没有考虑过,我待会儿去看看……谢谢大神啦!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-27 09:08:25 | 显示全部楼层
回复 4# 加油99 恩恩,我先把我的校准模块搞完,再去研究这些算法,有不懂的地方我到时候请教哈!
回复 支持 反对

使用道具 举报

 楼主| 发表于 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的幂的乘数,分解有可能还是分解不完全吧,导致不能移位。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-14 15:12:21 | 显示全部楼层
回复 11# liuzgyt       "/"只适用于除数为2的幂次方(2^n,其中n为整数)这样的情况,对于除数未知或者一般的实数类型,"/"就不适用了。而且,在某些综合工具中,并不支持"/"的综合……
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-14 15:23:41 | 显示全部楼层
回复 13# vigorkylin
       恩恩,懂了,非常感谢,那么在Verilog中,对于:   reg signed [31:0] data_in;

   data_out <= {data_in,5'b00000}+{3'b000, data_in, 2'b00} + {5'b00000, data_in};
       和
   data_out <= (data_in <<5) + (data_in<<2) + data_in;
两种写法,功能是一样的我知道,但是其消耗的硬件资源有木有区别呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-14 15:29:30 | 显示全部楼层
回复 14# yaya126       恩恩,有时间去学学,先把手中的任务完成,你说的第1点我知道,第2点和第3点原理明白一些了,但是具体实现我还不太不明白,这个需要我自己去看文献资料才能明白吧,非常感谢!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-16 09:45:54 | 显示全部楼层
回复 18# yaya126
data_out <={1'b0,  data_in, 5'b00000}+……,data_out的位宽已经定义为37位,为啥前面还要拓宽一位?是为了防止求和溢出吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2025-9-18 04:31 , Processed in 0.017608 second(s), 4 queries , Gzip On, Redis On.

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