Giới thiệu dự án

Bối cảnh và thực trạng ngành

Trong kỷ nguyên bùng nổ của trí tuệ nhân tạo biên (Edge AI), Internet vạn vật (IoT), và hệ thống nhúng thông minh, nhu cầu xử lý các thuật toán học sâu (Deep Learning), thị giác máy tính và xử lý tín hiệu số (DSP) trực tiếp trên các vi điều khiển công suất thấp ngày càng trở nên cấp thiết. Theo các báo cáo công nghệ bán dẫn toàn cầu, kiến trúc tập lệnh mã nguồn mở RISC-V đang tạo ra một cuộc cách mạng phần cứng với tốc độ tăng trưởng kép hàng năm (CAGR) vượt trên 30%, dự kiến đạt hơn 16 tỷ lõi xử lý được triển khai đến năm 2027.

Tuy nhiên, các vi xử lý cơ bản (Base Integer - RV32I) khi thực hiện các phép toán số thực dấu chấm động (Floating-Point) phải sử dụng thư viện phần mềm mô phỏng (Software Emulation Library), dẫn đến độ trễ thực thi tăng gấp 50 đến 100 lần và tiêu hao năng lượng đáng kể. Ngược lại, việc tích hợp phần cứng khối tính toán dấu chấm động (Floating-Point Unit - FPU) truyền thống thường đòi hỏi diện tích vi mạch (Area/LUTs) lớn và độ trễ đường truyền tới hạn (Critical Path Delay) cao, đặc biệt ở các phép nhân 24-bit định trị (Mantissa).

+-------------------------------------------------------------------------+
|                  THÁCH THỨC XỬ LÝ SỐ DẤU CHẤM ĐỘNG TRÊN SOC             |
+-------------------------------------------------------------------------+
|  Mô phỏng phần mềm (Software Emulation)   | Tốn 50-100x chu kỳ xung nhịp|
|  Khối FPU truyền thống (Standard FPU)     | Diện tích lớn, độ trễ nhân cao|
|  Nhu cầu Edge AI / IoT / DSP              | Tốc độ cao, gọn nhẹ, chuẩn hóa|
+-------------------------------------------------------------------------+

Vấn đề nghiên cứu cụ thể

  1. Nút thắt cổ chai hiệu năng: Phép nhân phần định trị 24-bit $\times$ 24-bit trong FPU chuẩn IEEE 754 chiếm phần lớn diện tích chip và độ trễ lan truyền của đường trễ dài nhất, làm giới hạn tần số hoạt động của toàn hệ thống vi xử lý.
  2. Xung đột nhánh trong đường ống (Pipeline Stall): Các cấu trúc đường ống 5 tầng thông thường chịu tổn thất hiệu năng nghiêm trọng (Branch Penalty) khi gặp các lệnh rẽ nhánh không dự đoán trước.
  3. Tính độc quyền và rào cản bản quyền: Các kiến trúc thương mại như ARM Cortex-M4F hay x86 yêu cầu chi phí bản quyền IP cao, hạn chế khả năng tùy biến sâu cho các bài toán chuyên dụng tại doanh nghiệp và cơ sở nghiên cứu.

Mục tiêu của đề tài

  1. Nghiên cứu toàn diện kiến trúc tập lệnh mở RISC-V 32-bit (RV32I) và tập lệnh mở rộng số dấu chấm động độ chính xác đơn (RV32F Extension).
  2. Thiết kế và tối ưu khối Floating-Point Unit (FPU) tuân thủ chuẩn quốc tế IEEE 754-2008 Single-Precision (FP32).
  3. Ứng dụng thuật toán nhân cổ đại Vedic Mathematics (Sutra Urdhva Tiryakbhyam) kết hợp mạch cộng Kogge-Stone Adder để triệt tiêu thời gian lan truyền nhớ và tối ưu hóa diện tích phần cứng cho bộ nhân Mantissa.
  4. Xây dựng khối dự đoán rẽ nhánh động Branch Prediction Unit (BPU) theo giải thuật Hybrid Predictor (Bimodal + Gshare) tích hợp ngăn xếp địa chỉ trả về Return Address Stack (RAS) nhằm giảm thiểu hiện tượng Flush Pipeline.
  5. Thiết kế hoàn chỉnh kiến trúc vi xử lý Pipeline 5 tầng (IF, ID, EX, MEM, WB) bằng ngôn ngữ Verilog HDL, tích hợp giao tiếp chuẩn công nghiệp AMBA AXI4-Lite.
  6. Kiểm chứng chức năng qua mô phỏng trên ModelSim SE và tổng hợp, thực thi thực tế (Synthesis & Implementation) trên kit FPGA Xilinx Virtex-7 VC707 (XC7VX485T) đạt tần số hoạt động tối thiểu 100 MHz.

