FPGA 定点数

定点数就是小数位宽不发生改变的数,小数点位置固定。

定点数位宽构成:{符号位,整数位,小数位}

当定点数为有符号数,数据的最高位为符号位,整数位和小数位需要根据精度去定义位宽。

假如一个定点数位宽为8位,1位符号位,0位整数位,7位小数位,定点数对应量化范围是-1 ~ +1,小数精度为 1/(2^7);那么134定点数为整数,但表示的是 134*(1/(2^7)),其值为134所对应的浮点数。

举例:-123的定点数对应二进制补码?浮点数? (数据格式:1位符号位,0位整数位,7位小数位)

二进制补码:2^8-123

浮点数:-123 * (1/(2^7))

有符号定点数加减法运算法则:

有符号定点数做加法:127+(-110) = 8‘b0111_1111 + 8'b1001_0010 = 9'b1_0001_0001 = 273;

实际结果应该为17;原因在于有符号定点数加法会产生溢出,需要在做加法之前把加数和被加数扩展一位位宽,最后的结果为{1位符号位,1位整数扩展位,7位小数位};对于负数,则需要把最高位扩展。

9’b0_0111_1111 + 9'b1_1001_0010 = 10'b10_0001_0001;因为加法结果为9bit,所以要把最高位1丢弃,结果为9'b0_0001_0001=17,{1位符号位,1位整数扩展位,7位小数位}。

有符号数乘法运算法则:

-1.2*0.8使用定点数进行定点化计算

{1位符号位,3位整数位,10位小数位}

先转换为 1.2*0.8

1.2定点数:2^10*1.2;0_0100_1100_1100

0.8定点数:2^10*0.8;0_0011_0011_0011

两数相乘之后,位宽26位,整数位6位,小数位20位

1.2*0.8=00_0000_1111_0101_1000_1010_0100=1005732

转化为负数2进制补码,加1位符号位,27位

2^27-1005732=133211996=111_1111_0000_1010_0111_0101_1100

即为-1.2*0.8的二进制补码。

有符号数除法运算法则:

在做定点化除法运算时,最好把除 数被除数定义为一样位宽,小数点位置一样,也就是定点数的小数位宽和整 数位宽一致。这样计算结果好处理。

比如:除数是 10 位整数,8 位小数。被除数是 8 位整数,8 位小数,这时候只需要把被除数高位补 2bit0 即可变为相同位宽。

当除数被除数小数部分位宽不等时,例如,除数 8bit 整数,小数位 8bit;被除数 8bit 整数,小数位 4 位。需要在被除数的小数位低位补齐 4 个 bit0;保证小数位和除数一致。

公式:被除数=商*除数+余数

余数就是可以转化为小数部分;

无符号数除法的小数位宽:

 

FractRmd 是小数部分,IntRmd 是余数,2^F 是指余数的量化位宽,或者小数 量化位宽。无符号数的小数位宽和 F 设置一致,假如设置小数位宽为 16 那么 小数位宽就是 16 位。

100/1234=0.081037—转化定点数=0.081037*2^16=5310

将整数部分和小数部分拼接={整数部分,小数部分}

有符号数除法的小数位宽:

FractRmd 是小数部分,IntRmd 是余数,2^F-1 是指余数的量化位宽,这里因 为是有符号数,小数部分最高位用于符号位,剩余 F-1 位是小数位。例如设置有符号除法小数 16 位,那么实际小数只有 15 位,最高位为符号位。

如果使用小数需要和整数部分拼接,有符号数都是二进制补码的形式。

例如 16 位小数 有符号数 1111_1111_1111_1000=-(8/32768)

除法器输出商整数 3 位带有符号,1 位符号位 2 位整数位 101(十进制的-3) 将整数部分和小数部分拼接={整数[2:0],小数部分[14:0]} //1 位符号位 2 位整数位 15 位小数位。

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值