1P by GN⁺ | ★ favorite | 댓글 1개
  • 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.xscripts/ 디렉터리의 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 테스트벤치와 프로세서 또는 전체 시스템 시뮬레이션에서 실행되는 소프트웨어 테스트 사례를 포함한 회귀 테스트 모음

댓글과 토론

Hacker News 의견들
  • GitHub 페이지에서는 RISC-V가 2001년에 존재했던 평행우주의 Game Boy Advance라고 소개함
    어린 시절 휴대용 콘솔을 향한 러브레터이자, 그 콘솔을 구동했던 기술에 새벽 3시 술에 취해 보내는 문자 같은 프로젝트라고 표현함

  • Luke Wren의 작업이며, 그는 Raspberry Pi의 ASIC 설계 엔지니어임. 정말 멋진 프로젝트다

    • 단순히 ASIC 설계 엔지니어라고 부르면 그의 역할을 과소평가하는 셈이며, CPU 코어 개발에도 참여하고 있음
  • 이 개발자는 RP2040으로 DVI/HDMI를 구현한 PicoDVI도 설계함
    https://github.com/Wren6991/PicoDVI

    • Raspberry Pi에서 근무하며 RP2350의 핵심인 Hazard3 RISC-V 코어를 설계함. 다만 Hazard3는 여가 시간에 개발했으며, RISCBoy용으로 설계했던 Hazard5 코어에서 갈라져 나온 프로젝트임
  • GBA는 캐시가 없는 구조로 설계됐음. 내부 RAM, 비디오 RAM, 입출력 레지스터, BIOS, OAM, 팔레트 등을 제외하면 모든 접근이 외부 버스를 거치며, 캐시 없이 외부 버스를 사용하면 사실상 1980년대 컴퓨터 수준으로 느려짐. 카트리지에서 명령어를 가져오는 속도도 GBC의 약 두 배에 불과함
    이를 피하려면 캐시를 사용해 여러 워드를 순차적으로 가져와야 함. 순차 접근의 속도를 높이면 처리량이 늘고, 명령어와 데이터가 충분히 캐시될 경우 지연 시간을 감출 수 있음. 이 시스템이 모든 가져오기를 메모리 버스로 보내는지, 아니면 캐시를 사용하는지 궁금함

  • 이 설계는 wafer.space의 첫 번째 생산 실행에서 테이프아웃됐지만(https://github.com/wafer-space/ws-run1 참고), 실제로 정상 작동했는지는 듣지 못함

  • PDF에 소개된 프로그래밍 가능한 스캔라인 버퍼 기반 렌더링 파이프라인은 이런 기술에 관심 있다면 읽어볼 만함

  • 평행우주의 하드웨어를 상상해 만드는 프로젝트를 정말 좋아함

  • 이 새로운 하드웨어 아키텍처를 채택할 때 가장 큰 난관이 기술 자체인지, 아니면 기존 개발자 생태계와 소프트웨어 도구 체인의 부재인지 궁금함

    • 둘 다 문제임. 구체적으로 무엇을 만드는지에 따라 다르지만, 일반적으로 하드웨어 개발은 소프트웨어 개발보다 더 어렵고 비용도 많이 듦
      소프트웨어 도구 부족은 극복할 수 있지만, 게임 라이브러리의 부재는 더 큰 장벽임. 기존 타이틀을 아주 쉽게 이식할 방법이 없다면 특히 어려움
  • 내부에 오픈 소스 AHB/APB 구현을 사용해도 된다는 사실이 놀라움. ARM의 독점 기술이라고 생각해 그동안 깊이 배우지 않았음

    • AMBA는 아주 오래전부터 공개 표준이었으며, 아마 처음 발표됐을 때부터 그랬던 것으로 앎
  • 이 프로젝트의 개발자는 우리 시대 최고의 엔지니어 중 한 명이라고 생각함. 이것만으로도 멋지지만 RP2350의 Hazard3 코어와 QSPI 장치도 설계했음
    특히 그 QSPI 장치는 지금까지 접한 메모리 매핑 QSPI 장치 가운데 유일하게 충돌시키거나 멈추게 하지 못한 제품임

    • QSPI에 대한 평가에 동의하며 RP2350은 대단한 칩임. 활용처가 셀 수 없이 많고, 버스 해킹 도구의 소닉 스크루드라이버 같은 존재임