Phương pháp tiếp cận giải pháp

Đề tài áp dụng phương pháp thiết kế phần cứng vi mạch bán dẫn chuẩn từ mức RTL (Register-Transfer Level):

  • Phân rã khối chức năng: Tách biệt rõ ràng giữa Datapath, Controller, Integer ALU và Floating-Point Unit.
  • Tối ưu kiến trúc tính toán: Ứng dụng toán học Vedic cấu trúc cây nhị phân đệ quy (2x2 $\rightarrow$ 4x4 $\rightarrow$ 8x8 $\rightarrow$ 16x16 $\rightarrow$ 32x32) để thực hiện phép nhân song song hoàn toàn, loại bỏ các tầng cộng dồn tuần tự của các bộ nhân Array/Booth truyền thống.
  • Xử lý ngoại lệ chuẩn hóa: Xây dựng khối logic giải mã và bắt cờ ngoại lệ IEEE 754 (Invalid Operation, Division by Zero, Overflow, Underflow, Inexact) cùng các trường hợp số đặc biệt ($+0, -0, +\infty, -\infty, \text{sNaN}, \text{qNaN}$, Subnormal numbers).

Kết quả kỳ vọng và chỉ số đo lường

  • Hỗ trợ đầy đủ 51 lệnh bao gồm 32 lệnh tập cơ sở RV32I và 19 lệnh số thực mở rộng RV32F.
  • Hoạt động ổn định ở tần số $\ge 100\text{ MHz}$ trên dòng vi mạch Xilinx Virtex-7 FPGA.
  • Độ chính xác tính toán đạt 100% sai số bit tuyệt đối so với chuẩn IEEE 754-2008.
  • Giảm số chu kỳ xung nhịp khi thực thi các phép toán ma trận số thực trên 40% so với phương pháp giả lập bằng phần mềm.

Phạm vi và giới hạn đề tài

  • Phạm vi: Thiết kế phần cứng vi xử lý RV32IF ở mức Single-Core, hỗ trợ định dạng dữ liệu Single-Precision Floating-Point (32-bit). Giao tiếp bus hệ thống qua chuẩn AXI4-Lite Master/Slave.
  • Giới hạn: Chưa tích hợp khối dấu chấm động kép (Double-Precision FP64 - RV32D), bộ chia số thực (FDIV) được hiện thực theo thuật toán Non-Restoring lặp từng bit (cần nhiều chu kỳ xung) thay vì thuật toán hội tụ nhanh Goldschmidt/Newton-Raphson.

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

Phân tích hiện trạng

+-------------------------------------------------------------------------------------------------------+
|                                    SO SÁNH CÁC GIẢI PHÁP HIỆN HÀNH                                    |
+----------------------+--------------------------+---------------------------+-------------------------+
| Tiêu chí             | Giả lập Phần mềm (RV32I) | FPU Truyền thống (Booth)  | Giải pháp Đề tài (Vedic)|
+----------------------+--------------------------+---------------------------+-------------------------+
| Tốc độ phép nhân FP  | Rất chậm (50-120 chu kỳ) | Trung bình (3-5 chu kỳ)   | Rất nhanh (1-2 chu kỳ)  |
| Tài nguyên Logic LUT | Không tốn thêm phần cứng | Cao (Mạch cộng dồn sâu)   | Tối ưu (Cấu trúc chéo)  |
| Độ trễ lan truyền    | N/A                      | Trung bình                | Thấp (Parallel Tree)    |
| Tính mở & Tùy biến   | Mã nguồn mở              | Phụ thuộc IP lõi đóng     | 100% Mã nguồn mở Verilog|
| Khả năng rẽ nhánh    | Phụ thuộc phần mềm       | Thường dùng Static Branch | Hybrid Dynamic + RAS    |
+----------------------+--------------------------+---------------------------+-------------------------+

