basic_RV32s: คู่มือการออกแบบ CPU RISC-V RV32I แบบโอเพนซอร์ส
(github.com/RISC-KC)ขอแนะนำ basic_RV32s ที่ช่วยให้เรียนรู้พื้นฐานการออกแบบ CPU RISC-V ผ่านการลงมือปฏิบัติจาก CPU 4 แบบและ SoC 2 แบบ
สรุป basic_RV32s
- softcore RISC-V RV32I CPU ที่สร้างขึ้นตลอด 6 เดือนระหว่างรับราชการทหาร และ สามารถทำงานบน FPGA ได้จริง
- ทำประสิทธิภาพได้ Dhrystone 1.11 DMIPS/MHz, Coremark 1.10 Coremark/MHz
อยู่ในกลุ่มบนสุดเมื่อเทียบกับงานวิจัย CPU แบบ RV32I ที่ออกแบบในประเทศ
(อ้างอิงจาก 11 บทความที่มี RV32I benchmark จากทั้งหมด 126 บทความของ RISS ณ วันที่เขียน)
(@50MHz) - กระบวนการออกแบบ CPU แบบค่อยเป็นค่อยไปและการออกแบบ SoC
- 3 single-cycle core, (37F, 43F, 46F)
- 1 คอร์ pipeline 5 ขั้น, (46F5SP)
- การออกแบบ SoC 2 แบบที่ติดตั้ง pipeline core
(46F5SP_SoC - Debug, Benchmark)
- การออกแบบและการ abstraction ของโมดูลระดับสูงที่เข้าใจง่ายและเป็นธรรมชาติ
- มีเอกสารหลายชุดสำหรับเรียนรู้การออกแบบ RISC-V CPU
- RV32I Cheatsheet Excel
- บันทึกการพัฒนา, บันทึกการดีบัก
- แนวทางการออกแบบสถาปัตยกรรม
- เอกสารอธิบายลอจิกของสถาปัตยกรรมและแต่ละโมดูลทั้งหมด
- แนวทางการพอร์ตแบบ bare-metal
- แนวทางการ build RISC-V GNU GCC Toolchain RV32I
- แนวทางการรัน Dhrystone benchmark แบบ RV32I bare-metal เป็นต้น
- มีโค้ดแบบ dual format ทั้ง clean code ที่ไม่มีคอมเมนต์และโค้ดที่มีคอมเมนต์ประกอบ
- มี architecture block diagram ระดับสัญญาณ
- นักศึกษาปริญญาตรีชั้นปี 2 สองคน ส่งบทความวิจัยด้วยตนเองและได้นำเสนอที่ ISOCC 2025
- ได้รับการบรรจุใน riscv/learn ซึ่งเป็นคลังเรียนรู้อย่างเป็นทางการของ RISC-V
- Learning Resources - Intermediate-Level Resource
ที่มาของการพัฒนา
เมื่อวันที่ 15 ธันวาคม 2024 ระหว่างรับราชการทหาร ผมได้เริ่มโปรเจ็กต์สร้าง CPU ด้วยตัวเองร่วมกับเพื่อนรุ่นเดียวกันอีกหนึ่งคน ตอนนี้ก็เพิ่งครบรอบ 1 ปีไปไม่นาน!
การสร้าง RISC-V CPU บนพื้นฐานของทฤษฎีสถาปัตยกรรมคอมพิวเตอร์เบื้องต้นนั้นเรียนรู้ได้ค่อนข้างง่าย เพราะมีทั้งทฤษฎีที่อุดมสมบูรณ์และตำราจำนวนมาก แต่เมื่อมานั่งหน้าคีย์บอร์ด ปัญหากลับเป็นอีกเรื่องหนึ่ง
แม้ว่านี่จะเป็นครั้งแรกที่เริ่มโปรเจ็กต์จริงจังด้วย VerilogHDL ที่เคยเรียนมาแบบผิวเผินในมหาวิทยาลัย แต่ผมก็พบว่า นอกจากทักษะการเขียนโค้ดแล้ว แทบไม่มีตัวอย่างโอเพนซอร์ส RISC-V จริงที่มาพร้อมเอกสาร คู่มือ และแนวทางสำหรับการสร้าง RISC-V CPU เลย (อ้างอิงตาม riscv/learn - open implementations)
แน่นอนว่า การแยกชิ้นส่วนและวิเคราะห์คอร์ที่มีอยู่แล้วอย่าง NEORV32 หรือ DarkRISCV เป็นวิธีการเรียนรู้ที่ดี แต่ในประเด็นปัญหาการออกแบบ เช่น แนวคิดการออกแบบหรือบันทึกการพัฒนา การเข้าใจอย่างชัดเจนว่าทำไมจึงออกแบบเช่นนั้นและหาหลักฐานรองรับกลับเป็นเรื่องที่ค่อนข้างยาก
ดังนั้น ผมจึงตัดสินใจขยายโปรเจ็กต์นี้จากการเป็นเพียง implementation ของโอเพนซอร์ส RISC-V CPU ไปสู่การเป็น แนวทางโอเพนซอร์สแบบครบชุดสำหรับการสร้าง RISC-V RV32I CPU ผมคิดว่าการบันทึกเส้นทางการเติบโตของมือใหม่อาจกลายเป็นร่องรอยที่ดีให้มือใหม่คนต่อ ๆ ไปได้
basic_RV32s แนะนำ
อย่างที่เขียนไว้ในสรุปด้านบน โปรเจ็กต์นี้มีทั้งบันทึกการพัฒนา เอกสารเกี่ยวกับการออกแบบคอร์ และบันทึกข้อผิดพลาดเกี่ยวกับการสร้าง RISC-V CPU โดยใช้สถาปัตยกรรมที่อิงตามแนวทาง Patterson-Hennessy และมุ่งเป้าไปที่ผู้เริ่มต้นด้านการออกแบบฮาร์ดแวร์ RISC-V อย่างผม
แกนหลักของการออกแบบเริ่มจากสถาปัตยกรรม 37F ที่รองรับคำสั่ง 37 รายการใน RV32I และขยายต่อแบบค่อยเป็นค่อยไปดังนี้
- 37F : สถาปัตยกรรมฐาน, single-cycle
- 43F : รองรับคำสั่งขยาย Zicsr 6 รายการ
- 46F : รองรับคำสั่ง EBREAK, ECALL, mret
- 46F5SP : ขยายเป็น pipeline 5 ขั้นพร้อม data forwarding และตัวทำนายสาขาแบบไดนามิก 2 บิต FSM
เพื่อใช้งานคอร์บน FPGA จึงได้ออกแบบ 46F5SP_SoC ขึ้นมา และทำไว้ 2 เวอร์ชัน
- เวอร์ชันสำหรับดีบัก
สามารถดีบักคำสั่งและดูขั้นตอนการทำงานทีละลำดับผ่านการกดปุ่มและสื่อสารทาง UART ได้ - เวอร์ชันสำหรับ benchmark
สามารถรัน Dhrystone หรือ Coremark และรับผลลัพธ์ได้โดยตรงผ่าน UART
46F5SP_MMIO_SoC ที่อัปเดตล่าสุดรองรับเอาต์พุต UART โดย implement MMIO เพื่อให้รองรับฟังก์ชัน printf SoC นี้สามารถคอมไพล์ด้วย BSP files เช่น linker, boot script, syscall เป็นต้น ได้อย่างเหมาะสม และเมื่อทำแล้วก็สามารถรับผลลัพธ์ของโปรแกรม C ต่าง ๆ เช่น Dhrystone 2.1 หรือ Coremark ได้โดยตรง
ส่งท้าย
เราหวังว่าความหลงใหลใน RISC-V ของเราจะช่วยให้ผู้เริ่มต้นสามารถเริ่มต้นได้ง่ายขึ้น และส่วนที่สำคัญที่สุดคือ ทั้งโปรเจ็กต์นี้เป็นโอเพนซอร์ส!
นั่นหมายความว่าเราสามารถนำโปรเจ็กต์นี้ไปใช้เพื่อสร้างบทเรียน เอกสาร และการออกแบบโปรเซสเซอร์ที่ดีขึ้นให้กับชุมชน RISC-V และ ทุกคนสามารถมีส่วนร่วมได้อย่างอิสระ
ผมรู้สึกว่ายังต้องมีอะไรอีกมากเพื่อให้บรรลุเป้าหมายของโปรเจ็กต์นี้ ระหว่างทำโปรเจ็กต์ ผมได้รู้ว่าการตรวจสอบไม่มีวันสิ้นสุด และเพราะผมไม่ใช่ผู้เชี่ยวชาญ จึงอาจยังมีข้อผิดพลาดอีกมากที่ผมไม่รู้ รวมถึง hazard หลายรูปแบบด้วย ดังนั้น repo นี้จึงยังไม่ถูก frozen และยังเปิดอยู่ต่อไป! หาก ผู้มีประสบการณ์ช่วยดูผลงานของเราและให้ feedback จะเป็นประโยชน์อย่างมาก ไม่ใช่แค่กับพวกเรา แต่รวมถึงทุกคนที่เข้ามาเรียนรู้จากโปรเจ็กต์นี้ด้วย
ต่อจากนี้
ตอนนี้หลังจากจบการขยายจาก RV32I ไปสู่ RV64I แล้ว เรากำลังมุ่งหน้าสู่เป้าหมายในการขยายต่อไปเป็น RV64IM และไกลกว่านั้นคือความฝันดั้งเดิมของเราในการสร้าง CPU อเนกประสงค์ของเกาหลีใต้ (RVA23) ขณะนี้เรากำลังทุ่มเทกับการพัฒนาจนถึง RV64IMA ผ่าน repo ที่ชื่อ ima_make_rv64 หากช่วยติดตามกันต่อไปจะขอบคุณมากครับ
ยังไม่มีความคิดเห็น