RISCBoy - 처음부터 설계한 오픈소스 휴대용 게임 콘솔
요약
RISCBoy는 RISC-V 호환 CPU부터 그래픽 파이프라인, PCB까지 직접 설계한 오픈소스 휴대용 게임 콘솔 프로젝트입니다. Game Boy Advance를 목표로 하며, iCE40-HX8k FPGA에 32비트 콘솔을 구현했습니다. RV32IMC 명령어 집합과 다양한 검증 과정을 거쳐 높은 적합성을 입증했습니다.
핵심 포인트
- RISC-V 기반의 오픈소스 휴대용 게임 콘솔 설계
- iCE40-HX8k FPGA에 32비트 콘솔을 구현함
- RV32IMC 명령어 집합 및 공식 검증 통과
- KiCad로 작성된 PCB 레이아웃까지 공개
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 Trellis와 Project 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 Toolchain을
RV32IMC·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 테스트벤치와 프로세서 또는 전체 시스템 시뮬레이션에서 실행되는 소프트웨어 테스트 사례를 포함한 회귀 테스트 모음
AI 자동 생성 콘텐츠
본 콘텐츠는 GeekNews의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기