微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > FPGA有符号数据截位问题

FPGA有符号数据截位问题

时间:10-02 整理:3721RD 点击:
我调用了xilinx的乘法IP核,输入为12位有符号数和16位有符号数,输出结果时28位的有符号数,但是我只想要25位,因此需要截位,但是有符号数应该是二进制补码表示的,对补码进行截位也是舍去低位就可以了吗,我仿真时发现这样截位不对呀,希望知道的人能指点一下,谢谢了,加急呀

这个取决于设计
结合数学意义看

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;



   谢谢您的回答,我的设计意图和你说的第二种是一样的,我还得领悟一下溢出是什么情况发生


good



    good

非常感谢UID839785 ,看起来很有道理,我去推敲推敲


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

两种可能:
【1】 截位之前的数值已经overflow或者underflow了
【2】 input数据和output数据的shift有问题

四舍五入就可以了

ting.objective
受教了~  感謝分享

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top