FPGA矩阵算法实现

简介

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

相关推荐
I'm a winner10 小时前
新手入门Makefile:FPGA项目实战教程(二)
笔记·fpga开发
我爱C编程13 小时前
基于FPGA的8PSK+卷积编码Viterbi译码通信系统,包含帧同步,信道,误码统计,可设置SNR
fpga开发·通信·8psk·帧同步·snr·卷积编码·维特比译码
I'm a winner21 小时前
新手入门 Makefile:FPGA 项目实战教程(三)
fpga开发
范纹杉想快点毕业1 天前
嵌入式 C 语言编程规范个人学习笔记,参考华为《C 语言编程规范》
linux·服务器·数据库·笔记·单片机·嵌入式硬件·fpga开发
lazyduck1 天前
从半年到一年的 bug 往事:TCP modbus的卡死与补救
fpga开发·modbus
范纹杉想快点毕业2 天前
《嵌入式 C 语言编码规范与工程实践个人笔记》参考华为C语言规范标准
服务器·c语言·stm32·单片机·华为·fpga开发·51单片机
Chipi Chipi2 天前
FPGA即插即用Verilog驱动系列——串口数据、命令解析
fpga开发
FPGA_ADDA3 天前
基于 AMDXCVU47P HBM2 FPGA 的 2 路 100G 光纤 PCIe 高性能计算加速卡
fpga开发·vu47p·100g光纤pcie·高性能计算加速卡
霖003 天前
高级项目——基于FPGA的串行FIR滤波器
人工智能·经验分享·matlab·fpga开发·信息与通信·信号处理
I'm a winner3 天前
FPGA+护理:跨学科发展的探索(四)
笔记·fpga开发