目录
1 前言
FPGA设计中的数值表示均为二进制表示方法,其对数字的量化精度有限。因此,深入理解有效字长效应对数字信号的处理精度和性能的影响至关重要。且在考虑数字的表示方法时,须同时考虑数字具有足够的精度和尽可能少的消耗逻辑资源。按数值类型分类,FPGA中的数值分为整数、定点数以及浮点数,以下分别对其表示方法、运算的HDL描述进行介绍。
2 整数
2.1 整数的表示方法
整数可分为无符号和有符号整数,有符号整数可使用原码、反码和补码对其表示。
2.2.1 原码
有符号整数最高位表示符号位,当最高位为0时,表示正数;当最高位为1时,表示负数。其他位用于表示数值的大小(绝对值)。以8位有符号整数为例,表示范围为(-127~127),其中有两种结果表示0,即00000000(+0)和10000000(-0),如表2.1所示。
无符号整数 | 有符号整数 | 二进制原码 |
0 | +0 | 0000_0000 |
1 | +1 | 0000_0001 |
...... | ||
127 | +127 | 0111_1111 |
128 | -0 | 1000_0000 |
129 | -1 | 1000_0001 |
...... | ||
255 | -127 | 1111_1111 |
2.2.2 反码
正数的反码与原码一致,负数的反码为符号位除外,其他位取反。以8位二进制为例,如表2.2所示。
无符号整数 | 有符号整数 | 二进制反码 |
0 | +0 | 0000_0000 |
1 | +1 | 0000_0001 |
...... | ||
125 | +125 | 0111_1101 |
126 | +126 | 0111_1110 |
127 | +127 | 0111_1111 |
128 | -127 | 1000_0000 |
129 | -126 | 1000_0001 |
130 | -125 | 1000_0010 |
...... | ||
254 | -1 | 1111_1110 |
255 | -0 | 1111_1111 |
2.2.3 补码
正数的补码与原码一致,负数的补码为符号位除外,其他位取反+1。补码解决了数值0多种表示的问题以及循环进位的需要。以8位二进制为例,如表2.3所示。
无符号整数 | 有符号整数 | 二进制反码 |
0 | +0 | 0000_0000 |
1 | +1 | 0000_0001 |
...... | ||
125 | +125 | 0111_1101 |
126 | +126 | 0111_1110 |
127 | +127 | 0111_1111 |
128 | -128 | 1000_0000 |
129 | -127 | 1000_0001 |
130 | -126 | 1000_0010 |
...... | ||
254 | -2 | 1111_1110 |
255 | -1 | 1111_1111 |
2.2 整数加法
2.3 整数减法
2.4 整数乘法
2.5 整数除法
3 定点数
3.1 定点数的表示方法
3.2 定点数加法
3.3 定点数减法
3.4 定点数乘法
3.5 定点数除法
4 浮点数
4.1 浮点数的表示方法
4.2 浮点数加法
4.3 浮点数减法
4.4 浮点数乘法
4.5 浮点数除法
5 总结
6 参考文献
何宾,张艳辉. Xilinx FPGA数字信号处理系统设计指南 ----- 从HDL、Simullink到HLS的实现[M].北京:电子工业出版社,2021:85-119.