📄 xfree86-video-timings-howto-10.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312"> <META NAME="GENERATOR" CONTENT="ZH-SGML-Tools 1.0.9"> <TITLE>XFree86 Video Timings HOWTO 中文版: 巫术和同步脉冲</TITLE> <LINK HREF="XFree86-Video-Timings-HOWTO-11.html" tppabs="http://www.linux.org.tw/CLDP/gb/XFree86-Video-Timings-HOWTO-11.html" REL=next> <LINK HREF="XFree86-Video-Timings-HOWTO-9.html" tppabs="http://www.linux.org.tw/CLDP/gb/XFree86-Video-Timings-HOWTO-9.html" REL=previous> <LINK HREF="XFree86-Video-Timings-HOWTO.html#toc10" tppabs="http://www.linux.org.tw/CLDP/gb/XFree86-Video-Timings-HOWTO.html#toc10" REL=contents><SCRIPT src="menu.js"> function BeginPage() {} function EndPage() {} </SCRIPT> </HEAD> <BODY bgcolor=#FFFFFF MARGINHEIGHT=0 MARGINWIDTH=0> <A HREF="XFree86-Video-Timings-HOWTO-11.html" tppabs="http://www.linux.org.tw/CLDP/gb/XFree86-Video-Timings-HOWTO-11.html"><IMG SRC="next.gif" tppabs="http://www.linux.org.tw/CLDP/gb/img/next.gif" ALT="Next"></A><A HREF="XFree86-Video-Timings-HOWTO-9.html" tppabs="http://www.linux.org.tw/CLDP/gb/XFree86-Video-Timings-HOWTO-9.html"><IMG SRC="prev.gif" tppabs="http://www.linux.org.tw/CLDP/gb/img/prev.gif" ALT="Previous"></A><A HREF="XFree86-Video-Timings-HOWTO.html#toc10" tppabs="http://www.linux.org.tw/CLDP/gb/XFree86-Video-Timings-HOWTO.html#toc10"><IMG SRC="toc.gif" tppabs="http://www.linux.org.tw/CLDP/gb/img/toc.gif" ALT="Contents"></A><HR><H2><A NAME="magic"></A> <A NAME="s10">10. 巫术和同步脉冲</A></H2><P><P>好,现在你已为你选的象素时钟算出了 HFL / VFL ,找出了可接受的刷新率,检查了你有足够的显示内存.现在是真正的巫术 --- 你要知道什么时候在哪里放置同步脉冲.<P>同步脉冲实际上控制了显示器的行频和场频.你从技术规格表里查出的HSF和VSF是名义上的,近似的同步频率最大值.来自显示卡的同步脉冲信号告诉显示器实际以多快频率运行.<P>回忆起上面的两幅图吗?光栅扫描一帧需要的时间只有部分用于显示可视画面(即你的分辨率).<P><H2><A NAME="ss10.1">10.1 行同步</A></H2><P><P>通过之前的定义,水平扫描一行有HFL个象素.让我们把可视象素数目(屏幕水平分辨率)称为HR.因此根据定义显然 HR < HFL .具体地,让我们假设两者同时开始,如下所示:<P><PRE> |___ __ __ __ __ __ __ __ __ __ __ __ __ |_ _ _ _ _ _ _ _ _ _ _ _ | |_______________________|_______________|_____ 0 ^ ^ 单位:象素数 | ^ ^ | HR | | HFL | |<----->| | |<->| HSP |<->| HGT1 HGT2</PRE><P>现在,如上所示我们想要在长度HSP的位置放置一个同步脉冲,也就是在可视区域象素点末端和整个帧象素点末端之间的位置.为什么这样?因为如果我们能完成这个的话,那么你的屏幕画面就不会偏移向左或右.它将会在屏幕上应在的地方,方形地覆盖显示器的可视区域.<P>此外,在同步脉冲的每一边我们都要约30个象素作为"防护时间".这由HGT1和HGT2表示.在一个典型的配置中HGT1不等于HGT2,但如果你正在从零建立一个配置,就要从两者相等开始你的试验(换言之,从同步脉冲居中开始试验).<P>同步脉冲放置错误的症状是图像在屏幕上偏移,一条边过分地宽,另一边图像在屏幕边缘回绕过来,产生一条白色边线和一条"幽灵图像"带.一个位置不适当的场同步脉冲由于会使画面象错误调整了场同步控制的电视机一样滚动(实际上,运转时有相同的现象).<P>幸运的话,你的显示器同步脉冲宽度会在技术规格文档中.如果没有,真正的巫术开始了...<P>在这一部分,你将不得不反复试验.但大多数时候,我们可以安全地假定一个同步脉冲长度大约是3.5到4.0微秒.<P>具体起见,我们认为HSP是3.8微秒(顺便说一句,这是一个不错的试验起始值).<P>现在,用上述的65MHz时序值,我们知道HSP等于247个象素(= 65 * 10**6 * 3.8 * 10^-6) [记得 M=10^6, micro=10^-6]<P>一些人喜欢引用他们的水平帧参数而不是象素宽度作为时序.你也许会看见下列术语:<DL><DT><B>活跃时间(HAT)</B><DD><P>相当于HR,但以毫秒为单位. HAT * DCF = HR .<P><DT><B>消隐时间(HBT)</B><DD><P>相当于(HFL - HR),但以毫秒为单位. HBT * DCF = (HFL - HR) .<P><DT><B>上升沿(HFP)</B><DD><P>这就是HGT1.<P><DT><B>同步时间</B><DD><P>这就是HSP.<P><DT><B>下降沿(HBP)</B><DD><P>这就是HGT2.<P></DL><P><H2><A NAME="ss10.2">10.2 场同步</A></H2><P><P>回到上图,我们怎样能如图所示放置这247个象素呢?<P>用我们的例子,HR是944而HFL是1176.两者之差是 1176 - 944 = 232 < 247 !显然我们不得不在这做些调整.我们怎么做呢?<P>首先把1176提高到1184,把944降低到936.现在差是 1184 - 936 = 248 .嗯,接近些了.<P>下一步,我们不用3.8而用3.5计算HSP;那么,我们得出 65 * 3.5 = 227 .看起来更好了.但248不比227高多少.通常在HR和SP的开始点之间要有约30个象素,SP的结束点和HFL之间也一样.而且它们必须是8的倍数!我们被卡住了吗?<P>不.让我们这么做, 936 % 8 = 0 ,而 (936 + 32) % 8 = 0 .但 936 + 32 = 968 , 968 + 227 = 1195 , 1195 + 32 = 1227 .嗯..这看起来还不算太坏.但它不是8的倍数,所以让我们把它向上舍入为1232.<P>但现在我们有潜在的麻烦了,同步脉冲不再位于h和H的正中.幸亏用计算器我们发现 1232 - 32 = 1200 也是8的倍数,而且 (1232 - 32) - 968 = 232 ,相应于使用3.57微秒长的同步脉冲,仍然合理.<P>另外, 936 / 1232 0.76或76%,仍然离80%不远,因此应该没问题.<P>此外,使用当前的水平帧长,我们要求显示器同步于52.7KHz(= 65MHz / 1232),在其承受范围之内.没问题.<P>用前面提过的经验法则, 936 * 75% = 702 ,这是我们新的垂直分辨率. 702 * 1.05 = 737 ,我们新的垂直帧长.<P>屏幕刷新率= 65MHz / (737 * 1232) = 71.6Hz .依然很好.<P>类似地画出场同步脉冲布局:<P><PRE> |___ __ __ __ __ __ __ __ __ __ __ __ __ |_ _ _ _ _ _ _ _ _ _ _ _ | |_______________________|_______________|_____ 0 VR VFL 单位:象素数 ^ ^ ^ | | | |<->|<----->| VGT VSP</PRE><P>我们在垂直可视区象素刚结束时开始同步脉冲.VGT是同步脉冲的垂直防护时间.大部分显示器VGT为0(没有防护时间)时都没问题.我们在这个例子里就那样设定.少数需要两或三个象素点的防护时间,加上这个通常没有害处.<P>回到本例:根据帧长的定义,一个垂直象素时钟是跟踪完整的一个水平帧的时间,因此在我们的例子里,它是 1232 / 65MHz = 18.95us .<P>经验告诉我们一个场同步脉冲应该在50us和300us范围之间.让我们用150us做一个例子,并换算成8个垂直象素时钟(150us / 18.95us 8).<P>一些人喜欢引用他们的垂直帧参数而不是象素宽度作为时序.你也许会看见下列术语:<P><DL><DT><B>活跃时间(VAT)</B><DD><P>相当于VR,但以微秒为单位. VAT * VSF = VR .<DT><B>消隐时间(VBT)</B><DD><P>相当于 (VFL - VR) ,但以微秒为单位. VBT * VSF = (VFL - VR) .<DT><B>上升沿(VFP)</B><DD><P>这就是VGT.<DT><B>同步时间</B><DD><P>这就是VSP.<DT><B>下降沿(VBP)</B><DD><P>这是在场同步脉冲后的又一个防护时间.它通常是零.</DL><P><HR><A HREF="XFree86-Video-Timings-HOWTO-11.html" tppabs="http://www.linux.org.tw/CLDP/gb/XFree86-Video-Timings-HOWTO-11.html"><IMG SRC="next.gif" tppabs="http://www.linux.org.tw/CLDP/gb/img/next.gif" ALT="Next"></A><A HREF="XFree86-Video-Timings-HOWTO-9.html" tppabs="http://www.linux.org.tw/CLDP/gb/XFree86-Video-Timings-HOWTO-9.html"><IMG SRC="prev.gif" tppabs="http://www.linux.org.tw/CLDP/gb/img/prev.gif" ALT="Previous"></A><A HREF="XFree86-Video-Timings-HOWTO.html#toc10" tppabs="http://www.linux.org.tw/CLDP/gb/XFree86-Video-Timings-HOWTO.html#toc10"><IMG SRC="toc.gif" tppabs="http://www.linux.org.tw/CLDP/gb/img/toc.gif" ALT="Contents"></A> </BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -