1 คะแนน โดย GN⁺ 4 시간 전 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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 ความคิดเห็น

 
GN⁺ 4 시간 전
ความคิดเห็นจาก Hacker News
  • ในหน้า GitHub มีการอธิบายว่าเป็น Game Boy Advance จากจักรวาลคู่ขนานที่ RISC-V มีอยู่ตั้งแต่ปี 2001
    และบอกว่านี่คือโปรเจ็กต์ที่เป็นทั้งจดหมายรักถึงเครื่องเกมพกพาในวัยเด็ก และเหมือนข้อความตอนตี 3 หลังเมาที่ส่งถึงเทคโนโลยีซึ่งขับเคลื่อนเครื่องเหล่านั้น

  • นี่เป็นผลงานของ Luke Wren ซึ่งเป็น วิศวกรออกแบบ ASIC ของ Raspberry Pi เป็นโปรเจ็กต์ที่เจ๋งมาก

    • ถ้าเรียกเขาแค่วิศวกรออกแบบ ASIC อย่างเดียวก็ถือว่าประเมินบทบาทของเขาต่ำเกินไป เพราะเขามีส่วนร่วมในการพัฒนา CPU core ด้วย
  • นักพัฒนาคนนี้ยังเป็นผู้ออกแบบ PicoDVI ที่ทำ DVI/HDMI บน RP2040 ด้วย
    https://github.com/Wren6991/PicoDVI

    • เขาทำงานที่ Raspberry Pi และเป็นผู้ออกแบบ Hazard3 RISC-V core ซึ่งเป็นหัวใจของ RP2350 อย่างไรก็ตาม Hazard3 ถูกพัฒนาในเวลาว่าง และเป็นโปรเจ็กต์ที่แยกออกมาจาก Hazard5 core ที่ออกแบบไว้สำหรับ RISCBoy
  • GBA ถูกออกแบบมาเป็น สถาปัตยกรรมที่ไม่มีแคช นอกจาก 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 เลยไม่ได้ศึกษาเชิงลึก

    • AMBA เป็นมาตรฐานเปิดมานานมากแล้ว และเท่าที่รู้ก็น่าจะเป็นแบบนั้นมาตั้งแต่ตอนประกาศครั้งแรก
  • คิดว่านักพัฒนาโปรเจ็กต์นี้เป็นหนึ่งในวิศวกรที่เก่งที่สุดในยุคของเรา แค่นี้ก็สุดยอดแล้ว แต่เขายังออกแบบ Hazard3 core และอุปกรณ์ QSPI ของ RP2350 ด้วย
    โดยเฉพาะอุปกรณ์ QSPI นั้น เป็นอุปกรณ์ memory-mapped QSPI เพียงตัวเดียวเท่าที่เคยเจอที่ยังไม่สามารถทำให้พังหรือค้างได้

    • เห็นด้วยกับคำชมนั้นเรื่อง QSPI และ RP2350 เป็นชิปที่ยอดเยี่ยมมาก มีการใช้งานได้มากมายนับไม่ถ้วน และเหมือนโซนิคสกรูไดรเวอร์สำหรับเครื่องมือ bus hacking