11. 마술, 그리고 동기 펄스

좋습니다. 이제 당신이 선택한 도트클럭에 대한 HFL/VFL 수치를 계산했고 가능한 리프레쉬율을 알아내었으며, 이 해상도를 쓸수 있을만한 비디오램을 가지고 있는지도 확인했습니다. 이제 정말 마술을 부려 봅시다 -- 언제 어디에 동기펄스를 위치시켜야 하는지를 알아야 합니다.

모니터의 수평, 수직 스캔 주파수를 컨트롤하는 것은 사실 동기펄스입니다. 모니터 설명서에 나오는 HSF, VSF 값은 대표값(nominal value)으로서 동기주파수의 대략적인 최고값입니다. 비디오 카드에서 출력되는 동기펄스는 얼마나 빨리 빔을 주사해야 하는지를 모니터에 지시합니다.

아까의 두개의 그림을 기억하시나요? 한 프레임을 래스터스캐닝하는데 드는 시간중 단지 일부만이 가시화면(즉, 화면해상도)을 만드는데 사용됩니다.

11.1. 수평 동기

앞서의 정의에 의하면, 수평스캔라인이 주사되는데는 HFL 만큼의 틱이 필요합니다. 가시화면을 생성하는 틱들의 숫자를 따로 HR(horizontal screen resolution) 이라 합시다. 이제 정의에 의해 HR < HFL 임이 분명합니다. 정확한 이해를 위해 아래와 같이 같은 출발점에서 시작되는 그림을 그려보았습니다.

  |___ __ __ __ __ __ __ __ __ __ __ __ __
  |_ _ _ _ _ _ _ _ _ _ _ _                |
  |_______________________|_______________|_____ 
  0                       ^               ^     단위: ticks
                          |   ^       ^   |
                          HR  |       |  HFL
                          |   |<----->|   |
                          |<->|  HSP  |<->|
                          HGT1         HGT2

이제 우리는 HSP 길이 만큼의 동기펄스를 위 그림처럼 배치해야 합니다. 즉, 화면을 생성하는 데이터의 클럭 틱의 끝부분과 전체 프레임의 클럭 틱의 끝 사이의 어딘가에 HSP 길이의 동기 펄스를 배치해야 하는 것입니다. 왜냐구요? 이렇게 해야만 화면이 왼쪽이나 오른쪽으로 치우치지 않고 모니터의 가시화면 영역내의 제 위치에 제대로 자리잡히게 되는 것입니다.

이제, 동기펄스의 앞뒤로 약 30 틱의 "완충시간(guard time)"을 잡아줍시다. 이는 HGT1 과 HGT2 로 표기합니다. 일반적인 설정에서는 HGT1 와 HGT2 가 같은 길이일 필요는 없습니다만 지금은 시험단계이니 임시로 일단 같은 값으로 해두고 실험을 시작합시다(즉, 동기펄스를 중앙에 위치시킨 것입니다)

동기펄스를 잘못 위치시키면 이미지가 한쪽으로 치우쳐 버립니다. 한쪽 경계부분은 지나치게 넓고 반대쪽에서는 이미지가 스크린 끝에서 중첩되어버려서 백색으로 빛나는 경계부인 소위 "ghost image" 를 만들어 버립니다. 수직 동기주파수를 잘못 위치시키면 마치 V-hold 가 잘못 맞춰진 TV 처럼 화상이 말려 올라가 버립니다(사실상 TV 와 동일한 현상입니다).

운이 좋다면 모니터의 동기펄스의 폭이 제원부분에 나와있을 겁니다. 나와있지 않다면 이제부터 진짜 마술을 부려 봅시다...

이 부분에서는 시행착오를 감수해야 합니다. 하지만 대부분의 경우, 싱크펄스로 약 3.5-4.0 usec (microsecond) 정도의 길이를 가정하면 안전합니다.

정확히 하기위해서 HSP 를 3.8 usec 가정합시다(실험용으로 그리 나쁜 값은 아닙니다).

이제 위에서의 65 MHz 의 클럭 타이밍을 사용한다고 가정하면, HSP 가 247 (= 65 * 10^6 * 3.8 * 10^-6) 클럭 틱이 되는 것을 알수 있습니다(M = 10^6, micro = 10^-6] 입니다).

일부 제조업체에서는 수평 프레임 파라메터들을 도트 길이 대신 타이밍으로 표기합니다. 따라서 다음과 같은 용어들이 사용될 수도 있습니다.

active time (HAT)

HR 에 해당하는 용어지만 마이크로세컨드(microseconds)단위입니다. HAT * DCF = HR.

blanking time (HBT)

