定点数
定点数是指,数字在小数点之后和之前具有固定的位数。
可以用Qm.n表示法进行表示.
m位为整数部分
n位小数部分
有符号数的总位数N = m + n + 1
当n=0时,则定点数用来存储整数。
定点数(整数)
定点数可以用来存储整数,包括正整数和负整数。定点(整数)表示的常见格式有unsigned integer, offset binary, sign and magnitude, two’s complement。
假设每个整数都用4个bit来表示,则在上面四种格式下,二进制和十进制之间的关系如下图所示。
Unsigned integer是最直观的二进制格式,用windows自带的计算器就能实现换算。
Offset binary与unsigned integer类似,不同之处是相同的二进制表示,offset binary下代表的十进制数与unsigned integer下代表的十进数有一个整体偏移,这样就可以表示负数。
比如在图1中,4 bit二进制数对应于整数-7~8,在offset binary格式下,十进制数整体偏移了7。
对于这个偏移量,没有固定标准,比如上面的偏移量是7,也可以为8。在ADC和DAC中,经常会用到offset binary.
sign and magnitude是表示负整数的另一种简单方法。 最左边的位为符号位,0代表正数,1代表负数。其他位是数字绝对值的标准二进制表示形式。因为对于零有两种表示形式,即0000(正零)和1000(负零),所以会导致一个浪费的位模式。
Two’s complement(二进制补码)是硬件工程师喜欢的格式,也是计算机中通常表示整数的方式。 最左边的位为符号位,0代表数字为正数或0,1代表数字为1。
其编码模式可以理解为:
对于4bit二进制,其二进制表示仍为0000~1111。如上图所示,将圆盘分为16等分,把0000~1111依次带入。然后以0为分界线,按顺时针转,即0000~0111代表0~7;按逆时针转,即1111~1000代表-1~-8。
采用二进制补码时,对于正数,在十进制数和二进制补码之间进行转换很简单,即从十进制到二进制的简单转换。 对于负数,通常使用以下算法:
(1)取十进制数的绝对值,
(2)将其转换为二进制,
(3)对所有位进行补码(1变为零,0变为1),
(4)在二进制数上加1。
二进制补码对人类的大脑来说比较复杂,但是在进行数据处理时,则非常方便。
定点数(小数)
以上是当N=16时,不同的m/n值时,所对应的动态范围和精度。
浮点数(实数)
浮点数的编码方案比定点的编码方案复杂,其基本概念与科学计数法中的基本思想相同,两者的不同点,在与浮点数的基为2,科学计数法的基为10。
ANSI/IEEE Std. 754-1985标准将32bit数据形式定义为单精度(single precision),64bit数据形式定义为双精度(double precision)。
以单精度为例,将其32位分为三个独立的组:位0到22形成尾数(记为M),位23到30形成指数(记为E),位31是符号位(记为S)。则:
IEEE标准将最大数和最小数的范围略微缩小,分别为和。
与定点设计相比,浮点设计会消耗更多的FPGA资源,带来更高的消耗。所以在满足指标要求的情况下,优先采用定点设计,可以有助于降低FPGA资源的使用、减少功耗。
文献[3]中,则阐述了,在保证指标的情况下,采用定点设计,可以减少资源使用,进而降低功耗。
参考文献:
[1]The Scientist and Engineer's Guide to Digital Signal Processing_Ch4
[2]EE 3610 Digital Systems
[3]Ambrose Finnerty and Hervé Ratigner,Reduce Power and Cost by Converting from Floating Point to Fixed Point
[4]Floating Point Converter:https://babbage.cs.qc.cuny.edu/IEEE-754.old/Decimal.html
相关文献下载,可回复消息:“ 定点、浮点数文献下载“