RISCBoy - 처음부터 설계한 오픈소스 휴대용 게임 콘솔

3 hours ago 2
  • RISCBoy는 RISC-V 호환 CPU부터 그래픽 파이프라인, 디스플레이 컨트롤러, 메모리·주변장치 인프라와 KiCad PCB까지 직접 설계한 휴대용 게임 콘솔임
  • 2001년에 RISC-V가 존재했다면 나왔을 법한 Game Boy Advance를 지향하며, 합성 가능한 Verilog 2005로 작성돼 7,680개 논리 요소를 갖춘 iCE40-HX8k FPGA에 32비트 콘솔을 구현함
  • 프로세서는 RV32IMC 명령어 집합과 M-mode CSR·예외·벡터 외부 인터럽트를 지원하며, RISC-V 적합성 테스트와 riscv-formal 검증을 통과함
  • 합성에는 Yosys·nextpnr·Project Icestorm 오픈소스 도구 체인을 사용하고, ECP5 보드와 더 작은 iCE40 UP5k용 RV32I 구성도 지원함
  • 시뮬레이션과 공식 개발 환경은 주로 Linux를 기준으로 하며, PCB Rev B와 부트로더·게이트웨어, 소프트웨어 트리는 아직 개발이 진행 중임

처음부터 구성한 휴대용 콘솔

  • RISCBoy의 공개 설계 범위는 다음과 같음
    • RISC-V 호환 CPU
    • 래스터 그래픽 파이프라인과 디스플레이 컨트롤러
    • 버스 패브릭, 메모리 컨트롤러, UART, GPIO 등의 칩 인프라
    • KiCad로 작성한 PCB 레이아웃
  • 목표는 RISC-V가 2001년에 존재했던 평행세계의 Game Boy Advance이며, 어린 시절의 휴대용 콘솔과 이를 구동한 기술에 대한 애정을 담은 프로젝트임
  • 더 자세한 설계 정보는 저장소의 doc/riscboy_doc.pdf 문서에서 확인할 수 있음

FPGA 구현과 프로세서

  • 설계는 합성 가능한 Verilog 2005로 작성됐으며, LUT4 기반 FPGA인 iCE40-HX8k에 맞춰짐
    • HX8k는 7,680개 논리 요소를 제공함
    • 제한된 자원에 32비트 게임 콘솔을 넣기 위해 세심한 설계가 필요함
  • HX8k는 한때 오픈소스 Project Icestorm 도구 체인이 지원한 가장 큰 FPGA였으며, 이후 관련 생태계는 Project TrellisProject X-Ray로 확장됨
  • 프로세서는 RV32IMC 명령어 집합을 지원함
    • 해당 명령어에 대한 RISC-V 적합성 테스트를 통과함
    • riscv-formal 검증 스위트를 통과함
    • 명령어 프런트엔드 일관성과 기본 버스 준수를 검사하는 자체 공식 속성 검증도 적용함
  • M-mode CSR와 예외를 지원하며, 벡터 외부 인터럽트를 위한 단순한 준수 확장도 제공함

저장소 복제와 툴체인

  • HDL과 테스트에 Git 서브모듈을 사용하므로 다음과 같이 재귀 복제해야 함
git clone --recursive https://github.com/Wren6991/RISCBoy.git riscboy
  • 일반 복제 후에는 서브모듈을 별도로 초기화할 수 있음
git clone https://github.com/Wren6991/RISCBoy.git riscboy cd riscboy git submodule update --init --recursive
  • 재귀 서브모듈 갱신은 프로세서의 독립 실행형 테스트에 필요하지만, RISCBoy 게이트웨어 빌드에는 필요하지 않음
  • 소프트웨어 기반 테스트를 컴파일하려면 RISC-V GNU ToolchainRV32IMC·ILP32 구성으로 빌드해야 함
./configure --prefix=/opt/riscv \ --with-arch=rv32imc \ --with-abi=ilp32 \ --with-multilib-generator="rv32i-ilp32--;rv32ic-ilp32--;rv32im-ilp32--;rv32imc-ilp32--"
  • iCE40 UP5k처럼 작은 FPGA에서는 고성능 RV32IMC 대신 더 작은 RV32I 프로세서 변형을 사용할 수 있음
  • 컴파일러가 RISCBoy의 여러 ISA 변형을 지원하더라도, 각 변형에 맞는 표준 라이브러리가 생성되도록 멀티라이브러리 설정이 필요함
    • RV32I 전용 프로세서에서 RV32IMC 표준 라이브러리에 링크된 RV32I 실행 파일을 구동하면 문제가 발생함

