Verilog有符号和无符号数的饱和与截尾

在学习FIR滤波器时,遇到饱和、截位,以此记录学习

        数据截位中常用的算法是四舍五入,当某个模块的输出为8bit,后一个模块只能接收5bit时,此时就需要对数据进行截位处理,即可对数据进行四舍五入。

assign filter_out = (acc_final[31:0] + {acc_final[16], {15{~acc_final[16]}}})>>>16;

        这段代码对最终滤波后的数据进行四舍五入,若acc_final[16]=1时,四舍五入需要进位,则直接加到acc_final[31:0]中(数据进位),再右移16位,表示五入;若acc_final[16]=0时,则不需要进位,则直接加到acc_final[31:0]中(数据不进位),再右移16位,表示四舍。

  1. >>:算术右移(带符号右移)

    • 当使用 >> 运算符时,如果被移位的值为正数,则在右侧填充0;如果为负数,则在右侧填充1,以保持符号不变。这意味着算术右移会保持操作数的符号位不变。
    • 示例:a >> ba 向右移动 b 位,空出的位将用 a 的符号位填充。
  2. >>>:逻辑右移(无符号右移)

    • >>> 运算符对被移位的值的符号位不起作用,它总是在右侧填充0。这意味着逻辑右移将忽略符号位,将所有位都当作非负数处理。
    • 示例:a >>> ba 向右移动 b 位,并在左侧填充0。

        数据饱和:当数据大于我们设定的最大值时,输出数据=最大值;当数据小于所设定的最小值时,输出数据=最小值。

参考:

【Verilog编程】定点数的数据饱和与截位 - 知乎

https://www.cnblogs.com/liujinggang/p/10549095.html

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值