打印

DSP硬件实现的优化(八)— saturation, rounding的原理和实现

[复制链接]
1407|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tianli1980|  楼主 | 2014-9-14 22:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
          在数字信号处理系统中,大部分情况下数据都是用定点表示。但是由于DSP经常使用到乘法器,那么两个定点数相乘后的数的位宽将是两个操作数位宽之和。比如说A*B,A的位宽是(1,7,4),B的位宽是(1,9,5),相乘后的结果将会变成(1,16,9),相乘结果的数据位宽此时竟然达到了16比特。

              如果此结果以后还要再做乘法运算,那么位宽将会越扩越大。乘法器所占的资源基本上在数字信号处理系统中的比重很大,乘法器的位宽越大,部分积也越多,加法树的层级也越来越多,直接影响了系统的Fmax(时序)和资源。因此在实际的定点化仿真阶段时,算法设计会综合考虑系统性能(因为对数据进行截位会影响系统性能和精度)和实现资源,对某些时候的乘法结果作rounding(四舍五入)或者saturation(饱和)处理。

            那么rounding是如何操作的呢?比如说有一个数,经过乘法后得到的结果表示方式为(1,16,12),也就是说前面的第0到第11比特是小数位,第12到14比特是整数位,第15比特是符号位。如果想把该数rounding到(1,10,7),也就是只用10个比特表示,第0到第6个比特是小数位,第7到第8比特是整数位,第9比特是最高位。此时的rounding规则是怎样的呢?以上面为例,假设A = 1010'1011'1111'1111,那么此时截位时,把第0到第4比特截取掉,第4比特为1,那么截取的时候要进行进位,即B = 101'0101'1111 + 1'b1。此时有个问题需要注意,由于截位后是要做4舍五入,需要进位,那么实际上B的位宽是需要扩一位的。由于A是有符号数,所以在截位四舍五入时需要按符号位扩展,即原来的符号位是什么该比特就扩展成什么。以上面的例子B = 1101'0110'0000。这时候B的位宽是12比特,但是我们的目标是把数rounding到10比特。
           
         那么下一步该如何操作呢?事实上我们的小数位已经是7比特,无法做截取,此时应该对整数位做saturation(饱和)操作:即大于所能表达的最大数就令其为最大数,小于所能表达的最小数就令其为最小数。还是以B为例子,由于我们的目标是把B变成(1,10,7),而此时B是(1,12,7),整数位多出了两比特,所以要对整数位进行截取。如果此时B(1,12,7)的超过1'1111'1111或者是小于100'000'0000,那么统统表示为01'1111'1111或者是100'000'0000。此即为饱和操作。

           做饱和操作时有个小技巧,即对B(1,12,7)扩展后的符号位跟第11位,第10位(即rounding目标数的符号位)做比对,如果都是同样的值,即都为0或都为1,那么就直接把第11和第12位截取即可,因为此时四舍五入没有发生进位,如果不相同,则表示发生了进位,那么此时就要按照最高位是0还是1选择把rounding后的目标数变为01'1111'1111或者是100'000'0000。在上面那个例子中,第12位到10位的值不一样,因此可以知道10位数肯定不能表达该数,所以只能选择饱和,饱和后的数值为10'0000'0000。

相关帖子

沙发
zhangmangui| | 2014-9-14 22:27 | 只看该作者
这个彻底没接触过啊

使用特权

评论回复
板凳
小木欧尼| | 2014-9-14 23:24 | 只看该作者
lz这是从哪儿找的资料啊 不错

使用特权

评论回复
地板
lijiabaobei| | 2014-9-14 23:46 | 只看该作者
太厉害啦 资料很强大

使用特权

评论回复
5
edishen| | 2014-9-15 20:26 | 只看该作者
支持

使用特权

评论回复
6
xiaole7675| | 2014-9-16 08:36 | 只看该作者
看的有些不明白。(1,7,4)和(1, 9, 5)什么意思? 既然是定点非浮点。有效位数应该都是一样的吧。兄弟能否跟我解释一下。

使用特权

评论回复
7
long009| | 2014-11-30 13:54 | 只看该作者
谢谢分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

482

主题

2214

帖子

11

粉丝