簡介
? ? ? ? 現如今設計上對速度的要求越來越高,而矩陣相乘含有大量的乘法和加法計算,造成計算時間長從而影響性能,本章節利用FPGA實現浮點型矩陣運算,可在極短時間內完成矩陣運算。
知識介紹
? ? ? ? 矩陣計算公式如下:
? ? ? ? 需要保證A的列(P)和B的行數相等才能做乘法運算。
前期數據準備
? ? ? ? 為驗證代碼功能是否無誤,需要事先準備一組數據作為仿真使用,例如實現C=A*B的矩陣,首先使用DeepSeek生成A矩陣和對應的16進制浮點數,如下圖所示:
? ? ? ? DeepSeek將浮點數轉換成16進制表示,轉換如下(IEEE 754 格式):
矩陣 A 的十六進制值
值 | 十六進制表示 |
---|---|
1.0 | 0x3F800000 |
2.0 | 0x40000000 |
3.0 | 0x40400000 |
4.0 | 0x40800000 |
5.0 | 0x40A00000 |
6.0 | 0x40C00000 |
7.0 | 0x40E00000 |
8.0 | 0x41000000 |
9.0 | 0x41100000 |
10.0 | 0x41200000 |
11.0 | 0x41300000 |
12.0 | 0x41400000 |
13.0 | 0x41500000 |
14.0 | 0x41600000 |
15.0 | 0x41700000 |
16.0 | 0x41800000 |
17.0 | 0x41880000 |
18.0 | 0x41900000 |
19.0 | 0x41980000 |
20.0 | 0x41A00000 |
21.0 | 0x41A80000 |
22.0 | 0x41B00000 |
23.0 | 0x41B80000 |
24.0 | 0x41C00000 |
25.0 | 0x41C80000 |
26.0 | 0x41D00000 |
27.0 | 0x41D80000 |
28.0 | 0x41E00000 |
29.0 | 0x41E80000 |
30.0 | 0x41F00000 |
31.0 | 0x41F80000 |
32.0 | 0x42000000 |
33.0 | 0x42040000 |
34.0 | 0x42080000 |
35.0 | 0x420C0000 |
36.0 | 0x42100000 |
矩陣B如下:
矩陣 B 的十六進制值
值 | 十六進制表示 |
---|---|
0.1 | 0x3DCCCCCD |
0.2 | 0x3E4CCCCD |
0.3 | 0x3E99999A |
0.4 | 0x3ECCCCCD |
0.5 | 0x3F000000 |
0.6 | 0x3F19999A |
0.7 | 0x3F333333 |
0.8 | 0x3F4CCCCD |
0.9 | 0x3F666666 |
1.0 | 0x3F800000 |
1.1 | 0x3F8CCCCD |
1.2 | 0x3F99999A |
1.3 | 0x3FA66666 |
1.4 | 0x3FB33333 |
1.5 | 0x3FC00000 |
1.6 | 0x3FCCCCCD |
1.7 | 0x3FD9999A |
1.8 | 0x3FE66666 |
1.9 | 0x3FF33333 |
2.0 | 0x40000000 |
2.1 | 0x40066666 |
2.2 | 0x400CCCCD |
2.3 | 0x40133333 |
2.4 | 0x4019999A |
2.5 | 0x40200000 |
2.6 | 0x40266666 |
2.7 | 0x402CCCCD |
2.8 | 0x40333333 |
2.9 | 0x4039999A |
3.0 | 0x40400000 |
3.1 | 0x40466666 |
3.2 | 0x404CCCCD |
3.3 | 0x40533333 |
3.4 | 0x4059999A |
3.5 | 0x40600000 |
3.6 | 0x40666666 |
? ? ? C矩陣結果如下:
????????以上是DeepSeek生成的,多次重復計算還是有問題,所以DeepSeek的坑還是挺多的。
????????重新通過在線工具計算,計算結果如下:
????????再使用MATLAB將浮點數轉換成16進制表示,如下圖所示:
矩陣 C的十六進制值
????????每個浮點數乘法器和加法器都會占用DPS或者邏輯資源,在保證FPGA夠用的條件下盡可能地提高運算速度,本設計使用36個乘法器,5個加法器做高速運算。
? ? ? ? 以上浮點數轉16進制可通過網址在線進制轉換-IEE754浮點數16進制轉換做驗證。
? ? ? ? FPGA代碼這里不做提供。
? ? ? ?FPGA仿真
? ? ? ? 仿真結果如下:
? ? ? ?對比仿真結果和MATLAB的結果一致,驗證無誤。