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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 7218|回复: 4

[求助] 有符号 定点小数 的 四舍五入

[复制链接]
发表于 2013-7-9 14:18:33 | 显示全部楼层 |阅读模式

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

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

x
数据类型定义为: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,该如何处理?
谢谢!
发表于 2013-7-9 16:47:04 | 显示全部楼层
对数据区分正负处理即可
 楼主| 发表于 2013-7-9 18:44:38 | 显示全部楼层
回复 2# yadog

我算了,无论正负,用这个语句都可以做到(除了-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里完成,百思无解呀
发表于 2013-7-10 14:29:16 | 显示全部楼层
回复 3# cqugjw

你这个负数肯定不对的啊,负数是要单独处理的,因为负数是补码,
[7:0]都为零的情况下dataout = datain[15:8],
所以负数的先要做一步 dataout = |datain[7:0] ? datain[15:8] + 1'b1: data[15:8]
然后在考虑进位的问题。当然你想同时考虑也行,不过要好好想想。
发表于 2018-12-17 23:20:35 | 显示全部楼层
负数 dataout = (datain[7] & ( |datain[6:0] )) ? (datain[15:8] + 1'b1): data[15:8];
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2025-3-5 02:16 , Processed in 0.024901 second(s), 7 queries , Gzip On, Redis On.

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