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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 12092|回复: 10

[求助] FPGA有符号数据截位问题

[复制链接]
发表于 2014-12-4 21:38:59 | 显示全部楼层 |阅读模式

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

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

x
我调用了xilinx的乘法IP核,输入为12位有符号数和16位有符号数,输出结果时28位的有符号数,但是我只想要25位,因此需要截位,但是有符号数应该是二进制补码表示的,对补码进行截位也是舍去低位就可以了吗,我仿真时发现这样截位不对呀,希望知道的人能指点一下,谢谢了,加急呀
发表于 2014-12-4 23:26:15 | 显示全部楼层
这个取决于设计
结合数学意义看
发表于 2014-12-5 09:02:24 | 显示全部楼层
wire 【11:0】 a;
wire [15:0] b;
wire [27:0] c;
wire [24:0] d;
c = a*b;
如果你的设计意图是: d = c/8, 那么, d = c【27:3】;就可以了。
如果你的设计意图是: d=c;只是d,c保留的位数不一致,那么就需要判断溢出了。
可如下: d = ((c【27:24】== 4'b0000) || (c[27:24] == 4'b1111) ) ? c[24:0] : c[27] ? 25'h1000000 : 25'h0ffffff;
 楼主| 发表于 2014-12-15 13:12:53 | 显示全部楼层
回复 3# muzilinvkouyue


   谢谢您的回答,我的设计意图和你说的第二种是一样的,我还得领悟一下溢出是什么情况发生
发表于 2014-12-25 21:18:34 | 显示全部楼层
回复 1# jie768029

good
发表于 2014-12-25 23:15:20 | 显示全部楼层
回复 2# 418478935


    good
发表于 2015-5-22 00:07:52 | 显示全部楼层
非常感谢UID839785 ,看起来很有道理,我去推敲推敲~~
发表于 2017-5-15 16:43:45 | 显示全部楼层
回复 3# muzilinvkouyue

c[27:24]== 4'b1111 || c[27:24] == 4'b0000只是判断了一部分非饱和的场景,当c为负数时,如果c[23:0]全部为零,按照前面所述的非饱和的条件去截位,会将c截成0,而实际上,c需要截成负的最大,即25‘h1000001.
另外饱和条件分支(c[27]判断的分支)中,负的最大也应该修改为25'h1000001.

Note:
数据均为补码格式
发表于 2017-5-16 02:12:31 | 显示全部楼层
两种可能:
【1】 截位之前的数值已经overflow或者underflow了
【2】 input数据和output数据的shift有问题
发表于 2017-5-16 10:49:46 | 显示全部楼层
四舍五入就可以了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-22 12:45 , Processed in 0.026849 second(s), 9 queries , Gzip On, Redis On.

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