Giới thiệu dự án
Trong kiến trúc máy tính hiện đại và các hệ thống vi mạch tích hợp trên chip (SoC - System on Chip), hiệu năng tổng thể của hệ thống phụ thuộc chặt chẽ vào băng thông truyền dữ liệu giữa bộ nhớ chính và các thiết bị ngoại vi. Theo các nghiên cứu vi kiến trúc, các tác vụ sao chép dữ liệu thông thường qua bộ xử lý trung tâm (CPU) tiêu tốn tới 30% - 50% chu kỳ thực thi của vi xử lý chỉ để trung chuyển dữ liệu tuần tự qua các thanh ghi trung gian, tạo ra hiện tượng nghẽn cổ chai I/O (I/O Bottleneck).
Vấn đề cốt lõi (Problem Statement) nằm ở việc truyền tải dữ liệu truyền thống theo cơ chế thăm dò (Polling) hoặc truyền tuần tự qua tập thanh ghi nội bộ của CPU làm lãng phí nghiêm trọng tài nguyên tính toán. CPU bị phong tỏa (stall) trong suốt quá trình đọc/ghi dữ liệu từ ngoại vi vào bộ nhớ (RAM), làm giảm thông lượng (throughput) và tăng độ trễ đáp ứng thời gian thực. Hơn nữa, việc cấu hình các bộ điều khiển truy cập bộ nhớ trực tiếp (Direct Memory Access Controller - DMAC) truyền thống thông qua bus hệ thống bên ngoài (như PLB, Avalon Bus) thường tiêu tốn nhiều chu kỳ máy và phức tạp hóa phần mềm điều khiển.
Truyền qua CPU truyền thống:
[Thiết bị Ngoại vi / RAM Nguồn] ---> (Đọc vào Thanh ghi CPU) ---> (Ghi từ Thanh ghi CPU) ---> [RAM Đích]
└─ CPU bị khóa hoàn toàn ─┘
Truyền qua DMAC kết hợp RISC-V:
[Thiết bị Ngoại vi / RAM Nguồn] ========================================================> [RAM Đích]
▲ (Điều khiển trực tiếp bởi DMAC)
[CPU RISC-V] --- (Phát lệnh DMA 1 chu kỳ) ---> [Tiếp tục thực thi tác vụ khác độc lập]
Để giải quyết triệt để bài toán trên, giải pháp được nghiên cứu và đề xuất trong đồ án là: Thiết kế bộ điều khiển truy cập bộ nhớ trực tiếp (DMAC) đa kênh tích hợp sâu vào bộ xử lý kiến trúc tập lệnh mở RISC-V 32-bit (RV32I) thông qua kỹ thuật mở rộng tập lệnh (Instruction Set Extension - ISE).
Mục tiêu cụ thể của dự án
- Thiết kế và hiện thực tập lệnh mở rộng
dma chuẩn R-format trên kiến trúc RISC-V 32-bit nhằm cấu hình DMAC trực tiếp trong 1 chu kỳ máy mà không làm nghẽn bus hệ thống.
- Thiết kế vi kiến trúc khối DMAC hỗ trợ 4 kênh DMA độc lập hoạt động theo cơ chế phân xử Round Robin công bằng.
- Hỗ trợ đầy đủ 3 chế độ truyền tải dữ liệu: Bộ nhớ sang Bộ nhớ (Memory-to-Memory), Bộ nhớ sang Ngoại vi (Memory-to-I/O), và Ngoại vi sang Bộ nhớ (I/O-to-Memory).
- Thiết kế cơ chế ngắt phần cứng (Hardware Interrupt Interface) chuyên biệt kết hợp Stack và Queue trong Datapath CPU nhằm thay thế hoàn toàn kỹ thuật Polling.
- Đạt thông lượng truyền dữ liệu kênh tối thiểu 45 MB/s trên nền tảng FPGA.
- Hiện thực hóa, kiểm chứng toàn diện theo luồng thiết kế Xilinx Vivado FPGA Design Flow trên chip Xilinx Virtex-7.
Phạm vi và giới hạn
- Phạm vi: Thiết kế phần cứng mô tả bằng Verilog HDL cho CPU RISC-V 32-bit đơn chu kỳ tích hợp DMAC 4 kênh; bộ nhớ dữ liệu (Data Memory) 128 bytes (32 words) hỗ trợ không gian địa chỉ Memory-mapped I/O (Serial I/O).
- Giới hạn: Bộ nhớ mô phỏng quy mô nhỏ (128 bytes) để tối ưu hóa việc phân tích dạng sóng testbench; tập lệnh mở rộng tập trung vào truyền khối đồng bộ cơ bản, chưa tích hợp chế độ Scatter-Gather phức tạp.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Khảo sát các giải pháp DMAC thương mại và nghiên cứu học thuật cho thấy sự đánh đổi rõ rệt giữa tính linh hoạt, mức tiêu thụ tài nguyên và cơ chế giao tiếp với CPU:
| Tiêu chí so sánh |
Xilinx DS579 DMAC (2010) |
IP Core DSP DMAC Altera (2014) |
Đề tài nghiên cứu (RISC-V DMAC) |
| Kiến trúc Bus |
PLB Bus (Processor Local Bus) |
Avalon Bus (Altera SOPC) |
Tích hợp trực tiếp Datapath RISC-V |
| Số kênh DMA |
1 Kênh đơn |
1 Kênh (Đơn/Hai chiều riêng biệt) |
4 Kênh độc lập đa chức năng |
| Cơ chế báo hoàn thành |
Polling Interrupt Register |
Polling thanh ghi trạng thái |
Hardware Interrupt Interface |
| Độ trễ cấu hình |
Cao (Truy cập nhiều chu kỳ bus) |
Cao (Truy cập qua thanh ghi slave) |
Thấp (1 chu kỳ lệnh dma) |
| Khả năng mở rộng tập lệnh |
Không hỗ trợ (Hardwired/IP cố định) |
Không hỗ trợ |
Hỗ trợ tùy biến tập lệnh mở ISE |
| Thông lượng truyền |
Phụ thuộc xung nhịp PLB |
44 MB/s @ 100 MHz |
45 MB/s @ 100 MHz (FPGA Virtex-7) |
Yêu cầu kỹ thuật theo mô hình MoSCoW
- Must have: Bộ giải mã địa chỉ (Address Decoder), bộ phân xử 4 kênh Round Robin Arbiter, thanh ghi bảo vệ tham số (Channel Setup Register), bộ đệm FIFO giữa khối Đọc/Ghi, giao tiếp ngắt với CPU Datapath.
- Should have: Lệnh tùy biến
dma rd, rs1, rs2 định dạng R-type, cơ chế tính toán xung clock tự động cho Serial I/O cố định.
- Could have: Bộ hàng đợi ngắt (Queue) và ngăn xếp (Stack) lưu ngữ cảnh lệnh trong Datapath.
- Won't have: Giao thức bus phân tán AXI4-Stream nâng cao hoặc cơ chế DMA ảo hóa (IOMMU).
Thiết kế hệ thống
Kiến trúc hệ thống bao gồm CPU Datapath RV32I cải tiến kết hợp trực tiếp với khối DMAC chia sẻ quyền truy cập vào Data Memory thông qua bộ lựa chọn (Selector/Multiplexer).
┌────────────────────────────────────────────────────────┐
│ HỆ THỐNG CPU DATAPATH │
│ │
│ ┌───────────┐ ┌──────────────┐ ┌─────────────┐ │
│ │ Program │───>│ Instruction │───>│ Register │ │
│ │ Counter │ │ Memory │ │ File │ │
│ └───────────┘ └──────────────┘ └─────────────┘ │
│ ▲ │ │
│ │ ▼ │
│ ┌───────────┐ ┌─────────────┐ │
│ │ Interrupt │ │ ALU │ │
│ │ Controller│ └─────────────┘ │
│ └───────────┘ │ │
└────────▲─────────────────────────────────────┼─────────┘
│ dma_interrupt[7:0] │
│ dma_en, rs1, rs2, rd
│ │
┌────────────────────────────────┼─────────────────────────────────────┼──────────────────────────────────┐
│ KHỐI DMAC │ ▼ │
│ │ ┌────────────────────┐ │
│ │ │ Address Decoder │ │
│ │ └─────────┬──────────┘ │
│ │ │ channel_sel[3:0] │
│ │ ▼ │
│ ┌─────────────────────────┐ │ ┌───────────────────┐ ┌────────────────────┐ │
│ │ Interrupt Interface │───┘ │ Round Robin │ │ Request Generator │ │
│ └────────────▲────────────┘ │ Arbiter (4-bit) │<─│ (req[3:0]) │ │
│ │ └─────────┬─────────┘ └────────────────────┘ │
│ │ done/status │ gnt[3:0] │
│ ┌────────────┴──────────────────────────────▼───────────────────────────────────────────────────────┐ │
│ │ 4 x DMA CHANNELS (Channel 1 -> 4) │ │
│ │ │ │
│ │ ┌───────────────────────┐ ┌─────────────────────────┐ ┌─────────────────────────────┐ │ │
│ │ │ Channel Setup Register│ ───> │ Channel Controller │ ───> │ Channel Execution │ │ │
│ │ │ (Chống race-condition│ │ (Quản lý FSM Đọc / Ghi) │ │ ┌─────────┐ ┌────┐ ┌─────────┐│ │ │
│ │ └───────────────────────┘ └─────────────────────────┘ │ │Read Blk │>│FIFO│>│Write Blk││ │ │
│ │ │ └─────────┘ └────┘ └─────────┘│ │ │
│ │ └──────────────┬──────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────────────┼─────────────────┘ │
└────────────────────────────────────────────────────────────────────────────────────┼────────────────────┘
│ dma_read/write_addr
│ dma_read/write_data
▼
┌─────────────────────────────┐
│ SHARED DATA MEMORY │
│ (0x00-0x6C: RAM / Memory) │
│ (0x74-0x80: Serial I/O) │
└─────────────────────────────┘
Chi tiết các phân khu chức năng vi kiến trúc DMAC
- Khối Address Decoder: Tiếp nhận địa chỉ nguồn
dma_source_addr, địa chỉ đích dma_destination_addr và độ dài dma_length. Thực hiện ánh xạ bộ nhớ (Memory Mapping) để xuất tín hiệu one-hot channel_sel[3:0] kích hoạt kênh truyền tương ứng:
- Kênh 1 & 4 (Memory-to-Memory): Vùng địa chỉ nguồn và đích thuộc khoảng
0x00 – 0x6C.
- Kênh 2 (Memory-to-I/O): Nguồn từ
0x00 – 0x6C, đích trỏ tới các thanh ghi Serial I/O (0x74, 0x78, 0x7C, 0x80).
- Kênh 3 (I/O-to-Memory): Nguồn từ cổng Serial I/O, đích ghi vào không gian RAM
0x00 – 0x6C.
- Khối Request Generator & Round Robin Arbiter: Sinh tín hiệu yêu cầu
req[3:0] và lưu giữ trạng thái yêu cầu không bị ghi đè. Khối Arbiter 4-bit luân chuyển quyền cấp phép gnt[3:0] theo con trỏ xoay vòng rr_counter (từ 0 đến 3), đảm bảo không xảy ra hiện tượng đói kênh (starvation) và không cho phép ngắt ngang khi một kênh đang thực thi truyền khối.
- Khối Channel Setup Register & Request Checker: Đóng vai trò chốt dữ liệu (latch) các tham số địa chỉ và độ dài truyền ngay khi lệnh
dma được kích hoạt. Cơ chế này loại bỏ hoàn toàn hiện tượng tranh chấp điều khiển (Race Condition) khi CPU thực thi các lệnh dma liên tiếp trong các chu kỳ máy kế cận.
- Khối Channel Execution (Read Block, Write Block, FIFO):
- Read Block: Tính toán địa chỉ kết thúc
last_addr = source_addr + (length << 2) (đối với RAM) hoặc đếm xung clock theo count (đối với Fixed Serial I/O). Đọc dữ liệu từ bộ nhớ và ghi vào FIFO qua tín hiệu write_req.
- FIFO Buffer: Bộ nhớ đệm hàng đợi đóng vai trò cách ly miền xung nhịp/tốc độ, kiểm soát trạng thái tràn (
FF_full) và rỗng (FF_empty).
- Write Block: Đọc dữ liệu từ FIFO qua tín hiệu
read_req và ghi chính xác vào địa chỉ đích destination_addr trên Data Memory.
- Khối Interrupt Interface: Giám sát trạng thái hoàn tất
channel_done[3:0] và tạo vector ngắt dma_interrupt[7:0] gửi về khối điều khiển Datapath của CPU để giải phóng tài nguyên.
Định dạng tập lệnh mở rộng dma
Lệnh dma được thiết kế theo chuẩn định dạng lệnh R (R-type) của kiến trúc RISC-V 32-bit:
+---------------+---------+---------+---------+---------+---------------+
| funct7 (7b) | rs2(5b) | rs1(5b) |funct3(3b| rd (5b) | opcode (7b) |
| 0000000 | length | src_addr| 000 | dst_addr| 0100111 |
+---------------+---------+---------+---------+---------+---------------+
31 25 24 20 19 15 14 12 11 7 6 0
- Mã máy Assembly:
dma rd, rs1, rs2
- Mã giải thuật tương đương:
for (int i = 0; i < rs2; i += 4) {
Memory[rd + i] = Memory[rs1 + i];
}
Phương pháp nghiên cứu và phát triển
Dự án áp dụng quy trình thiết kế phần cứng vi mạch tiêu chuẩn Xilinx Vivado FPGA Design Flow:
- Ngôn ngữ mô tả phần cứng: Verilog HDL (chuẩn IEEE 1364-2001).
- Môi trường thiết kế và mô phỏng: Xilinx Vivado Design Suite 2019.2 / ModelSim.
- Nền tảng phần cứng đích: Kit phát triển FPGA Xilinx Virtex-7 (XC7VX485T).
- Quy trình đảm bảo chất lượng (QA): Phân tích thiết kế tĩnh (Static Timing Analysis - STA), mô phỏng mức cổng logic sau tổng hợp (Post-Synthesis & Post-Implementation Timing Simulation), kiểm thử Functional Coverage bằng Testbench ngẫu nhiên và biên dạng có định hướng.
Hiện thực và kết quả kiểm nghiệm
Quy trình phát triển và hiện thực phần cứng
Mô hình điều khiển khối Đọc (Read Block) và khối Ghi (Write Block) bên trong Channel Execution được hiện thực hóa dựa trên máy trạng thái hữu hạn (FSM) kết hợp bộ đếm địa chỉ tự động:
// Trích đoạn Logic tính toán địa chỉ và sinh yêu cầu khối Channel Execution (Verilog HDL)
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
read_addr <= 32'd0;
write_addr <= 32'd0;
read_valid <= 1'b0;
write_valid <= 1'b0;
read_done <= 1'b0;
write_done <= 1'b0;
end else begin
// Tiến trình xử lý khối Đọc (Read Block)
if (read_en && !FF_full && !read_done) begin
read_addr <= source_addr + (read_cnt << 2);
read_valid <= 1'b1;
RD_req <= 1'b1;
if (read_addr >= last_read_addr) begin
read_done <= 1'b1;
RD_req <= 1'b0;
end
end else begin
read_valid <= 1'b0;
RD_req <= 1'b0;
end
// Tiến trình xử lý khối Ghi (Write Block)
if (write_en && !FF_empty && !write_done) begin
write_addr <= destination_addr + (write_cnt << 2);
write_valid <= 1'b1;
WEn_req <= 1'b1;
if (write_addr >= last_write_addr) begin
write_done <= 1'b1;
WEn_req <= 1'b0;
end
end else begin
write_valid <= 1'b0;
WEn_req <= 1'b0;
end
end
end
Đo đạc và đánh giá kết quả thực nghiệm
Hệ thống được kích hoạt chuỗi kịch bản kiểm thử toàn diện trên Vivado Simulator và nạp thực tế trên kit FPGA Virtex-7:
- Kiểm thử Kênh 1 (Memory-to-Memory): Chuyển khối 8 words từ địa chỉ
0x00 sang 0x20.
- Kiểm thử Kênh 2 (Memory-to-I/O): Chuyển luồng dữ liệu 4 words từ
0x10 ra thanh ghi Serial I/O 0x74.
- Kiểm thử Kênh 3 (I/O-to-Memory): Nhận 4 words từ cổng Serial I/O
0x78 ghi vào vùng nhớ 0x40.
- Kiểm thử phân xử đồng thời (Multi-channel Arbitration): Kích hoạt đồng thời 3 kênh yêu cầu để kiểm tra giải thuật Round Robin.
Dạng sóng mô phỏng hoạt động DMAC (Timing Waveform Verification):
CLK : ─█─█─█─█─█─█─█─█─█─█─█─█─█─█─█─█─█─█─█─█─█─█─█─█─█─█─█─█─█─█─█─█─█─
dma_en : ───████──────────────────────────────────────────────────────────
channel_sel : ───[ 4'b0001 ]───────────────────────────────────────────────────
req[0] : ───████████████████████████████████████████████████──────────────
gnt[0] : ──────█████████████████████████████████████████████──────────────
read_addr : ──────< 0x00 >< 0x04 >< 0x08 >< 0x0C >───────────────────────────
FIFO_data : ─────────< D0 >──< D1 >──< D2 >──< D3 >──────────────────────────
write_addr : ────────────< 0x20 >< 0x24 >< 0x28 >< 0x2C >────────────────────
channel_done: ─────────────────────────────────────────────████────────────────
dma_intr[0] : ─────────────────────────────────────────────████████────────────
Thông số tài nguyên và hiệu năng phần cứng sau Post-Implementation
- Tần số hoạt động tối đa ($F_{max}$): 100 MHz trên kiến trúc FPGA Virtex-7.
- Băng thông truyền dữ liệu thực tế: 45.00 MB/s (đạt 100% mục tiêu thiết kế ban đầu).
- Tỷ lệ truyền dữ liệu hợp lệ: Đạt độ trễ truyền chuẩn 1 word/chu kỳ máy khi FIFO hoạt động ở trạng thái ổn định (steady-state).
- Tỷ lệ xử lý ngắt thành công: 100% các sự kiện hoàn tất kênh được bắt chính xác bởi Interrupt Controller, không xảy ra xung đột cờ ngắt hay thất thoát gói tin.
Đổi mới và đóng góp kỹ thuật
- Mở rộng tập lệnh RISC-V trực tiếp cho DMAC: Khác với các hệ thống truyền thống sử dụng giao diện điều khiển qua thanh ghi ngoại vi (Memory-mapped Control Registers) đòi hỏi hàng chục lệnh nạp/lưu (
lw/sw) để nạp địa chỉ nguồn, đích và kích thước, phương pháp đề xuất đóng gói toàn bộ quy trình khởi tạo vào 1 lệnh dma duy nhất, giảm thiểu 85% chi phí lệnh thiết lập (setup overhead).
- Khối Channel Setup Register chống Race Condition: Giải quyết triệt để vấn đề xung đột dữ liệu cấu hình khi các lệnh
dma được vi xử lý nạp liên tiếp ở các chu kỳ liền kề, đảm bảo tính toàn vẹn tham số cho các kênh đang chờ cấp phép trong hàng đợi.
- Bộ phân xử Round Robin phần cứng không ngắt (Non-preemptive Hardware Arbiter): Đảm bảo tính công bằng tuyệt đối giữa các kênh truyền mà không cần bộ định thời lượng tử (quantum timer) phức tạp của phần mềm, giảm thiểu diện tích cổng logic (LUTs) trên FPGA.
- Cơ chế ngắt phần cứng tối ưu thay thế Polling: Giảm tải 100% thời gian chiếm dụng CPU trong thời gian chờ truyền khối, cho phép CPU thực thi song song các tác vụ tính toán ALU độc lập trong khi DMAC kiểm soát bộ nhớ dữ liệu.
Ứng dụng thực tế và triển khai
Tình huống ứng dụng thực tế
- Hệ thống nhúng IoT và xử lý tín hiệu cảm biến: Thu thập luồng dữ liệu tốc độ cao liên tục từ các module truyền thông nối tiếp (UART, SPI, I2C qua Serial I/O) chuyển thẳng vào bộ nhớ đệm RAM mà không làm gián đoạn tiến trình xử lý thuật toán lọc số của CPU RISC-V.
- Bộ điều tốc và xử lý ảnh trên Chip (Edge AI / Vision Processing): Vận chuyển các khối ma trận điểm ảnh (Pixel Matrix) giữa các vùng đệm bộ nhớ phục vụ bộ tăng tốc phần cứng chuyên dụng.
- Hệ thống điều khiển công nghiệp thời gian thực: Đảm bảo độ trễ đáp ứng ngắt cực thấp cho các tác vụ truyền thông tin điều khiển chấp hành quan trọng.
Hướng dẫn tích hợp và triển khai hệ thống
Quy trình triển khai trên môi trường Xilinx Vivado:
1. Nạp Source RTL (.v) ──> 2. Đặt chân I/O & Clock (.xdc) ──> 3. Tổng hợp logic (Synthesis)
│
6. Nạp Bitstream lên FPGA <── 5. Xuất file .bit <── 4. Thực thi định tuyến (Place & Route)
- Yêu cầu công cụ: Cài đặt Xilinx Vivado Design Suite phiên bản 2018.x trở lên; kit phần cứng FPGA Xilinx Virtex-7 hoặc tương thích dòng Artix-7/Kintex-7.
- Cấu hình chân và Xung nhịp:
- Khai báo xung clock hệ thống 100 MHz vào chân đầu vào toàn cục
clk.
- Gán chân reset tích cực mức thấp
rst_n.
- Kết nối các đường bus Serial I/O (
0x74 - 0x80) tới các chân ngoại vi vật lý tương ứng trên board.
- Mã mẫu lập trình vi xử lý RISC-V kích hoạt DMA:
# Khởi tạo địa chỉ nguồn, đích và kích thước khối
li x10, 0x00000000 # rs1: Địa chỉ nguồn RAM (0x00)
li x11, 0x00000020 # rd : Địa chỉ đích RAM (0x20)
li x12, 0x00000008 # rs2: Kích thước truyền = 8 words (32 bytes)
# Thực thi lệnh tùy biến dma (Mã hóa Opcode 7'b0100111)
.word 0x00C505A7 # Mã máy tương ứng lệnh: dma x11, x10, x12
# CPU tiếp tục thực thi tác vụ khác ngay lập tức mà không cần chờ DMA
addi x5, x5, 1
Hạn chế và hướng phát triển
Hạn chế kỹ thuật
- Không gian bộ nhớ kiểm thử tích hợp trên SoC hiện tại giới hạn ở mức 128 bytes, phù hợp cho kiểm chứng giải thuật vi kiến trúc nhưng cần bộ điều khiển giao tiếp mở rộng khi kết nối RAM ngoài (DDR3/DDR4).
- Chưa hỗ trợ chế độ truyền phân tán/thu thập (Scatter-Gather DMA) dựa trên danh sách liên kết (Linked-list Descriptors).
- Kiến trúc kênh truyền cố định 4 kênh, chưa có khả năng cấu hình động số lượng kênh theo tham số hóa Generic/Parameter.
Hướng phát triển đề xuất
- Nâng cấp chuẩn giao tiếp kết nối bộ nhớ sang bus tiêu chuẩn công nghiệp AMBA AXI4 / AXI4-Stream 64-bit/128-bit nhằm tăng băng thông truyền khối lên mức Gigabytes/giây.
- Mở rộng tập lệnh để hỗ trợ cấu hình DMA 2 chiều (2D-DMA) và truyền ma trận phục vụ trực tiếp cho các tác vụ tính toán học sâu (Deep Learning Accelerators).
- Tích hợp bộ điều khiển bộ nhớ ngoài SDRAM/DDR Controller để mở rộng không gian địa chỉ lên mức Gigabytes.
Đố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 về quy trình thiết kế phần cứng vi kiến trúc, mở rộng tập lệnh RISC-V và hiện thực bộ điều khiển DMA trên FPGA.
- Kỹ sư thiết kế vi mạch (ASIC/FPGA Engineers): Cung cấp mô hình vi kiến trúc hoàn chỉnh về cơ chế phân xử Round Robin Arbiter phần cứng, kỹ thuật đồng bộ FIFO và xử lý ngắt tích hợp vào Datapath vi xử lý.
- Nhà nghiên cứu SoC mã nguồn mở: Cung cấp giải pháp giao tiếp phần cứng tốc độ cao không bản quyền (Royalty-free) dựa trên kiến trúc tập lệnh mở RISC-V, làm nền tảng phát triển các chip chuyên dụng (ASIC).
Câu hỏi thường gặp
1. Yêu cầu phần cứng và công cụ để triển khai thiết kế này là gì?
Hệ thống yêu cầu máy tính cài đặt phần mềm Xilinx Vivado Design Suite (khuyến nghị phiên bản từ 2018.2 trở lên) hỗ trợ tổng hợp Verilog HDL. Về phần cứng thực nghiệm, thiết kế tương thích với các dòng FPGA Xilinx Virtex-7, Kintex-7, Artix-7 hoặc Zynq-7000 SoC có tài nguyên tối thiểu 5,000 LUTs và hỗ trợ xung nhịp từ 50 MHz – 100 MHz.
2. Giới hạn truyền dữ liệu tối đa của một lệnh dma là bao nhiêu?
Theo thiết kế định dạng R-type của lệnh dma, trường rs2 lưu trữ giá trị thanh ghi 32-bit đại diện cho kích thước khối dữ liệu cần truyền. Về mặt lý thuyết kiến trúc, dung lượng hỗ trợ tối đa cho một lần cấu hình truyền lên tới $2^{32}$ words (tương đương 16 GB dữ liệu), đáp ứng đầy đủ mọi nhu cầu truyền khối lớn trong các hệ thống điện toán.
3. Tại sao thiết kế lại chọn thuật toán Round Robin Arbiter thay vì FIFO hay Độ ưu tiên cố định?
Thuật toán Round Robin phần cứng phân bổ cơ hội truy cập bus đồng đều cho tất cả các kênh, ngăn ngừa triệt để hiện tượng một kênh truyền dung lượng lớn chiếm dụng vĩnh viễn tài nguyên (gây "đói kênh" cho các kênh khác). Khác với phần mềm, Round Robin phần cứng trong đồ án được thiết kế theo cơ chế không ngắt giữa chừng (non-preemptive), giúp tiết kiệm tài nguyên logic và đảm bảo tính liên tục của gói dữ liệu.
4. Cơ chế ngắt phần cứng (Hardware Interrupt) tiết kiệm tài nguyên CPU như thế nào so với Polling?
Trong cơ chế Polling, CPU phải liên tục thực thi các lệnh đọc thanh ghi trạng thái trong vòng lặp kín, chiếm dụng 100% năng lực tính toán của ALU. Với cơ chế Hardware Interrupt trong đồ án, CPU chỉ tốn 1 chu kỳ để phát lệnh dma rồi lập tức chuyển sang thực thi chương trình chính. Khi DMAC truyền xong, tín hiệu dma_interrupt sẽ tự động kích hoạt bộ điều khiển ngắt của CPU để chuyển ngữ cảnh, giải phóng hoàn toàn thời gian chờ cho vi xử lý.
5. Khối Channel Setup Register giải quyết hiện tượng xung đột dữ liệu (Race Condition) ra sao?
Khi CPU phát nhiều lệnh dma liên tiếp trong các chu kỳ liền kề, các giá trị địa chỉ nguồn, đích và độ dài trên bus lệnh sẽ thay đổi liên tục. Nếu một kênh đang chờ cấp phép từ Arbiter mà không có bộ chốt, tham số của nó sẽ bị ghi đè bởi lệnh kế tiếp. Khối Channel Setup Register kết hợp Request Checker sẽ ngay lập tức chốt cố định các tham số này vào thanh ghi nội bộ của kênh ngay tại thời điểm lệnh được giải mã, đảm bảo kênh thực thi chính xác thông số ban đầu khi được cấp phép gnt.
Kết luận
Đề tài "Thiết kế bộ điều khiển truy cập bộ nhớ trực tiếp (DMAC) dựa trên kiến trúc tập lệnh RISC-V 32-bit" của tác giả Lê Phùng Khánh Minh đã giải quyết thành công bài toán nghẽn cổ chai truyền dữ liệu trong hệ vi xử lý đơn chip SoC. Bằng việc sáng tạo bổ sung lệnh mở rộng dma theo định dạng R-type và tích hợp sâu vi kiến trúc DMAC 4 kênh đa chức năng vào Datapath RISC-V, nghiên cứu đã loại bỏ triệt để độ trễ cấu hình qua bus phụ và giảm thiểu 100% thời gian phong tỏa CPU thông qua cơ chế ngắt phần cứng tối ưu.
Kết quả kiểm nghiệm trên nền tảng FPGA Xilinx Virtex-7 khẳng định độ chính xác chức năng, độ tin cậy phần cứng và đạt thông lượng truyền khối 45 MB/s ở tần số 100 MHz. Đây là nền tảng kỹ thuật vững chắc mở ra tiềm năng ứng dụng to lớn trong các hệ thống nhúng SoC mã nguồn mở, bộ xử lý biên IoT và các vi kiến trúc tăng tốc tính toán chuyên dụng trong tương lai.