资源预览内容
第1页 / 共2页
第2页 / 共2页
亲,该文档总共2页全部预览完了,如果喜欢就下载吧!
资源描述
DSP硬件实现的优化(八)一saturation,rounding的原理和实现在数字信号处理系统中,大部分情况下数据都是用定点表示。但是由于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=1010101111111111,那么此时截位时,把第0到第4比特截取掉,第4比特为1,那么截取的时候要进行进位,即B=10101011111+1b1。此时有个问题需要注意,由于截位后是要做4舍五入,需要进位,那么实际上B的位宽是需要扩一位的。由于A是有符号数,所以在截位四舍五入时需要按符号位扩展,即原来的符号位是什么该比特就扩展成什么。以上面的例子B=110101100000。这时候B的位宽是12比特,但是我们的目标是把数rounding到10比特。那么下一步该如何操作呢?事实上我们的小数位已经是7比特,无法做截取,此时应该对整数位做saturation(饱和)操作:即大于所能表达的最大数就令其为最大数,小于所能表达的最小数就令其为最小数。还是以B为例子,由于我们的目标是把B变成(1,10,7),而此时B是(1,12,7),整数位多出了两比特,所以要对整数位进行截取。如果此时B(1,12,7)的超过了0111111111或者是小于1000000000,那么统统表示为0111111111或者是1000000000。此即为饱和操作。做饱和操作时有个小技巧,即对B(1,12,7)扩展后的符号位跟第11位,第10位(即rounding目标数的符号位)做比对,如果都是同样的值,即都为0或都为1,那么就直接把第11和第12位截取即可,因为此时四舍五入没有发生进位,如果不相同,则表示发生了进位,那么此时就要按照最高位是0还是1选择把rounding后的目标数变为0111111111或者是1000000000。在上面那个例子中,第12位到10位的值不一样,因此可以知道10位数肯定不能表达该数,所以只能选择饱和,饱和后的数值为1000000000。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号