如何在FPGA中存储处理非整数(小数)

                                                    如何在FPGA中存储非整数(小数),数字的定点化处理

1:一个提前要知道的知识:二进制数的原码反码补码

2:举例说明一个二进制数的原反补

3:回到最初的问题

 

1:在数字系统中为了计算的方便正负数都用补码表示。正数的原码,反码,补码和自身一样不变。负数的反码是最高位的符号位不变,其它位取反,补码等于反码加一。

 

2:4位有符号二进制数表示的范围是-8到7(补码)分别是1000 1001 1010 1011 1100 1101 1110 1111 0000 0001 0010 0011 0100 0101 0110 0111。例如一个负数11001,它的反码等于10110补码等于10111。其实就是32 – 此负数的绝对值,11001的绝对值就看后四位是9, 32–9=23转换成二进制是10111和刚刚算的一致。

 

3:在FPGA设计中有时要进行数据的存储和运算,但是多数芯片是不支持浮点运算。这时可以将浮点数进行定点化处理。所谓定点化是一个数用于表示整数位位数和小数位的位数是固定的。例如一个存储位宽为16位的存储器,最高位第15位是符号位,12位到14位这三位表示整数位,0到11位表示小数。整数部分和2中举的例子一直是从-8到7。到小数部分其实多数时候是我们最关心的。因为误差只来自小数部分。小数部分有12位,也就是把从0到1用这12位二进制均分,精度为1/2^12 = 1/4096 = 0.000244140625

以3.1415926来举例说明首先高位符号位可以确定是0,因为这是个正数。其次看整数位是3,用3位二进制表示为011,再看小数位是0.1415926,用此数除以精度就得到小数量化后十进制整数部分0.1415926/ 0.000244140625 = 579.9632896约等于580,转换成12位二进制为0010 0100 0100.所以3.1415926的量化结果为0 011 0010 0100 0100 。如果是负数也是先这样操作,最后一定要用补码表示。

猜你喜欢

转载自blog.csdn.net/qq_41754003/article/details/107281257