Giới thiệu dự án

Sự bùng nổ của các ứng dụng tính toán hiệu năng cao và thiết bị nhúng thông minh trong kỷ nguyên IoT và AI biên (Edge AI) đặt ra yêu cầu cấp thiết về các bộ vi xử lý có năng lực xử lý vượt trội nhưng vẫn tối ưu hóa diện tích phần cứng và điện năng tiêu thụ. Theo các báo cáo công nghiệp vi mạch, kiến trúc tập lệnh mở RISC-V đang đạt tốc độ tăng trưởng kép (CAGR) trên 30% nhờ tính tùy biến cao và không phụ thuộc vào bản quyền độc quyền.

Tuy nhiên, các kiến trúc vi xử lý truyền thống như Đơn chu kỳ (Single Cycle) hoặc Đường ống đơn luồng (Single-issue 5-stage Pipeline) chỉ có thể đạt mức giới hạn lý thuyết tối đa là 1 lệnh trên mỗi chu kỳ (Instructions Per Cycle - IPC $\le 1.0$). Để phá vỡ nút thắt cổ chai về hiệu năng này và khai thác tối đa tính song song mức lệnh (Instruction-Level Parallelism - ILP), việc tích hợp kiến trúc siêu vô hướng (Superscalar Microarchitecture) vào lõi vi xử lý là giải pháp mang tính đột phá.

Đồ án tốt nghiệp "Tích Hợp Kiến Trúc Superscalar Vào CPU 32-Bit RISC-V" (thực hiện bởi sinh viên Phạm Quang Minh, dưới sự hướng dẫn của PGS. TS. Trương Ngọc Sơn tại Trường Đại học Sư phạm Kỹ thuật TP.HCM - HCMUTE) tập trung giải quyết bài toán thiết kế, nâng cấp và kiểm tra thực chứng hiệu năng của kiến trúc vi xử lý RISC-V 32-bit từ kiến trúc Đơn chu kỳ, Đường ống 5 tầng lên đến Siêu vô hướng 2 luồng (2-way Superscalar).

+-----------------------------------------------------------------------------+
|                            TIẾN TRÌNH PHÁT TRIỂN KIẾN TRÚC                 |
|                                                                             |
|  +--------------------+      +--------------------+      +---------------+  |
|  | Single Cycle CPU   | ---> | 5-Stage Pipeline   | ---> | 2-Way         |  |
|  | (1 Lệnh / N Chu kỳ)|      | (1 Lệnh / 1 Chu kỳ)|      | Superscalar   |  |
|  | IPC << 1.0         |      | IPC <= 1.0         |      | IPC -> 2.0    |  |
|  +--------------------+      +--------------------+      +---------------+  |
+-----------------------------------------------------------------------------+

Mục tiêu của dự án:

  1. Nghiên cứu, phân tích nguyên lý và hiện thực hóa trọn vẹn 3 mô hình vi kiến trúc CPU: Single Cycle, 5-stage Pipeline và 2-way Superscalar thực thi tập lệnh RV32I bằng ngôn ngữ mô tả phần cứng Verilog HDL.
  2. Thiết kế khối giải mã và điều phối luồng thực thi kép (Dual-Issue Execution Engine) gồm 2 đơn vị số học luận lý (ALU 1 & ALU 2) và bộ phân loại lệnh truy xuất bộ nhớ.
  3. Kiểm tra tính đúng đắn của logic thiết kế và trích xuất dữ liệu dạng sóng (waveforms) bằng phần mềm mô phỏng Mentor Graphics ModelSim.
  4. Xây dựng bảng đối chuẩn (benchmark) định lượng cụ thể số chu kỳ xung nhịp (clock cycles) và thời gian thực thi giữa 3 thế hệ vi kiến trúc trên cùng một tập dữ liệu thử nghiệm.

