好的,现在您已经为您选择的点时钟计算了 HFL/VFL 数值,发现刷新率可以接受,并检查了您有足够的显存 (VRAM)。现在进入真正的黑魔法环节 -- 您需要知道何时以及何处放置同步脉冲。
同步脉冲实际上控制着显示器的水平和垂直扫描频率。您从规格表上获取的 HSF 和 VSF 是标称的、近似的最大同步频率。来自适配器卡的信号中的同步脉冲告诉显示器实际运行的速度。
还记得上面的两张图片吗?光栅扫描一帧所需的时间中,只有一部分用于显示可见图像(即,您的分辨率)。
根据之前的定义,扫描一条水平线需要 HFL 个时钟周期。让我们将可见时钟周期数(您的水平屏幕分辨率)称为 HR。那么显然,根据定义 HR < HFL。为了具体起见,让我们假设两者都从同一时刻开始,如下所示
|___ __ __ __ __ __ __ __ __ __ __ __ __ |_ _ _ _ _ _ _ _ _ _ _ _ | |_______________________|_______________|_____ 0 ^ ^ unit: ticks | ^ ^ | HR | | HFL | |<----->| | |<->| HSP |<->| HGT1 HGT2 |
现在,我们希望放置一个长度为 HSP 的同步脉冲,如上所示,即在显示数据时钟周期结束和整个帧的时钟周期结束之间。为什么要这样做呢?因为如果我们能做到这一点,那么您的屏幕图像就不会向右或向左偏移。它将位于屏幕上应该在的位置,完全覆盖显示器的可视区域。
此外,我们希望在同步脉冲的任一侧留出大约 30 个时钟周期的“保护时间”。这由 HGT1 和 HGT2 表示。在典型的配置中,HGT1 != HGT2,但是如果您要从头开始构建配置,您应该从使它们相等(即,同步脉冲居中)开始实验。
同步脉冲错位的症状是图像在屏幕上错位,一边边框过宽,另一边图像环绕到屏幕边缘,产生白色边缘线和该侧的“重影”带。严重错位的垂直同步脉冲实际上会导致图像像垂直同步失调的电视一样滚动(实际上,这是相同的工作原理)。
如果幸运的话,您的显示器的规格页面上会记录其同步脉冲宽度。如果不是,真正的黑魔法就从这里开始了...
您将不得不进行一些试错。但在大多数情况下,我们可以安全地假设同步脉冲的长度约为 3.5 到 4.0 微秒。
为了再次具体起见,让我们取 HSP 为 3.8 微秒(顺便说一句,这对于实验来说是一个不错的起始值)。
现在,使用上面的 65Mhz 时钟时序,我们知道 HSP 相当于 247 个时钟周期(= 65 * 10**6 * 3.8 * 10^-6)[回忆一下 M=10^6,微秒=10^-6]
一些供应商喜欢用时序而不是点宽度来引用他们的水平帧参数。您可能会看到以下术语
对应于 HR,但单位是时间(通常是微秒)。HAT * DCF = HR。
对应于 (HFL - HR),但单位是时间(通常是微秒)。HBT * DCF = (HFL - HR)。
这只是 HGT1。
这只是 HSP。
这只是 HGT2。
回到上面的图片,我们如何放置图片中所示的 247 个时钟周期?
在我们的示例中,HR 是 944,HFL 是 1176。两者之差为 1176 - 944=232 < 247!显然我们必须在这里进行一些调整。我们能做什么?
首先是将 1176 提高到 1184,并将 944 降低到 936。现在差值 = 1184-936= 248。嗯,更接近了。
接下来,我们不使用 3.8,而是使用 3.5 来计算 HSP;然后,我们得到 65*3.5=227。看起来好多了。但是 248 并没有比 227 高多少。通常需要在 HR 和 SP 的开始之间以及 SP 的结束和 HFL 之间有大约 30 个时钟周期。并且它们必须是八的倍数!我们卡住了吗?
没有。让我们这样做,936 % 8 = 0,(936 + 32) % 8 = 0 也是。但是 936 + 32 = 968,968 + 227 = 1195,1195 + 32 = 1227。嗯... 这看起来还不错。但它不是 8 的倍数,所以让我们向上舍入到 1232。
但是现在我们有潜在的麻烦了,同步脉冲不再位于 h 和 H 的正中间了。幸运的是,使用我们的计算器,我们发现 1232 - 32 = 1200 也是 8 的倍数,并且 (1232 - 32) - 968 = 232,对应于使用 3.57 微秒长的同步脉冲,仍然是合理的。
此外,936/1232 ~ 0.76 或 76%,仍然离 80% 不远,所以应该没问题。
此外,使用当前的水平帧长度,我们基本上要求我们的显示器以 52.7khz (= 65Mhz/1232) 的频率同步,这在其能力范围内。没有问题。
使用我们之前提到的经验法则,936*75%=702,这是我们新的垂直分辨率。702 * 1.05 = 737,这是我们新的垂直帧长度。
屏幕刷新率 = 65Mhz/(737*1232)=71.6 Hz。这仍然非常出色。
计算垂直同步脉冲布局是类似的
|___ __ __ __ __ __ __ __ __ __ __ __ __ |_ _ _ _ _ _ _ _ _ _ _ _ | |_______________________|_______________|_____ 0 VR VFL unit: ticks ^ ^ ^ | | | |<->|<----->| VGT VSP |
我们在垂直显示数据时钟周期结束后立即启动同步脉冲。VGT 是同步脉冲所需的垂直保护时间。大多数显示器可以舒适地接受 VGT 为 0(无保护时间),我们将在本示例中使用它。少数显示器需要两到三个时钟周期的保护时间,并且通常添加它也没有坏处。
回到示例:由于根据帧长度的定义,垂直时钟周期是跟踪完整水平帧的时间,因此在我们的示例中,它是 1232/65Mhz=18.95us。
经验表明,垂直同步脉冲应在 50us 到 300us 的范围内。例如,让我们使用 150us,这转化为 8 个垂直时钟周期 (150us/18.95us~8)。
一些制造商喜欢用时序而不是点宽度来引用他们的垂直帧参数。您可能会看到以下术语
对应于 VR,但单位是毫秒。VAT * VSF = VR。
对应于 (VFL - VR),但单位是毫秒。VBT * VSF = (VFL - VR)。
这只是 VGT。
这只是 VSP。
这就像垂直同步脉冲之后的第二个保护时间。它通常为零。