RGB数字信号VESA标准时序verilog设计
RGB数字信号输出时序有严格标准,产生正确的时序信号可以为输出接口DVI VGA cameralink等视频图像接口芯片链接,实现图像视频源及播放等功能。
这部分设计重点在于理解RGB时序标准,了解图像传输和显示原理,熟悉分辨率,刷新频率,像素时钟,行、场同步信号,数据传输使能,RGB数据位。
详细的时序介绍如VESA时序规范标准,如图一所示,图中从左到右时序依次是同步时间,后消隐区,头边界,有效地址区(RGB数据位传输有效区),尾边界,前消隐这些是一次同步传输需要顺序,同步信号分行同步(horizontal水平),场同步(vertical垂直),如800×600@60hz,每传输800个有效像素数据产生(含消隐边界时间)产生一个行同步信号,等传输600个行同步信号后产生一个场同步信号,一场说明一幅图像已经传完,1S内传输60个这样的图像数据即60hz.
图一:VESA 时序图
具体实现过程是对像素时钟计数判断来实现时序控制,核心部分程序如下:
//
module To_Tp510(
input [23:0]data_RGB,
input clk,
input en_work,
output [23:0]data_all,
output on_hsout_tp510,
output on_vsout_tp510,
output pixel_clk,
output dout
);
assign pixel_clk = clk;
///1920*1080 30hz 74.25MHZ //800x600 60hz
reg [11:0] HTotal=2200; //1056;
reg [11:0] VTotal=1125; //628;
reg [9:0] hsync=44; //128; //Sync
reg [9:0] hbporch=148; //88;//back porch + left border
reg [9:0] hfporch=88; //40;//front porch + right border
reg [9:0] vsync=5; //4; //Sync
reg [9:0] vbporch=36;//23;//back porch + top border
reg [9:0] vfporch=4;//1;//front porch + bottom border
reg [11:0]pixel_count=0;
reg [11:0]hsout_count=0;
reg hsout_tp510=0;
reg vsout_tp510=0;
assign on_hsout_tp510=hsout_tp510;
assign on_vsout_tp510=vsout_tp510;
//产生行信号
always@(posedge clk)
if(en_work)
begin
if(pixel_count<HTotal)
pixel_count=pixel_count+1;
else
pixel_count=0;
if(pixel_count==HTotal)
if(hsout_count<VTotal)
hsout_count=hsout_count+1;
else
hsout_count=0;
if (pixel_count<hsync)
hsout_tp510=0;
else if( pixel_count>=hsync && pixel_count<HTotal )
hsout_tp510=1;
end
//产生场信号
always @(posedge clk)
begin
begin
if (hsout_count< vsync)
vsout_tp510<=0;
else if( hsout_count>=vsync&& hsout_count<VTotal)
vsout_tp510<=1;
end
end
reg dout2=0,dout3=0;
assign dout=dout2&dout3;
assign data_all= dout?data_RGB:1'bz;
//下面两段程序共同决定什么可以发送数据
always @(posedge clk)
begin
if(en_work)
begin
if( pixel_count>=(hsync+hbporch) &&pixel_count<(HTotal-hfporch) )
dout2<=1;//行使能信号
else
dout2<=0;
end
end
always @(posedge clk)
begin
if(en_work)
begin
if( hsout_count>=(vsync+vbporch) &&hsout_count<(VTotal-vfporch) )
dout3<=1;//场使能信号
else
dout3<=0;
end
end
endmodule