1 điểm bởi GN⁺ 4 giờ trước | 1 bình luận | Chia sẻ qua WhatsApp
  • 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 TrellisProject 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

    • Chỉ gọi anh ấy là kỹ sư thiết kế ASIC là đánh giá thấp vai trò của anh ấy; anh ấy cũng tham gia phát triển nhân CPU
  • 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

    • Anh ấy làm việc tại Raspberry Pi và đã thiết kế nhân Hazard3 RISC-V, thành phần cốt lõi của RP2350. Tuy nhiên Hazard3 được phát triển trong thời gian rảnh, và là một dự án tách ra từ nhân Hazard5 từng được thiết kế cho RISCBoy
  • GBA đượ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ó

    • Cả hai đều là vấn đề. Cụ thể còn tùy bạn đang làm gì, nhưng nhìn chung phát triển phần cứng khó hơn và tốn kém hơn phát triển phần mềm
      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

    • AMBA đã là tiêu chuẩn mở từ rất lâu rồi, theo tôi biết thì có lẽ ngay từ khi nó được công bố lần đầ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

    • Tôi đồng ý với đánh giá về QSPI, và RP2350 là một con chip xuất sắc. Nó có vô số ứng dụng, giống như chiếc tua vít sonic của các công cụ hack bus