无符号定点数
N-bit 二进制数共可以组成2^N个元素。用U(a,b)表示一个N(N=a+b)bit的数,a表示整数位宽,b表示小数位宽。对于任意一个数x,可用下面公式计算得到:
能表示的最小数是0,最大数是:
例如
1. 8-bit无符号定点数U(6.2),每个bit的权重分别是
位表示权重为。范围是0到
1000_1010b 表示的数是
2. U(-2,18),共有(-2+18)=16bits,取值范围是0至
0000_0100_1011_1100b表示的数是
3. U(16,0),共有(16+0)bits,取值范围是0至
0000_0100_1011_1100表示的数是
反码与补码
反码(one's complement)
补码(two's complement)
例如:
U(8,0) 03h(0000_0011b)的反码是1111_1100b
U(8,0) 03h(0000_0011b)的补码是1111_1101b
应用场景:求绝对值
wire signed [7:0] a;
wire unsigned [7:0] abs_a;
assign abs_a = a[7] ? (~a[7:0] + 8'h1) : a;
用补码表示的有符号定点数
用A(a,b) 表示N (N=a+b+1) bits,任意一个数x的值等于:
取值范围是:
例如:A(13,2),共有13+2+1=16bits,取值范围是
小结
U(a,b) 位宽是 a+b,取值范围是
A(a,b) 位宽是a+b+1,取值范围是
加法操作
X(c,d) + Y(e,f) 相加的前提是 c=e, d=f
因此,x(c,d) + x(c,d) = x(c+1,d),该规则对有符号数或者无符号数都适用
乘法操作
U(a1,b1) X U(a2, b2) = U(a1+a2, b1+b2)
A(a1,b1) X A(a2, b2) = A(a1+a2+1, b1+b2)
除法操作
U(a1,b1)/U(a2,b2) = U(a1+b2,[log2(2^(a2+b1)-2^(b1-b2))])
参考文章
Fixed-Point Arithmetic: An Introduction