赞
踩
字长基本问题
字长(位宽)和小数部分字长共同构成了定点数的两个要素。以wl表示字长,fl表示小数部分字长,那么有符号定点数以Fix_wl_fl的形式表示,无符号定点数的字长以UFix_wl_fl的形式表示。对于定点小数,一旦wl和fl确定,那么小数点的位置即可固定。
fl表示小数部分,也就是1被等分成了 1/2^fl部分。
例如UFix_wl_fl = UFix_8_6,表示共8bit位宽的数其中6bit表示小数,2bit表示整数位
例如 Fix_wl_fl = Fix_8_6,表示共8bit位宽的数其中6bit表示小数,1bit表示整数位,1bit表示符号位
下表给出了Fix_5_3与十进制小数的对应关系:
在定点小数中,有一类值得关注,那就是只有一位整数位的定点小数。下表给出了Fix_5_4与十进制小数之间的对应关系。可见,此类定点小数只能表示(-1,1)区间内的纯小数,范围受限。
在表2中,如果将小数点抹掉,把其视为整数,那么也就是将数字放大了16倍,这对运算结果并没有实质的影响。采用FPGA实现数字信号处理是可以这么做的。
溢出问题
定点数据在运算时要防止溢出,包括上溢(Overflow)和下溢(Underflow)。
上溢是指运算结果超出了定点数整数部分所能表示的范围,下溢是指运算结果超出了定点数小数部分所能表示的范围。
例如UFix-4-2所能表示的定点数的范围是[0,3.75],步进(精度)为0.25,如果运算结果为4,则发生上溢;如果运算结果为0.125,则发生下溢。一旦溢出将会造成计算精度的损失甚至结果的错误。因此,合理选择字长尤为重要。
定点数据的量化模式:
定点数据的量化模式决定了当运算结果的精度高于定点数所能表达的精度时如何对超出精度的比特处理。通常有两种方法:Truncate和Round。
Truncate为直接截尾,将超出精度部分的比特舍弃掉。
Round为“四舍五入”,将舍去的比特的最高位加到要保留的比特的最低位。判断需保留位宽的下一bit是0还是1,是1就五入,是0就舍去。
采用Round可以获得更高的精度,但是也需要额外的资源(因为需要相加)。这两种方式都是针对发生下溢时的处理方式。
定点数据的溢出模式:
定点数据的溢出模式决定了当运算结果大于定点数所能表示的最大值时如何对溢出部分进行处理。通常有两种方式:Saturate和Wrap。
Saturate为饱和处理,一旦溢出就将计算结果饱和处理为最大值。(所能表示的最大值)
Wrap为截断处理。
如下表,为溢出模式的两种处理方式。
上表6.125有符号数为8bit位宽:8’b0011_0001;
用Fix_5_3表示小数时,6.125明显发生了上溢,需要进行溢出模式处理,采用wrap方式时,得到的结果为-1.875。直接截取低5bit位宽。
采用saturate时,得到的结果是1.875. 直接取5bit所能表示的最大值,做饱和处理
不难看出,溢出对于计算结果的不利影响。这两种方式都是对发生上溢时的处理方式。
本文参考至:https://blog.csdn.net/Reborn_Lee/article/details/83211501
本人稍加注释
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。