시뮬레이션과 테스트

  • 시뮬레이션 흐름은 Xilinx ISIM 14.x와 scripts/ 디렉터리의 Makefile을 사용함
    • Linux 버전 ISIM에서만 테스트됨
    • ISIM이 기본 경로가 아닌 곳에 설치됐다면 sourceme의 경로를 조정해야 할 수 있음
  • HDL 수준 테스트를 실행하는 과정은 다음과 같음
git submodule update --init --recursive . sourceme cd test ./runtests
  • 소프트웨어 테스트에는 RV32IC 툴체인이 필요함
  • 개별 테스트를 그래픽 환경에서 디버깅하려면 해당 Makefile을 직접 실행함
cd system make TEST=helloworld gui

PCB 설계

  • Rev A PCB는 iTead의 4층 5×5cm 프로토타이핑 서비스와 호환됨
    • README 작성 시점의 비용은 보드 10장에 65달러임
    • 회로도는 저장소의 board/fpgaboy.pdf에서 볼 수 있음
  • Rev B는 Rev A와 상당히 다른 형태가 될 예정이며, 진행에 앞서 게이트웨어와 부트로더가 성숙하기를 기다리는 상태임
  • 현재 개발 하드웨어는 Snowflake FPGA board와 유사한 형태임

합성과 지원 보드

  • iCE40용 FPGA 합성에는 다음 오픈소스 도구 체인을 사용함
  • 해당 도구들은 Linux에서만 직접 빌드해 확인했으며, Windows 빌드는 가능하다고 알려졌지만 테스트하지 않음
  • Raspberry Pi에서도 도구 체인을 빌드할 수 있음
  • Lattice HX8k 평가 보드용 FPGA 이미지는 다음 명령으로 생성함
. sourceme cd synth make -f HX8k-EVN.mk bit
  • Lattice LEF5UM5G-85F-EVN 평가 보드를 위한 ECP5 지원도 제공하지만, 주 개발 플랫폼이 아닌 고도의 실험적 구성임
make -f ECP5-EVN.mk BUILD=full bit
  • ECP5 빌드는 개발 하드웨어의 외장 512KiB·16비트 SRAM을 내장 256KiB·32비트 동기식 메모리로 대체함
    • 이 메모리는 Trellis가 ECP5 sysmem 블록으로 구성함

저장소 구성

  • board: RISCBoy 메인 PCB와 개발 중 사용한 소형 보드의 KiCad 파일
  • doc: 문서의 LaTeX 소스와 도표, 최신 빌드 PDF
  • hdl: RISCBoy 게이트웨어의 Verilog 소스
    • busfabric: AHB-lite 크로스바와 APB 주변장치 패브릭
    • graphics: 픽셀 처리 장치 소스
    • hazard5: 완전히 독립적으로 구성된 RISC-V 프로세서 소스
    • mem: 메모리 컨트롤러와 메모리 추론·주입 래퍼 및 모델
    • peris: UART, SPI, PWM 등의 소형 주변장치
    • riscboy_core: RISCBoy 구성 요소를 인스턴스화하고 연결하는 구조 모듈
    • riscboy_fpga: 여러 FPGA와 보드의 입출력·클록·리셋을 연결하는 최상위 래퍼
  • reference: RISC-V 명령어 집합 등 RISCBoy에 사용된 표준 PDF
  • scripts: 다른 디렉터리에 속하지 않는 스크립트
  • software: 시스템 수준 테스트에 사용하는 C 파일 모음으로, 아직 실용적인 소프트웨어 트리는 아님
  • synth: 전체 시스템 합성을 위한 작업 디렉터리로 최상위 Makefile과 핀 제약 파일을 포함함
  • test: Verilog 테스트벤치와 프로세서 또는 전체 시스템 시뮬레이션에서 실행되는 소프트웨어 테스트 사례를 포함한 회귀 테스트 모음
Read Entire Article