- RISCBoy là một máy chơi game cầm tay được tự thiết kế từ CPU tương thích RISC-V, pipeline đồ họa, bộ điều khiển hiển thị, hạ tầng bộ nhớ·thiết bị ngoại vi cho tới cả PCB KiCad
- Dự án hướng tới một Game Boy Advance có thể đã xuất hiện nếu RISC-V tồn tại vào năm 2001, được viết bằng Verilog 2005 có thể tổng hợp và hiện thực một máy console 32-bit trên FPGA iCE40-HX8k với 7.680 phần tử logic
- Bộ xử lý hỗ trợ tập lệnh RV32IMC cùng CSR M-mode·ngoại lệ·ngắt ngoài dạng vector, đồng thời đã vượt qua kiểm thử tương thích RISC-V và xác minh
riscv-formal
- Quá trình tổng hợp sử dụng chuỗi công cụ mã nguồn mở Yosys·nextpnr·Project Icestorm, đồng thời cũng hỗ trợ cấu hình RV32I cho bo mạch ECP5 và iCE40 UP5k nhỏ hơn
- Mô phỏng và môi trường phát triển chính thức chủ yếu dựa trên Linux, còn PCB Rev B cùng bootloader·gateware và cây phần mềm vẫn đang tiếp tục được phát triển
Máy console cầm tay được xây dựng từ đầu
- Phạm vi thiết kế được công khai của RISCBoy gồm có
- CPU tương thích RISC-V
- Pipeline đồ họa raster và bộ điều khiển hiển thị
- Hạ tầng chip như bus fabric, bộ điều khiển bộ nhớ, UART, GPIO
- Bố cục PCB được tạo bằng KiCad
- Mục tiêu là Game Boy Advance của một thế giới song song nơi RISC-V đã tồn tại vào năm 2001, và đây là một dự án chứa đựng tình yêu dành cho các máy chơi game cầm tay thời thơ ấu cùng công nghệ đã vận hành chúng
- Có thể xem thông tin thiết kế chi tiết hơn trong tài liệu
doc/riscboy_doc.pdf của kho lưu trữ
Hiện thực FPGA và bộ xử lý
- Thiết kế được viết bằng Verilog 2005 có thể tổng hợp và được nhắm tới iCE40-HX8k, một FPGA dựa trên LUT4
- HX8k cung cấp 7.680 phần tử logic
- Cần thiết kế rất cẩn thận để đưa một máy console 32-bit vào lượng tài nguyên hạn chế này
- HX8k từng là FPGA lớn nhất được chuỗi công cụ mã nguồn mở Project Icestorm hỗ trợ, và sau đó hệ sinh thái liên quan đã mở rộng sang Project Trellis và Project X-Ray
- Bộ xử lý hỗ trợ tập lệnh RV32IMC
- Đã vượt qua các bài kiểm thử tương thích RISC-V cho tập lệnh này
- Đã vượt qua bộ xác minh riscv-formal
- Cũng áp dụng xác minh thuộc tính hình thức tự xây dựng để kiểm tra tính nhất quán của frontend lệnh và sự tuân thủ bus cơ bản
- Hỗ trợ CSR và ngoại lệ ở M-mode, đồng thời cung cấp một mở rộng tuân thủ đơn giản cho ngắt ngoài dạng vector
Sao chép kho lưu trữ và toolchain
- Vì HDL và kiểm thử sử dụng Git submodule, cần sao chép đệ quy như sau
git clone --recursive https://github.com/Wren6991/RISCBoy.git riscboy
- Sau khi sao chép thông thường, có thể khởi tạo submodule riêng
git clone https://github.com/Wren6991/RISCBoy.git riscboy
cd riscboy
git submodule update --init --recursive
- Việc cập nhật submodule đệ quy là cần thiết cho các bài kiểm thử độc lập của bộ xử lý, nhưng không cần cho bản build gateware RISCBoy
- Để biên dịch các bài kiểm thử dựa trên phần mềm, cần build RISC-V GNU Toolchain với cấu hình RV32IMC·ILP32
./configure --prefix=/opt/riscv \
--with-arch=rv32imc \
--with-abi=ilp32 \
--with-multilib-generator="rv32i-ilp32--;rv32ic-ilp32--;rv32im-ilp32--;rv32imc-ilp32--"
- Trên các FPGA nhỏ như iCE40 UP5k, có thể dùng biến thể bộ xử lý RV32I nhỏ hơn thay cho RV32IMC hiệu năng cao
- Dù trình biên dịch có hỗ trợ nhiều biến thể ISA của RISCBoy, vẫn cần cấu hình multilib để tạo ra các thư viện chuẩn phù hợp với từng biến thể
- Sẽ phát sinh vấn đề nếu chạy một tệp thực thi RV32I được liên kết với thư viện chuẩn RV32IMC trên bộ xử lý chỉ hỗ trợ RV32I
Mô phỏng và kiểm thử
- Luồng mô phỏng sử dụng Xilinx ISIM 14.x và Makefile trong thư mục
scripts/
- Chỉ được kiểm thử trên phiên bản ISIM cho Linux
- Nếu ISIM được cài ở vị trí không phải đường dẫn mặc định, có thể cần điều chỉnh đường dẫn trong
sourceme
- Quy trình chạy kiểm thử ở mức HDL như sau
git submodule update --init --recursive
. sourceme
cd test
./runtests
- Kiểm thử phần mềm cần toolchain RV32IC
- Để debug từng bài kiểm thử trong môi trường đồ họa, hãy chạy trực tiếp Makefile tương ứng
cd system
make TEST=helloworld gui
Thiết kế PCB
- PCB Rev A tương thích với dịch vụ tạo mẫu 4 lớp 5×5cm của iTead
- Chi phí tại thời điểm viết README là 65 USD cho 10 bo mạch
- Có thể xem sơ đồ mạch tại
board/fpgaboy.pdf trong kho lưu trữ
- Rev B dự kiến sẽ có hình thức khá khác so với Rev A, và hiện đang chờ gateware và bootloader trưởng thành hơn trước khi tiếp tục
- Phần cứng phát triển hiện tại có hình thức tương tự Snowflake FPGA board
Tổng hợp và các bo mạch được hỗ trợ
- Việc tổng hợp FPGA cho iCE40 sử dụng chuỗi công cụ mã nguồn mở sau
- Các công cụ này mới chỉ được xác nhận build trực tiếp trên Linux; bản build Windows được cho là khả thi nhưng chưa được kiểm thử
- Cũng có thể build toolchain trên Raspberry Pi
- Ảnh FPGA cho bo đánh giá Lattice HX8k được tạo bằng lệnh sau
. sourceme
cd synth
make -f HX8k-EVN.mk bit
- Cũng có hỗ trợ ECP5 cho bo đánh giá Lattice LEF5UM5G-85F-EVN, nhưng đây là cấu hình mang tính thử nghiệm cao chứ không phải nền tảng phát triển chính
make -f ECP5-EVN.mk BUILD=full bit
- Bản build ECP5 thay thế SRAM ngoài 512KiB·16-bit của phần cứng phát triển bằng bộ nhớ đồng bộ tích hợp 256KiB·32-bit
- Bộ nhớ này được Trellis cấu hình bằng khối ECP5
sysmem
Cấu trúc kho lưu trữ
board: các tệp KiCad của PCB chính RISCBoy và các bo nhỏ dùng trong quá trình phát triển
doc: mã nguồn LaTeX của tài liệu, sơ đồ và PDF bản build mới nhất
hdl: mã nguồn Verilog của gateware RISCBoy
busfabric: crossbar AHB-lite và fabric thiết bị ngoại vi APB
graphics: mã nguồn khối xử lý điểm ảnh
hazard5: mã nguồn bộ xử lý RISC-V được xây dựng hoàn toàn độc lập
mem: bộ điều khiển bộ nhớ cùng wrapper và model suy luận·nạp bộ nhớ
peris: các thiết bị ngoại vi nhỏ như UART, SPI, PWM
riscboy_core: mô-đun cấu trúc khởi tạo và kết nối các thành phần RISCBoy
riscboy_fpga: wrapper cấp cao nhất kết nối I/O·clock·reset của nhiều FPGA và bo mạch
reference: các PDF tiêu chuẩn được dùng cho RISCBoy như tập lệnh RISC-V
scripts: các script không thuộc thư mục nào khác
software: tập hợp tệp C dùng cho kiểm thử ở mức hệ thống, hiện vẫn chưa phải cây phần mềm mang tính thực dụng
synth: thư mục làm việc cho quá trình tổng hợp toàn hệ thống, bao gồm Makefile cấp cao nhất và các tệp ràng buộc chân
test: bộ kiểm thử hồi quy gồm testbench Verilog và các trường hợp kiểm thử phần mềm chạy trong mô phỏng bộ xử lý hoặc toàn hệ thống
1 bình luận
Ý kiến trên Hacker News
Trang GitHub giới thiệu đây là Game Boy Advance của một vũ trụ song song nơi RISC-V đã tồn tại vào năm 2001
Dự án được mô tả như một bức thư tình gửi tới những máy chơi game cầm tay thời thơ ấu, đồng thời như một tin nhắn gửi lúc 3 giờ sáng trong cơn say tới công nghệ đã vận hành những chiếc máy đó
Đây là công trình của Luke Wren, một kỹ sư thiết kế ASIC tại Raspberry Pi. Quả là một dự án rất tuyệt
Nhà phát triển này cũng đã thiết kế PicoDVI, triển khai DVI/HDMI bằng RP2040
https://github.com/Wren6991/PicoDVI
Hazard5từng được thiết kế cho RISCBoyGBA được thiết kế với kiến trúc không có cache. Ngoại trừ RAM nội bộ, RAM video, thanh ghi vào/ra, BIOS, OAM, palette, v.v., mọi truy cập đều đi qua bus ngoài; dùng bus ngoài mà không có cache thì thực tế sẽ chậm như máy tính thập niên 1980. Tốc độ lấy lệnh từ cartridge cũng chỉ khoảng gấp đôi GBC
Để tránh điều này, cần dùng cache để lấy tuần tự nhiều word. Nếu tăng tốc truy cập tuần tự thì thông lượng sẽ tăng, và khi lệnh cùng dữ liệu được cache đủ tốt, có thể che giấu độ trễ. Tôi tò mò liệu hệ thống này gửi mọi thao tác lấy dữ liệu/lệnh ra bus bộ nhớ, hay có dùng cache
Thiết kế này đã được tape-out trong lượt sản xuất đầu tiên của wafer.space (xem https://github.com/wafer-space/ws-run1), nhưng tôi chưa nghe nói liệu nó có thực sự hoạt động bình thường hay không
Pipeline dựng hình dựa trên bộ đệm scanline có thể lập trình được giới thiệu trong PDF đáng để đọc nếu bạn quan tâm đến loại công nghệ này
Tôi rất thích các dự án tưởng tượng và tạo ra phần cứng của một vũ trụ song song
Tôi tò mò liệu trở ngại lớn nhất khi áp dụng kiến trúc phần cứng mới này là bản thân công nghệ, hay là sự thiếu vắng hệ sinh thái nhà phát triển và chuỗi công cụ phần mềm hiện có
Thiếu công cụ phần mềm có thể vượt qua, nhưng thiếu thư viện game là rào cản lớn hơn. Đặc biệt khó nếu không có cách rất dễ để port các tựa game hiện có
Thật ngạc nhiên khi bên trong có thể dùng triển khai AHB/APB mã nguồn mở. Tôi từng nghĩ đó là công nghệ độc quyền của ARM nên lâu nay không tìm hiểu sâu
Tôi nghĩ nhà phát triển của dự án này là một trong những kỹ sư giỏi nhất thời đại chúng ta. Chỉ riêng dự án này đã rất tuyệt, nhưng anh ấy còn thiết kế cả nhân Hazard3 và thiết bị QSPI của RP2350
Đặc biệt, thiết bị QSPI đó là thiết bị QSPI ánh xạ bộ nhớ duy nhất tôi từng gặp mà tôi không thể làm cho nó xung đột hoặc bị treo