과학용 계산기를 위한 니블(Nibble) 중심 CPU 구축하기

클래식한 과학용 계산기 경험을 재현하려는 노력은 하드웨어 설계와 컴퓨터 아키텍처의 매혹적인 교차점으로 이어집니다. 고정밀 십진수 계산기를 만드는 것이 목표일 때, 전통적인 CPU(Z80 또는 6502와 같은)의 표준 바이트 중심 아키텍처는 도움이 되기보다는 종종 방해가 됩니다.

gdevic이 개발한 이 프로젝트는 십진수 계산에 특화되어 최적화된 CPU를 만들기 위해 하드웨어의 기본 수준으로 돌아가는 아이디어를 탐구합니다. Verilog로 커스텀 CPU를 설계함으로써, 이 프로젝트는 하드웨어 아키텍처를 데이터 표현 방식, 특히 이진 부호화 십진수(Binary Coded Decimal, BCD)와 일치시키는 것이 커스텀 칩에서 고정밀 과학 계산을 달성하는 가장 효율적인 방법임을 보여줍니다.

아키텍처 선택: 왜 니블(Nibbles)인가?

이 프로젝트의 핵심은 CPU를 "니블(nibble) 중심"으로 만들기로 한 결정에 있습니다. 표준 컴퓨터에서 바이트(8비트)는 메모리의 가장 작은 주소 지정 가능 단위입니다. 그러나 BCD로 숫자를 저장하는 과학용 계산기의 경우, 각 십진수 자릿수는 4비트 니블로 표현됩니다.

만약 표준 8비트 CPU를 사용한다면, 프로세서는 단일 자릿수를 분리하기 위해 끊임없이 비트 시프팅(bit-shifting)과 마스킹(masking) 연산을 수행해야 할 것입니다. 4비트 니블을 자연스러운 데이터 너비로 만들고 메모리가 니블 단위로 주소 지정 가능하도록 보장함으로써, 설계자는 이러한 오버헤드를 제거합니다. 하드웨어는 십진수 자릿수로 "생각"하도록 구축되어, BCD 산술 연산의 구현을 훨씬 더 간소화합니다.

커스텀 CPU의 기술적 사양

이 시스템은 명령어 메모리와 데이터 메모리를 분리하여 명령어와 데이터의 동시 페칭(fetching)을 더 효율적으로 수행할 수 있게 하는 하버드 아키텍처(Harvard architecture)를 기반으로 구축되었습니다. 주요 기술적 구성 요소는 다음과 같습니다:

  • 12-bit ISA: 계산기의 특정 요구 사항에 맞게 설계된 커스텀 명령어 집합 아키텍처(Instruction Set Architecture).
  • 8-state Execution FSM: 명령어 실행 사이클을 처리하는 유한 상태 머신(Finite State Machine).
  • Hardware Stack Guard: 스택 오버플로를 방지하기 위한 전용 메커니즘으로, 마이크로코드 디버깅을 위한 FAULT 상태를 특징으로 합니다.
  • CORDIC Algorithm: 삼각 함수를 처리하기 위해 이 프로젝트는 14자릿수 정밀도로 검증된 CORDIC(Coordinate Rotation Digital Computer) 알고리즘을 활용합니다.
  • Custom PCB: 최종 하드웨어 구현에는 배터리와 충전 회로가 포함된 EasyEDA/JLCPCB로 설계된 커스텀 PCB가 포함됩니다.

소프트웨어 스택 및 툴체인

하드웨어는 방정식의 절반에 불과합니다. CPU를 계산기처럼 작동하게 만들기 위해, 이 프로젝트는 포괄적인 소프트웨어 및 소프트웨어 시뮬레이션 툴체인을 포함합니다:

  • Two-pass Assembler: Python으로 작성된(~700줄), 이 어셈블러는 커스텀 ISA를 머신 코드로 변환합니다.

  • Verilator + Qt Framework: 이를 통해 동일한 Verilog 소스 코드를 시뮬레이션, 데스크톱 GUI 디버거, WebAssembly, 그리고 실제 FPGA 하드웨어에서 실행할 수 있습니다.

  • Microcode Scripting: 마이크로코드 위에 스크립트 언어가 구현되어, 하드웨어 로직의 변경 없이도 계산기에 새로운 기능을 추가할 수 있습니다.

유산과 영향

이 프로젝트는 클래식한 과학용 계산기 시대, 특히 HP 제품에 대한 경의를 표합니다. 한 댓글 작성자가 언급했듯이, 70년대와 80년대의 전설적인 HP 계산기는 견고한 구조와 역폴란드 표기법(Reverse Polish Notation, RPN)의 사용으로 유명했습니다. RPN은 복잡한 수식에서 괄호의 필요성을 없애줍니다.

"HP 계산기를 가졌다는 것의 가장 좋은 점은 견고한 물리적 구조... 정확도, 그리고 반 친구들이 계산기를 빌려달라고 할래 때마다 당신이 그들에게 RPN을 아는지 물어봤을 때 그들이 공포에 질려 뒷걸음질 칠 때였습니다."

이러한 초기 과학용 기계들의 로직을 재현함으로써, 이 프로젝트는 현대의 FPGA 설계와 개인용 컴퓨터의 초기 시절을 정의했던 클래식한 아키텍처 결정 사이의 간극을 메집니다.

Sources