有符号 定点小数 的 四舍五入
时间:10-02
整理:3721RD
点击:
数据类型定义为:reg signed [15:0] data;
其中高八位为整数位,低8bit为小数位,现要对小数部分做四舍五入。
对于正数的四舍五入就简单了,看7bit是否为1,是则高八位+1,否则直接舍去低八位;
data_int <= data[7] ? data[15:8]+1 : data[15:8];
对于负数这样的操作还可行么?
我测试了下对于-3.5这样小数部分刚好是0.5整的负数,结果会变成-3,而不是期望的-4,该如何处理?
谢谢!
其中高八位为整数位,低8bit为小数位,现要对小数部分做四舍五入。
对于正数的四舍五入就简单了,看7bit是否为1,是则高八位+1,否则直接舍去低八位;
data_int <= data[7] ? data[15:8]+1 : data[15:8];
对于负数这样的操作还可行么?
我测试了下对于-3.5这样小数部分刚好是0.5整的负数,结果会变成-3,而不是期望的-4,该如何处理?
谢谢!
对数据区分正负处理即可
我算了,无论正负,用这个语句都可以做到(除了-0.5整的情况);data_int <= data[7] ? data[15:8]+1 : data[15:8];
正数就不说了。
+8.5的结果是9;
-8.8的结果是-9,-8.2的结果是-8,这都正常;
但是-8.5还是得到了-8,期望值应该是-9才对,如何对-0.5这个临界点做处理呢?
要在一个clk里完成,百思无解呀
你这个负数肯定不对的啊,负数是要单独处理的,因为负数是补码,
[7:0]都为零的情况下dataout = datain[15:8],
所以负数的先要做一步 dataout = |datain[7:0] ? datain[15:8] + 1'b1: data[15:8]
然后在考虑进位的问题。当然你想同时考虑也行,不过要好好想想。