常见的刷新率时序表
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