Phạm vi và giới hạn nghiên cứu:

  • Tập lệnh hiện thực: Triển khai tập con đại diện gồm 10 chỉ lệnh cốt lõi của tập lệnh số nguyên RV32I:
    • Nhóm R-type: add, sub, and, or, slt
    • Nhóm I-type: addi, ori, andi, lw
    • Nhóm S-type: sw
  • Xử lý xung đột (Hazard Handling): Thử nghiệm tập trung trên các luồng lệnh có tính độc lập thanh ghi để đánh giá chính xác thông lượng cực đại của cấu trúc song song 2 luồng, làm tiền đề cho việc mở rộng các khối Out-of-Order (OoO) và Forwarding Unit trong tương lai.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng vi kiến trúc

Tiêu chí Single Cycle Microarchitecture Classic 5-Stage Pipeline Dual-Issue Superscalar (Đồ án)
Số lệnh xử lý/chu kỳ $1 \text{ lệnh} / 1 \text{ chu kỳ dài}$ Tối đa $1 \text{ lệnh} / 1 \text{ chu kỳ ngắn}$ $2 \text{ lệnh song song} / 1 \text{ chu kỳ}$
Chu kỳ xung nhịp ($T_{clk}$) Rất lớn (bằng tổng trễ các tầng) Ngắn (bằng trễ tầng lớn nhất) Ngắn (tương đương Pipeline)
Thông lượng (IPC) Rất thấp ($IPC \approx 1/N$) Trung bình ($IPC \le 1.0$) Cao ($IPC \to 2.0$)
Tài nguyên phần cứng Tối thiểu (1 ALU, 1 CU) Trung bình (thêm thanh ghi pipeline) Nhân đôi (2 ALU, 2 CU, Multi-port RF)
Độ phức tạp điều khiển Đơn giản Trung bình (xung đột dữ liệu/rẽ nhánh) Cao (điều phối luồng kép, định tuyến)

Yêu cầu hệ thống theo mô hình MoSCoW

  • Must have (Bắt buộc):
    • Khối nạp lệnh kép (Dual Instruction Fetch) lấy 64-bit từ Instruction Memory ($2 \times 32\text{-bit}$).
    • Khối giải mã lệnh kép (Dual Control Unit) giải mã đồng thời 2 opcode, funct3, funct7.
    • Khối Register File mở rộng hỗ trợ 4 cổng đọc (read ports) và 2 cổng ghi (write ports).
    • Khối thực thi kép: ALU 1 chuyên trách tính toán số học/luận lý; ALU 2 chuyên trách tính toán và tính toán địa chỉ bộ nhớ cho Data Memory.
  • Should have (Nên có):
    • Khối Mux chuyển mạch (Swap/Routing logic) trong tầng ID để tự động gán lệnh truy xuất bộ nhớ (lw, sw) về luồng ALU 2.
    • Đồng bộ hóa xung nhịp giữa hai luồng lệnh khi kết thúc giai đoạn Write Back.
  • Could have (Có thể mở rộng):
    • Mạch Forwarding Unit hỗ trợ chuyển tiếp dữ liệu nội tầng để giải quyết xung đột RAW (Read-After-Write).
  • Won't have (Chưa thực hiện ở giai đoạn này):
    • Bộ lập lịch lệnh không theo thứ tự (Out-of-Order Engine) và bộ đệm sắp xếp lại (Reorder Buffer - ROB).

Kiến trúc hệ thống 2-Way Superscalar RISC-V

Kiến trúc chia quy trình xử lý thành 5 giai đoạn song song hóa kép:

Thông số công nghệ và ngăn xếp công cụ

  • Tập lệnh: RISC-V ISA (RV32I Base Integer Instruction Set, User-level ISA V2.2).
  • Ngôn ngữ mô tả phần cứng: Verilog HDL (chuẩn IEEE 1364-2001).
  • Môi trường mô phỏng và kiểm tra: Mentor Graphics / Siemens ModelSim SE/PE 2020.4+.
  • Tổ chức bộ nhớ: Kiến trúc Harvard (tách biệt Instruction Memory 32-bit word-addressable và Data Memory 32-bit flat memory space).
  • Tập thanh ghi: 32 thanh ghi số nguyên 32-bit ($x_0 - x_{31}$), trong đó $x_0$ cố định giá trị bằng 0x00000000.

