【FPGA数学运算】FPGA中的浮点数与定点数

本文转载自:FPGA入门到精通微信公众号

FPGA开发中浮点数(小数)运算出现频率非常高,特别是图像处理、数字信号处理、深度学习、神经网络等等,但FPGA中却没有浮点数这个数据类型,那么应该怎么操作才能完成浮点数运算?

今天我们就来聊一聊“FPGA中浮点数与定点数”,本文将介绍浮点数和定点数的概念、表示方法及应用实例,让大家轻松掌握FPGA开发中的浮点数运算。

一、浮点数

1、浮点数定义

浮点数主要由尾数M和阶码E构成。例如基数为2的数F的浮点数表示为:

说明:

(1)尾数M必须为小数,用n+1位有符号定点小数表示,可采用的原码,补码。

(2)阶码E必须为整数,用k+1位有符号定点整数表示,可采用原码,补码,移码。

(3)浮点数编码的总bit位数m=(n+1)+(k+1)

2、常用的IEEE754标准浮点数

常见的单精度和双精度浮点数是按照IEEE-754标准编码和解码的,该标准规定了浮点数的位数、指数和尾数的分配方式,具体格式如下图:

尾数M用原码;阶码E用“移码”;基为2。

说明:

(1)S—尾数符号,0正1负;

(2)M—尾数,纯小数表示,小数点放在尾数域的最前面。采用原码表示。

(3)E—阶码(指数),采用“移码”表示(移码可表示阶符);阶符采用隐含方式,即采用移码方法来表示正负指数。8位以2为底,阶码=阶码真值+ 127。

3、移码是什么

移码在补码的基础上,将符号位取反得到的,是其符号位用“1”表示正数,用“0”表示负数,数值部分与补码相同

移码主要用于表示浮点数的阶码,其目的是使浮点数的机器零为全零。

浮点数的运算较复杂,不能直接当成二进制数参与运算,FPGA实现起来会很困难,消耗资源也会很多,这里就不展开介绍了,理解基本的浮点数数据结构就行。

二、定点数

1、定点数定义

定点数是小数点固定地(隐含)在数据的某一位置上。

定点数根据小数点位置的不同可以分为:

(1)定点整数

小数点在整个数据除符号位外的最右边。

举例:100(D) = 01100100(B)

(2)纯小数

小数点在整个数据除符号位外的最左边。

举例:0.125(D) = 0.00100000(B)

(3)普通定点数

小数点在数据的中间某一位置。

这时候需要约定小数点的位置,例如1个字节数据约定前5bit为整数位,后3bit为小数位,则:

1.5(D) = 00001 100(B)

25.125(D) = 11001 001(B)

这里要注意,小数点后面数据是这样换算成小数的,比如111,等于2^(-1)+ 2^(-2)+ 2^(-3)。

2、定点数的应用

(1)数字信号处理

定点数在数字信号处理领域具有广泛应用,如定点FFT(快速傅里叶变换)算法、定点卷积运算等。

(2)控制系统

在控制系统中也常见到定点数的应用,如定点PID(比例-积分-微分)控制器、定点状态观测器等。这里,定点数可以简化计算,提高控制器性能。

(3)数字图像处理

在数字图像处理中,各种图像算法,比如图像滤波、图像缩放等等。

三、浮点数转定点数

1、浮点数转整数

将浮点数乘以2^n,将小数部分转换为整数处理,其中n越大,转换后数据的精度越高。

后续直接按整数运算处理即可,计算到最终结果时,将结果右移n为即可。

举例:计算y = 0.169*x,将0.169*1024 = 173。

reg [15:0] x;

reg [23:0] x_m;

reg [15:0] y;

x_m = x *173;

y = x_m[15:10];

推荐这个方法,理解起来更简单。

2、浮点数转定点数

首先约定好整数位宽和小数位宽,例如,整数位宽为3位,小数位宽为12位。

那么就将浮点数乘以2^12即可,低12bit就是小数。

这个实质就是浮点数转整数,推荐直接按整数处理即可。

最新文章

最新文章