기타 Lobsters · 2026-10-20

FPGA 보드로 밑바닥부터 VGA 드라이버 직접 만든 썰

핵심 요약
  • 한 개발자가 대학 논리회로 실습 중 DE10-lite FPGA 보드를 사용해 SystemVerilog로 VGA 드라이버를 바닥부터 구현한 과정을 소개했습니다.
  • CRT 모니터의 전자총 주사 원리와 TinyVGA 타이밍 규격을 바탕으로 클럭 분주기 및 카운터 모듈을 직접 설계해 하드웨어를 제어했습니다.
  • 10시간 이상의 타이밍 디버깅 끝에 실제 모니터에 단색 화면을 띄우고 만화 캐릭터 이미지를 출력하는 데 성공했습니다.
요약 한 해외 개발자가 대학 시절 '디지털 논리 설계 실습' 수업에서 FPGA 보드를 이용해 밑바닥부터 직접 VGA 드라이버를 구현했던 흥미로운 경험담을 공유했습니다. VGA 규격은 1987년 IBM PS/2 시절 등장한 표준으로, 당시 무거운 브라운관(CRT) 모니터의 전자총 원리에 맞춰 설계되었습니다. 단일 전자빔이 화면 전체를 한 줄씩 훑으며 지나가기 때문에 수평·수직 이동 시간(HSync, VSync) 타이밍을 아주 정밀하게 제어해야 실제 모니터에 정상적으로 픽셀이 투사됩니다. 작성자는 테라식(terasIC)의 'DE10-lite' FPGA 보드를 활용해 구현에 도전했습니다. VGA 60Hz 화면을 띄우려면 약 25.175MHz의 픽셀 클럭이 필요한데, 보드의 50MHz 기본 클럭을 2클럭마다 토글하는 단순 클럭 분주기로 25MHz를 맞춰 비표준 클럭 오차 문제를 HSync/VSync 제어로 해결했습니다. 또한 TinyVGA 타이밍 규격을 참고해 화면 밖 영역(Front/Back Porch, Sync Pulse)을 포함한 수평 800픽셀, 수직 525라인을 세는 카운터 모듈을 설계했습니다. 보드의 물리적 스위치가 10개뿐인 한계를 멀티플렉서(MUX)를 통한 비트 매핑으로 극복해 12비트(4,096색) 색 공간을 제어했으며, 10시간이 넘는 디버깅 삽질 끝에 실제 하드웨어 모니터에 '비버 오렌지색' 단색 화면을 띄우는 데 성공했습니다. 이어지는 2단계 실습에서는 ROM 메모리에 초기화 파일을 로드하여 만화 캐릭터 아스테릭스(Asterix) 이미지를 화면 좌상단에 띄우는 작업까지 진행하며 기초적인 하드웨어 설계의 짜릿함을 전했습니다.
Sponsored · 광고