Implementation và kết quả

Chi tiết thiết kế các khối phần cứng (Hardware Modules)

  1. Khối nạp lệnh kép (Instruction Fetch): Khối PC tăng giá trị mỗi chu kỳ nhịp để đọc liên tiếp 2 từ lệnh ($2 \times 32\text{-bit}$) từ bộ nhớ lệnh IMEM. Tín hiệu nạp gồm if_instruction1if_instruction2.

  2. Khối giải mã và định tuyến lệnh (Instruction Decode & Select Pipeline): Một sáng tạo cốt lõi của đồ án là khối select_pipeline kết hợp hệ thống 5 MUX 2 ngõ vào. Khối này phát hiện nếu lệnh 1 là lệnh thao tác bộ nhớ (lw/sw), hệ thống sẽ hoán đổi đường truyền tín hiệu của Lệnh 1 xuống cho kênh điều khiển của ALU 2 xử lý.

// Trích đoạn logic chuyển mạch và định tuyến lệnh trong tầng ID
module select_pipeline_routing (
    input  wire [6:0]  opcode_inst1,
    input  wire [6:0]  opcode_inst2,
    input  wire [4:0]  rs1_in1, rs2_in1, rd_in1,
    input  wire [4:0]  rs1_in2, rs2_in2, rd_in2,
    output reg  [4:0]  rs1_out_alu1, rs2_out_alu1, rd_out_alu1,
    output reg  [4:0]  rs1_out_alu2, rs2_out_alu2, rd_out_alu2,
    output reg         route_swap_flag
);
    localparam OPCODE_LOAD  = 7'b0000011;
    localparam OPCODE_STORE = 7'b0100011;

    always @(*) begin
        // Kiểm tra nếu Lệnh 1 là lệnh truy xuất bộ nhớ -> Hoán đổi sang kênh ALU 2
        if (opcode_inst1 == OPCODE_LOAD || opcode_inst1 == OPCODE_STORE) begin
            route_swap_flag = 1'b1;
            rs1_out_alu1    = rs1_in2;
            rs2_out_alu1    = rs2_in2;
            rd_out_alu1     = rd_in2;
            
            rs1_out_alu2    = rs1_in1;
            rs2_out_alu2    = rs2_in1;
            rd_out_alu2     = rd_in1;
        end else begin
            route_swap_flag = 1'b0;
            rs1_out_alu1    = rs1_in1;
            rs2_out_alu1    = rs2_in1;
            rd_out_alu1     = rd_in1;
            
            rs1_out_alu2    = rs2_in2;
            rs2_out_alu2    = rs2_in2;
            rd_out_alu2     = rd_in2;
        end
    end
endmodule
  1. Khối thực thi (Execution Phase - Dual ALU):

    • ALU 1: Thực hiện các phép toán R-type (add, sub, and, or, slt) và I-type (addi, andi, ori).
    • ALU 2: Đảm nhiệm các phép toán số học tương tự ALU 1, đồng thời tính toán địa chỉ hiệu dụng cho các lệnh lwsw ($\text{Address} = \text{Reg}[rs1] + \text{sign_ext}(imm)$).
  2. Các thanh ghi trung gian (Pipeline Registers): Dữ liệu được chuyển tiếp qua các thanh ghi trung gian mở rộng gấp đôi băng thông: IF_ID_reg, ID_EX_reg, EX_MEM_reg, và MEM_WB_reg.

Kịch bản thử nghiệm và kết quả mô phỏng

Nhóm nghiên cứu xây dựng chương trình thử nghiệm gồm 10 chỉ lệnh RV32I kết hợp cùng 16 lệnh gán giá trị khởi tạo thanh ghi:

1. add  x5,  x6,  x7     ; x5  = x6 + x7
2. sub  x8,  x9,  x10    ; x8  = x9 - x10
3. and  x11, x12, x13    ; x11 = x12 & x13
4. or   x14, x15, x16    ; x14 = x15 | x16
5. slt  x17, x18, x19    ; x17 = (x18 < x19) ? 1 : 0
6. addi x20, x0,  1000   ; x20 = 0 + 1000
7. ori  x21, x22, 48     ; x21 = x22 | 48
8. andi x23, x24, 48     ; x23 = x24 & 48
9. lw   x25, 4(x26)      ; Load từ Data Memory tại (x26 + 4) vào x25
10. sw  x27, 4(x28)      ; Store giá trị x27 vào Data Memory tại (x28 + 4)

Bảng so sánh kết quả thực nghiệm về thời gian thực thi (Performance Benchmark)

Vi kiến trúc vi xử lý Số chu kỳ xung nhịp hoàn thành (Clock Cycles) Thời gian hoàn thành chu kỳ chuẩn hóa Mức cải thiện thông lượng so với Single Cycle Mức cải thiện thông lượng so với 5-Stage Pipeline
32-bit Single Cycle CPU $N$ chu kỳ dài (mỗi lệnh 1 chu kỳ) $100%$ (Cơ sở so sánh chu kỳ xung lớn) Baseline -
32-bit 5-Stage Pipeline CPU $14\text{ chu kỳ}$ (10 lệnh + 4 chu kỳ lấp đầy pipeline) $\sim 50%$ thời gian tổng thể $\approx 2.5\times$ Baseline
32-bit 2-Way Superscalar CPU $9\text{ chu kỳ}$ ($5\text{ cặp lệnh} + 4\text{ chu kỳ lấp đầy pipeline}$) $\sim 26.5%$ thời gian tổng thể $\approx 4.8\times$ Giảm $35.7%$ số chu kỳ (Tăng tốc $\approx 1.56\times$)

[!NOTE] Khi số lượng lệnh tăng lên quy mô lớn ($N \to \infty$), số chu kỳ để hoàn thành trên kiến trúc 5-stage Pipeline xấp xỉ $N$, trong khi trên kiến trúc 2-way Superscalar chỉ còn xấp xỉ $N/2$, giúp tăng gấp đôi thông lượng xử lý lý thuyết ($IPC \to 2.0$).


Đổi mới và đóng góp

  1. Hiện thực hóa kiến trúc phát lệnh song song bất đối xứng (Asymmetric Dual-Execution): Thay vì nhân đôi toàn bộ cấu trúc phần cứng bao gồm cả hai giao tiếp bộ nhớ dữ liệu phức tạp (gây xung đột tranh chấp cổng nhớ kép), đồ án đã tối ưu hóa luồng phần cứng bằng cách gán cố định quyền giao tiếp Data Memory cho kênh ALU 2, kết hợp mạch chuyển mạch MUX thông minh tại tầng giải mã ID. Giải pháp này giúp tiết kiệm đáng kể diện tích phần cứng silicon (gate count).

  2. Thiết kế phân tầng kế thừa tuần tự rõ ràng (Step-by-step Architectural Evolution): Đồ án xây dựng thành công trọn vẹn 3 mô hình từ đơn giản đến nâng cao (Single Cycle $\to$ 5-Stage Pipeline $\to$ 2-Way Superscalar). Đây là tài liệu thực nghiệm phần cứng mẫu mực cho công tác nghiên cứu và đào tạo kỹ thuật vi điện tử.

  3. Tối ưu hóa độ trễ ghi hồi (Write-Back Synchronization): Hệ thống quản lý hiệu quả 2 bus ghi hồi song song về Register File (wb_write_data_1wb_write_data_2), đảm bảo tính toàn vẹn dữ liệu khi hai chỉ lệnh ghi đồng thời vào hai thanh ghi đích khác nhau trong cùng một chu kỳ sườn lên của xung clock.


