|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
FPGA浮点乘法运算( o: K0 R- r; { p9 V
D, U, u9 m) n' i
0 O1 X2 @( m' X+ h5 {7 @" a+ y X我一般采用的浮点运算方式为自定义方式 即自己定义小数点的位置
" b: F6 l+ d& _比如计算 30 * pi/180
" Q( k2 g6 u- e30 对应的二进制 00011110
5 a7 O8 u$ L9 w规定A [23:0] [符号位] [22:15]整数位 [14:0] 小数位4 Z. w1 Q+ J2 O! Z/ g% X: w8 V
则30表示为 24’b0_00011110_0000000000000002 B5 x: S/ r, s
1 |" @! w! M7 {" }( t, u+ n/ Y
pi/180 = 0.0174444444444444对应的二进制 0.000001000111011
3 D; X2 z3 U4 }4 v) C* F7 V照规则B [16:0] [符号位] 15整数位 [14:0] 小数位0 Y8 P7 z; C% j1 E1 Z$ o
则 pi/180表示位17’b0_0_000001000111011
" O# ]0 B' ]% T2 ~5 D$ y7 q# L4 D/ l' i' g
计算过程 30*pi/180 = 24’b0_00011110_000000000000000 * 16’b0_000001000111011* T& a' s3 w% n: A6 Z+ q, J
最终结果位24+17bit 即41bit: @% K4 I' l1 h4 ]* a7 E3 r
最关键的一点就是41bit中有多少是整数部分 多少位是小数部分
- Y- \4 ^4 {& _0 `- h, G+ ?小数部分的位数是两个数小数部分位数之和 第一个数的小数部分15位 第二个数的小数部分15位0 t4 `; [3 y3 ~4 F7 G; u; C
所以最终结果 小数部分共30位6 w# ], [+ H' y$ L8 _' |
( M0 ]3 z. I( V7 s8 y所以最终的表示 [40:0] 40:符号位 [39:30]整数部分 [29:0]小数部分' c2 y5 ?# x$ A/ k- Q% u
计算过程7 x. a- b" j( ?' y; g6 u
/ ]1 o6 E8 \' V2 Q7 u5 [
- assign result = $signed(A) * $signed(pi_180) //采用有符号数的乘法
$ G" l: r5 v% ]& T+ \
5 w5 r* n$ f, r% f7 R. y得到结果 result = 41’h217500006 Z3 R% c' i3 X8 I$ Q- Q# N! s, u. R& N
0 M2 w: X, I, t: C' f0 n
! ]! _: X( l3 q" b) v
% O; W% {3 h H% Q% O6 U
6 I! K8 x/ u- Y3 Y. B4 C8 R+ l8 V! ~0 |& u
# Q5 Y7 ]. A- o9 Y
8 Z# f' ?" t' R, w+ A* w- X
% f$ s" Y8 ?* A) Q( B. L |8 Q; `: ~
" O) i' c: A! O( j* \1 h: r5 L |
|