之前碰到接收VGA时有的电脑可以有的电脑会出现画面偏移。

先来了解下数字显示器时序(DMT)
DMT视频时序有四种:
(1)Positive H & Positive V Syncs
行同步为正极性,场同步为正极性

VGA的行场时序-LMLPHP

(2)Negative H & Negative V Syncs
行同步为正极性,场同步为负极性

VGA的行场时序-LMLPHP

(3)Negative H & Negative V Syncs
行同步为负极性,场同步为负极性

VGA的行场时序-LMLPHP

(4)Negative H & Positive V Syncs
行同步为负极性,场同步为正极性

VGA的行场时序-LMLPHP

整帧的时序如下:

VGA的行场时序-LMLPHP

注意以下几点:
(1)边界都是有效视频区域。
(2)该图是以行场同步极性为正为例
场的回扫间隔是这样的:

VGA的行场时序-LMLPHP

第二步:了解时序与像素之间的关系
在VESA Display Monitor Timing Standard 定义了显示器的不同分辨率的时序。这里我们以分辨率为1920x1080@60Hz为例。
详细时序参数如下:
Timing Name    = 1920 x 1080 @ 60Hz;                             
Hor Pixels        = 1920;    //Pixels                            
Ver Pixels        = 1080;    //Lines                               
Hor Frequency     = 67.500;  //kHz    =  14.8 usec/line              
Ver Frequency     = 60.000;  //Hz     =  16.7 msec/frame             
Pixel Clock       = 148.500; //MHz    =   6.7 nsec                
Character Width   = 4;       //Pixels =  26.9 nsec  ± 0.5%     
Scan Type        = NONINTERLACED;  // H Phase =    1.4 %            
Hor Sync Polarity  = POSITIVE  // HBlank = 12.7% of HTotal           
Ver Sync Polarity  = POSITIVE  // VBlank = 4.0% of VTotal            
Hor Total Time     = 14.815;   // (usec) =  550 chars = 2200 Pixels  
Hor Addr Time      = 12.929;   // (usec) =  480 chars = 1920 Pixels  
Hor Blank Start    = 12.929;   // (usec) =  480 chars = 1920 Pixels  
Hor Blank Time     = 1.886;    // (usec) =   70 chars =  280 Pixels  
Hor Sync Start     = 13.522;   // (usec) =  502 chars = 2008 Pixels  
// H Right Border  = 0.000;    // (usec) =    0 chars =    0 Pixels  
// H Front Porch   = 0.593;    // (usec) =   22 chars =   88 Pixels  
Hor Sync Time      = 0.296;    // (usec) =   11 chars =   44 Pixels  
// H Back Porch    = 0.997;    // (usec) =   37 chars =  148 Pixels  
// H Left Border   = 0.000;    // (usec) =    0 chars =    0 Pixels  
Ver Total Time     = 16.667;   // (msec) = 1125 lines  HT–(1.06xHA) 
Ver Addr Time      = 16.000;   // (msec) = 1080 lines = 1.11       
Ver Blank Start    = 16.000;   // (msec) = 1080 lines                
Ver Blank Time     = 0.667;    // (msec) =   45 lines                
Ver Sync Start     = 16.059;   // (msec) = 1084 lines                
// V Bottom Border = 0.000;    // (msec) =    0 lines                
// V Front Porch   = 0.059;    // (msec) =    4 lines                
Ver Sync Time      = 0.074;    // (msec) =    5 lines                
// V Back Porch    = 0.533;    // (msec) =   36 lines                
// V Top Border    = 0.000;    // (msec) =    0 lines     
05-11 19:56