Bối cảnh và vấn đề nghiên cứu
Mạng nơ-ron tích chập (Convolutional Neural Network - CNN) là một trong những kiến trúc học sâu được ứng dụng rộng rãi trong các bài toán thị giác máy tính như nhận diện khuôn mặt, phân loại hình ảnh, nhận dạng chữ viết tay và xử lý chuỗi video. Theo sự phát triển của lĩnh vực trí tuệ nhân tạo, quy mô và độ phức tạp của các mô hình CNN ngày càng gia tăng đáng kể: từ mạng LeNet-5 đề xuất năm 1998 với 60.000 tham số phục vụ nhận dạng chữ số viết tay đến mạng VGG16 giới thiệu năm 2015 sở hữu tới 143 triệu tham số phục vụ nhận diện vật thể. Sự phình to về mặt tham số khiến việc triển khai CNN trên các nền tảng vi xử lý truyền thống như CPU và GPU gặp phải rào cản lớn về tốc độ tính toán, giới hạn hiệu năng và mức tiêu thụ công suất.
Trong bối cảnh đó, việc triển khai suy luận CNN trên phần cứng FPGA (Field-Programmable Gate Array) nổi lên như một hướng tiếp cận hiệu quả. Nhờ kiến trúc phần cứng xử lý song song ở mức luồng dữ liệu (dataflow) và phần cứng có thể cấu hình linh hoạt, FPGA có khả năng tăng tốc độ xử lý đồng thời giảm đáng kể mức tiêu thụ năng lượng. Các nghiên cứu thực nghiệm được tác giả viện dẫn chỉ ra rằng FPGA có thể tối ưu hóa mức năng lượng tiêu thụ so với CPU và GPU lên đến 49%. Tuy nhiên, việc hiện thực CNN trực tiếp lên FPGA đối mặt với nhiều thách thức kỹ thuật: tài nguyên logic (LUT, Flip-Flop), bộ nhân phần cứng (DSP) và bộ nhớ nội (Block RAM, UltraRAM) trên chip rất hạn chế so với dung lượng bộ nhớ hàng gigabyte trên CPU/GPU; đồng thời, quy trình mô tả phần cứng ở mức truyền chuyển thanh ghi (RTL) đòi hỏi kỹ thuật thiết kế hệ thống phức tạp.
Để giải quyết các thách thức trên, đề tài xác định mục tiêu tổng quát là nghiên cứu, thiết kế và hiện thực các khối chức năng cơ bản trong mạng học sâu có thể tham số hóa trên phần cứng FPGA, tối ưu hóa tài nguyên phần cứng bằng kỹ thuật lượng tử hóa và kiểm chứng trên bài toán phân loại ảnh thực tế. Các nhiệm vụ và mục tiêu cụ thể được xác định bao gồm:
- Thiết kế các khối chức năng chính trong mô hình học sâu (khối tích chập Convolutional, khối gộp Pooling, khối kết nối đầy đủ Fully Connected/Linear) và khối hàm kích hoạt phi tuyến (Sigmoid) bằng ngôn ngữ SystemVerilog. Các khối này phải có khả năng cấu hình tham số linh hoạt trong quá trình tổng hợp (Synthesis) và cho phép nạp lại trọng số sau khi triển khai lên kit FPGA mà không cần biên dịch lại phần cứng.
- Xây dựng mô hình CNN hoàn chỉnh để giải quyết bài toán nhận diện chữ số viết tay trên bộ dữ liệu MNIST với yêu cầu độ chính xác phân loại đạt trên 95%; thực hiện huấn luyện và lượng tử hóa mô hình sang định dạng số nguyên 8-bit (INT8).
- Trích xuất tham số trọng số từ mô hình đã lượng tử hóa, nạp xuống thiết kế phần cứng trên kit FPGA để kiểm tra hoạt động; mục tiêu thiết kế hướng đến tần số hoạt động đạt trên 200 MHz và mức công suất tiêu thụ dưới 10 W.
Đối tượng nghiên cứu của khóa luận là các cấu trúc phần cứng vi mạch tăng tốc học sâu, kỹ thuật lượng tử hóa mô hình từ số chấm động sang số nguyên cố định, và phương thức giao tiếp phần cứng - phần mềm trên kiến trúc hệ thống trên chip (SoC). Phạm vi thực nghiệm tập trung vào bài toán phân loại hình ảnh chữ số viết tay trên bộ dữ liệu chuẩn MNIST, triển khai phần cứng trên kit Xilinx VC707 và nền tảng Kria KV260 Vision AI Starter Kit dựa trên dòng chip Zynq UltraScale+ MPSoC.
Cơ sở lý thuyết và phương pháp
Khung lý thuyết của đề tài được xây dựng dựa trên lý thuyết mạng nơ-ron tích chập và các phương pháp biểu diễn số học trong phần cứng:
- Mô hình tích chập (Convolutional Layer): Thực hiện phép quét bộ lọc (kernel) kích thước nhỏ qua bản đồ đặc trưng (feature map) để trích xuất các đặc trưng không gian.
- Mô hình kết nối đầy đủ (Linear / Fully Connected Layer): Thực hiện biến đổi affine giữa vector đặc trưng đầu vào và ma trận trọng số để phân loại đầu ra.
- Hàm kích hoạt phi tuyến: Khảo sát các hàm kích hoạt (ReLU, Sigmoid), trong đó hàm Sigmoid được tập trung giải quyết trên phần cứng do bản chất phi tuyến phức tạp dựa trên hàm mũ $f(x) = \frac{1}{1 + e^{-x}}$.
- Lý thuyết lượng tử hóa (Quantization): Chuyển đổi dữ liệu và trọng số từ dạng số chấm động 32-bit (FP32) sang số nguyên 8-bit (INT8) theo mô hình toán học ánh xạ biến số liên tục $x \in [\alpha, \beta]$ thành số nguyên $x_q \in [\alpha_q, \beta_q]$ qua hai hệ số: hệ số tỷ lệ ($S$ - Scale) và điểm không ($Z$ - Zero Point):
$$x = (x_q + Z) \times S \quad \Longleftrightarrow \quad x_q = \text{round}\left(\frac{x}{S}\right) - Z$$
Trong thực nghiệm huấn luyện và lượng tử hóa bằng PyTorch, tác giả ghi nhận hệ số $Z$ của các trọng số và tầng mạng luôn bằng 0, từ đó rút gọn biểu thức tính toán tích chập lượng tử hóa thành dạng:
$$O_m = \sum_{i=0}^n \left( f_m[i]q \times K[i]q \right) \times S_k S{fm} + B$$
Điều này cho phép thực hiện toàn bộ phép nhân - cộng tích lũy (MAC) trên miền số nguyên 8-bit, sau đó giải lượng tử hóa (dequantize) với hệ số $S_k \times S{fm}$ ra số thực fixed-point 16/32-bit, cộng giá trị độ lệch (bias), đưa qua hàm kích hoạt và lượng tử hóa (quantize) lại thành 8-bit trước khi truyền sang tầng kế tiếp.
- Phương pháp xấp xỉ hàm Sigmoid bằng giải thuật PLAN (Piecewise Linear Approximation of Nonlinear function): Tác giả tổng hợp, so sánh 5 phương pháp triển khai hàm Sigmoid trên FPGA (Look-up Table, A-law approximation, Alipi and Storti-Gajani, PLAN, Piecewise second-order). Kết quả cho thấy phương pháp PLAN đạt độ sai số cực đại (Maximum error) thấp, chỉ xấp xỉ 0.02 khi dùng định dạng dấu phẩy tĩnh 32-bit (16-bit phần thập phân), đồng thời chỉ tiêu tốn 314 cổng logic (ít hơn đáng kể so với phương pháp LUT tiêu tốn 131.110 cổng). Do đó, phương pháp PLAN được lựa chọn để thiết kế khối Sigmoid.
Phương pháp nghiên cứu thực tế bao gồm:
- Phương pháp thiết kế phần cứng số RTL: Sử dụng ngôn ngữ SystemVerilog để mô tả chi tiết các khối chức năng, tách biệt rõ ràng giữa khối điều khiển (Controller dùng máy trạng thái FSM) và khối đường truyền dữ liệu (Datapath). Thiết kế được tham số hóa toàn diện thông qua các
parameter.
- Phương pháp đồng thiết kế phần cứng - phần mềm (HW/SW Co-design): Ứng dụng mô hình SoC phân chia hệ thống thành Processing System (PS - lõi ARM Cortex chạy hệ điều hành Ubuntu) và Programmable Logic (PL - phần logic FPGA chứa khối gia tốc CNN IP), kết nối đồng bộ dữ liệu thông qua hệ thống bus AXI (AXI-Lite, AXI Memory Map).
- Phương pháp kiểm chứng phần cứng (Verification): Viết testbench chuyên biệt, áp dụng phương pháp luận kiểm thử UVM (Universal Verification Methodology) kết hợp phân tích dạng sóng (waveform) để xác minh độ chính xác chức năng từng khối và toàn hệ thống trước khi nạp bitstream.
Nguồn dữ liệu thực nghiệm: Sử dụng bộ dữ liệu chuẩn MNIST bao gồm các ảnh chữ số viết tay kích thước $28 \times 28 \times 1$ pixel, gồm 10 lớp nhãn từ 0 đến 9, với tập kiểm thử độc lập gồm 10.000 mẫu ảnh.
Thiết kế và triển khai hệ thống kỹ thuật
Kiến trúc tổng thể hệ sinh thái SoC và luồng Vitis Accelerator
Trên nền tảng kit Kria KV260 và vi kiến trúc Zynq UltraScale+ MPSoC, hệ thống được phân định rõ hai thành phần:
- Tầng PS (Processing System): Vi xử lý ARM Cortex chạy hệ điều hành Ubuntu quản lý tầng ứng dụng người dùng (Jupyter Notebook, GStreamer), tầng phần mềm trung gian và tầng nhân hệ điều hành. PS chịu trách nhiệm đọc file metadata
.xclbin, nạp bitstream xuống PL, cấp phát các vùng đệm bộ nhớ trong DRAM và quản lý luồng điều khiển.
- Tầng PL (Programmable Logic): Chứa lõi phần cứng CNN IP tùy biến, thay thế vào vị trí khối Accelerator pipeline trong kiến trúc tham chiếu của Xilinx.
Quy trình giao tiếp giữa PS và PL được chuẩn hóa qua giao thức bus AXI với bản đồ phân vùng địa chỉ (Address Map) rõ ràng:
- Vùng nạp trọng số (
0x0000_0000 trở đi): Nhận dữ liệu trọng số weight_data (độ rộng 64-bit) và địa chỉ trọng số weight_addr (16-bit) khi tín hiệu load_weight tích cực.
- Vùng nạp ảnh đầu vào: Ghi nhận các pixel ảnh vào bus
data_in khi tín hiệu cho phép en ở mức tích cực.
- Thanh ghi cờ trạng thái (
0xFFFF_FFEF): Chứa bit cờ thông báo dữ liệu đầu ra đã hoàn tất xử lý (valid = 1).
- Thanh ghi kết quả (
0xFFFF_FFF0 đến 0xFFFF_FFFF): Chứa dữ liệu đầu ra 8-bit data_out sau khi mô hình hoàn thành quá trình suy luận.
| Tên cổng (Port) |
Hướng |
Độ rộng / Định dạng |
Mô tả chức năng |
clk |
Vào (I) |
1 bit |
Tín hiệu xung nhịp đồng hồ hệ thống |
rst |
Vào (I) |
1 bit |
Tín hiệu thiết lập lại (reset) đồng bộ tích cực mức cao |
load_weight |
Vào (I) |
1 bit |
Tín hiệu điều khiển cho phép nạp trọng số |
weight_addr |
Vào (I) |
16 bit |
Địa chỉ lưu trữ của trọng số trong bộ nhớ nội |
weight_data |
Vào (I) |
64 bit |
Dữ liệu giá trị trọng số nạp vào |
en |
Vào (I) |
1 bit |
Tín hiệu cho phép bắt đầu nạp ảnh và kích hoạt tính toán |
data_in |
Vào (I) |
8 * pIN_CHANNEL bit |
Dữ liệu điểm ảnh đầu vào theo số kênh cấu hình |
valid |
Ra (O) |
1 bit |
Cờ thông báo kết quả suy luận tại đầu ra đã sẵn sàng |
data_out |
Ra (O) |
8 bit |
Dữ liệu nhãn phân loại hoặc kết quả đặc trưng đầu ra |
Cơ chế sinh mã tự động qua cấu hình JSON
Nhóm tác giả xây dựng công cụ phần mềm tự động hóa việc tạo module mức đỉnh (top-level) cho mạng CNN bằng cách phân tích file cấu hình định dạng JSON. Cấu trúc JSON bao gồm các trường:
- Thông số toàn cục:
name (tên mạng), data_width (độ rộng dữ liệu, 8-bit), img_width (chiều rộng ảnh), img_height (chiều cao ảnh), img_channel (số kênh màu đầu vào, 1 cho ảnh xám, 3 cho ảnh RGB).
- Mô tả các tầng (
layers): Định nghĩa tuần tự các tầng convi, pool, fc kèm tham số vận hành như fifo_depth (độ sâu hàng đợi FIFO đệm giữa các tầng), kernel_size, stride, padding, output_parallel, activation và pooling_type.
Tối ưu hóa đơn vị tính toán DSP48E2
Phép nhân là thành phần tiêu tốn nhiều diện tích và năng lượng nhất trên FPGA. Tác giả đã tận dụng hard-macro DSP48E2 trên chip Xilinx (vốn có bộ nhân $27 \times 18$ bit) để thực hiện kỹ thuật SIMD nhân đôi: tính toán đồng thời hai phép nhân 8-bit ($a \times c$ và $b \times c$) trên cùng một khối DSP đơn lẻ.
Quy trình thực hiện bao gồm:
- Dịch trái toán tử 8-bit $a$ đi 18 bit để tạo chuỗi 26-bit:
26'b{a, 18'b0} đưa vào cổng $A$ của DSP.
- Mở rộng dấu 19 bit cho toán tử 8-bit $b$:
27'b{{19{b[7]}}, b} đưa vào cổng $D$ của DSP.
- Thực hiện phép cộng $A + D$ bên trong khối pre-adder của DSP, sau đó nhân kết quả với toán tử 8-bit $c$ đưa vào cổng $B$.
- Ngõ ra tích số 34-bit của DSP được tách bit để trích xuất đồng thời kết quả của hai phép tính $a \times c$ và $b \times c$.
Nhờ giải pháp này, một DSP có thể tính toán song song giá trị từ 1 kênh đầu vào nhân với 2 bộ trọng số kernel để tạo ra 2 kênh đầu ra, giúp cắt giảm 50% số lượng hard-macro DSP cần thiết so với kiến trúc nhân thông thường.
Nội dung chính theo từng chương
Chương 1. Tìm hiểu tổng quan
Chương 1 trình bày tổng quan về mạng nơ-ron tích chập (CNN), sự bùng nổ của các mô hình học sâu và so sánh định tính, định lượng giữa các nền tảng thực thi (CPU, GPU, FPGA). Tác giả dẫn chứng mạng LeNet-5 (1998) với 60.000 tham số và mạng VGG16 (2015) với 143 triệu tham số để làm nổi bật áp lực tính toán của các mô hình hiện đại. Từ các nghiên cứu thực nghiệm cho thấy FPGA có thể tiết kiệm tới 49% năng lượng so với CPU/GPU, chương này xác định tính cấp thiết của đề tài. Tác giả thiết lập mục tiêu thiết kế các khối phần cứng tham số hóa (Convolutional, Pooling, Fully Connected, Sigmoid) có thể tái nạp trọng số, xây dựng mô hình CNN cho bài toán chữ viết tay MNIST đạt độ chính xác trên 95%, tối ưu hóa bằng lượng tử hóa 8-bit, và hiện thực trên kit phần cứng đạt tần số trên 200 MHz với công suất tiêu thụ dưới 10 W.
Chương 2. Mô hình thiết kế
Chương 2 tập trung phân tích nền tảng phần cứng SoC và đề xuất kiến trúc hệ thống tổng thể. Tác giả khảo sát kiến trúc dòng chip Zynq UltraScale+ MPSoC và ba hướng tiếp cận phát triển trên kit Kria KV260: Vitis Accelerator, Vitis Platform và Vivado Extensible design. Căn cứ vào cây quyết định phát triển, nhóm chọn hướng tiếp cận Vitis Accelerator nhằm tận dụng nền tảng có sẵn và tập trung toàn bộ nguồn lực vào thiết kế phần cứng CNN IP trong PL. Kiến trúc phần mềm phân tầng trên PS (gồm tầng ứng dụng, tầng phần mềm trung gian và tầng nhân Ubuntu) được làm rõ cùng quy trình đồng bộ bộ đệm qua file siêu dữ liệu .xclbin.
Về phía phần cứng, chương này chi tiết hóa bản đồ phân vùng địa chỉ AXI, cấu trúc các tín hiệu ngõ vào/ngõ ra của IP CNN và mô hình mạng nơ-ron cụ thể cho bài toán MNIST:
- Tầng đầu vào: Ảnh $28 \times 28 \times 1$.
- Tầng Conv1: Bộ lọc $3 \times 3$, 32 kênh đầu ra, đưa ra kích thước $28 \times 28 \times 32$.
- Tầng Conv2: Bộ lọc $3 \times 3$, 32 kênh đầu ra, đệm padding = 1, đưa ra kích thước $28 \times 28 \times 32$.
- Tầng Pooling: Kích thước $2 \times 2$, bước nhảy stride = 2, giảm kích thước xuống $14 \times 14 \times 32$.
- Tầng Fully Connected 1 (FC1): Nhận $14 \times 14 \times 32 = 6.272$ nút, kết nối tới 128 nút đầu ra. Khóa luận loại bỏ khối Flatten phần cứng trung gian để tiết kiệm chu kỳ, dữ liệu được truyền thẳng vào khối FC.
- Tầng Fully Connected 2 (FC2): Nhận 128 nút, kết nối tới 10 nút đầu ra tương ứng 10 chữ số phân loại.
Cuối chương, tác giả giới thiệu định dạng file JSON dùng để cấu hình tự động toàn bộ tham số của mạng.
Chương 3. Hiện thực thiết kế
Chương 3 là phần trọng tâm kỹ thuật của khóa luận, mô tả chi tiết nguyên lý lượng tử hóa và hiện thực mạch số cho từng khối thành phần:
- Kỹ thuật lượng tử hóa: Phân tích ba giải pháp lượng tử hóa chính: Dynamic Quantization, Static Quantization (Post-Training Quantization) và Quantization Aware Training (QAT). Nhóm tác giả lựa chọn Static Quantization vì tính đơn giản trong triển khai, tối ưu diện tích phần cứng và duy trì độ chính xác cao. Quy trình lượng tử hóa được mô hình hóa qua chuỗi biến đổi: dequantize dữ liệu đầu vào thành fixed-point, tính toán nhân cộng, cộng bias, phi tuyến hóa qua hàm kích hoạt và quantize ngược lại 8-bit.
- Khối tích chập (
conv): Bao gồm ba khối con chính:
cnn_controller: Quản lý bộ đếm hàng/cột (row_cntr, col_cntr), sinh tín hiệu is_padding để chèn điểm ảnh 0 xung quanh khi pPADDING = 1, tạo tín hiệu đọc FIFO (rd_en) và điều khiển máy trạng thái pe FSM.
cnn_buffer: Xây dựng bằng hệ thống các thanh ghi dịch (shift register line buffer) nhằm chuyển đổi luồng dữ liệu 1D từ FIFO thành ma trận 2D tương ứng kích thước kernel $3 \times 3$, tránh việc phải lưu toàn bộ bức ảnh vào bộ nhớ nội.
pe_conv_mac: Đơn vị xử lý tính toán gồm pe_conv_mac_buffer_in, pe_conv_mac_datapath, pe_conv_mac_controller và pe_conv_mac_buffer_out. Datapath tích hợp bộ nhân đôi trên DSP48E2, cây cộng pipeline Adder Tree, bộ nhớ trọng số Kernel RAM (ưu tiên dùng UltraRAM/Block RAM) và Bias RAM (lưu trong LUTRAM). Thiết kế tích hợp tham số song song hóa pOUTPUT_PARALLEL giúp người dùng chủ động cân bằng giữa tài nguyên phần cứng và tốc độ xử lý.
- Khối gộp (
pooling): Thiết kế tương tự khối tích chập nhưng thay thế khối MAC bằng kiến trúc cây so sánh cực đại (max tree) hoặc cực tiểu (min tree). Khối hỗ trợ xử lý song song toàn bộ kênh $pCHANNEL$ đồng thời do tài nguyên cho các bộ so sánh logic chiếm tỷ lệ không đáng kể.
- Khối kết nối đầy đủ (
linear): Nhận vector một chiều, gồm linear_controller và pe_linear_mac. Để tối ưu thời gian chờ đợi (thay vì phải đợi đủ $14 \times 14$ chu kỳ từ tầng tích chập), khối linear cho phép tính toán cộng dồn trực tiếp các giá trị đầu vào ngay khi từng điểm ảnh sẵn sàng từ tầng trước. Khối cũng hỗ trợ tham số pOUTPUT_PARALLEL để tiết giảm số lượng DSP.
- Khối hàm kích hoạt Sigmoid: Trình bày chi tiết công thức toán học và bảng so sánh các giải pháp xấp xỉ phần cứng. Giải thuật PLAN được chọn và thiết kế bằng mạch số với độ sai số cực đại chỉ 0.02, không gây gợn sóng sai số khi chạy ở định dạng fixed-point 32-bit (16-bit thập phân).
Chương 4. Kiểm tra và đánh giá thiết kế
Chương 4 trình bày quy trình kiểm chứng và đánh giá thực nghiệm phần cứng:
- Xây dựng môi trường xác minh chức năng UVM (Universal Verification Methodology) kết hợp xuất và phân tích giản đồ dạng sóng (waveform) để đảm bảo tính đúng đắn về mặt thời gian và logic chuyển trạng thái của các bus điều khiển (
valid, en, ready, is_padding, load_weight).
- Kiểm tra độc lập sai số của khối phần cứng Sigmoid PLAN đối chiếu với đường đặc tuyến toán học lý thuyết.
- Kiểm tra toàn diện chu trình xử lý của mô hình CNN trên 10.000 mẫu ảnh kiểm thử thuộc tập dữ liệu MNIST. Toàn bộ trọng số lượng tử hóa được nạp vào phần cứng thông qua file nhị phân và đối soát kết quả đầu ra với mô hình mô phỏng phần mềm.
Chương 5. Khó khăn gặp phải và Hướng phát triển
Chương 5 đúc kết các vấn đề kỹ thuật phát sinh trong quá trình thiết kế:
- Thách thức về giới hạn tài nguyên bộ nhớ cục bộ trên chip (Block RAM, UltraRAM) khi phải lưu trữ khối lượng lớn trọng số và đặc trưng trung gian.
- Khó khăn trong việc cân bằng băng thông giao tiếp giữa hệ thống vi xử lý PS và logic khả trình PL qua bus AXI, cũng như việc đồng bộ hóa dữ liệu pipeline giữa các khối có tốc độ xử lý khác nhau.
- Hướng phát triển được nhóm xác định gồm: tiếp tục mở rộng mô hình để hỗ trợ các bài toán phức tạp hơn với các tập dữ liệu đa chiều, tối ưu hóa hơn nữa cấu trúc pipeline nhằm đẩy xung nhịp làm việc lên cao hơn và xây dựng trình biên dịch tự động ánh xạ từ các mô hình định dạng ONNX/PyTorch trực tiếp sang mã SystemVerilog.
Kết quả và đóng góp
Khóa luận đạt được các kết quả thực nghiệm định lượng cụ thể sau quá trình tối ưu hóa, lượng tử hóa và hiện thực phần cứng:
| Chỉ số / Đặc tính |
Mô hình dấu phẩy động (FP32) |
Mô hình lượng tử hóa (INT8) |
Mức độ tối ưu / Thay đổi |
| Nền tảng thực thi |
CPU |
Kit FPGA VC707 |
Chuyển đổi phần cứng nhúng |
| Kích thước lưu trữ trọng số |
3.10 MB |
802 KB |
Giảm xấp xỉ 74.1% dung lượng |
| Độ chính xác trên tập kiểm thử MNIST |
97.85% |
97.58% |
Độ suy giảm chỉ 0.27% |
| Tần số hoạt động phần cứng |
- |
200 MHz |
Đạt mục tiêu đề ra ($\ge 200\text{ MHz}$) |
| Công suất tiêu thụ hệ thống |
- |
~5 W (theo văn bản: 5.) |
Đạt mục tiêu đề ra ($< 10\text{ W}$) |
| Số lượng trường hợp kiểm thử (test case) |
10.000 ảnh |
10.000 ảnh |
Độ chính xác phần cứng đạt 97.58% |
Các đóng góp chính của đề tài được nhóm tác giả tự xác định bao gồm:
- Xây dựng bộ thư viện IP Core CNN tham số hóa bằng SystemVerilog: Toàn bộ các khối tích chập, pooling, linear, hàm kích hoạt Sigmoid đều được tham số hóa toàn diện thông qua các
parameter, cho phép người dùng tùy biến kích thước kernel, padding, stride, độ sâu FIFO, kênh đầu vào/đầu ra và đặc biệt là hệ số song song pOUTPUT_PARALLEL nhằm kiểm soát chính xác lượng tài nguyên DSP/BRAM theo từng dòng chip FPGA cụ thể.
- Kỹ thuật tối ưu hóa phần cứng DSP48E2: Đề xuất và triển khai thành công cấu trúc ghép đôi phép tính 8-bit trên một bộ nhân $27 \times 18$ của DSP48E2, giúp cắt giảm 50% số lượng hard-macro DSP cần dùng trong các tầng tích chập và tuyến tính.
- Hiện thực hàm Sigmoid tối ưu bằng giải pháp PLAN: Ứng dụng giải thuật xấp xỉ tuyến tính từng đoạn PLAN, đạt sai số cực tiểu (0.02) trên định dạng fixed-point 32-bit với chi phí diện tích chỉ 314 cổng logic, khắc phục hoàn toàn điểm nghẽn tiêu tốn tài nguyên của bảng tra LUT thông thường.
- Tự động hóa luồng thiết kế: Xây dựng công cụ chuyển đổi tự động từ file mô tả kiến trúc JSON sang file top-level RTL hoàn chỉnh, rút ngắn thời gian tích hợp hệ thống.
- Hỗ trợ nạp trọng số run-time: Thiết kế kiến trúc nạp trọng số linh hoạt qua bus AXI và bộ nhớ nội BRAM/UltraRAM, cho phép tái cấu hình tham số mạng mà không cần phải trải qua bước tổng hợp (Synthesis) lại phần cứng.
Hạn chế và hướng nghiên cứu tiếp
Căn cứ trên các nội dung được nhóm tác giả phân tích và giới hạn thực nghiệm trong văn bản, khóa luận tồn tại các hạn chế kỹ thuật sau:
- Phạm vi tập dữ liệu và độ phức tạp mô hình: Thiết kế mới chỉ được kiểm chứng trên bài toán nhận dạng chữ số viết tay của bộ dữ liệu MNIST với ảnh xám kích thước nhỏ ($28 \times 28 \times 1$) và cấu trúc mạng tương đối nông (2 tầng Conv, 1 tầng Pool, 2 tầng FC). Thiết kế chưa được thử nghiệm trên các tập dữ liệu thị giác phức tạp (như CIFAR-10, ImageNet) hoặc các kiến trúc mạng hiện đại có kết nối tắt (residual connections).
- Hạn chế về băng thông truyền dữ liệu: Quy trình nạp trọng số xuống Block RAM/UltraRAM qua bus AXI vẫn diễn ra tuần tự từ bộ nhớ PS, dẫn đến thời gian khởi tạo ban đầu phụ thuộc vào xung nhịp bus và dung lượng tham số.
- Tính phụ thuộc của bộ đệm FIFO: Việc đệm dữ liệu giữa các tầng dựa vào các khối FIFO có độ sâu cố định (
fifo_depth), đòi hỏi người thiết kế phải tính toán thủ công độ sâu phù hợp cho từng tầng để tránh hiện tượng tràn bộ đệm (overflow) hoặc nghẽn dòng dữ liệu khi mở rộng quy mô mạng.
Các hướng phát triển tiếp theo được đề xuất trong tài liệu:
- Mở rộng hỗ trợ các cấu trúc mạng nơ-ron học sâu phức tạp hơn, phục vụ các bài toán phát hiện đối tượng và phân đoạn hình ảnh thời gian thực.
- Tối ưu hóa đường truyền dữ liệu bằng cách tích hợp các bộ điều khiển truy cập bộ nhớ trực tiếp (DMA - Direct Memory Access) tốc độ cao thông qua giao thức AXI Stream để tăng tốc độ nạp ảnh và trích xuất kết quả.
- Hoàn thiện công cụ tự động hóa để có thể phân tích trực tiếp các định dạng mô hình tiêu chuẩn công nghiệp (như ONNX hoặc PyTorch state_dict) sang file cấu hình JSON và sinh tự động toàn bộ mã kết nối phần cứng.
Giá trị tham khảo
Khóa luận là tài liệu tham khảo có giá trị kỹ thuật đối với:
- Sinh viên và học viên cao học ngành Kỹ thuật Máy tính, Thiết kế Vi mạch và Hệ thống nhúng: Cung cấp tài liệu tham khảo chi tiết về quy trình mô tả phần cứng bằng SystemVerilog cho các giải thuật tính toán song song, kỹ thuật phân chia khối đường truyền dữ liệu (Datapath) và khối điều khiển (Controller FSM).
- Kỹ sư phát triển phần cứng tăng tốc AI (Hardware Acceleration Engineers): Cung cấp các giải pháp thiết kế thực tế gồm:
- Phương pháp tận dụng bộ nhân phần cứng DSP48E2 để nhân đôi thông lượng xử lý số nguyên 8-bit.
- Thiết kế bộ đệm dòng (line buffer) dạng thanh ghi dịch để trích xuất cửa sổ điểm ảnh 2D từ luồng dữ liệu 1D.
- Phương pháp xấp xỉ hàm kích hoạt phi tuyến (Sigmoid) trên FPGA bằng giải thuật PLAN nhằm tiết kiệm tài nguyên logic.
- Quy trình đồng thiết kế phần cứng - phần mềm trên dòng chip Xilinx Zynq UltraScale+ MPSoC qua luồng công cụ Vitis Accelerator.
Câu hỏi thường gặp
1. Khóa luận sử dụng kỹ thuật lượng tử hóa nào và tại sao lại lựa chọn kỹ thuật đó?
Tác giả khảo sát ba phương pháp: Dynamic Quantization, Static Quantization (Post-Training Quantization) và Quantization Aware Training (QAT). Phương pháp Static Quantization được lựa chọn vì quy trình triển khai đơn giản, hệ số tỷ lệ Scale ($S$) và điểm không ($Z$) được tính toán cố định trước cho từng tầng, giúp giảm đáng kể kích thước trọng số và số lượng phép tính phức tạp mà vẫn duy trì độ chính xác cao cho mô hình (độ suy giảm chỉ 0.27% trên tập MNIST).
2. Kỹ thuật nhân đôi hiệu năng trên khối DSP48E2 được tác giả hiện thực như thế nào?
Khối DSP48E2 tích hợp bộ nhân $27 \times 18$ bit. Tác giả tận dụng đặc điểm dữ liệu đầu vào chỉ có 8-bit để ghép hai phép nhân $a \times c$ và $b \times c$ vào một DSP duy nhất: biến $a$ được dịch trái 18 bit (26'b{a, 18'b0}) đưa vào cổng $A$, biến $b$ được mở rộng dấu (27'b{{19{b[7]}}, b}) đưa vào cổng $D$, sau đó khối pre-adder thực hiện phép cộng $(A+D)$ rồi nhân với hệ số $c$ tại cổng $B$. Kết quả ngõ ra 34-bit được tách thành hai phần tương ứng với hai tích số, giúp giảm 50% số lượng DSP cần dùng cho các tầng mạng.
3. Tại sao tác giả chọn giải pháp PLAN để thiết kế khối hàm kích hoạt Sigmoid thay vì dùng bảng tra LUT?
Phương pháp bảng tra (Look-up Table - LUT) tiêu tốn tới 131.110 cổng logic trên FPGA, gây lãng phí tài nguyên chip. Trong khi đó, giải thuật PLAN (Piecewise Linear Approximation) chỉ tiêu tốn 314 cổng logic, đạt sai số cực đại xấp xỉ 0.02 khi sử dụng dữ liệu fixed-point 32-bit (với 16-bit phần thập phân), tạo ra đường cong sai số mượt và không bị dao động sóng, cân bằng tối ưu giữa độ chính xác và diện tích phần cứng.
4. Dữ liệu và trọng số được phân vùng địa chỉ và giao tiếp qua bus AXI giữa PS và PL như thế nào?
Hệ thống sử dụng bus AXI chia thành 4 phân vùng địa chỉ cụ thể: vùng từ 0x0000_0000 dùng để nạp trọng số vào bộ nhớ nội BRAM/UltraRAM (hỗ trợ dữ liệu 64-bit, địa chỉ 16-bit qua tín hiệu load_weight); vùng nạp ảnh đầu vào kích hoạt qua tín hiệu en; thanh ghi 0xFFFF_FFEF chứa bit cờ báo trạng thái kết quả đầu ra sẵn sàng (valid = 1); và vùng 0xFFFF_FFF0 đến 0xFFFF_FFFF chứa dữ liệu nhãn đầu ra 8-bit data_out.
5. Kết quả thực nghiệm của thiết kế khi triển khai thực tế trên kit FPGA VC707 đạt được những chỉ số nào?
Sau khi lượng tử hóa sang INT8, mô hình CNN chạy ổn định ở tần số xung nhịp 200 MHz trên kit FPGA VC707, công suất tiêu thụ của hệ thống đạt xấp xỉ 5 W (đáp ứng mục tiêu ban đầu đặt ra là dưới 10 W), dung lượng trọng số giảm từ 3.10 MB xuống còn 802 KB (giảm 74.1%), và độ chính xác phân loại trên 10.000 mẫu ảnh kiểm thử của bộ dữ liệu MNIST đạt 97.58%.
Kết luận
Khóa luận tốt nghiệp của sinh viên Lê Hoàng Minh và Nguyễn Trần Trí Thức đã hoàn thành việc nghiên cứu, thiết kế và hiện thực thành công hệ thống tăng tốc mạng nơ-ron tích chập (CNN) trên nền tảng FPGA bằng ngôn ngữ SystemVerilog. Thông qua việc áp dụng kỹ thuật lượng tử hóa tĩnh 8-bit (Static Quantization), tối ưu hóa cấu trúc bộ nhân trên DSP48E2 và ứng dụng giải thuật PLAN cho hàm Sigmoid, hệ thống đã giải quyết hiệu quả bài toán giới hạn tài nguyên phần cứng trên vi mạch. Kết quả thử nghiệm trên kit FPGA VC707 với bài toán phân loại chữ số viết tay MNIST đạt độ chính xác 97.58% tại tần số 200 MHz với mức tiêu thụ năng lượng tối ưu xấp xỉ 5 W, khẳng định tính đúng đắn và khả thi của kiến trúc đề xuất.