- RISCBoy คือเครื่องเล่นเกมพกพาที่ออกแบบเองตั้งแต่ CPU ที่เข้ากันได้กับ RISC-V, กราฟิกไปป์ไลน์, ดิสเพลย์คอนโทรลเลอร์, โครงสร้างพื้นฐานด้านหน่วยความจำและอุปกรณ์ต่อพ่วง ไปจนถึง PCB ใน KiCad
- มุ่งเป็น Game Boy Advance แบบที่น่าจะมีอยู่หาก RISC-V มีมาตั้งแต่ปี 2001 โดยเขียนด้วย Verilog 2005 ที่สังเคราะห์ได้ และนำคอนโซล 32 บิตไปลงบน FPGA iCE40-HX8k ที่มีลอจิกเอลิเมนต์ 7,680 ตัว
- โปรเซสเซอร์รองรับชุดคำสั่ง RV32IMC, M-mode CSR, exception และ vectored external interrupt และผ่านทั้งการทดสอบความสอดคล้องกับ RISC-V และการตรวจยืนยันด้วย
riscv-formal
- การสังเคราะห์ใช้ทูลเชนโอเพนซอร์ส Yosys·nextpnr·Project Icestorm และยังรองรับบอร์ด ECP5 รวมถึงคอนฟิก RV32I สำหรับ iCE40 UP5k ที่เล็กกว่า
- การจำลองและสภาพแวดล้อมพัฒนาอย่างเป็นทางการอิง Linux เป็นหลัก ขณะที่ PCB Rev B, bootloader, gateware และ software tree ยังอยู่ระหว่างพัฒนา
คอนโซลพกพาที่สร้างขึ้นตั้งแต่ต้น
- ขอบเขตการออกแบบที่เปิดเผยของ RISCBoy มีดังนี้
- CPU ที่เข้ากันได้กับ RISC-V
- แรสเตอร์กราฟิกไปป์ไลน์และดิสเพลย์คอนโทรลเลอร์
- โครงสร้างพื้นฐานบนชิป เช่น bus fabric, memory controller, UART, GPIO
- เลย์เอาต์ PCB ที่เขียนด้วย KiCad
- เป้าหมายคือ Game Boy Advance ในโลกคู่ขนานที่ RISC-V มีอยู่ในปี 2001 และเป็นโปรเจกต์ที่สะท้อนความรักต่อคอนโซลพกพาในวัยเด็กและเทคโนโลยีที่ขับเคลื่อนมัน
- ดูข้อมูลการออกแบบที่ละเอียดขึ้นได้ในเอกสาร
doc/riscboy_doc.pdf ของรีโพซิทอรี
การติดตั้งบน FPGA และโปรเซสเซอร์
- การออกแบบเขียนด้วย Verilog 2005 ที่สังเคราะห์ได้ และปรับให้เหมาะกับ iCE40-HX8k ซึ่งเป็น FPGA ฐาน LUT4
- HX8k มีลอจิกเอลิเมนต์ 7,680 ตัว
- ต้องออกแบบอย่างพิถีพิถันเพื่อบรรจุคอนโซลเกม 32 บิตลงในทรัพยากรที่จำกัด
- HX8k เคยเป็น FPGA ที่ใหญ่ที่สุดซึ่งทูลเชนโอเพนซอร์ส Project Icestorm รองรับ และต่อมาระบบนิเวศที่เกี่ยวข้องได้ขยายไปยัง Project Trellis และ Project X-Ray
- โปรเซสเซอร์รองรับชุดคำสั่ง RV32IMC
- ผ่านการทดสอบความสอดคล้องกับ RISC-V สำหรับคำสั่งเหล่านี้
- ผ่านชุดตรวจยืนยัน riscv-formal
- ยังใช้การตรวจยืนยันคุณสมบัติแบบ formal ที่สร้างเอง เพื่อตรวจความสอดคล้องของ instruction frontend และการปฏิบัติตาม bus ขั้นพื้นฐาน
- รองรับ M-mode CSR และ exception พร้อมทั้งมีส่วนขยายที่สอดคล้องอย่างเรียบง่ายสำหรับ vectored external interrupt
การโคลนรีโพซิทอรีและทูลเชน
- เนื่องจากใช้ Git submodule สำหรับ HDL และการทดสอบ จึงต้องโคลนแบบ recursive ดังนี้
git clone --recursive https://github.com/Wren6991/RISCBoy.git riscboy
- หากโคลนแบบทั่วไปแล้ว สามารถ init submodule แยกต่างหากได้
git clone https://github.com/Wren6991/RISCBoy.git riscboy
cd riscboy
git submodule update --init --recursive
- การอัปเดต submodule แบบ recursive จำเป็นสำหรับการทดสอบโปรเซสเซอร์แบบสแตนด์อโลน แต่ไม่จำเป็นสำหรับ การบิลด์ gateware ของ 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--"
- บน FPGA ขนาดเล็กอย่าง iCE40 UP5k สามารถใช้ โปรเซสเซอร์รุ่น RV32I ที่เล็กกว่าแทน RV32IMC ประสิทธิภาพสูงได้
- แม้คอมไพเลอร์จะรองรับ ISA หลายรูปแบบของ RISCBoy แต่จำเป็นต้องตั้งค่า multilib เพื่อให้สร้างไลบรารีมาตรฐานที่ตรงกับแต่ละรูปแบบ
- หากรันไฟล์ปฏิบัติการ RV32I ที่ลิงก์กับไลบรารีมาตรฐาน RV32IMC บนโปรเซสเซอร์ที่รองรับเฉพาะ RV32I จะเกิดปัญหา
การจำลองและการทดสอบ
- โฟลว์การจำลองใช้ Xilinx ISIM 14.x และ Makefile ในไดเรกทอรี
scripts/
- ทดสอบเฉพาะกับ ISIM เวอร์ชัน Linux
- หากติดตั้ง ISIM ไว้ในตำแหน่งที่ไม่ใช่ path เริ่มต้น อาจต้องปรับ path ใน
sourceme
- ขั้นตอนการรันการทดสอบระดับ HDL มีดังนี้
git submodule update --init --recursive
. sourceme
cd test
./runtests
- การทดสอบซอฟต์แวร์ต้องใช้ ทูลเชน RV32IC
- หากต้องการดีบักการทดสอบรายตัวในสภาพแวดล้อมกราฟิก ให้รัน Makefile ที่เกี่ยวข้องโดยตรง
cd system
make TEST=helloworld gui
การออกแบบ PCB
- Rev A PCB เข้ากันได้กับบริการทำต้นแบบ 4 ชั้น ขนาด 5×5 ซม. ของ iTead
- ณ เวลาที่เขียน README ค่าใช้จ่ายคือ 65 ดอลลาร์สำหรับบอร์ด 10 แผ่น
- ดูแผนผังวงจรได้ที่
board/fpgaboy.pdf ในรีโพซิทอรี
- Rev B จะมีรูปแบบแตกต่างจาก Rev A ค่อนข้างมาก และกำลังรอให้ gateware และ bootloader มีความสมบูรณ์มากขึ้นก่อนดำเนินการต่อ
- ฮาร์ดแวร์พัฒนาปัจจุบันมีลักษณะคล้ายกับ Snowflake FPGA board
การสังเคราะห์และบอร์ดที่รองรับ
- การสังเคราะห์ FPGA สำหรับ iCE40 ใช้ ทูลเชนโอเพนซอร์ส ต่อไปนี้
- เครื่องมือเหล่านี้บิลด์และตรวจสอบโดยตรงบน Linux เท่านั้น แม้จะทราบว่าสามารถบิลด์บน Windows ได้ แต่ยังไม่ได้ทดสอบ
- สามารถบิลด์ทูลเชนบน Raspberry Pi ได้ด้วย
- สร้าง FPGA image สำหรับบอร์ดประเมินผล Lattice HX8k ด้วยคำสั่งต่อไปนี้
. sourceme
cd synth
make -f HX8k-EVN.mk bit
- มี การรองรับ ECP5 สำหรับบอร์ดประเมินผล Lattice LEF5UM5G-85F-EVN ด้วย แต่เป็นคอนฟิกเชิงทดลองขั้นสูงที่ไม่ใช่แพลตฟอร์มพัฒนาหลัก
make -f ECP5-EVN.mk BUILD=full bit
- บิลด์ ECP5 จะแทนที่ SRAM ภายนอก 512KiB·16 บิตของฮาร์ดแวร์พัฒนาด้วย หน่วยความจำซิงโครนัสภายใน 256KiB·32 บิต
- หน่วยความจำนี้ถูกคอนฟิกเป็นบล็อก ECP5
sysmem โดย Trellis
โครงสร้างรีโพซิทอรี
board: ไฟล์ KiCad ของ PCB หลัก RISCBoy และบอร์ดขนาดเล็กที่ใช้ระหว่างการพัฒนา
doc: ซอร์ส LaTeX ของเอกสาร แผนภาพ และ PDF บิลด์ล่าสุด
hdl: ซอร์ส Verilog ของ gateware RISCBoy
busfabric: AHB-lite crossbar และ APB peripheral fabric
graphics: ซอร์สของหน่วยประมวลผลพิกเซล
hazard5: ซอร์สโปรเซสเซอร์ RISC-V ที่จัดโครงสร้างอย่างอิสระเต็มรูปแบบ
mem: memory controller และ wrapper/model สำหรับ memory inference และ injection
peris: อุปกรณ์ต่อพ่วงขนาดเล็ก เช่น UART, SPI, PWM
riscboy_core: โมดูลโครงสร้างที่ instantiate และเชื่อมต่อคอมโพเนนต์ของ RISCBoy
riscboy_fpga: top-level wrapper ที่เชื่อมต่อ I/O, clock และ reset ของ FPGA และบอร์ดหลายแบบ
reference: PDF มาตรฐานที่ใช้ใน RISCBoy เช่น ชุดคำสั่ง RISC-V
scripts: สคริปต์ที่ไม่ได้อยู่ในไดเรกทอรีอื่น
software: ชุดไฟล์ C ที่ใช้สำหรับการทดสอบระดับระบบ ยังไม่ใช่ software tree ที่ใช้งานได้จริง
synth: ไดเรกทอรีงานสำหรับการสังเคราะห์ทั้งระบบ มี Makefile ระดับบนสุดและไฟล์ข้อจำกัดของพิน
test: ชุด regression test ที่รวม Verilog testbench และกรณีทดสอบซอฟต์แวร์ที่รันในการจำลองโปรเซสเซอร์หรือทั้งระบบ
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ในหน้า GitHub มีการอธิบายว่าเป็น Game Boy Advance จากจักรวาลคู่ขนานที่ RISC-V มีอยู่ตั้งแต่ปี 2001
และบอกว่านี่คือโปรเจ็กต์ที่เป็นทั้งจดหมายรักถึงเครื่องเกมพกพาในวัยเด็ก และเหมือนข้อความตอนตี 3 หลังเมาที่ส่งถึงเทคโนโลยีซึ่งขับเคลื่อนเครื่องเหล่านั้น
นี่เป็นผลงานของ Luke Wren ซึ่งเป็น วิศวกรออกแบบ ASIC ของ Raspberry Pi เป็นโปรเจ็กต์ที่เจ๋งมาก
นักพัฒนาคนนี้ยังเป็นผู้ออกแบบ PicoDVI ที่ทำ DVI/HDMI บน RP2040 ด้วย
https://github.com/Wren6991/PicoDVI
Hazard5core ที่ออกแบบไว้สำหรับ RISCBoyGBA ถูกออกแบบมาเป็น สถาปัตยกรรมที่ไม่มีแคช นอกจาก RAM ภายใน, video RAM, รีจิสเตอร์ I/O, BIOS, OAM, พาเลตต์ ฯลฯ แล้ว การเข้าถึงทั้งหมดต้องผ่านบัสภายนอก และการใช้บัสภายนอกโดยไม่มีแคชก็จะช้าจนแทบเทียบได้กับคอมพิวเตอร์ยุค 1980 การดึงคำสั่งจากตลับเกมเองก็เร็วกว่า GBC แค่ประมาณสองเท่าเท่านั้น
วิธีเลี่ยงคือต้องใช้แคชเพื่อดึงหลายเวิร์ดมาแบบลำดับต่อเนื่อง ถ้าทำให้การเข้าถึงแบบลำดับเร็วขึ้น ก็จะเพิ่ม throughput ได้ และถ้าคำสั่งกับข้อมูลถูกแคชไว้เพียงพอ ก็สามารถซ่อน latency ได้ เลยสงสัยว่าระบบนี้ส่งการดึงข้อมูลทุกครั้งไปยัง memory bus ทั้งหมด หรือว่า ใช้แคช
ดีไซน์นี้ถูก tape-out ในการรันผลิตครั้งแรกของ wafer.space (ดู https://github.com/wafer-space/ws-run1) แต่ยังไม่เคยได้ยินว่ามันทำงานได้จริงหรือไม่
rendering pipeline แบบใช้ programmable scanline buffer ที่อธิบายไว้ใน PDF น่าอ่านมากถ้าสนใจเทคโนโลยีแนวนี้
ชอบโปรเจ็กต์ที่จินตนาการและสร้าง ฮาร์ดแวร์จากจักรวาลคู่ขนาน แบบนี้มาก
อยากรู้ว่าอุปสรรคใหญ่ที่สุดของการนำสถาปัตยกรรมฮาร์ดแวร์ใหม่นี้มาใช้คือเทคโนโลยีเอง หรือเป็นการขาดแคลน ecosystem นักพัฒนาและ software toolchain ที่มีอยู่เดิม
การขาดเครื่องมือซอฟต์แวร์ยังพอแก้ได้ แต่การไม่มี game library เป็นกำแพงที่ใหญ่กว่า โดยเฉพาะถ้าไม่มีวิธีพอร์ตเกมเดิมมาได้อย่างง่ายมาก
น่าแปลกใจที่สามารถใช้ implementation ของ AHB/APB แบบโอเพนซอร์ส ภายในได้ เคยคิดมาตลอดว่านี่เป็นเทคโนโลยีกรรมสิทธิ์ของ ARM เลยไม่ได้ศึกษาเชิงลึก
คิดว่านักพัฒนาโปรเจ็กต์นี้เป็นหนึ่งในวิศวกรที่เก่งที่สุดในยุคของเรา แค่นี้ก็สุดยอดแล้ว แต่เขายังออกแบบ Hazard3 core และอุปกรณ์ QSPI ของ RP2350 ด้วย
โดยเฉพาะอุปกรณ์ QSPI นั้น เป็นอุปกรณ์ memory-mapped QSPI เพียงตัวเดียวเท่าที่เคยเจอที่ยังไม่สามารถทำให้พังหรือค้างได้