TECH 으로 돌아가기
TECH HACKER NEWS 오늘 6분 읽기 33 READS

486 SX를 통째로 재현한 오픈소스 코어 ao486, 무엇을 배울 수 있나

486 SX를 통째로 재현한 오픈소스 코어 ao486, 무엇을 배울 수 있나
SOURCE IMAGE · HACKER NEWS

오래된 CPU를 소프트웨어로 흉내 내는 에뮬레이터는 많지만, 논리 회로 수준에서 실제 하드웨어로 되살리는 시도는 훨씬 드물다. ao486은 인텔 486 SX의 모든 기능을 Verilog로 구현한 x86 호환 코어다. 즉 PC에서 돌아가는 프로그램이 아니라, FPGA에 합성해 실제 디지털 회로로 동작하는 프로세서다. 프로젝트는 코어 단독에 그치지 않고, 이 코어를 중심으로 한 SoC(System on Chip)까지 포함해 리눅스 커널 3.13과 마이크로소프트 윈도우 95를 부팅할 수 있는 수준까지 완성도를 끌어올렸다.

정확성을 어떻게 담보했나

x86은 명령어 집합이 방대하고 예외 처리, 세그먼트, 보호 모드 같은 복잡한 동작이 얽혀 있어 하드웨어로 재현할 때 '어디까지가 올바른 동작인가'를 판정하는 일이 가장 어렵다. ao486은 이 문제를 검증 대상이 아니라 검증 기준을 확보하는 방식으로 풀었다. 널리 쓰이는 소프트웨어 x86 구현인 Bochs를 기준 모델로 삼아, 그 동작을 참조하며 코어를 설계하고 테스트한 것이다. 실제 하드웨어 사양서만으로 밑바닥부터 맞춰가는 대신, 이미 검증된 참조 구현과 대조하는 접근은 재현 프로젝트에서 결과의 신뢰도를 높이는 실무적인 선택이다.

펌웨어 역시 바닥부터 새로 쓰지 않고 검증된 자산을 재활용했다. 시스템 BIOS는 Bochs 프로젝트의 2.6.2 버전을 가져와 하드디스크 지원을 위한 소폭 수정만 거쳤고, VGA BIOS는 VGABIOS 프로젝트의 0.7a 버전을 수정 없이 그대로 사용했다. 다만 이 VGA 모델은 VBE 확장을 지원하지 않아 해당 확장 기능은 비활성화했다. 부팅용 이미지로는 FreeDOS의 플로피 부트 이미지가 포함된다. 코어와 펌웨어가 각각 LGPL 등 오픈소스 라이선스를 따르는 자산으로 구성돼 있다는 점도 학습이나 파생 활용을 고려할 때 눈여겨볼 대목이다.

SoC 구성과 실행 환경

ao486의 SoC는 알테라 Qsys 컴포넌트 형태로 각 부품을 모델링하고, Qsys가 이들을 연결하며 SDRAM 컨트롤러를 제공하는 구조다. 흥미로운 점은 시스템 전체를 관리하고 화면상 OSD(On Screen Display)를 표시하는 역할을 알테라의 NIOS II 프로세서가 맡는다는 것이다. 즉 486 코어가 실제 PC의 CPU처럼 동작하는 동안, 별도의 소프트 프로세서가 주변 장치와 사용자 인터페이스를 관리한다. OSD를 통해 사용자는 플로피 디스크를 넣고 빼는 조작을 할 수 있어, 당시 PC의 사용 경험을 상당 부분 재현한다.

성능 수치는 이 프로젝트의 성격을 잘 보여준다. 프로젝트는 알테라 Cyclone IV E(EP4CE115F29C7) 디바이스를 대상으로 합성됐으며, 최대 동작 주파수는 39MHz, 실제 사용 클럭은 30MHz다. 원본 486이 수십 MHz대에서 동작하던 프로세서였음을 감안하면 시대적 맥락에 부합하는 속도이며, 성능 측정에는 DOS용 벤치마크 패키지가 사용됐다. 현재 이 프로젝트는 Terasic DE2-115 보드에서만 구동이 확인돼 있어, 다른 FPGA 보드로 옮기려면 별도의 이식 작업이 필요하다.

실무자가 얻을 수 있는 것과 한계

한국의 IT 실무자에게 ao486의 가치는 완성품 그 자체보다 방법론에 있다. 복잡한 표준을 하드웨어로 재현할 때 검증된 소프트웨어 구현을 골든 모델로 삼아 동작을 대조하는 방식, 그리고 코어·펌웨어·관리용 소프트 프로세서·연결 버스를 분리해 조립하는 SoC 설계 감각은 FPGA나 하드웨어 검증에 관심 있는 개발자에게 구체적인 참고 사례가 된다. 특히 관리 로직을 하드 코어에서 분리해 NIOS II에 위임한 구조는, 복잡한 시스템에서 제어 평면과 데이터 평면을 나누는 일반적인 설계 원칙과도 통한다.

다만 곧바로 가져다 쓸 수 있는 물건은 아니라는 점은 분명히 해둘 필요가 있다. SoC 전체를 합성하려면 NIOS II 마이크로컨트롤러 때문에 알테라 Quartus II가 필요하고, 합성 프로젝트 파일도 현재는 Quartus II용으로만 준비돼 있다. 코어를 포함한 Verilog 구성 요소 자체는 원칙적으로 다른 Verilog 컴파일러에서도 합성이 가능하다고 하지만, 프로젝트 문서는 일부 합성 프로젝트 파일, 특히 그 안의 경로가 깨져 있을 수 있다고 명시한다. 컴파일에 앞서 Qsys 시스템을 먼저 생성해야 하는 등 초기 설정에도 손이 간다. 결국 ao486은 특정 보드와 특정 툴체인에 묶인 연구·학습용 프로젝트에 가깝다. 그럼에도 x86이라는 방대한 아키텍처를 회로 수준에서 통째로 재현해 실제 운영체제를 부팅해냈다는 사실만으로, 하드웨어 재현이 어디까지 가능한지 보여주는 좋은 표본으로 남는다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://github.com/alfikpl/ao486
SHARE
처리 중...