现在的位置: 首页 > 综合 > 正文

CPLD/FPGA/Verilog_vga时序参考

2014年02月28日 ⁄ 综合 ⁄ 共 3683字 ⁄ 字号 评论关闭
VGA时序分析 - 乱舞春秋 - 尚书

 

VGA时序分析 - 乱舞春秋 - 尚书

 VGA时序分析 - 乱舞春秋 - 尚书

 

VGA时序分析 - 乱舞春秋 - 尚书

 

VGA时序分析 - 乱舞春秋 - 尚书

 

VGA时序分析 - 乱舞春秋 - 尚书

 

VGA时序分析 - 乱舞春秋 - 尚书

Vertical timing information   垂直扫描时序 

VGA时序分析 - 乱舞春秋 - 尚书

 

根据上面的水平和垂直扫描时序可以分析显示800x600模式,FPGA系统时钟采用Spartan-3E
Starter Kit
板上的50MHz的有源晶振。为了显示器显示效果好,采用刷新频率为72Hz

以下以系统时钟频率为50MHz,显示器显示800x600模式为例分析水平扫描和垂直扫描时序:系统时钟周期为1/50MHz=20ns

水平扫描Horizonal(Line)

VGA时序分析 - 乱舞春秋 - 尚书

 

VGA时序分析 - 乱舞春秋 - 尚书

 VGA时序分析 - 乱舞春秋 - 尚书

根据上面的水平和垂直扫描时序可以分析显示800x600模式,FPGA系统时钟采用Spartan-3E
Starter Kit
板上的50MHz的有源晶振。为了显示器显示效果好,采用刷新频率为72Hz

以下以系统时钟频率为50MHz,显示器显示800x600模式为例分析水平扫描和垂直扫描时序:系统时钟周期为1/50MHz=20ns

水平扫描Horizonal(Line)

 

VGA时序分析 - 乱舞春秋 - 尚书

 

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

抱歉!评论已关闭.