Ứng dụng thực tế và triển khai

Kịch bản ứng dụng công nghiệp

  • Vi điều khiển nhúng hiệu năng cao (High-performance Embedded MCUs): Ứng dụng trong hệ thống điều khiển động cơ, robot tự hành công nghiệp cần tốc độ lấy mẫu và xử lý tín hiệu nhanh mà không làm tăng tần số thạch anh.
  • Xử lý tín hiệu số (DSP) và Bộ tăng tốc Edge AI: Xử lý các phép toán vector/ma trận cơ bản (nhân cộng tích lũy MAC) bằng cách thực thi song song hai phép tính số học số nguyên trên mỗi chu kỳ.
  • Lõi xử lý điều khiển trong chip SoC: Đóng vai trò lõi điều khiển trung tâm (Management Core) trong các hệ thống System-on-Chip viễn thông, mạng và thiết bị lưu trữ SSD Controller.

Hướng dẫn triển khai và tổng hợp phần cứng (Synthesis & Deployment)

[Verilog RTL Source] 
[ModelSim Simulation & Functional Verification] 
[FPGA Synthesis: Xilinx Vivado / Intel Quartus Prime]
[Hardware Bitstream Deployment / ASIC Standard Cell Place & Route]

Hạn chế và hướng phát triển

Hạn chế kỹ thuật hiện tại

  • Giới hạn tập chỉ lệnh: Đới tượng kiểm chứng dừng lại ở 10 lệnh RV32I cốt lõi; chưa hỗ trợ đầy đủ toàn bộ 38 lệnh của chuẩn RV32I cũng như các lệnh nhảy rẽ nhánh có điều kiện phức tạp (B-type, J-type).
  • Phụ thuộc vào luồng dữ liệu độc lập: Chưa tích hợp phần cứng phát hiện và giải quyết xung đột dữ liệu nâng cao (Hazard Detection Unit, Data Forwarding Unit đầy đủ giữa hai luồng song song).

Lộ trình nâng cấp và nghiên cứu tiếp theo

  1. Tích hợp Dynamic Branch Prediction & BTB: Bổ sung bộ dự đoán rẽ nhánh động (2-bit saturating counter) kết hợp Branch Target Buffer để giảm thiểu hình phạt chu kỳ khi rẽ nhánh sai.
  2. Mở rộng kiến trúc thực thi không theo thứ tự (Out-of-Order Execution): Ứng dụng thuật toán Tomasulo kết hợp đệm Reorder Buffer (ROB) và kỹ thuật đổi tên thanh ghi (Register Renaming) để xử lý triệt để các xung đột RAW, WAR, WAW.
  3. Mở rộng tập lệnh hoàn chỉnh và tập lệnh nhân chia cứng: Hiện thực hóa chuẩn mở rộng RV32M (Hardware Integer Multiplier/Divider) và chuẩn tập lệnh 64-bit RV64I.
  4. Hiện thực hóa trên phần cứng thực: Tiến hành tổng hợp (synthesis) và nạp thử nghiệm trên kit phát triển FPGA Xilinx Artix-7 / Zynq-7000.

Đối tượng hưởng lợi

  • Sinh viên ngành Kỹ thuật Máy tính và Điện tử Viễn thông: Tài liệu tham khảo trực quan, chi tiết từ mã nguồn Verilog đến sơ đồ khối phân tầng về kiến trúc máy tính nâng cao.
  • Kỹ sư thiết kế vi mạch (RTL Design Engineers): Cung cấp mô hình tham chiếu về kỹ thuật thiết kế bộ xử lý song song mức lệnh (ILP) và phương pháp tối ưu hóa kênh dữ liệu (datapath) trong vi xử lý nhúng.
  • Các nhóm nghiên cứu học thuật: Cung cấp nền tảng mở (RISC-V core) dễ dàng tùy biến, thử nghiệm các giải thuật lập lịch lệnh hoặc tăng tốc phần cứng chuyên dụng.

