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