FPGA | Verilog 实现矩阵乘法(附源码)

这篇具有很好参考价值的文章主要介绍了FPGA | Verilog 实现矩阵乘法(附源码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用 for语句实现,后续继续做并行优化…

最近需要用 verilog写一个矩阵乘法的简单模块,本来想着网上随便搜一个复制粘贴一下,却发现居然找不到有源码的(好多还上传到了CSDN资源),罢了罢了,照着Github的自己写一个吧。

我写的是 3 * 3 的、数值位宽为 [3:0] (0-15)的矩阵乘法,你完全可以根据你的板子资源加以更改:

Verilog代码

`timescale 1ns / 1ps

module mm(A,B,Result);

	input [35:0] A;  			// 行*列*数据位宽 3*3*4
	input [35:0] B;
	output [89:0] Result;		// 行*列*数据位宽 3*3*10,
	
	reg [71:0] Result;		 
	reg [3:0] A1 [0:2][0:2];
	reg [3:0] B1 [0:2][0:2];
	reg [9:0] Res1 [0:2][0:2];	 // 因为A和B相乘最大的值为15*15=225,所以数据位宽为225*3=10位(一行乘一列)
	
	integer i,j,k;
	
	always@ (A or B)
	begin
		// 一维矩阵转为二维矩阵
		{A1[0][0],A1[0][1],A1[0][2],A1[1][0],A1[1][1],A1[1][2],A1[2][0],A1[2][1],A1[2][2]} = A;
		{B1[0][0],B1[0][1],B1[0][2],B1[1][0],B1[1][1],B1[1][2],B1[2][0],B1[2][1],B1[2][2]} = B;
		{Res1[0][0],Res1[0][1],Res1[0][2],Res1[1][0],Res1[1][1],Res1[1][2],Res1[2][0],Res1[2][1],Res1[2][2]} = 71'd0;
		
		i=0; j=0; k=0;
		
		for(i=0;i<3;i=i+1)
		begin
			for(j=0;j<3;j=j+1)
			begin
				for(k=0;k<3;k=k+1)
				begin
					Res1[i][j]=Res1[i][j]+ (A1[i][k]*B1[k][j]);
				end
			end
		end
		
		Result = {Res1[0][0],Res1[0][1],Res1[0][2],Res1[1][0],Res1[1][1],Res1[1][2],Res1[2][0],Res1[2][1],Res1[2][2]};
	end

endmodule

Testbench

`timescale 1ns / 1ps

module test_bench;
	
	reg [35:0] A;
	reg [35:0] B;
	
	wire [71:0] Answer;
	
	Calculator calculator(.A(A), .B(B), .Result(Answer));
	
	initial begin
		
		//Initial inputs
		A={4'd1,4'd2,4'd3,4'd4,4'd5,4'd6,4'd7,4'd8,4'd9};
		B={4'd5,4'd3,4'd5,4'd8,4'd6,4'd10,4'd5,4'd3,4'd0};
		
	end

// VCS联合Verdi查看波形,使用自带的波形查看器可删除这段代码	
`ifdef FSDB
initial begin
	$fsdbDumpfile("tb_mm.fsdb");
	$fsdbDumpvars;
end
`endif

endmodule

仿真和结果验证

FPGA | Verilog 实现矩阵乘法(附源码)
手动计算验证一下(我这里数据少就手算了,建议你们写个脚本验证):
FPGA | Verilog 实现矩阵乘法(附源码)
FPGA | Verilog 实现矩阵乘法(附源码)
FPGA | Verilog 实现矩阵乘法(附源码)
Ok,没有问题,后续继续优化,用并行计算的方式实现。文章来源地址https://www.toymoban.com/news/detail-515111.html

到了这里,关于FPGA | Verilog 实现矩阵乘法(附源码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于脉动阵列的矩阵乘法加速(FPGA)

    ​ 原本准备做FADDEV求逆矩阵算法的FPGA实现,其中有一个概念挺吸引人,就是:脉动阵列。 ​ 先来讲讲脉动阵列的概念,脉动阵列其实是一种处理单元的结构。数据同步流过,能够减小降低重复访问,调高处理效率和资源消耗。 ​ 其实这是个比较旧的概念了,1982就有学者提

    2024年02月01日
    浏览(73)
  • m基于FPGA的半带滤波器verilog设计,对比普通结构以及乘法器复用结构

    目录 1.算法描述 2.仿真效果预览 3.verilog核心程序 4.完整FPGA         HBF模块由半带滤波器(HBF)和抽取模块组成。该模块的任务是实现2倍抽取进一步降低信号采样速率。由于HBF的冲激响应h(k)除零点外其余偶数点均为零,所以用HBF实现2倍抽取可以节省一半的运算量,对增强软

    2023年04月08日
    浏览(66)
  • FPGA纯verilog实现 LZMA 数据压缩,提供工程源码和技术支持

    目录 1、前言 2、我这儿已有的FPGA压缩算法方案 3、FPGA LZMA数据压缩功能和性能 4、FPGA LZMA 数据压缩设计方案 输入输出接口描述 数据处理流程 LZ检索器 数据同步 LZMA 压缩器 为输出LZMA压缩流添加文件头 5、vivado仿真 6、福利:工程代码的获取 说到FPGA的应用,数据压缩算法的硬

    2024年02月03日
    浏览(32)
  • FPGA纯verilog实现8路视频拼接显示,提供工程源码和技术支持

    没玩过图像拼接都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。 图像拼接在实际项目中应用广泛,特别是在医疗和军工行业,目前市面上的图像拼接方案主要有Xilinx官方推出的Video Mixer方案和自己手撕代码的自定义方案;Xilinx官方推出的Vide

    2024年02月08日
    浏览(30)
  • FPGA纯verilog实现CameraLink视频接收和发送,附带工程源码和技术支持

    FPGA实现CameraLink视频编解码目前有两种方案: 一是使用专用编解码芯片,比如典型的DS90CR287;另一种方案是使用FPGA实现编解码,利用FPGA的serdes资源实现解串,优点是合理利用了FPGA资源,serdes资源不用白不用,缺点是操作难度大一些,对FPGA水平要求较高。 本文详细描述了F

    2024年02月07日
    浏览(32)
  • FPGA纯verilog代码实现H264视频压缩 提供工程源码和技术支持

    H264视频压缩与解码在FPGA图传领域应用广泛,Xilinx高端器件已经内嵌了H264加速器,在Linux系统下调用API即可使用,但对于需要定制私有算法或者协议的H264视频压缩与解码应用或者学习研究者而言,纯verilog代码实现H264视频压缩依然具有实用价值,本设计采用纯verilog代码实现

    2024年02月06日
    浏览(42)
  • FPGA HLS Matrix_MUL 矩阵乘法的计算与优化

    设置clock,10表示一个周期10ns,带宽100M vivado工具比较保守,计算需要的延迟是14,实际优化可以在10,设置大一点,优化的计算更多,一般约束设置大一点在30-50 选择开发板 xc7z020clg400-1 Source:描述功能模块的cpp和h代码 Test Bench:测试代码的 main.cpp matrix_mul.h #ifndef __xxxx__ #def

    2024年02月09日
    浏览(30)
  • 紫光同创FPGA纯verilog代码实现视频拼接,提供PDS工程源码和技术支持

    紫光同创FPGA纯verilog代码实现视频拼接,提供PDS工程源码和技术支持 “苟利国家生死以,岂因祸福避趋之!”大洋彼岸的我优秀地下档员,敏锐地洞察到祖国的短板在于高精尖半导体的制造领域,于是本着为中华民族伟大复兴的中国梦贡献绵薄之力的初心,懂先生站在高略高

    2024年02月07日
    浏览(39)
  • FPGA实现 NIC 10G 网卡,纯verilog代码编写,提供工程源码和技术支持

    FPGA实现 NIC 10G 网卡,纯verilog代码编写,提供3套工程源码和技术支持 网络接口控制器(NIC)是计算机与网络进行交互的网关。NIC构成了软件协议栈和网络之间的桥梁,该桥梁的功能定义了网络接口。网络接口的功能以及这些功能的实现都在迅速发展。这些变化是由提高线速和

    2024年02月03日
    浏览(45)
  • Verilog force语句详解:FPGA中的信号强制赋值

    Verilog force语句详解:FPGA中的信号强制赋值 在FPGA开发中,时序分析和调试是非常重要的一部分。其中,对于一些信号的调试,我们需要准确地模拟不同的情况来检测其工作状态。这时,Verilog force语句就起到了重要的作用。 force语句可以使信号立即进行强制赋值操作,在仿真

    2024年02月06日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包