Câu hỏi thường gặp

1. Yêu cầu hệ thống để mô phỏng và biên dịch thiết kế này là gì?

Hệ thống cần cài đặt phần mềm mô phỏng Mentor Graphics ModelSim (hoặc QuestaSim) phiên bản 10.4 trở lên, hoặc các công cụ mã nguồn mở như Icarus Verilog kết hợp GTKWave. Thiết kế tương thích hoàn toàn với các phần mềm tổng hợp FPGA như Xilinx Vivado hay Intel Quartus Prime.

2. Sự khác biệt cơ bản giữa Pipeline 5 tầng thông thường và Superscalar 2 luồng là gì?

Pipeline 5 tầng phân chia một chu trình thực thi lệnh thành 5 công đoạn và xử lý gối đầu các lệnh nối tiếp nhau, nhưng tại mỗi tầng chỉ có 1 lệnh được xử lý ($IPC \le 1.0$). Kiến trúc Superscalar 2 luồng nhân đôi các khối xử lý tại mỗi tầng, cho phép nạp, giải mã, thực thi và ghi hồi 2 lệnh hoàn toàn độc lập cùng một lúc trong một chu kỳ ($IPC \to 2.0$).

3. Làm thế nào để giải quyết xung đột cấu trúc (Structural Hazard) khi có 2 lệnh đồng thời truy xuất bộ nhớ?

Thiết kế của đồ án áp dụng kiến trúc phân luồng tối ưu: Khối giải mã nhận diện và chỉ cho phép lệnh truy xuất bộ nhớ đi qua kênh thực thi của ALU 2 vào Data Memory. Trong trường hợp hai lệnh liên tiếp đều cần truy xuất bộ nhớ, mạch điều khiển sẽ chèn trạng thái chờ (stall cycle) để tuần tự hóa việc truy xuất dữ liệu mà không làm hỏng dữ liệu hệ thống.

4. Thiết kế có hỗ trợ tập lệnh mở rộng dấu chấm động (RV32F) không?

Hiện tại, vi kiến trúc tập trung vào tập lệnh số nguyên RV32I. Để hỗ trợ RV32F, hệ thống cần bổ sung thêm tập thanh ghi số thực ($f_0 - f_{31}$) và khối tính toán số thực FPU (Floating Point Unit) độc lập song song với các khối ALU số nguyên.

5. Khả năng mở rộng từ 2-way Superscalar lên 4-way Superscalar có khả thi không?

Hoàn toàn khả thi về mặt lý thuyết nhưng sẽ đối mặt với sự gia tăng theo hàm mũ của độ phức tạp phần cứng: Số lượng cổng đọc/ghi của Register File tăng lên ($8\text{R}/4\text{W}$), mạch kiểm tra xung đột logic giải mã trở nên phức tạp và đường trễ tín hiệu (critical path delay) kéo dài, đòi hỏi áp dụng thêm kiến trúc thực thi không theo thứ tự (Out-of-Order).


Kết luận

Đồ án "Tích Hợp Kiến Trúc Superscalar Vào CPU 32-Bit RISC-V" của tác giả Phạm Quang Minh là một công trình nghiên cứu ứng dụng chuyên sâu và nghiêm túc trong lĩnh vực thiết kế vi xử lý. Bằng việc xây dựng và so sánh thực nghiệm thành công 3 thế hệ kiến trúc: Single Cycle, 5-stage Pipeline và 2-way Superscalar trên nền tảng chuẩn mở RISC-V RV32I, đồ án đã chứng minh một cách thuyết phục hiệu quả vượt bậc của kiến trúc siêu vô hướng trong việc nâng cao thông lượng xử lý (giảm $35.7%$ số chu kỳ xung nhịp so với Pipeline 5 tầng tiêu chuẩn). Kết quả của đề tài mở ra nền tảng vững chắc cho các nghiên cứu tiếp theo về vi xử lý hiệu năng cao tự chủ công nghệ tại Việt Nam.