TA的每日心情 | 开心 2022-1-24 15:10 |
---|
签到天数: 1 天 [LV.1]初来乍到
|
有些FPGA中是不能直接对浮点数进行操作的,只能采用定点数进行数值运算。对于FPGA而言,参与数学运算的书就是16位的整型数,但如果数学运算中出现小数怎么办呢?要知道,FPGA对小数是无能为力的,一种解决办法就是采用定标。数的定标就是将要运算的浮点数扩大很多倍,然后取整,再用这个数进行运算,运算得到的结果再缩小相应的倍数就可以了。在设计中,一定不要忘记小数点。在FPGA 中是体现不出来小数点的,小数点的位置只有程序员知道。Q表示小数点的位置,Q15就表示小数点在第15位。
) l9 J% \5 m) L' N# n0 k
% J) j7 Z+ b- ^" P" V {/ X W, ]浮点数(x)转换为定点数(xq): xq=(int)x*2^Q
' `3 Y9 O6 O4 \: _9 F/ b5 [1 a! Z F1 Y% x5 b
定点数(xq)转换浮点数(x): x= (float)xq*2^(-Q) w# z$ q2 x4 t2 E( }* R
# c$ t3 n$ @* j; M
比如,16进制数2000H,用Q0表示就是8192;若用Q15表示,则为0.25。
& _5 V9 R4 Q% X; ^
5 I# c/ G( k" h9 z* C) ?/ N下面介绍Q格式运算中Q值的确定:
! E. i' |0 X& X# w5 c- D ]& y6 ?6 J _: a# W6 g& l3 X" }
(1)定点加减法:需要转换成相同Q格式才能加减- |% X. O& a5 f: a
8 J* |6 J- A6 z1 H. w) f(2)定点乘法:不同Q格式的数据相乘,相当于Q值相加
. E0 A. Z. F6 U1 b/ b
2 Y1 ?& h6 s( s/ E# v+ h- U: b(3)定点除法:不同Q格式的数据相除,相当于Q值相减
V- ?+ ~8 y/ B3 \" E/ p" [* L
8 g% b* N2 u8 `" i(4)定点左移:相当于Q值增加; G# v+ f7 e1 D* P( {% ^/ U
( D5 N% T& b/ F4 O, \+ h
(5)定点右移:相当于Q值减少( p4 t! N8 Q+ A; D* }
( y9 {; N" f+ @
比如,Q15表示的4000H(浮点数0.5)乘以Q15表示的4000H,4000H×4000H=1000 0000H,乘完之后Q值变为15+15=30,即结果为0.01B,即为浮点数0.25。 |
|