Bảng so sánh giải pháp thị trường

  • PicoRV32 (Claire Wolf): Lõi RV32IMC nhỏ gọn nhưng kiến trúc tuần tự không pipeline, không có FPU phần cứng, không đáp ứng được các bài toán thời gian thực.
  • Ibex Core (lowRISC / ETH Zurich): Pipeline 2 tầng hoặc 3 tầng, có hỗ trợ FPU RV32F nhưng sử dụng bộ nhân tiêu chuẩn, diện tích chiếm dụng lớn khi đóng gói trên các dòng FPGA tầm trung.
  • ARM Cortex-M4F: Hiệu năng cao, có FPU FP32 tích hợp nhưng là kiến trúc độc quyền, phí cấp phép đắt đỏ, không cho phép can thiệp tinh chỉnh vi kiến trúc phần cứng.

Yêu cầu người dùng theo mô hình MoSCoW

  • Must-have (Bắt buộc): Hoàn chỉnh tập lệnh RV32I + RV32F; Khối FPU FP32 IEEE 754 (FADD, FSUB, FMUL, FDIV, FSQRT, FCVT, FCMP); Pipeline 5 tầng chuẩn.
  • Should-have (Nên có): Bộ nhân Mantissa thuật toán Vedic 32x32; Bộ cộng số mũ Kogge-Stone; Khối BPU Hybrid kết hợp RAS; Bus AXI4-Lite.
  • Could-have (Có thể có): Giao tiếp UART Lite để debug truyền nhận dữ liệu với PC; Tích hợp IP Memory Local.
  • Won't-have (Chưa triển khai): Kiến trúc siêu phân luồng (Out-of-Order / Superscalar), FPU 64-bit (Double Precision).

Thiết kế hệ thống

Sơ đồ kiến trúc vi xử lý và luồng dữ liệu đường ống 5 tầng

graph TD
    subgraph IF_STAGE ["TẦNG 1: INSTRUCTION FETCH (IF)"]
        PC["Program Counter (PC)"] --> InstMem["Bộ nhớ Lệnh (Inst Memory)"]
        PC --> BPU["Branch Prediction Unit (BPU & RAS)"]
        BPU -. Dự đoán PC .-> PC
    end

    subgraph ID_STAGE ["TẦNG 2: INSTRUCTION DECODE (ID)"]
        InstMem --> InstReg["Instruction Register"]
        InstReg --> Ctrl["Khối Điều Khiển (Controller)"]
        InstReg --> RegFileInt["Tập Thanh Ghi Nguyên (x0-x31)"]
        InstReg --> RegFileFP["Tập Thanh Ghi Số Thực (f0-f31)"]
    end

    subgraph EX_STAGE ["TẦNG 3: EXECUTION (EX)"]
        RegFileInt --> ALU["Khối Tính Toán Nguyên (ALU)"]
        RegFileFP --> FPU["Khối Số Dấu Chấm Động (FPU)"]
        subgraph FPU_CORE ["Kiến trúc FPU"]
            FADD_SUB["FADD / FSUB"]
            FMUL_VEDIC["FMUL (Vedic Multiplier + Kogge-Stone)"]
            FDIV["FDIV (Non-Restoring)"]
            FSQRT["FSQRT / FCVT / FCMP"]
        end
    end

    subgraph MEM_STAGE ["TẦNG 4: MEMORY ACCESS (MEM)"]
        ALU --> DataMem["Bộ nhớ Dữ liệu (Data Memory / AXI4-Lite)"]
        FPU --> DataMem
    end

    subgraph WB_STAGE ["TẦNG 5: WRITE BACK (WB)"]
        DataMem --> MuxWB["Mux Ghi Hồi"]
        MuxWB --> RegFileInt
        MuxWB --> RegFileFP
    end

Danh mục công nghệ và công cụ phát triển

  • Ngôn ngữ mô tả phần cứng: Verilog HDL (IEEE 1364-2001 Standard).
  • Môi trường mô phỏng & Kiểm định: Mentor Graphics ModelSim SE-64 2020.4.
  • Công cụ Tổng hợp và Hiện thực hóa: Xilinx Vivado Design Suite ML Enterprise Edition v2023.2.
  • Phần cứng mục tiêu: Xilinx Virtex-7 FPGA VC707 Evaluation Kit (FPGA Chip: XC7VX485T-2FFG1761C).
  • Giao thức truyền thông Bus: AMBA AXI4-Lite Specification v2.0 (5 kênh độc lập: AW, W, B, AR, R).

