图像处理:生成3×3的窗口

在这里插入图片描述

生成3×3的窗口

module Shift_RAM_3X3(
	//global signals
	input 					clk,						
	input 					rst_n,							
	//Image data prepred to be processd
	input					per_frame_vsync,	//Prepared Image data vsync valid signal
	input					per_frame_href,		//Prepared Image data href vaild  signal
	input					per_frame_clken,	//Prepared Image data output/capture enable clock
	input			[7:0]	per_img_Y,			//Prepared Image brightness input
	
	//Image data has been processd
	output					matrix_frame_vsync,	//Prepared Image data vsync valid signal
	output					matrix_frame_href,	//Prepared Image data href vaild  signal
	output					matrix_frame_clken,	//Prepared Image data output/capture enable clock	
		
	output 	reg 	[7:0]	matrix_p11,						
	output 	reg		[7:0]	matrix_p12,						
	output 	reg		[7:0]	matrix_p13,			//3X3 Matrix output
	output 	reg		[7:0]	matrix_p21,						
	output 	reg		[7:0]	matrix_p22,						
	output 	reg		[7:0]	matrix_p23,						
	output 	reg		[7:0]	matrix_p31,						
	output 	reg		[7:0]	matrix_p32,						
	output 	reg		[7:0]	matrix_p33					
    );
	
	//----------------------------------------------
	//consume 1clk
	wire 	[7:0] 	row1_data;//frame data of the 1th row
	wire 	[7:0]	row2_data;//frame data of the 2th row
	reg 	[7:0] 	row3_data;//frame data of the 3th row

// ====================================================================================================	
// 得到一个3×n的矩阵
// ====================================================================================================
	
// 将正在输入的Y值给data_3,data_3一直在最上面那一行
	always @(posedge clk or negedge rst_n)begin
		if(!rst_n)
			row3_data <= 8'b0;
		else begin
			if(per_frame_clken)
				row3_data <= per_img_Y;
			else
				row3_data <= row3_data;
			end
	end

	
	//Shift_RAM_3X3_8bit1
	//在这个IP和内部会先将输入的data_3存到RAM中,等存满一行后,就将data_3给data_2进行输出
	Shift_RAM_3X3_8bit u1_Shift_RAM_3X3_8bit (
		.D		(row3_data),					// 输入的灰度Y,即当前正在输入的那一行
		.CLK	(per_frame_clken & clk),		// input wire CLK
		.Q		(row2_data)						// output wire [7 : 0] Q
);

	//Shift_RAM_3X3_8bit2
	Shift_RAM_3X3_8bit u2_Shift_RAM_3X3_8bit (
		.D		(row2_data),					// input wire [7 : 0] D
		.CLK	(per_frame_clken & clk),		// input wire CLK
		.Q		(row1_data)						// output wire [7 : 0] Q
);
// ====================================================================================================、、
	

	//per_clken delay 3clk
	reg [4:0]per_frame_clken_r;
	reg [4:0]per_frame_vsync_r;
	reg [4:0]per_frame_href_r;

	
	always @(posedge clk or negedge rst_n)begin
		if(!rst_n)begin
			per_frame_clken_r <= 5'b0;
			per_frame_vsync_r <= 5'b0;
			per_frame_href_r  <= 5'b0;
		end
		else begin
			per_frame_clken_r <= {per_frame_clken_r[3:0], per_frame_clken};
			per_frame_vsync_r <= {per_frame_vsync_r[3:0], per_frame_vsync};
			per_frame_href_r  <= {per_frame_href_r [3:0], per_frame_href};
		end
	end
	
	
	assign 	matrix_frame_clken = per_frame_clken_r[4];
	assign 	matrix_frame_href  = per_frame_href_r [4];
	assign 	matrix_frame_vsync = per_frame_vsync_r[4];
	
	/****************************************
	(1)read data from shift_RAM
	(2)caulate the sobel
	(3)steady data after sobel generate
	******************************************/
	
	// 将那3行数据进行打拍	
	always @(posedge clk or negedge rst_n)begin
		if(!rst_n)begin
			{matrix_p11, matrix_p12, matrix_p13} <= 24'h0;
			{matrix_p21, matrix_p22, matrix_p23} <= 24'h0;
			{matrix_p31, matrix_p32, matrix_p33} <= 24'h0;
		end
		else if(per_frame_clken_r[3])begin												//shift_RAM data read clock enbale 
			{matrix_p11, matrix_p12, matrix_p13} <= {matrix_p12, matrix_p13, row1_data};//1th shift input
			{matrix_p21, matrix_p22, matrix_p23} <= {matrix_p22, matrix_p23, row2_data};//2th shift input 
			{matrix_p31, matrix_p32, matrix_p33} <= {matrix_p32, matrix_p33, row3_data};//3th shift input 
		end
		else begin
			{matrix_p11, matrix_p12, matrix_p13} <= {matrix_p11, matrix_p12, matrix_p13};
			{matrix_p21, matrix_p22, matrix_p23} <= {matrix_p21, matrix_p22, matrix_p23};
			{matrix_p31, matrix_p32, matrix_p33} <= {matrix_p31, matrix_p32, matrix_p33};
		end
	end
	
	
endmodule

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值