verilog 图像处理篇: 1.单通道提取

从camera出的像素格式为bayer格式,单通道提取,生成灰度图。
GRBG4个通道都用某一通道的数据填充。
算法实现,使用双端ram来实现该算法。由于bayer阵列,一个点的像素信息,在bayer阵列中占据两行。

算法思路

取一大小为2行阵列的dpram;每次写入2行数据,而读取时,只选则其中一行读取。且一行中的两个通道都读取同一地址的数据。
在这里插入图片描述

代码实现

//file name:	gray.v
//author:      shugen.yin
//date:		   2017.10.18
//function:		单通道数据提取
//log:

module gray(
	input cmos_pclk,
	input cmos_href,
	input cmos_vsync,
	input [7:0] cmos_data,
	
	output reg [10:0] v_cnt,
	
	output reg cmos_href_o,
	output reg cmos_vsync_o,
	output reg [7:0] cmos_data_o
);

parameter IMG_H = 640;

//reg [10:0] v_cnt; 	
reg [11:0] h_cnt;

always @(posedge cmos_pclk)  /*行计数*/
	if(cmos_href) 
		h_cnt <= h_cnt + 1'b1;
	else
		h_cnt <= 0;
	
always @(posedge cmos_pclk) /*帧计数*/
	if(cmos_vsync)
		v_cnt <= 0;
	else if(h_cnt==(IMG_H-1))
		v_cnt <= v_cnt + 1'b1;
	else
		v_cnt <= v_cnt;

reg [10:0] rdaddress;
reg [10:0] wraddress;
reg cmos_href_r;
reg cmos_vsync_r;
reg rden;

wire [7:0] q;

always @(posedge cmos_pclk)   /*做缓冲,防止读写冲突*/
begin
	cmos_href_r  <= cmos_href;
	cmos_vsync_r <= cmos_vsync;
end

always @(posedge cmos_pclk)
	if(cmos_vsync_r)
		wraddress <= 0;
	else if(cmos_href_r)
		if(wraddress<(IMG_H*2-1))  /*dpram中存储两行的数据*/
			wraddress <= wraddress + 1'b1;
		else  /*两行结束地址清0*/
			wraddress <= 0;
	else
		wraddress <= wraddress;

always @(posedge cmos_pclk)
	if(cmos_vsync_r)
		rdaddress <= 0;
	else if(cmos_href_r)
		if(rdaddress<(IMG_H-1)) /*读时,只读一行*/
			rdaddress <= rdaddress + 1'b1;  /*此处地址虽然加1,但是后面没有用到最低位*/
		else
			rdaddress <= 0;
	else
		rdaddress <= rdaddress;
		
always @(posedge cmos_pclk)
	if(cmos_vsync_r)
		rden <= 0;
	else
		rden <= cmos_href_r;
	
	
dpram dpram_inst
(
	.clock(cmos_pclk) ,		// input  clock_sig
	.data(cmos_data) ,		// input [7:0] data_sig
	.rdaddress({rdaddress[10:1],1'b0}) ,	// input [10:0] rdaddress_sig
	.rden(rden) ,				// input  rden_sig
	.wraddress(wraddress) ,	// input [10:0] wraddress_sig
	.wren(cmos_href_r) ,		// input  wren_sig
	.q(q) 						// output [7:0] q_sig
);

always @(posedge cmos_pclk)
begin
	cmos_href_o <= rden;
	cmos_vsync_o <= cmos_vsync_r;
	cmos_data_o  <= q;
end

endmodule

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值