Giới thiệu dự án
Sự bùng nổ của cuộc cách mạng Công nghiệp 4.0 và mạng lưới Internet Vạn vật (Internet of Things - IoT) đang tái định hình toàn bộ cấu trúc công nghệ toàn cầu. Theo báo cáo từ IoT Analytics, số lượng thiết bị IoT kết nối đã vượt mốc 7 tỷ thiết bị vào năm 2018 và dự báo đạt hơn 22 đến 25 tỷ thiết bị vào giai đoạn 2025. Mỗi nút mạng IoT đều đòi hỏi ít nhất một bộ vi xử lý chuyên dụng để thu thập dữ liệu cảm biến, mã hóa truyền thông, điều khiển chấp hành và tương tác thời gian thực.
Tuy nhiên, thị trường vi xử lý nhúng hiện nay đang đối mặt với nhiều rào cản mang tính cốt lõi:
- Rào cản bản quyền và chi phí: Các kiến trúc tập lệnh thương mại độc quyền (như ARM, x86) đòi hỏi các điều khoản cấp phép phức tạp, thời gian đàm phán kéo dài từ 6 đến 24 tháng với chi phí bản quyền dao động từ 1 đến 10 triệu USD, ngăn cản khả năng tiếp cận của các trường đại học, viện nghiên cứu và doanh nghiệp vừa và nhỏ.
- Thiếu khả năng tùy biến sâu: Các dòng vi điều khiển thương mại đóng gói cố định vi kiến trúc, không thể tinh chỉnh cấu trúc đường ống, dung lượng bộ nhớ đệm hay cơ chế quản trị bộ nhớ để tối ưu hóa đồng thời diện tích silicon, năng lượng tiêu thụ và năng lực tính toán cho từng bài toán biên (Edge Computing).
- Hiện tượng "bức tường bộ nhớ" (Memory Wall): Tốc độ xử lý của lõi CPU tăng nhanh hơn rất nhiều so với tốc độ truy xuất của bộ nhớ chính (Main Memory/DRAM/SRAM ngoài). Sự chênh lệch độ trễ này khiến vi xử lý liên tục rơi vào trạng thái chờ (stall), làm suy giảm nghiêm trọng thông lượng thực thi của toàn hệ thống.
+-------------------------------------------------------------------------+
| BÀI TOÁN & GIẢI PHÁP HỆ THỐNG |
+-------------------------------------------------------------------------+
| THÁCH THỨC: |
| - Chi phí bản quyền ISA đóng (1M - 10M USD) |
| - Độ trễ bộ nhớ lớn gây nghẽn cổ chai CPU |
| - Nguy cơ xung đột vùng nhớ trong hệ thống nhúng đa nhiệm |
+-------------------------------------------------------------------------+
│
▼
+-------------------------------------------------------------------------+
| GIẢI PHÁP ĐỀ TÀI: |
| - Kiến trúc mở RISC-V (RV32I) 32-bit hoàn toàn miễn phí |
| - Đường ống Superscalar 2 luồng (Dual-Issue) nâng cao IPC |
| - Cache Associative 4-way (FIFO, Write-Through) triệt tiêu độ trễ truy |
| - MMU phân trang 256B bảo vệ bộ nhớ vật lý |
| - Tích hợp chuẩn Bus công nghiệp AXI4, vận hành thực tế trên FPGA |
+-------------------------------------------------------------------------+
Nhằm giải quyết triệt để các hạn chế trên, đề tài tập trung nghiên cứu, thiết kế và hiện thực hóa phần cứng vi xử lý RISC-V 32-bit trên mảng phần tử logic lập trình được (Field Programmable Gate Array - FPGA). Dự án kết hợp kiến trúc thực thi song luồng (Superscalar) cùng hệ thống quản trị bộ nhớ phân cấp hoàn chỉnh gồm bộ nhớ đệm lệnh/dữ liệu và đơn vị quản lý bộ nhớ ảo.
Mục tiêu kỹ thuật cụ thể của dự án
- Nghiên cứu và hiện thực đầy đủ tập lệnh cơ sở RISC-V 32-bit (RV32I) bao gồm 37 lệnh chuẩn (R, I, S, B, U, J type) và tập lệnh điều khiển đồng xử lý CP0 mở rộng.
- Thiết kế vi kiến trúc Superscalar 2 luồng phát lệnh (Dual-Issue) với cấu trúc đường ống 5 tầng: Tìm nạp lệnh (IF), Giải mã lệnh (ID), Thực thi (EXE), Truy xuất bộ nhớ (MEM), và Ghi lại thanh ghi (WB).
- Thiết kế khối đồng bộ và giải quyết xung đột phần cứng: Khối phát lệnh (Issuing logic) giải quyết xung đột cấu trúc, khối Forwarding logic chuyển tiếp dữ liệu xử lý xung đột dữ liệu (Data Hazards).
- Thiết kế bộ điều khiển bộ nhớ đệm 4 đường (4-way Set-Associative Cache) cho bộ nhớ đệm lệnh (ICache 2-port) và bộ nhớ đệm dữ liệu (DCache), áp dụng giải thuật thay thế khối FIFO và chiến lược cập nhật Write-Through.
- Thiết kế đơn vị quản lý bộ nhớ (Memory Management Unit - MMU) cơ chế phân trang 256 Bytes với bảng trang (Page Table) định thời phần cứng, hỗ trợ chuyển đổi địa chỉ ảo sang địa chỉ thực và phát tín hiệu ngoại lệ lỗi trang (Page Fault Exception).
- Đóng gói IP Core chuẩn giao tiếp công nghiệp ARM AMBA AXI4, kết nối hệ thống vi điều khiển giám sát MicroBlaze và ngoại vi UART Lite.
- Tổng hợp, mô phỏng và kiểm định hoạt động trên chip FPGA tại tần số vận hành mục tiêu 110 MHz.
Phạm vi và giới hạn đề tài
Hệ vi xử lý tập trung vào tính toán số nguyên 32-bit chuẩn RV32I và các lệnh hệ thống phục vụ MMU/Exception. Hệ thống chưa tích hợp phần cứng dấu chấm động chuẩn IEEE 754 (mở rộng RV32F/RV32D) và giải thuật nhân/chia phần cứng đa chu kỳ (mở rộng RV32M).
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Trước khi tiến hành thiết kế vi kiến trúc, nhóm nghiên cứu đã phân tích các kiến trúc vi xử lý nhúng phổ biến nhằm xác định sự đánh đổi giữa hiệu năng, tài nguyên phần cứng và tính linh hoạt.
| Tiêu chí phân tích |
Vi xử lý Đơn luồng RV32I Cơ bản |
Lõi ARM Cortex-M0/M3 Thương mại |
Giải pháp RISC-V Superscalar + 4-Way Cache + MMU (Đề tài) |
| Kiến trúc tập lệnh (ISA) |
RISC-V RV32I (Mở) |
ARMv6-M / ARMv7-M (Đóng) |
RISC-V RV32I + Đặc tả lệnh mở rộng CP0 (Mở) |
| Khả năng song song (ILP) |
Đơn luồng (Scalar - 1 lệnh/chu kỳ) |
Đơn luồng (Scalar - 1 lệnh/chu kỳ) |
Superscalar 2 luồng (Dual-Issue - tối đa 2 lệnh/chu kỳ) |
| Chi phí cấp phép |
Miễn phí |
Rất cao (Hàng trăm nghìn đến triệu USD) |
Hoàn toàn miễn phí, mã nguồn mở RTL |
| Hệ thống Cache |
Không hỗ trợ hoặc Direct-Mapped |
Tùy chọn dung lượng cố định |
4-Way Set-Associative (FIFO, Write-Through) |
| Bảo vệ bộ nhớ |
Không có hoặc MPU đơn giản |
MPU tĩnh theo vùng (Memory Protection Unit) |
MMU phân trang động (256B Page Size), bẫy lỗi Page Fault |
| Giao tiếp Bus hệ thống |
Custom Bus nội bộ |
AHB-Lite / APB |
Chuẩn AXI4 công nghiệp, tương thích đa IP Core |
| Khả năng tùy biến |
Trung bình |
Khóa cứng bởi nhà sản xuất |
Tối ưu hóa sâu trên mã nguồn Verilog HDL |
Yêu cầu hệ thống theo mô hình MoSCoW
- Must Have (Bắt buộc phải có): Thực thi chính xác 37 lệnh RV32I; Đường ống 5 tầng Dual-Issue; Khối Issuing xử lý stall/swap lệnh; Khối Forwarding logic 3 mức; Bộ điều khiển Cache 4-way cho ICache và DCache; Khối MMU phân trang 256B với bẫy lỗi trang; Vận hành ổn định ở tần số $\ge 100$ MHz.
- Should Have (Nên có): Giao tiếp hệ thống chuẩn AXI4 Native; Khối thanh ghi đặc biệt CP0 ($cause, $epc, $index, $entry, $context); Cập nhật Page Table thông qua phần mềm với chỉ thị
mtc0 r20, x0.
- Could Have (Có thể có): Mở rộng bộ tập lệnh nhân chia phần cứng RV32M; Bộ nhớ đệm cơ chế Write-Back hỗ trợ Dirty-bit.
- Won't Have (Chưa thực hiện ở giai đoạn này): Đơn vị tính toán dấu chấm động FPU (RV32F/D); Hệ thống dự đoán rẽ nhánh động (Dynamic Branch Predictor).
Thiết kế kiến trúc vi xử lý
Hệ thống được tổ chức thành 5 tầng đường ống kết hợp cùng hai khối chức năng nâng cao là ICache/DCache 4-Way và MMU.
graph TD
subgraph CPU_CORE ["Lõi Vi Xử Lý RISC-V Superscalar 2-Way"]
subgraph IF_STAGE ["Tầng IF (Instruction Fetch)"]
PC["Bộ đếm chương trình (pc_scalar)"]
ISSUE["Khối Phân Phối Lệnh (issuing)"]
end
subgraph ID_STAGE ["Tầng ID (Decode & Operand Fetch)"]
DEC["Bộ giải mã kép (Dual Decoder)"]
REG["Tập thanh ghi (Register File: 32 thanh ghi 32-bit)"]
FWD["Mạch Forwarding Logic"]
BR["Khối so sánh nhánh (branch)"]
end
subgraph EXE_STAGE ["Tầng EXE (Execution)"]
ALU1["Khối ALU Luồng A (10 phép toán)"]
ALU2["Khối ALU Luồng B (10 phép toán)"]
end
subgraph MEM_STAGE ["Tầng MEM (Memory Access)"]
LS["Khối căn chỉnh Load/Store (ls_logic)"]
end
subgraph WB_STAGE ["Tầng WB (Write Back)"]
MUX_WB["Bộ dồn kênh ghi thanh ghi"]
end
end
subgraph MEM_SUBSYSTEM ["Hệ Thống Phân Cấp Bộ Nhớ"]
ICACHE["ICache 4-Way (cache_2port)"]
DCACHE["DCache 4-Way (cache_1port)"]
MMU_UNIT["Khối Quản Lý Bộ Nhớ (MMU 256B Page Table)"]
MAIN_MEM["Bộ nhớ chính / Bus AXI4"]
end
PC -->|Địa chỉ ảo A/B| ICACHE
ICACHE -->|2 Lệnh đồng thời| ISSUE
ISSUE -->|A_pipe, B_pipe| DEC
DEC --> REG
REG --> FWD
FWD --> ALU1 & ALU2
BR -->|Tín hiệu nhảy| PC
ALU1 & ALU2 --> LS
LS -->|Địa chỉ ảo dữ liệu| DCACHE
ICACHE -.->|Miss / Địa chỉ ảo| MMU_UNIT
DCACHE -.->|Miss / Địa chỉ ảo| MMU_UNIT
MMU_UNIT -->|Địa chỉ vật lý dịch thành công| MAIN_MEM
MMU_UNIT -.->|Page Fault Exception| PC
LS --> MUX_WB
ALU1 & ALU2 --> MUX_WB
MUX_WB -->|Ghi dữ liệu rd| REG
Ngăn xếp công nghệ sử dụng trong đồ án
- Ngôn ngữ mô tả phần cứng: Verilog HDL (chuẩn IEEE 1364-2001/2005).
- Môi trường tổng hợp và mô phỏng: Xilinx Vivado Design Suite v2020.2.
- Nền tảng phần cứng đích: Kit phát triển FPGA Xilinx Artix-7 (XC7A100T) / Zynq-7000.
- Giao thức truyền thông Bus: ARM AMBA AXI4 (Advanced eXtensible Interface 4), AXI4-Lite.
- Bộ công cụ biên dịch chéo: GNU RISC-V GCC Toolchain (riscv32-unknown-elf-gcc) biên dịch assembly và mã C sang mã máy nhị phân (.hex).
Tổ chức bộ nhớ đệm (Cache) và Đơn vị quản lý bộ nhớ (MMU)
1. Bộ nhớ đệm 4-Way Set-Associative (ICache và DCache)
Bộ nhớ đệm được cấu trúc theo dạng tập hợp kết hợp 4 đường. Dung lượng Cache được chia nhỏ thành các Set, mỗi Set gồm 4 Way (4 Block). Cấu trúc một Block trong Cache bao gồm:
$$\text{Kích thước Block} = \text{Bit Hợp Lệ (V: 1-bit)} + \text{Trường Thẻ (Tag: t-bit)} + \text{Trường Dữ Liệu (Data: 32-bit)}$$
- Cơ chế tìm nạp 2 cổng (cache_2port): Nhằm phục vụ kiến trúc Superscalar cấp phát cùng lúc 2 lệnh cho luồng A và luồng B trong một chu kỳ xung nhịp, khối ICache được thiết kế hỗ trợ 2 kênh đọc song song
A_p_addr và B_p_addr.
- Thuật toán thay thế khối FIFO (First-In, First-Out): Khi xảy ra Cache Miss trên một Set đã đầy cả 4 đường, bộ đếm phần cứng sẽ chỉ định đường nạp dữ liệu đầu tiên bị đẩy ra để ghi nạp khối mới từ bộ nhớ chính, tiết kiệm tài nguyên logic hơn so với giải thuật LRU (Least Recently Used) nhưng vẫn đảm bảo hiệu suất xấp xỉ.
- Mô hình ghi Write-Through: Mọi thao tác ghi dữ liệu từ CPU (lệnh Store) được cập nhật đồng thời vào DCache và Bộ nhớ chính thông qua bus dữ liệu. Giải pháp này loại bỏ nguy cơ mất đồng nhất dữ liệu mà không cần thiết kế mạch Dirty-bit phức tạp.
2. Đơn vị quản lý bộ nhớ (MMU) và Cơ chế phân trang 256B
Đơn vị MMU chịu trách nhiệm chuyển đổi không gian địa chỉ ảo 32-bit (Virtual Address) do vi xử lý phát ra thành địa chỉ vật lý (Physical Address) cho bộ nhớ ngoài:
- Không gian bộ nhớ được chia thành các trang cố định kích thước 256 Bytes (8-bit Page Offset).
- Trường địa chỉ ảo
v_pc[31:0] được tách thành: VPN (Virtual Page Number - 24 bit) và Offset (8 bit).
- Bảng trang quản lý bằng phần cứng kiểm tra bit
valid. Nếu bit valid = 1, địa chỉ thực rpn được kết hợp với offset để tạo địa chỉ vật lý thực tế:
$$\text{Physical Address} = {\text{RPN}[19:0], \text{Offset}[7:0]}$$
- Nếu
valid = 0 (truy xuất vùng nhớ chưa được phân bổ hoặc cấm truy cập), MMU kích hoạt tín hiệu ngắt A_itb_exc hoặc dtb_exc (Page Fault Exception) báo cho CPU chuyển nhánh sang trình xử lý ngoại lệ.
+-----------------------------------------------------------------------+
| CƠ CHẾ PHÂN TRANG VÀ DỊCH ĐỊA CHỈ TRONG MMU |
+-----------------------------------------------------------------------+
Địa chỉ ảo từ CPU (32-bit):
+-------------------------------------------------+-------------------+
| Virtual Page Number (VPN) [31:8] | Page Offset [7:0] |
+-------------------------------------------------+-------------------+
│ │
▼ │
+───────────────────────────+ │
| MMU Page Table Lookup | │
+───────────────────────────+ │
| Valid | Physical Page No. | │
+───────+───────────────────+ │
| 1 | RPN [19:0] | ──(Hit)──┐ │
+───────+───────────────────+ │ │
| 0 | Invalid | ──(Miss) │ │
+───────+───────────────────+ │ │
│ │ │
(Page Fault Exception) │ │
│ ▼ ▼
▼ +-------------------+-------+
CPU kích hoạt bẫy ngắt | RPN [19:0] | Offset|
chuyển về $epc xử lý +-------------------+-------+
Địa chỉ vật lý (Physical Addr)
Implementation và kết quả
Chi tiết hiện thực phần cứng (RTL Implementation)
Hệ thống được hiện thực hoàn toàn bằng Verilog với cấu trúc module hóa phân cấp chặt chẽ.
1. Khối phân phối lệnh (issuing.v)
Khối này nhận 2 lệnh từ tầng IF (A_inst và B_inst), tiến hành phân tích mã thao tác (opcode) và các trường thanh ghi nhằm phát hiện xung đột tài nguyên hoặc xung đột cấu trúc đường ống:
- Nếu cả hai lệnh cùng là lệnh truy cập bộ nhớ Data Memory (Load/Store), do hệ thống chỉ trang bị 1 cổng DCache ở tầng MEM, khối phát cờ
roll_back = 1, chỉ cho phép lệnh A đi tiếp và giữ lệnh B lại cho chu kỳ sau.
- Nếu có sự phụ thuộc dữ liệu trực tiếp không thể giải quyết bằng Forwarding, thứ tự thực thi được đảo hoặc chèn bóng bóng (bubble).
// Trích xuất mạch phân phối lệnh phát hiện xung đột cấu trúc (issuing_clr.v)
module issuing_clr (
input wire [31:0] A_inst,
input wire [31:0] B_inst,
output reg [31:0] A_pipe,
output reg [31:0] B_pipe,
output reg roll_back,
output reg swap
);
wire [6:0] opcode_A = A_inst[6:0];
wire [6:0] opcode_B = B_inst[6:0];
// Kiểm tra xung đột cấu trúc: Cả 2 lệnh đều truy xuất bộ nhớ dữ liệu (Load/Store)
wire A_is_mem = (opcode_A == 7'b0000011) || (opcode_A == 7'b0100011); // LOAD or STORE
wire B_is_mem = (opcode_B == 7'b0000011) || (opcode_B == 7'b0100011);
always @(*) begin
roll_back = 1'b0;
swap = 1'b0;
A_pipe = A_inst;
B_pipe = B_inst;
if (A_is_mem && B_is_mem) begin
// Xung đột cổng truy xuất DCache: Chỉ cho phép lệnh A đi tiếp, lệnh B chờ
roll_back = 1'b1;
B_pipe = 32'h00000013; // NOP (addi x0, x0, 0)
end
end
endmodule
2. Khối Forwarding Logic giải quyết xung đột dữ liệu
Chuyển tiếp giá trị thanh ghi kết quả từ tầng EXE hoặc MEM trực tiếp về ngõ vào ALU của tầng ID mà không cần chờ chu kỳ ghi lại Write-Back:
// Mạch chuyển tiếp toán hạng giải quyết xung đột RAW (Forwarding Logic)
always @(*) begin
// Kiểm tra chuyển tiếp cho toán hạng rs1 của Lệnh A
if (A_ereg_wr && (A_erd != 5'd0) && (A_erd == A_rs1))
A_fwd_0 = 3'b001; // Forwarding từ tầng EXE của luồng A
else if (A_mreg_wr && (A_mrd != 5'd0) && (A_mrd == A_rs1))
A_fwd_0 = 3'b010; // Forwarding từ tầng MEM của luồng A
else if (B_ereg_wr && (B_erd != 5'd0) && (B_erd == A_rs1))
A_fwd_0 = 3'b011; // Forwarding chéo từ tầng EXE của luồng B
else
A_fwd_0 = 3'b000; // Sử dụng trực tiếp dữ liệu từ Register File
end
3. Tập lệnh và thanh ghi đồng xử lý hệ thống (CP0 - System Control Coprocessor)
Để điều khiển MMU và quản lý biệt lệ (Exception/Interrupt), vi xử lý tích hợp thêm 5 thanh ghi đặc biệt và 4 chỉ thị chuyên dụng:
| Tên thanh ghi |
Chỉ số (Decimal) |
Chức năng chi tiết trong vi xử lý |
| $cause |
15 |
Lưu mã nguyên nhân gây ra ngoại lệ (Page Fault, Syscall, v.v.) |
| $epc |
16 |
Lưu địa chỉ lệnh bị ngắt để quay về phục hồi sau khi kết thúc xử lý |
| $index |
17 |
Địa chỉ chỉ mục trỏ tới mục nhập (entry) cụ thể trong bảng trang MMU |
| $entry |
18 |
Dữ liệu cấu hình ánh xạ trang (chứa RPN và bit Valid) |
| $context |
19 |
Địa chỉ cơ sở trỏ tới thư mục bảng trang hệ thống |
Tập lệnh mở rộng điều khiển MMU:
mtc0 rd, rs2: Ghi dữ liệu từ thanh ghi thông thường rs2 vào thanh ghi đặc biệt rd của CP0.
mfc0 rd, rs2: Đọc dữ liệu từ thanh ghi đặc biệt rs2 của CP0 ra thanh ghi đích rd.
mtc0 r20, x0: Lệnh kích hoạt phần cứng ghi nội dung trong $entry vào ô nhớ bảng trang do $index chỉ định.
syscall: Nhảy tới địa chỉ phần cứng xử lý lời gọi hệ thống.
eret: Thoát khỏi chương trình ngắt, nhảy về địa chỉ lưu trong $epc.
Kiểm thử và đánh giá chức năng (Verification & Validation)
Hệ thống được xác minh thông qua 4 kịch bản kiểm thử toàn diện trên phần mềm mô phỏng Vivado Simulator trước khi đưa lên phần cứng:
- Kịch bản Test 1 - Xử lý Ngoại lệ Lỗi trang & Lời gọi hệ thống (Page Fault & Syscall): Vi xử lý truy xuất vào địa chỉ ảo chưa được cấp quyền trong MMU. MMU lập tức kích hoạt bẫy
itb_exc, CPU lưu địa chỉ lệnh vào $epc, gán mã lỗi vào $cause và nhảy đến địa chỉ ngắt. Chương trình cập nhật bảng trang bằng chuỗi lệnh mtc0 và thực hiện lệnh eret để tiếp tục chương trình thành công.
- Kịch bản Test 2 - Xác minh xung đột dữ liệu và đường ống Superscalar: Thực thi các chuỗi lệnh liên tiếp phụ thuộc dữ liệu (
ADD, SUB, AND, OR, SLT). Mạch Forwarding logic và Issuing unit đảm bảo tính toán chính xác 100% kết quả trên Register File mà không bị suy hao chu kỳ sai lệch.
- Kịch bản Test 3 - Đánh giá Cache Hit và Cache Miss: Kiểm tra cơ chế nạp khối của ICache/DCache. Khi gặp Cache Miss lần đầu, CPU dừng đường ống 1 chu kỳ để nạp dữ liệu từ SRAM vào Cache. Ở các lần lặp tiếp theo, tốc độ đọc đạt mức tức thời (1 chu kỳ xung nhịp/lệnh).
- Kịch bản Test 4 - Kiểm thử tích hợp toàn diện hệ thống (End-to-End Integration): Toàn bộ hệ thống CPU, ICache kép, DCache, MMU, và Bus AXI4 cùng vận hành đồng thời một chương trình tính toán phức tạp.
KỊCH BẢN THỰC THI KIỂM THỬ TÍCH HỢP TẬP LỆNH HỆ THỐNG:
--------------------------------------------------------------------------
Địa chỉ ảo Mã máy (Hex) Lệnh Assembly RISC-V & CP0
--------------------------------------------------------------------------
0x00000000 0x01100293 addi x5, x0, 17 # Nạp chỉ số Index = 17
0x00000004 0x40588073 mtc0 $index, x5 # Ghi $index
0x00000008 0x00100313 addi x6, x0, 1 # Bit Valid = 1, RPN = 0
0x0000000C 0x40690073 mtc0 $entry, x6 # Ghi $entry
0x00000010 0x400A0073 mtc0 r20, x0 # CẬP NHẬT BẢNG TRANG MMU
0x00000014 0x00000073 ecall / syscall # Gọi ngoại lệ hệ thống
0x00000018 0x40200073 eret # Quay về sau ngắt
--------------------------------------------------------------------------
KẾT QUẢ ĐẠT ĐƯỢC: 100% các thanh ghi Register File khớp hoàn toàn giữa
mô phỏng phần cứng RTL và mô hình tham chiếu tập lệnh mẫu.
Kết quả tổng hợp phần cứng trên FPGA (Synthesis & Implementation Results)
Thiết kế đã được tổng hợp hoàn chỉnh trên nền tảng công cụ Xilinx Vivado:
- Tần số hoạt động tối đa (Fmax): Đạt 110 MHz (Chu kỳ xung nhịp $T_{clk} \approx 9.09\text{ ns}$).
- Chỉ số thông lượng lý thuyết (Peak IPC): 2.0 Instructions Per Cycle (nhờ kiến trúc Superscalar 2 luồng).
- Thời gian trễ truy xuất Cache Hit: 1 chu kỳ xung nhịp.
- Phân tích Timing: Đạt giá trị Worst Negative Slack (WNS) dương ($+0.42\text{ ns}$ tại 110 MHz), không xảy ra vi phạm timing setup/hold trên toàn bộ mạng logic.
Đổi mới và đóng góp
Đề tài mang lại nhiều giá trị học thuật và kỹ thuật thực tiễn thông qua các cải tiến phần cứng rõ rệt so với các công trình nghiên cứu vi xử lý RISC-V trước đây.
Bảng so sánh với các công trình nghiên cứu tiền nhiệm
| Thông số kỹ thuật |
Khóa luận Tham chiếu 1 (2020) |
Khóa luận Tham chiếu 2 (2021) |
Đề tài nghiên cứu hiện tại (2022) |
| Kiến trúc luồng thực thi |
Đơn luồng (Single-Issue Scalar) |
Đơn luồng (Single-Issue Scalar) |
Song luồng (2-Way Superscalar Dual-Issue) |
| Số tầng đường ống (Pipeline) |
5 tầng cơ bản |
5 tầng cơ bản |
5 tầng kép với Forwarding logic đa luồng |
| Cấu trúc Bộ nhớ đệm (Cache) |
Direct-Mapped (Ánh xạ trực tiếp) |
2-Way Set-Associative |
4-Way Set-Associative (Hỗ trợ 2 cổng đọc ICache) |
| Quản lý bộ nhớ (MMU) |
Không tích hợp |
Không tích hợp |
Tích hợp MMU phân trang 256B + Bẫy lỗi Page Fault |
| Tần số vận hành trên FPGA |
50 MHz |
75 MHz |
110 MHz |
| Giao thức Bus hệ thống |
Bus độc quyền (Custom Bus) |
Wishbone Bus |
ARM AMBA AXI4 tiêu chuẩn công nghiệp |
Các đóng góp kỹ thuật cốt lõi
- Nâng cao thông lượng xử lý: Việc áp dụng kiến trúc Superscalar 2 luồng cho phép vi xử lý đạt hiệu năng tính toán trên lý thuyết cao gấp 1.8 - 2.0 lần so với vi kiến trúc đơn luồng truyền thống ở cùng mức tần số xung nhịp.
- Giảm thiểu tỷ lệ Cache Miss: Thiết kế bộ nhớ đệm 4-way kết hợp giải thuật FIFO giúp giảm đáng kể hiện tượng xung đột vị trí (Conflict Miss) so với Cache Direct-Mapped và 2-way, duy trì dòng nạp lệnh liên tục cho cả 2 luồng đường ống.
- Tăng cường an toàn và cô lập bộ nhớ: MMU phân trang 256B cung cấp nền tảng phần cứng vững chắc để chạy các hệ điều hành nhúng đa nhiệm (như FreeRTOS), bảo vệ không gian nhớ của nhân (Kernel space) khỏi các tiến trình người dùng (User space).
Ứng dụng thực tế và triển khai
Kịch bản ứng dụng thực tế
- Thiết bị xử lý biên IoT bảo mật cao (Secure Edge Gateway): Nhờ có MMU tích hợp sẵn, vi xử lý có khả năng phân tách vùng nhớ an toàn cho các tác vụ mã hóa/giải mã AES, xác thực chữ ký số truyền thông mà không sợ rò rỉ dữ liệu qua các tiến trình thứ ba.
- Bộ điều khiển công nghiệp thông minh (Smart Factory Automation): Năng lực tính toán 2 lệnh/chu kỳ tại tần số 110 MHz cho phép xử lý đồng thời thuật toán điều khiển PID và giao tiếp mạng công nghiệp thời gian thực.
- Nền tảng vi điều khiển tùy biến SoC (Customized SoC on FPGA): Đóng vai trò là Master Core trong các hệ thống xử lý nhúng trên FPGA, giao tiếp linh hoạt với các IP chuyên dụng khác qua bus AXI4 chuẩn hóa.
graph LR
subgraph FPGA_SOC ["Hệ Thống SoC Tích Hợp Trên Chip FPGA"]
RISCV["Lõi RISC-V Superscalar (Master)"]
MB["MicroBlaze Controller (Co-processor)"]
AXI_BUS["Interconnect Bus AXI4 / AXI4-Lite"]
UART["IP AXI UART Lite"]
MEM_CTRL["Local Memory Controller"]
BRAM["Khối BRAM / SRAM"]
GPIO["Ngoại vi I/O (Sensor/Actuator)"]
end
RISCV <==>|Giao diện Master AXI4| AXI_BUS
MB <==>|Giao diện Master AXI4| AXI_BUS
AXI_BUS <==> UART
AXI_BUS <==> MEM_CTRL
AXI_BUS <==> GPIO
MEM_CTRL <==> BRAM
UART <-->|Truyền thông nối tiếp| PC_HOST["Máy tính giám sát / Debug"]
Quy trình triển khai hệ thống trên FPGA
- Bước 1 - Đóng gói IP Core: Đóng gói toàn bộ module
cpu_mem_scalar thành IP tương thích Vivado IP Catalog với giao tiếp AXI4 Master/Slave.
- Bước 2 - Thiết kế Block Design: Tạo sơ đồ khối liên kết lõi RISC-V, bộ nhớ Local Memory, MicroBlaze và AXI UART Lite trong Vivado IP Integrator.
- Bước 3 - Tổng hợp và Thực thi: Chạy quy trình Synthesis, Placement và Routing; kiểm tra báo cáo công suất (Power Report) và phân tích Timing.
- Bước 4 - Tạo Bitstream và Nạp phần cứng: Sinh file bitstream (.bit) và nạp xuống kit phát triển FPGA qua cổng cáp JTAG.
- Bước 5 - Nạp phần mềm và Giám sát: Nạp mã máy thực thi vào bộ nhớ thông qua giao diện nạp tập lệnh, theo dõi phản hồi dữ liệu qua UART Terminal ở tốc độ Baudrate tiêu chuẩn (115200 bps).
Hạn chế và hướng phát triển
Hạn chế kỹ thuật hiện tại
- Tập lệnh mở rộng: Chưa tích hợp phần cứng cho tập lệnh nhân/chia số nguyên (M-extension) và các phép toán dấu chấm động (F/D-extension), khiến các phép tính phức tạp phải xử lý thông qua phần mềm giả lập.
- Chính sách ghi Cache Write-Through: Tuy đảm bảo tính nhất quán dữ liệu cao nhưng gây chiếm dụng băng thông bus hệ thống do mọi thao tác Store đều phải ghi xuống bộ nhớ chính.
- Bảng trang MMU đơn cấp: Thiết kế bảng trang phẳng cố định 256B, chưa hỗ trợ bảng trang nhiều cấp (Multi-level Page Table) như chuẩn Sv32 của RISC-V phục vụ các hệ điều hành lớn (như Linux).
Hướng nâng cấp trong tương lai
- Hiện thực hóa tập lệnh mở rộng RV32M (Hardware Multiplier/Divider) bằng khối DSP slice có sẵn trên FPGA.
- Nâng cấp cơ chế DCache sang Write-Back kết hợp Dirty-Bit nhằm giảm tải lưu lượng trên bus bộ nhớ.
- Nâng cấp MMU hỗ trợ đầy đủ đặc tả bộ nhớ ảo RISC-V Sv32, xây dựng bộ đệm chuyển đổi địa chỉ nhanh (Translation Lookaside Buffer - TLB) nhằm nạp thành công hệ điều hành nhúng Linux.
- Hiện thực bộ dự đoán rẽ nhánh động (Branch Target Buffer - BTB kết hợp 2-bit Dynamic Predictor) để hạn chế tối đa số chu kỳ phạt khi gặp lệnh nhảy.
Đối tượng hưởng lợi
+-------------------------------------------------------------------------+
| GIÁ TRỊ MANG LẠI CHO CÁC BÊN LIÊN QUAN |
+-------------------------------------------------------------------------+
| |
| [SINH VIÊN & HỌC VIÊN CAO HỌC] |
| - Tài liệu tham khảo toàn diện về vi kiến trúc RISC-V, Superscalar |
| - Dự án mẫu kết hợp Cache 4-way và MMU bằng Verilog chuẩn hóa |
| |
| [KỸ SƯ THIẾT KẾ VI MẠCH & FPGA] |
| - Khung mã nguồn RTL tối ưu sẵn sàng tái sử dụng |
| - Hướng dẫn chi tiết đóng gói IP chuẩn Bus AXI4 trên Xilinx Vivado |
| |
| [DOANH NGHIỆP R&D THIẾT BỊ NHÚNG & IOT] |
| - Giải pháp lõi xử lý hiệu năng cao, không mất phí bản quyền |
| - Khả năng tùy biến sâu cho các dòng SoC chuyên biệt |
| |
| [CỘNG ĐỒNG NGHIÊN CỨU HỆ THỐNG MÃ NGUỒN MỞ] |
| - Đóng góp vào hệ sinh thái phần cứng mở RISC-V tại Việt Nam |
| |
+-------------------------------------------------------------------------+
- Sinh viên và Giảng viên ngành Kỹ thuật Máy tính/Điện tử: Cung cấp tài liệu thực hành sống động về kiến trúc máy tính nâng cao, giúp thu hẹp khoảng cách giữa lý thuyết đường ống/bộ nhớ ảo và hiện thực phần cứng thực tế.
- Kỹ sư thiết kế phần cứng (ASIC/FPGA Designers): Sở hữu một kiến trúc lõi vi xử lý hoàn chỉnh có khả năng vận hành ở 110 MHz, dễ dàng tích hợp vào các hệ thống SoC phức tạp thông qua chuẩn bus công nghiệp AXI4.
- Doanh nghiệp phát triển thiết bị IoT: Tiết kiệm hàng triệu USD chi phí bản quyền ISA đóng, làm chủ hoàn toàn công nghệ thiết kế chip, tối ưu hóa kích thước và năng lượng cho sản phẩm thương mại.
Câu hỏi thường gặp
1. Yêu cầu cấu hình phần cứng tối thiểu để triển khai và chạy thử nghiệm thiết kế này là gì?
Hệ thống yêu cầu máy tính cài đặt môi trường Xilinx Vivado Design Suite (phiên bản từ 2019.1 trở lên) và kit phát triển FPGA hỗ trợ tối thiểu khoảng 15.000 Logic Cells và 60 khối Block RAM (BRAM), ví dụ như dòng Xilinx Artix-7 (XC7A35T, XC7A100T) hoặc Digilent Basys 3 / Nexys 4 DDR / Arty A7.
2. Giới hạn mở rộng thông lượng của kiến trúc Superscalar 2 luồng này là gì?
Do vi xử lý sử dụng cơ chế phát lệnh tĩnh theo thứ tự (In-Order Issue) và chia sẻ chung 1 cổng truy xuất dữ liệu DCache ở tầng MEM, thông lượng tối đa đạt 2 IPC khi chạy các khối lệnh số học ALU thuần túy. Khi xuất hiện liên tiếp 2 lệnh truy xuất bộ nhớ (Load/Store), hệ thống tự động chèn 1 chu kỳ stall (roll_back = 1) để tuần tự hóa việc đọc/ghi.
3. Làm thế nào để tích hợp lõi vi xử lý này vào hệ thống AXI4 có sẵn?
Khối cpu_mem_scalar được đóng gói với giao diện AXI4 Master Bridge. Khi xảy ra Cache Miss hoặc truy xuất ngoài, bộ điều khiển Cache sẽ tự động chuyển đổi các yêu cầu đọc/ghi thành chuỗi transaction chuẩn AXI4 (gồm 5 kênh độc lập: Read Address, Read Data, Write Address, Write Data, Write Response) kết nối trực tiếp đến AXI Interconnect IP trong Vivado.
4. Cơ chế bảo trì và cập nhật bảng trang MMU diễn ra như thế nào?
Việc cập nhật bảng trang hoàn toàn do phần mềm kiểm soát. Khi xảy ra lỗi trang (Page Fault), trình phục vụ ngắt sẽ xác định địa chỉ lỗi thông qua $epc, tính toán địa chỉ vật lý mới, nạp vào các thanh ghi $index, $entry và thực hiện lệnh mtc0 r20, x0 để chốt dữ liệu vào SRAM bảng trang phần cứng chỉ trong 1 chu kỳ.
5. Chi phí triển khai và hiệu quả đầu tư (ROI) của giải pháp này so với việc mua lõi IP thương mại?
Giải pháp sử dụng hoàn toàn mã nguồn mở và chuẩn mở RISC-V, giúp giảm 100% chi phí bản quyền khởi tạo (Upfront Licensing Fee) (thường từ $500.000 đến $2.000.000 đối với các lõi ARM Cortex-M) và không tốn phí bản quyền trên từng chip bán ra (Royalty Fee), rút ngắn thời gian thu hồi vốn đầu tư (ROI) cho các dự án nghiên cứu và thương mại hóa sản phẩm IoT.
Kết luận
Khóa luận tốt nghiệp đã nghiên cứu, thiết kế và hiện thực hóa thành công bộ vi xử lý RISC-V 32-bit (RV32I) theo kiến trúc Superscalar 2 luồng (Dual-Issue) tích hợp hệ thống bộ nhớ phân cấp hoàn chỉnh gồm Cache Associative 4-way và Đơn vị quản lý bộ nhớ (MMU) trên nền tảng FPGA.
Hệ thống đạt tần số vận hành ổn định 110 MHz, giải quyết triệt để các xung đột dữ liệu và cấu trúc thông qua các khối Issuing, Forwarding logic và bộ nhớ đệm đa cổng; đồng thời cung cấp cơ chế bảo vệ phân trang bộ nhớ 256 Bytes vững chắc. Việc tích hợp chuẩn bus công nghiệp AXI4 khẳng định khả năng sẵn sàng đóng gói thành IP Core thương mại, phục vụ đắc lực cho các ứng dụng IoT, thiết bị biên thông minh và bảo mật phần cứng. Đây là bước đệm vững chắc cho việc tiếp tục phát triển các hệ thống vi xử lý đa lõi (Multi-core) hiệu năng cao trên nền tảng kiến trúc mở RISC-V tại Việt Nam.