简介
        现如今设计上对速度的要求越来越高,而矩阵相乘含有大量的乘法和加法计算,造成计算时间长从而影响性能,本章节利用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的结果一致,验证无误。