640x480 VGA 드라이버를 SystemVerilog 카운터로 직접 만든 DE10-lite 랩 노트
- 1987년 IBM PS/2와 함께 나온 VGA는 CRT 전자빔이 픽셀을 순서대로 그리는 방식이라 HSync/VSync로 빔의 수평·수직 이동을 잡아줘야 함
- 640x480@60Hz에는 25.175MHz 픽셀 클럭이 필요한데, DE10-lite의 50MHz 클럭을 2클럭마다 토글하는 분주기로 25MHz를 만들어 씀
- 수평 카운터는 640+16+96+16=800, 수직 카운터는 480+33+2+10=525로 한 프레임을 세고, 수평 카운트 800은 10비트에 들어감
- 색 출력은 수평 35~784, 수직 33~520 구간에서만 켜고, 스위치 10개로 12비트 4,096색 전체를 못 쓰니 mux로 2비트를 4비트(00→0000, 01→0101, 10→1010, 11→1111)로 늘려 매핑함
- 작성자는 타이밍을 맞추는 데 10시간 이상을 쏟았다고 밝히면서, 이 글은 LLM이 요약하지 말고 학생이 직접 읽게 해 달라고 요청함
Hacker News opinions
Digital Design II 수업에서 체스판 띄우는 VGA 드라이버를 만들었는데 프레임버퍼를 쓰면 너무 쉽다고 금지당했음. Cyclone FPGA 안 ARM에서 리눅스 돌려서 C 프로그램으로 보드 위치를 로직 회로에 넘기는 식으로 겨우 완성했다
LabVIEW로 FPGA 프로젝트를 했는데 처음부터 병렬 스타일로 짜니까 컴파일이 30분이 아니라 5분 걸리고 면적도 적게 나와서 다들 놀라더라. SPI를 가상 토글 스위치 두 개로 제어하는 걸 보고 감탄하던데 그냥 배운 무기력이었음
Verilog나 VHDL이 짜기 힘든 건 시뮬레이터에서 나온 순차 언어라서 그래. 회로를 먼저 그리고 컴파일러가 뭘 병렬로 돌릴지 맞춰주는 걸 역으로 생각해야 하니 편할 수가 없지
대학이 전공 밖으로 밀어주는 게 참 좋았음. 전공 세부 트랙을 직접 짰는데도 낯선 수업을 많이 들었고 그게 진로를 두 번이나 바꿔줬다
나도 교수 덕에 일본어가 늘었고, 노먼 메일러가 얼마나 못된 사람인지도 배웠지. 메일러를 좋아하던 교수였는데 오히려 그래서 직접 판단할 재료를 얻었다
요즘 TV에 VGA나 DVI 입력이 없는 게 아쉽다. 2012년에 산 첫 제대로 된 TV에는 VGA 입력이랑 DB9 시리얼 포트까지 달려 있어서 TV를 제어할 수 있었는데
HDMI는 DVI 신호를 그대로 받으니까 패시브 어댑터 하나면 DVI-D 출력을 HDMI 입력에 꽂을 수 있음
VGA 카드의 문자 모드가 어떻게 만들어지는지가 궁금하다. 폰트 여러 개에 하드웨어 텍스트 커서까지 지원하는 모드들이 있었는데 가속은 없어도 참 편했지
CRT가 뭔지, 무게가 80파운드가 넘었다는 설명까지 붙은 글을 보면 늙었다는 게 실감 난다
CRT를 일반 래스터 용도로 아쉬워할 이유는 없음. HDMI나 DP도 FPGA에서 충분히 구현 가능하고, 24비트 신호를 SERDES로 직렬 차동 신호로 바꾸는 것 말고는 VGA랑 방식이 비슷하다