FPGA中DDR的使用(1)------PAL--DDR2---PAL

一、系统结构概述

本文主要完成了FPGA对于图像PAL的采集,存储到DDR2,图像PAL输出的过程。
主要由以下几个模块构成:
1 PAL仿真数据
2 DDR2控制器
3 视频处理模块(包括输入和输出两个部分)
4 显示模块

系统结构框图:

二、PAL仿真数据产生

这里产生一个渐变的颜色0-255 由于PAL制式一行为720个像素 所以产生0-255 0-255 0-207的像素
产生的数据包括行同步、场同步等等标准的PAL制式的信号

module  test_src
(
    input clk,//27Mhz时钟 
    input rst_n,
	input [2:0] mode_in,	 
    output reg[7:0] data//BT.656输出

);

//时序参数定义
localparam H_BLANKING = 288;   //每行消隐器长度
localparam H_ACTIVE   = 1440;  //像素有效期长度
localparam V_TOTLE    = 625;   //一个完整帧总行数


reg  [11:0]h_cnt = 12'd0;
reg  [9:0]v_cnt = 10'd0;

reg vs_reg;
reg de_reg;
reg de_reg_d0;
reg f_reg;

 wire rd_clr;
 wire rdfifoen;
 wire  [7:0]rddata;
 reg odd_flag;
	 
reg[7:0]rddata_t;
assign  vs = vs_reg;
assign  de =de_reg;
assign   f = f_reg;

always@(posedge clk or negedge rst_n)
begin
	if(!rst_n)
		rddata_t <= 8'd0;
	else  if (vs)
		begin
		if(mode_in == 3'd5)
			rddata_t <= 8'd255;
		else
			rddata_t <= 8'd0;
		end
	else  if (h_cnt == 13'd10 && mode_in < 3'd4)
		rddata_t <= 8'd0;
	else if (rdfifoen)
			if (mode_in==3'd0) 
				rddata_t<=8'd0;	
			else if (mode_in==3'd1) 
				rddata_t<=8'd254;	
			else if (mode_in==3'd2 || mode_in==3'd4) 
				rddata_t<=rddata_t+8'd1;
			else if (mode_in==3'd3 || mode_in==3'd5) 
				rddata_t<=rddata_t-8'd1;		
			else
			  rddata_t<=rddata_t+8'd1;
	else
		rddata_t<=rddata_t;	
end

assign rddata=rddata_t;


/*行计数器,用于处理行相关*/
always@(posedge clk or negedge rst_n)
begin
	if(!rst_n)
		h_cnt <= 12'd0;
	else if(h_cnt == H_ACTIVE + H_BLANKING)
		h_cnt <= 12'd1;
	else
		h_cnt <= h_cnt + 12'd1;		
end
/*场计数器,用于处理场相关*/
always@(posedge clk or negedge rst_n)
begin
	if(!rst_n)
		v_cnt <= 10'd0;
	else if(h_cnt == H_ACTIVE + H_BLANKING)
		if(v_cnt == V_TOTLE)
			v_cnt <= 10'd1;
		else
			v_cnt <= v_cnt + 10'd1;
	else
		v_cnt <= v_cnt;
end

//数据同步产生
always@(posedge clk or negedge rst_n)
begin
	if(!rst_n)
		de_reg <= 1'b0;
	else if(~vs_reg  && h_cnt>H_BLANKING && h_cnt <= H_ACTIVE + H_BLANKING)
		de_reg <= h_cnt[0];		
	else
		de_reg <= 1'b0;
end

//EAV,SAV和数据生成
always@(posedge clk or negedge rst_n)
    if(!rst_n)
	    begin 
        data <= 8'h00;
		  vs_reg<=1'b0;
		  f_reg<=1'b0;
	    end 		 
	else 	
	  begin 	 
	  if(v_cnt>=1 && v_cnt<=22)
	      begin 
			   f_reg<=1'b0;
			   vs_reg<=1'b1;
		      if( (h_cnt == 13'd1) || (h_cnt == H_BLANKING - 3))
                 data <= 8'hff;
            else if((h_cnt == 13'd2) || (h_cnt == 13'd3) || (h_cnt == H_BLANKING - 2) || (h_cnt == H_BLANKING - 1))
                 data <= 8'h00;
            else if(h_cnt == 13'd4)
                 data <=8'hb6;
			   else if( h_cnt == H_BLANKING) 
				     data <=8'hab; 
		      else
                data <= h_cnt[0] ? 8'h80 : 8'h10;
		   end 
		 		 
		 if(v_cnt>=23 && v_cnt<=310)
	      begin 
			   f_reg<=1'b0;
			   vs_reg<=1'b0;
		      if( (h_cnt == 13'd1) || (h_cnt == H_BLANKING - 3))
                 data <= 8'hff;
            else if((h_cnt == 13'd2) || (h_cnt == 13'd3) || (h_cnt == H_BLANKING - 2) || (h_cnt == H_BLANKING - 1))
                 data <= 8
  • 7
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳光非宅男

你的鼓励是我最大的肯定

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值