VGA时序分析
常见的刷新率时序表
A(us)Line Period B(us) Sync pulse length C(us) Back porch D(us) Active video time E(us) Front porch
O(ms) Frame Period P(ms)Sync length Q(ms)Back porch R(ms)Active video time S(ms)Front porch
根据上面的水平和垂直扫描时序可以分析显示800x600模式,FPGA系统时钟采用DE0板上的50MHz的有源晶振。为了显示器显示效果好,采用刷新频率为72Hz。以下以系统时钟频率为50MHz,显示器显示800x600模式为例分析水平扫描和垂直扫描时序:系统时钟周期为1/50MHz=20ns
水平扫描Horizonal(Line)
A 水平(行)周期为1040个像素(Pix),时间为1040x20ns=20.8us;
B 同步脉冲为120像素(Pix)
C 后沿为61个像素(Pix)
D 有效时间为806个像素(Pix)
E 前沿为53个像素
/////////////////////////////////////水平扫描参数的设定/////////////////////////////////////////////////// parameter LinePeriod =12'd1040; parameter H_SyncPulse=10'd120; parameter H_BackPorch=10'd61; parameter H_ActivePix=10'd806; ///////////////////////////////////////水平扫描计数/////////////////////////////////////////////////////// always @ (posedge clk or negedge rst_n) if(!rst_n) x_cnt <= 1; else if(x_cnt == LinePeriod) x_cnt <= 1; else x_cnt <= x_cnt+ 1; ///////////////////////////////////水平扫描信号hsync产生/////////////////////////////////////////////////////// always @ (posedge clk or negedge rst_n) if(!rst_n) hsync_r <= 1'b1; else if(x_cnt == 1) hsync_r <= 1'b0; //产生hsync信号 else if(x_cnt == H_SyncPulse) hsync_r <= 1'b1;
垂直扫描Vertical(Frame)
O 垂直扫描周期为666个行扫描,时间为666x1040x20ns=13853us;
P 同步脉冲为6个行扫描,时间为6x1040x20ns=125us;
Q 后沿为21个行扫描,时间为21x1040x20ns=436us;
R 有效时间为604个行扫描,时间为604x1040x20ns=12563us;
S 前沿为35个行扫描,时间为35x1040x20ns=728us.
////////////////////////////////////////////////垂直扫描参数的设定//////////////////////////////////////////////////////// parameter FramePeriod="10"'d666; parameter V_SyncPulse=10'd6; parameter V_BackPorch=10'd21; parameter V_ActivePix=10'd604; ///////////////////////////////////////////////垂直扫描计数/////////////////////////////////////////// always @ (posedge clk or negedge rst_n) if(!rst_n) y_cnt <= 1; else if(y_cnt == FramePeriod) y_cnt <= 1; else if(x_cnt == LinePeriod) y_cnt <= y_cnt+1; ////////////////////////////////////////////////// 垂直扫描信号hsync产生////////////////////////////////////////////// always @ (posedge clk or negedge rst_n) if(!rst_n) vsync_r <= 1'b1; else if(y_cnt == 1) vsync_r <= 1'b0; //产生vsync信号 else if(y_cnt == V_SyncPulse) vsync_r <= 1'b1; 并不是每个像素都能显示的,只有在有效区域像素区域内才能显示RGB /////////// 垂直扫描信号hsync产生/////////////////////////////////////////////////// wire valid; //有效显示区标志 assign valid = (x_cnt >= (H_SyncPulse+H_BackPorch)) && (x_cnt < (H_SyncPulse+H_BackPorch+H_ActivePix)) && (y_cnt >= (V_SyncPulse+V_BackPorch)) && (y_cnt < (V_SyncPulse+V_BackPorch+V_ActivePix));
初步整理的时序
行周期32us(频率31.3Hz)
行同步脉冲时间7us
场频率60Hz