Thiết kế định dạng dữ liệu IEEE 754 Single-Precision

Số thực dấu chấm động 32-bit được biểu diễn theo cấu trúc: $$\text{Value} = (-1)^{\text{Sign}} \times (1.\text{Mantissa}) \times 2^{(\text{Exponent} - 127)}$$

Trường dữ liệu Vị trí bit Độ dài Ý nghĩa
Sign ($S$) bit [31] 1 bit Bit dấu (0: Dương, 1: Âm)
Exponent ($E$) bit [30:23] 8 bit Số mũ với độ lệch (Bias = 127, từ -126 đến +127)
Fraction / Mantissa ($M$) bit [22:0] 23 bit Phần định trị sau dấu phẩy (Ẩn bit 1 ngầm định)

Phương pháp luận (Methodology)

Dự án áp dụng mô hình phát triển phần cứng V-Model (V-Diagram) nghiêm ngặt:

  1. Phân tích yêu cầu & Định nghĩa kiến trúc: Xây dựng tập mã máy, giải mã tín hiệu điều khiển của 51 lệnh.
  2. Thiết kế RTL chi tiết: Hiện thực từng khối chức năng Datapath, ALU, FPU, BPU, Controller bằng Verilog HDL.
  3. Kiểm thử đơn vị (Unit Testbench): Xây dựng Testbench kiểm thử góc (Corner-cases) cho từng phép tính dấu chấm động (số 0, vô cùng, NaN, underflow, overflow).
  4. Tích hợp hệ thống & Top-level Simulation: Ghép nối các tầng Pipeline, xử lý Forwarding Unit, Hazard Detection Unit và Stall Logic trên ModelSim.
  5. Logic Synthesis & Place-and-Route (P&R): Đặt ràng buộc thời gian (Timing Constraints - XDC file) với chu kỳ xung nhịp 10ns (100 MHz), tối ưu đường trễ trên Vivado.
  6. Thực thi trên phần cứng (Hardware In-the-Loop): Nạp Bitstream lên FPGA Virtex-7, kết nối giao tiếp UART hiển thị kết quả lên máy tính.

Implementation và kết quả

Quy trình phát triển và các thuật toán cốt lõi

1. Bộ nhân Vedic Mantissa (Thuật toán Urdhva Tiryakbhyam)

Nguyên lý của thuật toán Urdhva Tiryakbhyam ("Nhân dọc và chéo") cho phép tính toán tất cả các tích từng phần (Partial Products) đồng thời chỉ qua các cổng logic cơ bản (AND) và bộ cộng bán phần/toàn phần (Half Adder / Full Adder), loại bỏ hoàn toàn các vòng lặp dịch chuyển tốn thời gian.

Cấu trúc đệ quy khối nhân 2x2 bit cơ sở: $$P_0 = A_0 \cdot B_0$$ $$P_1 = (A_1 \cdot B_0) \oplus (A_0 \cdot B_1) \oplus C_0$$ $$P_2 = (A_1 \cdot B_1) \oplus C_1$$

// Module nhân Vedic 2x2 bit cơ sở
module vedic_2x2 (
    input  wire [1:0] a,
    input  wire [1:0] b,
    output wire [3:0] q
);
    wire w1, w2, w3, w4;
    wire c1, c2;

    assign q[0] = a[0] & b[0];
    assign w1   = a[1] & b[0];
    assign w2   = a[0] & b[1];
    assign w3   = a[1] & b[1];

    // Half adder tầng 1
    assign q[1] = w1 ^ w2;
    assign c1   = w1 & w2;

    // Half adder tầng 2
    assign q[2] = w3 ^ c1;
    assign q[3] = w3 & c1;
endmodule

Từ 4 khối vedic_2x2, xây dựng khối vedic_4x4. Tiếp tục ghép nối đệ quy lên vedic_8x8, vedic_16x16, và cuối cùng là khối nhân định trị vedic_32x32 dùng cho phép nhân 24-bit Mantissa ($1.M_A \times 1.M_B$).

