17 điểm bởi khwl1026 2026-01-07 | Chưa có bình luận nào. | Chia sẻ qua WhatsApp

Giới thiệu basic_RV32s, dự án giúp bạn nắm vững nền tảng thiết kế CPU RISC-V thông qua thực hành với 4 CPU và 2 thiết kế SoC.

Tóm tắt basic_RV32s

  • Softcore RISC-V RV32I có thể chạy trên FPGA được tạo ra trong 6 tháng khi đang thực hiện nghĩa vụ quân sự
  • Đạt hiệu năng Dhrystone 1.11 DMIPS/MHz, Coremark 1.10 Coremark/MHz
    Nằm trong nhóm hiệu năng hàng đầu trong số các bài báo về CPU nền tảng RV32I được thiết kế trong nước.
    (tham chiếu 11 bài có benchmark RV32I trong 126 bài trên RISS, tính đến thời điểm viết)
    (chạy ở @50MHz)
  • Quy trình thiết kế CPU và SoC theo hướng tiến dần
    • 3 lõi single-cycle, (37F, 43F, 46F)
    • 1 lõi pipeline 5 giai đoạn, (46F5SP)
    • 2 thiết kế SoC tích hợp lõi pipeline
      (46F5SP_SoC - Debug, Benchmark)
  • Thiết kế và trừu tượng mô-đun ở mức high-level trực quan, dễ hiểu
  • Cung cấp nhiều tài liệu để học thiết kế CPU RISC-V
    • RV32I Cheatsheet Excel
    • Nhật ký phát triển, ghi chép debug
    • Hướng dẫn thiết kế kiến trúc
    • Tài liệu giải thích logic của toàn bộ kiến trúc và từng mô-đun
    • Hướng dẫn porting bare-metal
      • Hướng dẫn build RISC-V GNU GCC Toolchain RV32I
      • Hướng dẫn chạy bare-metal benchmark Dhrystone trên RV32I, v.v.
  • Cung cấp mã nguồn cấu trúc dual-format gồm clean code không chú thích và bản có chú thích
  • Cung cấp sơ đồ khối kiến trúc ở mức tín hiệu
  • Hai sinh viên năm hai đại học tự thực hiện và gửi bài báo để thuyết trình tại ISOCC 2025
  • Được đưa vào kho học tập chính thức của RISC-V riscv/learn
    • Learning Resources - Intermediate-Level Resource

Bối cảnh phát triển

Ngày 15 tháng 12 năm 2024, trong thời gian tại ngũ, tôi đã bắt đầu dự án tự làm CPU cùng với một người bạn cùng khóa. Mới đây vừa tròn 1 năm!

Việc tạo ra một CPU RISC-V dựa trên kiến thức kiến trúc máy tính cơ bản có nền tảng lý thuyết rất phong phú, tài liệu giáo khoa cũng nhiều nên có thể học tương đối dễ. Nhưng khi thật sự ngồi vào bàn phím, đó lại là một câu chuyện khác.

Dù đây là lần đầu tiên tôi bắt đầu một dự án nghiêm túc bằng VerilogHDL vốn chỉ học sơ qua ở trường, tôi nhanh chóng nhận ra rằng ngoài khả năng lập trình, gần như không có ví dụ RISC-V mã nguồn mở thực tế nào đi kèm tài liệu, manual và guideline để làm ra một CPU RISC-V. (riscv/learn - theo tiêu chí open implementations.)

Tất nhiên, phân tích và mổ xẻ những lõi đã được triển khai như NEORV32 hay DarkRISCV là một cách học tốt, nhưng để hiểu chính xác cơ sở hay lý do đằng sau các quyết định thiết kế, triết lý thiết kế và lịch sử phát triển của chúng thì khá khó khăn.

Vì vậy, tôi quyết định mở rộng dự án này không chỉ là một hiện thực hóa CPU RISC-V mã nguồn mở, mà còn thành bộ guideline mã nguồn mở hoàn chỉnh để tạo ra CPU RISC-V RV32I. Tôi nghĩ rằng việc lưu lại hành trình trưởng thành của một người mới bắt đầu có thể trở thành dấu chân hữu ích cho những người mới sau này.

basic_RV32s giới thiệu

Như đã nêu trong phần tóm tắt, dự án bao gồm log phát triển, tài liệu về thiết kế lõi và cả các ghi chép “sai đâu sửa đó” trong quá trình làm CPU RISC-V, hướng tới những người mới bắt đầu thiết kế phần cứng RISC-V giống như tôi, với kiến trúc dựa trên phương pháp luận Patterson-Hennessy.

Thiết kế cốt lõi bắt đầu từ kiến trúc 37F hỗ trợ 37 lệnh trong RV32I, sau đó được mở rộng dần như sau.

  • 37F : Kiến trúc cơ sở, single-cycle
  • 43F : Hỗ trợ 6 lệnh mở rộng Zicsr
  • 46F : Hỗ trợ các lệnh EBREAK, ECALL, mret
  • 46F5SP : Mở rộng pipeline 5 giai đoạn với data forwarding và bộ dự đoán nhánh động FSM 2-bit

Để triển khai lõi lên FPGA, nhóm đã thiết kế 46F5SP_SoC và tạo ra hai phiên bản.

  • Phiên bản debug
    Có thể debug lệnh và quan sát quá trình thực thi từng bước qua giao tiếp UART bằng cách nhấn nút.
  • Phiên bản benchmark
    Có thể chạy Dhrystone, Coremark, v.v. và nhận trực tiếp kết quả qua UART.

Bản 46F5SP_MMIO_SoC được cập nhật gần đây đã triển khai MMIO hỗ trợ xuất UART, nhờ đó có thể dùng printf. Khi SoC này được biên dịch phù hợp thông qua các tệp BSP như linker, boot script, syscall, v.v., có thể trực tiếp thu được kết quả của nhiều chương trình C như Dhrystone 2.1 hay Coremark.

Lời kết

Chúng tôi hy vọng niềm đam mê với RISC-V sẽ giúp những người mới bắt đầu dễ dàng bước vào lĩnh vực này. Và phần quan trọng nhất là toàn bộ dự án này là mã nguồn mở!
Điều đó có nghĩa là mọi người có thể sử dụng dự án này để tạo ra các tutorial học tập, tài liệu và thiết kế bộ xử lý tốt hơn cho cộng đồng RISC-V, đồng thời ai cũng có thể tự do đóng góp.

Tôi cảm thấy vẫn còn cần nhiều thứ hơn nữa để đạt được mục tiêu đó. Trong quá trình thực hiện dự án, tôi nhận ra việc kiểm chứng là không có điểm kết thúc, và vì tôi không phải chuyên gia nên có thể vẫn còn nhiều lỗi mà tôi chưa biết, bao gồm nhiều hazard khác nhau. Vì vậy repo chưa bị đóng băng mà vẫn luôn mở! Chúng tôi sẽ rất biết ơn nếu các cao thủ có thể xem qua công trình này và cho phản hồi. Điều đó sẽ giúp ích không chỉ cho chúng tôi mà còn cho tất cả những ai học từ dự án này.

Sau này

Hiện tại, sau RV32I, chúng tôi đã hoàn tất mở rộng lên RV64I và đang tiếp tục hướng tới RV64IM, xa hơn nữa là mục tiêu ban đầu: tạo ra CPU đa dụng của Hàn Quốc (RVA23). Chúng tôi hiện đang tập trung phát triển tới mở rộng RV64IMA trong repo ima_make_rv64. Rất mong các bạn tiếp tục theo dõi.

Chưa có bình luận nào.

Chưa có bình luận nào.