目录
对于计算机如何表示二进制的定点数的理论,网上及书上都有说明,但是如何用verilog代码写出来呢?这就是本文主要学习的内容。
1. 定点数
1)定点数概念
定点数主要是确定小数点的位置,小数点后的二进制位数越多,所表示的数据的精度就越高,例如下图能表示的精度就是2^(-5)=0.03125,误差也就<0.03125。下图所表示的数=
也可以表示为:0xff/2^5= 7.96875.
2)FPGA中定点数的表示
模块之间的连接是无法传递小数点的。在FPGA中,定点数会通常取绝对值小于1。即,在数字处理时,定点数通常把数限制在-1~1之间,把小数点规定在符号位和数据为之间,而把整数位作为符号位,分别用0,1表示正负,尾数即数的本身只有小数部分。数x的定点数表示为:. B为数据位宽,表示寄存器的长度为B位。为符号位。
2. 浮点数
1)浮点数概念
浮点数A由m和e组成,。同时,会有固定的数值基数b和精度B来辅助计算,b为计数系统的基,由国际标准规定,IEEE 754规定b=2;精度B表示使用多少位来存储,m为B位二进制数。
IEEE 754标准中定义了4种浮点数格式,常用的有单精度(32位浮点数),双精度(64位定点数),其中单精度浮点数格式如下:
浮点数表示的范围大,精度高,但是加法乘法计算过过程复杂,更占用FPGA的资源。
3. VERILOG计算
上面说过,在FPGA中,没办法区分小数点,只是通过线的形式传递数据,最多能在最高位显示符号,而没办法显示小数。verilog会将输入的数据以最低位对齐进行计算。因此,如果需要计算,需要设计者自己隐性规定小数点的位置,且被计算数的小数点必须对齐。
1)加减法
在FPGA中,用有无符号的二进制进行加减法得到的二进制结果是一样的,但是转换乘10进制就会根据是否有溢出会有不同,如果没有溢出,那么有无符号的十进制结果相同,如果有溢出,同样的二进制数表示的十进制就会不同。做加减法运算用有无符号数的数没有明显差别,但是在做数据比较时,定义了有无符号会有明显的不同。
2)乘法运算
如果选用的目标器件内部集成了专用的硬件乘法器核,则verilog语言的乘法运算符在综合成电路时将直接综合成硬件乘法器,否则综合成由LUT等基本原件组成的乘法电路。
3)其他运算
在FPGA中,除法、指数、求模、求余等操作无法直接进行运算,而是分解成加、减、移位等操作来逐步完成。