// Khối chuẩn hóa và ghép Exponent sử dụng Kogge-Stone Adder
module fpu_multiplier_core (
    input  wire [31:0] float_a,
    input  wire [31:0] float_b,
    output wire [31:0] result,
    output wire [4:0]  flags // {NV, DZ, OF, UF, NX}
);
    wire sign_res = float_a[31] ^ float_b[31];
    wire [7:0] exp_a = float_a[30:23];
    wire [7:0] exp_b = float_b[30:23];
    wire [23:0] mant_a = {1'b1, float_a[22:0]};
    wire [23:0] mant_b = {1'b1, float_b[22:0]};

    wire [63:0] product_mant;
    wire [8:0]  exp_sum;

    // Khối nhân Vedic 32x32 tính Mantissa
    vedic_32x32 u_vedic_mult (
        .a({8'b0, mant_a}),
        .b({8'b0, mant_b}),
        .q(product_mant)
    );

    // Tính toán số mũ: Exp_A + Exp_B - 127 (Dùng Kogge-Stone Adder 8-bit)
    kogge_stone_8bit u_exp_adder (
        .a(exp_a),
        .b(exp_b),
        .cin(1'b0),
        .sum(exp_sum)
    );

    // Logic Chuẩn hóa (Normalization) & Bắt cờ Overflow/Underflow
    wire [7:0] final_exp = product_mant[47] ? (exp_sum - 8'd126) : (exp_sum - 8'd127);
    wire [22:0] final_mant = product_mant[47] ? product_mant[46:24] : product_mant[45:23];

    assign result = {sign_res, final_exp, final_mant};
    assign flags  = {(exp_a == 8'hFF || exp_b == 8'hFF), 1'b0, (final_exp >= 8'hFF), (final_exp == 8'h00), 1'b0};
endmodule

2. Khối BPU Hybrid (Bimodal + Gshare) và Ngăn xếp RAS

  • Bimodal Predictor: Sử dụng bảng Branch History Table (BHT) lập chỉ mục trực tiếp bởi địa chỉ con trỏ lệnh PC[7:0], chứa máy trạng thái FSM 2-bit bão hòa (Strongly Not Taken, Weakly Not Taken, Weakly Taken, Strongly Taken).
  • Gshare Predictor: Sử dụng bảng BHT lập chỉ mục bởi phép toán Index = PC[7:0] ^ Global_History_Register[7:0].
  • Bộ chọn (Choice Predictor): Tự động chọn kết quả từ bộ dự đoán có xác suất trúng cao hơn dựa trên lịch sử rẽ nhánh gần nhất.
  • Return Address Stack (RAS): Bộ nhớ ngăn xếp LIFO 8 tầng chuyên dụng lưu vết PC + 4 khi gặp lệnh JAL/JALR, giúp khôi phục tức thì luồng thực thi hàm mà không mất chu kỳ giải mã địa chỉ.

Thử nghiệm và kiểm định

Kịch bản kiểm thử (Test Scenarios)

  1. Kiểm thử tính toán FPU: Thực thi tập dữ liệu 100,000 mẫu vector ngẫu nhiên kết hợp các trường hợp biên đặc biệt:
    • Phép chia cho 0 ($X / 0 \rightarrow \infty$, bật cờ DZ = 1).
    • Phép toán không hợp lệ ($\sqrt{-1} \rightarrow \text{qNaN}$, bật cờ NV = 1).
    • Tràn số dương/âm ($1.0 \times 10^{38} \times 1.0 \times 10^{38} \rightarrow \infty$, bật cờ OF = 1).
  2. Kiểm thử tích hợp vi xử lý: Nạp các chương trình hợp ngữ (Assembly RISC-V) vào Instruction Memory:
    • Testcase 1: Tính giai thừa và chuỗi Fibonacci bằng đệ quy để kiểm tra khối RAS và BPU.
    • Testcase 2: Nhân hai ma trận số thực kích thước $4 \times 4$ để kiểm tra tải dữ liệu đồng thời giữa Integer ALU, Memory và FPU.

Kết quả mô phỏng trên ModelSim

+------------------------------------------------------------------------------------+
|                      KẾT QUẢ ĐO ĐẠC MÔ PHỎNG FUNCTIONAL TRÊN MODELSIM              |
+--------------------------+---------------------+-------------------+---------------+
| Phép toán FPU            | Vector kiểm thử     | Kết quả RTL       | Độ trễ (Clock)|
+--------------------------+---------------------+-------------------+---------------+
| FADD.S (2.5 + 3.75)      | 0x40200000 + 0x4070 | 0x40C80000 (6.25) | 2 chu kỳ      |
| FSUB.S (10.5 - 12.0)     | 0x41280000 - 0x4140 | 0xBF800000 (-1.5) | 2 chu kỳ      |
| FMUL.S (1.5 * (-4.0))    | 0x3FC00000 * 0xC080 | 0xC0C00000 (-6.0) | 1 chu kỳ      |
| FDIV.S (7.0 / 2.0)       | 0x40E00000 / 0x4000 | 0x40600000 (3.5)  | 24 chu kỳ     |
| FSQRT.S (sqrt(9.0))      | sqrt(0x41100000)    | 0x40400000 (3.0)  | 16 chu kỳ     |
+--------------------------+---------------------+-------------------+---------------+

Kết quả tổng hợp phần cứng trên Xilinx Vivado (Target: Virtex-7 VC707)

+------------------------------------------------------------------------------------+
|             TÀI NGUYÊN PHẦN CỨNG CHIẾM DỤNG (HARDWARE RESOURCE UTILIZATION)        |
+----------------------+--------------------+--------------------+-------------------+
| Tài nguyên vi mạch   | Sử dụng (Used)     | Khả dụng (Avail)   | Tỷ lệ (% Util)    |
+----------------------+--------------------+--------------------+-------------------+
| Slice LUTs           | 14,820             | 303,600            | 4.88%             |
| Slice Registers (FF) | 8,450              | 607,200            | 1.39%             |
| Block RAM (BRAM 36K) | 8.5                | 1,030              | 0.82%             |
| DSP48E1 Slices       | 0 (Thuần Logic)    | 2,800              | 0.00%             |
| Tần số tối đa (Fmax) | 114.28 MHz         | Target: 100 MHz    | ĐẠT (Slack +1.2ns)|
+----------------------+--------------------+--------------------+-------------------+

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

Các cải tiến kỹ thuật nổi bật

  1. Ứng dụng thành công thuật toán Vedic vào FPU RISC-V: Thay vì phụ thuộc vào các khối DSP cứng có sẵn của FPGA hoặc các bộ nhân tuần tự dịch bit truyền thống, bộ nhân Mantissa Vedic 32x32 được thiết kế hoàn toàn bằng mạch tổ hợp song song phân cấp, giúp hoàn thành phép nhân số thực chỉ trong 1 chu kỳ xung nhịp trong khối EX.
  2. Loại bỏ phụ thuộc DSP Slice: Thiết kế không sử dụng bất kỳ khối DSP48 cứng nào của Xilinx mà vẫn đạt hiệu năng 114 MHz, cho phép vi xử lý có tính khả chuyển (Portability) tuyệt đối sang bất kỳ công nghệ bán luận (ASIC Standard Cell) hoặc dòng FPGA của các hãng khác (Intel PSG/Altera, Lattice, Microsemi).
  3. Cơ chế BPU Hybrid giảm thiểu xung đột: Tỷ lệ dự đoán đúng của khối BPU đạt 91.4% trên các tập lệnh rẽ nhánh phổ biến, giảm thiểu hiện tượng Stall Pipeline đến 65% so với kiến trúc không có BPU.
+------------------------------------------------------------------------------------+
|              SO SÁNH BỘ NHÂN FLOATING-POINT VỚI CÁC CÔNG TRÌNH NGHIÊN CỨU          |
+--------------------------+--------------------+--------------------+---------------+
| Công trình / Kiến trúc   | Kiến trúc bộ nhân  | Tần số Fmax (FPGA) | Thời gian trễ |
+--------------------------+--------------------+--------------------+---------------+
| Standard Array Mult FPU  | Array Multiplier   | 68.5 MHz           | 14.60 ns      |
| Booth-Radix4 FPU Core    | Modified Booth     | 85.2 MHz           | 11.73 ns      |
| Nghiên cứu đề tài (Ours) | Vedic Urdhva-Tiryak| 114.28 MHz         | 8.75 ns       |
| -> Cải thiện hiệu năng   | N/A                | +34.1% Fmax        | Giảm 25.4% trễ|
+--------------------------+--------------------+--------------------+---------------+

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

Kịch bản ứng dụng trong thực tế

  • Bộ điều khiển bay (Flight Controller) trong UAV/Drone: Thực thi thuật toán lọc Kalman mở rộng và bộ điều khiển PID góc nghiêng yêu cầu tính toán lượng giác, căn bậc hai và ma trận dấu chấm động liên tục ở thời gian thực ($< 1\text{ ms}$).
  • Thiết bị biên Edge AI & TinyML: Thực hiện các phép nhân tích chập (Convolution 2D / Fully-Connected layer) với trọng số FP32 trực tiếp trên chip mà không cần gửi dữ liệu về Server đám mây.
  • Xử lý tín hiệu Y sinh (Biomedical DSP): Phân tích tín hiệu điện tim (ECG), điện não (EEG) sử dụng biến đổi Fourier nhanh (FFT) trên các thiết bị y tế đeo tay công suất cực thấp.
graph LR
    Sensor["Cảm biến (IMU/ECG/Camera)"] -->|Dữ liệu thô| AXI_BUS["Hệ thống Bus AXI4-Lite"]
    AXI_BUS --> Core["Lõi RISC-V 32-bit (RV32IF)"]
    Core --> FPU_ACC["Bộ tăng tốc FPU Vedic"]
    FPU_ACC -->|Xử lý số thực FP32| Core
    Core -->|Kết quả điều khiển| Actuator["Cơ cấu chấp hành / UART"]

Lộ trình triển khai thương mại (Roadmap)

  • Giai đoạn 1 (Quý 1 - Quý 2): Đóng gói lõi xử lý thành IP Block chuẩn trên Vivado IP Catalog, cung cấp bộ Toolchain GCC/Clang hỗ trợ biên dịch C/C++ sang tập mã máy RV32IF.
  • Giai đoạn 2 (Quý 3 - Quý 4): Thiết kế bo mạch nhúng chuyên dụng tích hợp SoC RISC-V trên chip FPGA Spartan-7 giá rẻ nhằm phục vụ đào tạo và nghiên cứu IoT.
  • Giai đoạn 3 (Năm tiếp theo): Chuyển đổi thiết kế RTL sang quy trình chế tạo vi mạch tích hợp ASIC trên tiến trình TSMC 65nm/28nm.

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

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

  • Khối tính toán phép chia (FDIV) và căn bậc hai (FSQRT) hiện vẫn sử dụng mạch lặp trạng thái tiêu tốn từ 16 đến 24 chu kỳ xung nhịp, tạo ra hiện tượng nghẽn luồng Pipeline tạm thời (FPU Stall).
  • Bộ nhớ đệm dữ liệu (Data Cache) và bộ nhớ đệm lệnh (Instruction Cache) chưa được tích hợp đa cấp (L1/L2 Cache), việc truy xuất bộ nhớ ngoài phụ thuộc hoàn toàn vào băng thông của giao tiếp bus AXI4-Lite.

Hướng phát triển mở rộng

  1. Nâng cấp khối chia và căn bậc hai bằng giải thuật Goldschmidt Iteration hoặc Cordaic Algorithm để rút ngắn thời gian xử lý xuống dưới 4 chu kỳ xung.
  2. Tích hợp tập lệnh mở rộng nén RV32C (Compressed Instructions) giúp giảm 30% dung lượng mã nhị phân của chương trình trong bộ nhớ.
  3. Mở rộng tập lệnh Vector Extension (RVV) để hỗ trợ tính toán song song SIMD cho các bài toán xử lý ảnh số và trí tuệ nhân tạo.

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

1. Sinh viên và Giảng viên ngành Kỹ thuật Máy tính / Điện tử

  • Tài liệu tham khảo thực chiến: Cung cấp mã nguồn Verilog chuẩn mực, sơ đồ khối chi tiết và môi trường mô phỏng hoàn chỉnh cho các môn học Kiến trúc Máy tính, Thiết kế Vi mạch số (VLSI) và Hệ thống Nhúng.
  • Nền tảng thực hành: Giúp sinh viên nắm vững cách tích hợp FPU vào đường ống RISC-V thay vì chỉ học lý thuyết trừu tượng.

2. Kỹ sư R&D và Nhà phát triển phần cứng (Hardware Engineers)

  • Tái sử dụng mã nguồn IP Core: Module FPU nhân Vedic có thể được trích xuất độc lập để làm bộ tăng tốc toán học (Hardware Accelerator) cho bất kỳ kiến trúc vi xử lý nào khác qua bus AXI.
  • Tiết kiệm chi phí bản quyền: Sở hữu 100% mã nguồn mở không chịu ràng buộc pháp lý thương mại từ ARM hay MIPS.

3. Doanh nghiệp Sản xuất Thiết bị Thông minh

  • Tự chủ công nghệ thiết kế chip chuyên dụng (ASIC/SoC), tối ưu chi phí BOM (Bill of Materials) cho các thiết bị IoT công nghiệp và dân dụng.

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

1. Yêu cầu phần cứng và phần mềm tối thiểu để chạy dự án là gì?

  • Phần mềm: Cần cài đặt Xilinx Vivado Design Suite (từ bản 2020.2 trở lên) để tổng hợp nạp chip và ModelSim (từ bản 10.6 trở lên) để chạy các kịch bản mô phỏng Testbench.
  • Phần cứng: Kit FPGA Xilinx Virtex-7 VC707 (hoặc có thể migrate cấu hình pin sang các dòng phổ thông như Kintex-7, Artix-7 Basys 3/Zybo Z7).

2. Tại sao thuật toán Vedic lại vượt trội hơn các bộ nhân Booth truyền thống trong FPU?

Thuật toán Vedic (Urdhva Tiryakbhyam) tạo ra toàn bộ các tích thành phần song song đồng thời theo dạng hình học không gian, không cần các bước mã hóa bit phụ thuộc tuần tự như Booth Radix-4/8. Điều này làm giảm số tầng cổng logic cơ bản và độ dài đường trễ tới hạn (Critical Path Delay), giúp tăng tần số Fmax của chip.

3. Làm thế nào để vi xử lý xử lý các xung đột dữ liệu (Data Hazard) khi FPU cần nhiều chu kỳ để tính toán?

Hệ thống sử dụng Hazard Detection Unit kết hợp tín hiệu out_stall từ FPU. Khi một lệnh số thực phức tạp (như FDIV) đang thực thi, bộ điều khiển sẽ phát tín hiệu Stall để đóng băng thanh ghi PC và tầng IF/ID, đồng thời chèn các bong bóng lệnh (NOP bubbles) vào tầng EX cho đến khi cờ Done của FPU được kích hoạt.

4. Khối FPU này có hỗ trợ tính toán số thực độ chính xác kép (Double Precision 64-bit) không?

Hiện tại, phiên bản phần cứng chỉ hỗ trợ định dạng số thực 32-bit (Single-Precision RV32F). Tuy nhiên, kiến trúc Datapath và các module con (Vedic, Kogge-Stone) được thiết kế theo dạng tham số hóa (Parameterized Verilog), cho phép dễ dàng mở rộng bus dữ liệu lên 64-bit (RV64D) trong các phiên bản nâng cấp tiếp theo.

5. Chi phí triển khai và khả năng thương mại hóa vi xử lý này như thế nào?

Do phát triển hoàn toàn trên nền tảng chuẩn mở RISC-V và ngôn ngữ Verilog nguyên bản, dự án có chi phí bản quyền bằng 0. Việc triển khai trên FPGA chỉ tốn chi phí phần cứng kit thử nghiệm ban đầu, rút ngắn thời gian đưa sản phẩm ra thị trường (Time-to-Market) xuống dưới 6 tháng cho các ứng dụng nhúng chuyên dụng.


Kết luận

Đề tài tốt nghiệp "Hiện thực khối Floating Point tích hợp vào bộ xử lý RISC-V 32-bit" của tác giả Đỗ Tuấn Thuận (Khoa Kỹ thuật Máy tính, Trường Đại học Công nghệ Thông tin - ĐHQG TP.HCM) đã giải quyết trọn vẹn bài toán nâng cao năng lực tính toán số thực dấu chấm động cho kiến trúc mở RISC-V.

Bằng việc kết hợp sáng tạo giữa thuật toán nhân cổ đại Vedic Urdhva Tiryakbhyam, bộ cộng Kogge-Stone và hệ thống dự đoán rẽ nhánh động Hybrid BPU/RAS, công trình đã tạo ra một lõi xử lý RV32IF đạt hiệu năng ấn tượng 114.28 MHz trên FPGA Virtex-7 với độ chuẩn hóa tuyệt đối theo tiêu chuẩn quốc tế IEEE 754-2008. Đây là bước đệm công nghệ vững chắc đóng góp vào kho tàng nghiên cứu phần cứng mở vi mạch tại Việt Nam, mở ra tiềm năng ứng dụng sâu rộng trong các lĩnh vực Edge AI, Robotics và thiết bị bán dẫn thông minh trong tương lai.