|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
在通常的设计中,不建议使用浮点数计算,因为浮点数计算会消耗FPGA大量的逻辑单元。但很多情况下,又需要使用浮点数进行计算提高精度。
3 F/ F- [9 O; h0 x9 L$ e* o8 b, f. I
( y( z4 a' R: z6 q$ T3 u9 e9 R所以需要有合适的方法计算浮点运算。" ^: W; }) m2 Z& j( m
w& t! _, n* r正常情况下FPGA只能以整形数据进行计算,必须将浮点数转换为二进制整形数据进行输入。那么小数点就在你的心中。
- R1 g# E2 N' O
" C1 o$ l4 O% @比如,当输入123乘以241给FPGA的时候,FPGA计算的就是123*241的整形乘法,得到的结果也是整形输出,但是你也可以说我做的是1.23*2.41,数据里面小数点究竟在哪里自己的程序知道就行了。比如可以统一约定,所有的数据总线低4bit是小数部分,写在spec里面即可,FPGA是不知道的,算完的数据解释权在你手上。但是不可能给FPGA输入1.23乘以2.41,这个没法做。
5 Z4 G8 f% ? {: C# v" U6 ~
" k1 I' d2 A2 D2 B理论上讲,所有的硬件只能算整数,小数点在哪里,那一部分是指数,那一部分是底数,那是一种额外约定。运算器得到整形的结果之后,软件根据小数点的约定,将其理解为小数。% i6 G2 [/ n* r* N1 |' V0 _! V; Q
$ ]3 X `* d3 A c* q
就好比你有一个只能算整数的计算器。怎么算小数呢?自己大脑里面转一下,先算整数出来,再加小数点就行了。硬件的设计自然也是这样,人类已经设计出来了整形乘法器,还有必要再重新设计浮点乘法器吗?不过是在整形乘法器前后加了一点数据处理而已。8 t1 P8 z" Y1 [0 X; d
( q8 E2 L8 M; y& F
接下来介绍一款标准:
& G3 S8 E. u! j* {# i# G+ e9 ?* L2 N7 G& D% M
可以根据IEEE 754 floating point single precision 标准进行32bit单精度浮点数输入。
: }4 R* w4 h' `& d9 g% q% e0 x
6 W, Q4 K! ]2 J, X2 t: ^2 P& C R' ]( I$ N
# x# M' P; h5 P/ H3 z
需要注意的是Exponent(指数)若全为0,则Mantissa(位数)要进行denormal操作。
E c* F" z; m1 R+ p& @6 E
: J- [) Y7 K9 Q3 T8 A根据相关的标准或者约定,可自行设计FPU。8 |5 r, t0 p5 |6 i9 R
---------------------
X. P9 V$ [2 ]( \作者:ALIFPGA ' c- x6 J% @" D: ~+ B6 Q
: U% x/ a, G5 q0 e0 v- R' w+ F, n2 J! ?0 Y
|
|