(HFL - HR) 에 해당하는 용어로서 마이크로세컨드 단위입니다. (HBT * DCF) = (HFL - HR).

front porch (HFP)

HGT1 과 같은 의미입니다.

sync time

HSP 와 같은 의미입니다.

back porch (HBP)

HGT2 와 같은 의미입니다.

11.2. 수직 동기

위의 그림으로 돌아가 봅시다. 어떻게 해야 247 클럭 틱을 윗그림처럼 위치시킬수 있을까요?

우리의 예에서는 HR 은 944 이고 HFL 은 1176 입니다 두 수의 차이는 1176 - 944 = 232 < 247 입니다! 분명 어딘가 수정이 필요하군요. 어디를 어떻게 고쳐야 할까요?

첫번째 할일은 1176을 1184 까지 높이고 944 를 936 으로 낮추는 것입니다. 이제 1184 - 936 = 248 이 되었습니다. 흠, 가까와 졌군요.

그 다음, HSP 를 계산하는데 있어 3.8 대신 3.5 를 사용합니다; 그러면 65 * 3.5 = 227 을 얻습니다. 훨씬 나아졌군요. 하지만 248은 227 보다 그리 높은 수치는 아니군요. 보통 약 30 클럭 내외의 틱이 SP 의 시작점과 HR 사이에 필요하고, 또 같은 만큼이 SP 의 끝과 HFL 사이에 필요합니다. 그리고 이 값들은 반드시 8 의 정수배여야 합니다! 막혀버린 걸까요?

아닙니다. 이렇게 해봅시다. 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 usec 길이의 싱크펄스를 사용했다고 가정했을 때의 수치에 대응합니다. 3.57 역시 괜찮은 값이구요.

게다가 936/1232 = 0.76, 즉 76% 입니다. 80% 에서 그리 먼 값이 아니므로 이 값도 괜찮습니다.

더우기 현재의 수평 프레임 길이를 사용하면, 기본적으로 모니터로 하여금 52.7 Khz(= 65 MHz / 1232) 의 동기펄스를 발생시키도록 하는 것입니다. 이 값 역시 모니터의 능력범위 내의 값입니다. 아무런 문제가 없습니다.

위에서 언급했던 경험칙을 사용하면, 936 * 75% = 702, 이 값이 우리의 새로운 수직 해상도 입니다. 702 * 1.05 = 737, 우리의 새로운 수직 프레임 길이입니다.

스크린 리플레쉬율은 65 MHz / (737 * 1232) = 71.6 Hz. 이것 역시 아주 좋은 값입니다.

수직동기 펄스의 그림을 그려보면 다음과 같습니다.

   |___ __ __ __ __ __ __ __ __ __ __ __ __
   |_ _ _ _ _ _ _ _ _ _ _ _                |
   |_______________________|_______________|_____ 
   0                      VR              VFL     단위: ticks
                           ^   ^       ^
                           |   |       |
                           |<->|<----->|
                            VGT    VSP

우리는 수직 디스플레이 데이터의 틱이 끝나자마자 수직펄스를 시작했습니다. VGT 는 수직 완충시간이라는 것으로서 동기펄스에 필요합니다. 대부분의 모니터들은 VGT 를 0 으로 잡더라도(즉 완충시간이 없어도) 안정적이므로 우리의 예에서는 그렇게 설정했습니다. 몇몇 모니터들은 완충시간으로 2-3 틱을 필요로 하는 수도 있으며 보통 2-3 틱 더해주어도 별 문제가 되지는 않습니다.

예제로 돌아 갑시다. 프레임 길이의 정의에 의해 수직 틱 하나는 수평 프레임 하나가 완전히 주사되는데 걸린 시간입니다. 따라서 우리의 예에서 이 값은 1232 / 65 MHz = 18.95 us 입니다.

경험적으로 보면 수직 동기 펄스는 50 - 300 us 범위 이내에 있어야 합니다. 예를들어 150 us 라 해봅시다. 이 값은 약 8 수직 클럭틱이 됩니다(150 us / 18.95 us = 8)

일부 제조업체들은 수직 타이밍 파라메터들을 도트길이 대신 타이밍으로 표기합니다. 다음과 같은 용어들이 사용될 수도 있습니다.

active time (VAT)

VR 에 해당하는 용어지만 밀리세컨드 단위입니다. VAT * VSF = VR.

blanking time (VBT)

(VFL -VR) 에 해당하는 용어지만 밀리세컨드 단위입니다. VBT * VSF = (VFL - VR).

front porch (VFP)

VGT 와 같은 의미입니다.

sync time

VSP 와 같은 의미입니다.

back porch (VBP)

수직 동기펄스 다음의 두번째 완충시간과 같습니다. 보통 0 입니다.