|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
在通常的设计中,不建议使用浮点数计算,因为浮点数计算会消耗FPGA大量的逻辑单元。但很多情况下,又需要使用浮点数进行计算提高精度。( o6 T/ h$ t: P1 H1 |3 ]
) @& h5 D1 u6 f3 _, f% S ?8 ~) M8 c所以需要有合适的方法计算浮点运算。
" n- o# R. b$ l8 m6 B' ~7 H6 o& ]! ~# H! L6 {8 j) p
正常情况下FPGA只能以整形数据进行计算,必须将浮点数转换为二进制整形数据进行输入。那么小数点就在你的心中。7 H$ b& s$ H- t: f: r! V
7 c. v- [5 h" V, R比如,当输入123乘以241给FPGA的时候,FPGA计算的就是123*241的整形乘法,得到的结果也是整形输出,但是你也可以说我做的是1.23*2.41,数据里面小数点究竟在哪里自己的程序知道就行了。比如可以统一约定,所有的数据总线低4bit是小数部分,写在spec里面即可,FPGA是不知道的,算完的数据解释权在你手上。但是不可能给FPGA输入1.23乘以2.41,这个没法做。/ H: l; b8 S, c2 H
) W1 v2 f: F, _: x1 }7 P
理论上讲,所有的硬件只能算整数,小数点在哪里,那一部分是指数,那一部分是底数,那是一种额外约定。运算器得到整形的结果之后,软件根据小数点的约定,将其理解为小数。
) V: l: P f) R/ [1 E r, P
, q: _/ x; O1 [- j+ B就好比你有一个只能算整数的计算器。怎么算小数呢?自己大脑里面转一下,先算整数出来,再加小数点就行了。硬件的设计自然也是这样,人类已经设计出来了整形乘法器,还有必要再重新设计浮点乘法器吗?不过是在整形乘法器前后加了一点数据处理而已。0 [! S! ~+ K3 Q- N2 b
7 g$ {, e* Z4 w7 k接下来介绍一款标准:( E I }" ~7 |' p: x
6 S \; l. e5 B1 c& z; [
可以根据IEEE 754 floating point single precision 标准进行32bit单精度浮点数输入。# G7 H2 B3 J/ Y) n" R
3 x! `" F2 _! F) g4 c$ F1 R2 y. F! e+ @5 f4 M6 l
8 h* g( j+ H' {6 ]- S" r需要注意的是Exponent(指数)若全为0,则Mantissa(位数)要进行denormal操作。: A( a5 ?* q" R( Y" T4 p0 h
3 ?2 W# q$ s# s3 D3 A# C& U- |
根据相关的标准或者约定,可自行设计FPU。
. M. c: T2 k5 K---------------------
7 U' d% C& F$ T0 E! f$ E/ ~5 A5 q作者:ALIFPGA
0 N' n, s( p0 J$ B$ y$ j; c+ R6 X$ j
0 U4 _" W4 W# \4 d |
|