数字运算主要是加减乘除,FPGA只能对二进制数进行计算,并且由于FPGA基于实际电路,所以FPGA不擅长做乘法、除法和减法。
定点数的定义
几乎所有的计算机,以及包括FPGA在内的数字信号处理器件,数字和信号变量都是通过二进制数表示的,数字使用符号0和1来表示,称为比特(Binary Digit,bit)。其中,二进制数的小数点将数字的整数部分和小数部分分开。对于任意一个二进制数来讲,均可由B个整数位和b个小数位组成,即:
a
B
−
1
a
B
−
2
…
a
1
a
0
Δ
a
−
1
a
−
2
…
a
−
b
a_{B-1} a_{B-2} \ldots a_1 a_0 \Delta a_{-1} a_{-2} \ldots a_{-b}
aB−1aB−2…a1a0Δa−1a−2…a−b
其对应的十进制数大小(假设该二进制数为正数)D由
D
=
∑
i
=
−
b
B
−
1
a
i
2
i
D=\sum_{i=-b}^{B-1} a_i 2^i
D=i=−b∑B−1ai2i
给出。每一个Ai 的值取1或0。最左端的位AB-1 称为最高位(Most Significant Bit , MSB ) , 最 右 端 的 位 A-b 称 为 最 低 位 ( Least Significant Bit,LSB)。
表示一个数的一组数字称为字,而一个字包含的位数称为字长。字长的典型值是2的幂次方,如8、16、32等。字的大小通常用字节(Byte)来表示,1个字节有8个比特
定点数的表示
定点数表示是指小数点在数中的位置是固定不变的二进制数。如果用N bit表示正小数η,则小数η的范围为:
0
⩽
η
⩽
(
2
N
−
1
)
/
2
N
0 \leqslant \eta \leqslant\left(2^N-1\right) / 2^N
0⩽η⩽(2N−1)/2N
在数字处理中,定点数通常把数限制在-1~1之间,把小数点规定在符号位和数据位之间,而把整数位作为符号位,分别用0、1来表示正、负,数的本身只有小数部分,即尾数。这是由于经过定点数的乘法后,所得结果的小数点位置是不确定的,除非两个乘数都是小数或整数。对于加法运算来说,小数点的位置是固定的。这样,数x的定点数可表示为:
X
=
a
B
−
1
Δ
a
B
−
2
…
a
1
a
0
X=a_{B-1} \Delta a_{B-2} \ldots a_1 a_0
X=aB−1ΔaB−2…a1a0
式中,AB-1为符号位,B为数据的位宽,表示寄存器的长度为B位。定点数在整个运算过程中,所有运算结果的绝对值不超过1,否则会出现溢出。但在实际问题中,运算的中间变量或结果有可能超过1,为使运算正确,通常对运算过程中的各数乘一个比例因子,以避免溢出现象的发生。