【安路FPGA】三乘三矩阵的实现

本文介绍了如何利用shift_ram_IP核在FPGA中方便地实现图像处理中的三乘三矩阵运算。通过两个移位寄存器,一行接一行地存储和传递像素数据,构建并更新3x3矩阵。这种方法对于理解和实现FPGA中的图像滤波算法具有指导意义。
摘要由CSDN通过智能技术生成

一、做图像处理的同学都知道,无论是sobel、高斯、膨胀、腐蚀等这些算法都需要用到三乘三矩阵,而FPGA要实现就很麻烦,方法虽然有很多,但基于shift_ram_ip核这个方法我觉得比较容易理解,话不多说上干货

二、首先我们要理解什么是shift_ram,其实就是移位寄存器,而我们的三乘三矩阵就是利用这个原理建立的直接上代码

//=========================================
//==第二行
//=========================================
	assign sec_clk 		= I_pixel_clk;
	assign sec_en 		= (I_pixel_vld==1'b1);
	assign sec_datain 	= I_pixel;
	shift_ram second_line(
		.clk	(sec_clk		), 
		.en		(sec_en			), 
		.datain	(sec_datain		),
		.dataout(sec_dataout	)
	);
		
//=========================================
//==第一行
//=========================================
	assign fir_clk = I_pixel_clk;
	assign fir_en 		= (vcnt>0 && I_pixel_vld==1'b1);
	assign fir_datain 	= sec_dataout;
	shift_ram first_line(
		.clk	(fir_clk		), 
		.en		(fir_en			), 
		.datain	(fir_datain		),
		.dataout(fir_dataout	)
	);
//=========================================
//==产生3x3矩阵
//=========================================
	always @(posedge I_pixel_clk or posedge I_rst) begin
		if (I_rst==1'b1) begin
			m10_r<=0;
			m11_r<=0;
			m12_r<=0;
			m20_r<=0;
			m21_r<=0;
			m22_r<=0;
			m30_r<=0;
			m31_r<=0;
			m32_r<=0;
		end
		else if (I_pixel_vld) begin
			m10_r<=m11_r;
			m11_r<=m12_r;
			m12_r<=fir_dataout;

			m20_r<=m21_r;
			m21_r<=m22_r;
			m22_r<=sec_dataout;

			m30_r<=m31_r;
			m31_r<=m32_r;
			m32_r<=I_pixel;
		end
	end

原理其实很简单,我们先利用一个shift_ram存储三个字节,这是一行,然后在把这一行的输出在放到一个shift_ram里面,这第二个是第一行,第一个是第二行如图所示

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值