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

> Clean Markdown view of GeekNews topic #31365. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=31365](https://news.hada.io/topic?id=31365)
- GeekNews Markdown: [https://news.hada.io/topic/31365.md](https://news.hada.io/topic/31365.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2026-07-13T07:33:04+09:00
- Updated: 2026-07-13T07:33:04+09:00
- Original source: [github.com/Wren6991](https://github.com/Wren6991/RISCBoy)
- Points: 1
- Comments: 1

## Topic Body

- **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](http://www.clifford.at/icestorm/) 도구 체인이 지원한 가장 큰 FPGA였으며, 이후 관련 생태계는 [Project Trellis](https://github.com/SymbiFlow/prjtrellis)와 [Project X-Ray](https://github.com/SymbiFlow/prjxray)로 확장됨
- 프로세서는 **RV32IMC** 명령어 집합을 지원함
  - 해당 명령어에 대한 RISC-V 적합성 테스트를 통과함
  - [riscv-formal](https://github.com/SymbioticEDA/riscv-formal) 검증 스위트를 통과함
  - 명령어 프런트엔드 일관성과 기본 버스 준수를 검사하는 자체 공식 속성 검증도 적용함
- M-mode CSR와 예외를 지원하며, **벡터 외부 인터럽트**를 위한 단순한 준수 확장도 제공함

### 저장소 복제와 툴체인
- HDL과 테스트에 **Git 서브모듈**을 사용하므로 다음과 같이 재귀 복제해야 함

```bash
git clone --recursive https://github.com/Wren6991/RISCBoy.git riscboy
```

- 일반 복제 후에는 서브모듈을 별도로 초기화할 수 있음

```bash
git clone https://github.com/Wren6991/RISCBoy.git riscboy
cd riscboy
git submodule update --init --recursive
```

- 재귀 서브모듈 갱신은 프로세서의 독립 실행형 테스트에 필요하지만, **RISCBoy 게이트웨어 빌드**에는 필요하지 않음
- 소프트웨어 기반 테스트를 컴파일하려면 [RISC-V GNU Toolchain](https://github.com/riscv/riscv-gnu-toolchain)을 **RV32IMC·ILP32** 구성으로 빌드해야 함

```bash
./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 수준 테스트를 실행하는 과정은 다음과 같음

```bash
git submodule update --init --recursive
. sourceme
cd test
./runtests
```

- 소프트웨어 테스트에는 **RV32IC 툴체인**이 필요함
- 개별 테스트를 그래픽 환경에서 디버깅하려면 해당 Makefile을 직접 실행함

```bash
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](https://github.com/Wren6991/Snowflake-FPGA)와 유사한 형태임

### 합성과 지원 보드
- iCE40용 FPGA 합성에는 다음 **오픈소스 도구 체인**을 사용함
  - [Yosys](https://github.com/yosyshq/yosys): 합성
  - [nextpnr](https://github.com/YosysHQ/nextpnr): 배치 및 배선
  - [Project Icestorm](http://www.clifford.at/icestorm/): 비트스트림 생성
- 해당 도구들은 Linux에서만 직접 빌드해 확인했으며, Windows 빌드는 가능하다고 알려졌지만 테스트하지 않음
- **Raspberry Pi**에서도 도구 체인을 빌드할 수 있음
- Lattice HX8k 평가 보드용 FPGA 이미지는 다음 명령으로 생성함

```bash
. sourceme
cd synth
make -f HX8k-EVN.mk bit
```

- Lattice LEF5UM5G-85F-EVN 평가 보드를 위한 **ECP5 지원**도 제공하지만, 주 개발 플랫폼이 아닌 고도의 실험적 구성임

```bash
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 테스트벤치와 프로세서 또는 전체 시스템 시뮬레이션에서 실행되는 소프트웨어 테스트 사례를 포함한 **회귀 테스트** 모음

## Comments



### Comment 61676

- Author: neo
- Created: 2026-07-13T07:33:06+09:00
- Points: 1

###### [Hacker News 의견들](https://news.ycombinator.com/item?id=48876245) 
- GitHub 페이지에서는 **RISC-V가 2001년에 존재했던 평행우주의 Game Boy Advance**라고 소개함  
  어린 시절 휴대용 콘솔을 향한 러브레터이자, 그 콘솔을 구동했던 기술에 새벽 3시 술에 취해 보내는 문자 같은 프로젝트라고 표현함

- Luke Wren의 작업이며, 그는 Raspberry Pi의 **ASIC 설계 엔지니어**임. 정말 멋진 프로젝트다
  - 단순히 ASIC 설계 엔지니어라고 부르면 그의 역할을 과소평가하는 셈이며, **CPU 코어** 개발에도 참여하고 있음

- 이 개발자는 RP2040으로 DVI/HDMI를 구현한 **PicoDVI**도 설계함  
  [https://github.com/Wren6991/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](<https://github.com/wafer-space/ws-run1>) 참고), 실제로 정상 작동했는지는 듣지 못함

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

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

- 이 새로운 하드웨어 아키텍처를 채택할 때 가장 큰 난관이 기술 자체인지, 아니면 기존 **개발자 생태계와 소프트웨어 도구 체인**의 부재인지 궁금함
  - 둘 다 문제임. 구체적으로 무엇을 만드는지에 따라 다르지만, 일반적으로 하드웨어 개발은 소프트웨어 개발보다 더 어렵고 비용도 많이 듦  
    소프트웨어 도구 부족은 극복할 수 있지만, **게임 라이브러리의 부재**는 더 큰 장벽임. 기존 타이틀을 아주 쉽게 이식할 방법이 없다면 특히 어려움

- 내부에 **오픈 소스 AHB/APB 구현**을 사용해도 된다는 사실이 놀라움. ARM의 독점 기술이라고 생각해 그동안 깊이 배우지 않았음
  - **AMBA는 아주 오래전부터 공개 표준**이었으며, 아마 처음 발표됐을 때부터 그랬던 것으로 앎

- 이 프로젝트의 개발자는 우리 시대 최고의 엔지니어 중 한 명이라고 생각함. 이것만으로도 멋지지만 RP2350의 **Hazard3 코어와 QSPI 장치**도 설계했음  
  특히 그 QSPI 장치는 지금까지 접한 메모리 매핑 QSPI 장치 가운데 유일하게 충돌시키거나 멈추게 하지 못한 제품임
  - QSPI에 대한 평가에 동의하며 **RP2350은 대단한 칩**임. 활용처가 셀 수 없이 많고, 버스 해킹 도구의 소닉 스크루드라이버 같은 존재임
