Giới thiệu dự án

Trong kỷ nguyên bùng nổ của trí tuệ nhân tạo (Artificial Intelligence - AI) và thị giác máy tính, nhu cầu triển khai các mô hình học sâu (Deep Learning) trên các thiết bị nhúng tại biên (Edge Devices) đang gia tăng mạnh mẽ. Mặc dù các bộ xử lý đồ họa (GPU) và bộ xử lý trung tâm (CPU) mang lại hiệu năng tính toán cao trong giai đoạn huấn luyện, chúng lại tiêu thụ mức năng lượng lớn và thiếu tính tiền định về độ trễ (deterministic latency) khi triển khai thực tế. Công nghệ vi mạch lập trình được dạng mảng phần tử logic (Field Programmable Gate Array - FPGA) nổi lên như một giải pháp phần cứng tối ưu nhờ khả năng tính toán song song ở mức phần cứng, mức tiêu thụ năng lượng thấp và tính linh hoạt trong cấu hình vi kiến trúc.

Đồ án tốt nghiệp đại học "Thiết kế Neural Network trên FPGA để nhận dạng chữ số viết tay" (Đặng Tùng Long, Trường Đại học Bách khoa Hà Nội) giải quyết bài toán cốt lõi: tối ưu hóa và hiện thực hóa một mạng neuron nhân tạo (Artificial Neural Network - ANN) hoàn chỉnh trên nền tảng phần cứng FPGA Altera Cyclone II (Kit DE2 - EP2C35F672C6) nhằm nhận dạng tập dữ liệu chữ số viết tay chuẩn MNIST với độ chính xác cao và tài nguyên phần cứng tối thiểu.

                    KIẾN TRÚC TỔNG THỂ HỆ THỐNG
+------------------------------------------------------------------+
|                     OFFLINE PHASE (MATLAB)                       |
|  [MNIST 28x28] -> [Flatten 784] -> [Mapminmax] -> [Remove Rows]  |
|                                                          |       |
|                                                          v       |
|  [Weights/Biases] <- [Backprop Training] <- [Vector 717x1]       |
+------------------------------------------------------------------+
                               | (Fixed-Point 16-bit Quantization)
                               v
+------------------------------------------------------------------+
|                     HARDWARE PHASE (FPGA DE2)                    |
|  +------------------------------------------------------------+  |
|  | Single Port RAM (Inputs: 717, Weights & Biases: 10,930)    |  |
|  +------------------------------------------------------------+  |
|                               |                                  |
|                               v                                  |
|  +---------------------+             +----------------------+    |
|  | Control Path (FSM)  | <=========> | Data Path (MAC Unit, |    |
|  | State Machine       |   Signals   | Linearized Tansig)   |    |
|  +---------------------+             +----------------------+    |
|                               |                                  |
|                               v                                  |
|                     [One-Hot Output: 10-bit]                     |
+------------------------------------------------------------------+

Mục tiêu kỹ thuật của đồ án

  1. Thiết kế và tối ưu topo mạng trên MATLAB: Nghiên cứu, huấn luyện và cắt giảm quy mô mạng (pruning) từ 100 neuron ẩn xuống 15 neuron ẩn nhằm đạt kích thước nhỏ nhất nhưng vẫn đảm bảo độ chính xác nhận dạng trên tập kiểm tra MNIST vượt ngưỡng 90%.
  2. Kỹ thuật tiền xử lý dữ liệu giảm số chiều: Rút gọn vector đầu vào từ 784 điểm ảnh xuống 717 điểm ảnh thông qua thuật toán loại bỏ các hàng hằng số không mang thông tin phân lớp.
  3. Hiện thực hóa vi kiến trúc FSMD trên FPGA: Chuyển đổi mô hình toán học sang kiến trúc phần cứng RTL (Register Transfer Level) bằng ngôn ngữ SystemVerilog theo mô hình Máy trạng thái kết hợp Luồng dữ liệu (Finite State Machine with Datapath - FSMD).
  4. Tuyến tính hóa hàm kích hoạt phi tuyến: Xây dựng thuật toán xấp xỉ tuyến tính từng đoạn cho hàm Sigmoid Tangent Hyperbolic (tansig) nhằm thay thế phép tính hàm mũ phức tạp trên FPGA.
  5. Kiểm chứng toàn diện (Verification): Xây dựng môi trường kiểm chứng phân lớp (Layered Testbench) trên QuestaSim/ModelSim, đạt độ bao phủ chức năng (Functional Coverage) 100% trên toàn bộ 10,000 ảnh kiểm tra của tập MNIST.

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

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

Triển khai mạng nơ-ron trên phần cứng đòi hỏi sự cân bằng giữa độ chính xác nhận dạng, thông lượng xử lý và tài nguyên logic (Logic Elements, Block RAM, DSP).

Tiêu chí Vi điều khiển (MCU / ARM Cortex-M) GPU Nhúng (Nvidia Jetson) ASIC Chuyên dụng (TPU/NPU) Bộ tăng tốc FPGA (Đồ án đề xuất)
Kiến trúc xử lý Tuần tự lệnh (Von Neumann) Song song luồng dữ liệu (SIMT) Mạch phần cứng cố định Song song mức phần cứng (RTL Pipeline)
Độ trễ (Latency) Cao (Vài chục ms/ảnh) Trung bình (Biến thiên theo OS) Cực thấp (<1 ms) Rất thấp & Tiền định hoàn toàn
Tiêu thụ điện năng Rất thấp (< 1W) Cao (5W - 15W) Tối ưu (< 2W) Thấp (1W - 2.5W)
Khả năng tái cấu hình Chỉ thay đổi firmware Cập nhật software Không thể thay đổi Tái lập trình linh hoạt
Chi phí triển khai Rất thấp Cao Rất cao (NRE lớn) Trung bình, phù hợp thử nghiệm

Phân tích yêu cầu hệ thống theo mô hình MoSCoW

  • Must Have: Kiến trúc mạng nơ-ron 3 lớp ($717 \to 15 \to 10$); định dạng số học dấu phẩy tĩnh (Fixed-point 16-bit); độ chính xác kiểm tra $> 90%$; mã nguồn SystemVerilog tổng hợp được (Synthesizable).
  • Should Have: Hàm kích hoạt tansig tuyến tính hóa tối ưu tài nguyên LUT; bộ nhớ RAM tích hợp chứa trọng số và dữ liệu đầu vào; tín hiệu điều khiển chuẩn handshake (start, done).
  • Could Have: Khả năng nhận dạng theo thời gian thực kết hợp module hiển thị LED 7 đoạn / VGA.
  • Won't Have: Huấn luyện trực tiếp trên chip (On-chip training/Backpropagation); hỗ trợ dấu phẩy động 32-bit (Single-precision Floating-point).

Thiết kế hệ thống phần cứng

Hệ thống nhận dạng được thiết kế dạng module cấp cao (Design Under Test - DUT) với các giao tiếp I/O chuẩn:

                    SƠ ĐỒ CHÂN GIAO TIẾP CỦA DUT
                      +----------------------+
       clk ---------->|                      |
     rst_n ---------->|                      |
     start ---------->|                      |----------> digit [9:0]
        we ---------->|         DUT          |----------> done
 wr_addr [13:0] ----->|                      |
 wr_data [15:0] ----->|                      |
                      +----------------------+

Bảng đặc tả tín hiệu giao tiếp phần cứng (DUT I/O Interface)

Tín hiệu Hướng (I/O) Độ rộng (bit) Chức năng kỹ thuật
clk Input 1 Xung nhịp đồng bộ hệ thống (50 MHz trên kit DE2)
rst_n Input 1 Tín hiệu reset bất đồng bộ, tích cực mức thấp (Active-low)
start Input 1 Tín hiệu kích hoạt chu trình nhận dạng (xung 1 chu kỳ clk)
we Input 1 Cho phép ghi dữ liệu ảnh/trọng số vào bộ nhớ RAM (we = 1)
wr_addr Input 14 Địa chỉ ghi dữ liệu vào bộ nhớ nội (0x0000 đến 0x2AAA)
wr_data Input 16 Dữ liệu dấu phẩy tĩnh 16-bit ghi vào bộ nhớ
digit Output 10 Kết quả nhận dạng dạng mã hóa One-hot vector
done Output 1 Cờ báo hiệu chu trình nhận dạng hoàn tất

Kiến trúc FSMD (Finite State Machine with Datapath)

DUT được phân rã thành hai khối chính:

  1. Khối Data Path (ann_dp): Chứa các thanh ghi dữ liệu, bộ nhân-cộng tích lũy (MAC - Multiply-Accumulate), khối tính hàm kích hoạt tuyến tính hóa và khối so sánh tìm giá trị cực đại (Hardmax logic).
  2. Khối Control Path (ann_fsm): Máy trạng thái hữu hạn điều khiển thứ tự đọc vector đặc trưng $K$, nhân ma trận trọng số $W_2, W_3$, cộng bias $B_2, B_3$, chuyển đổi kích hoạt và chốt kết quả ra digit.
                  KIẾN TRÚC FSMD CHI TIẾT CỦA KHỐI ANN
+-------------------------------------------------------------------+
|                            ann (Top-level)                        |
|                                                                   |
|   +-------------------+                     +-----------------+   |
|   |                   |--- control_sigs --->|                 |   |
|   |     ann_fsm       |                     |     ann_dp      |   |
|   |  (Control Path)   |<-- internal_status -|   (Data Path)   |   |
|   |                   |                     |                 |   |
|   +-------------------+                     +-----------------+   |
|             ^                                        ^            |
|             |                                        |            |
|             +-------------------+--------------------+            |
|                                 |                                 |
|                                 v                                 |
|            +------------------------------------------+           |
|            |       single_port_ram_with_init          |           |
|            | (Lưu trữ ảnh 717, Weights, Biases)       |           |
|            +------------------------------------------+           |
+-------------------------------------------------------------------+

Implementation và kết quả

Development process

1. Xử lý dữ liệu và tối ưu mô hình trên MATLAB

Mô hình toán học của mạng neuron 3 lớp được thiết lập như sau:

  • Lớp đầu vào: Vector $K \in \mathbb{R}^{717 \times 1}$ (thu được sau khi chuẩn hóa 784 điểm ảnh về $[-1, 1]$ qua mapminmax và loại bỏ 67 hàng có giá trị bất biến trên 60,000 mẫu).
  • Lớp ẩn: 15 neuron. Vector đầu vào lớp ẩn $Z_2 = W_2 \cdot K + B_2$, với $W_2 \in \mathbb{R}^{15 \times 717}$ và $B_2 \in \mathbb{R}^{15 \times 1}$. Hàm kích hoạt tansig: $$a_i^2 = \text{tansig}(z_i^2) = \frac{2}{1 + e^{-2z_i^2}} - 1$$
  • Lớp đầu ra: 10 neuron (tương ứng các chữ số từ 0 đến 9). $Z_3 = W_3 \cdot A_2 + B_3$, với $W_3 \in \mathbb{R}^{10 \times 15}$ và $B_3 \in \mathbb{R}^{10 \times 1}$. Đầu ra nhận dạng được phân lớp thông qua hàm softmax trên MATLAB và chuyển đổi thành hardmax (One-hot) trên FPGA: $$\text{digit} = \arg\max_{i} (a_i^3)$$

Quá trình huấn luyện sử dụng thuật toán lan truyền ngược (Backpropagation) kết hợp tối ưu Gradient Descent. Dữ liệu 60,000 mẫu được chia theo tỷ lệ: 70% Training set (42,000 ảnh), 15% Validation set (9,000 ảnh)15% Test set (9,000 ảnh). Quá trình huấn luyện hội tụ tối ưu tại Epoch thứ 147 (dừng ở epoch 153 để chống Overfitting).

% Đoạn mã rút trích đặc trưng và forward pass trên MATLAB
function [digit_out] = forward_pass(image_28x28, W2, B2, W3, B3, remove_idx)
    % 1. Chuyển ma trận 28x28 thành vector cột 784x1
    raw_vec = double(reshape(image_28x28', 784, 1)) / 255.0;
    % 2. Chuẩn hóa về dải [-1, 1]
    norm_vec = 2 * (raw_vec - 0) / (1 - 0) - 1;
    % 3. Loại bỏ 67 điểm ảnh không mang thông tin
    norm_vec(remove_idx) = []; % Vector còn 717x1
    
    % 4. Tính toán lớp ẩn
    Z2 = W2 * norm_vec + B2;
    A2 = 2 ./ (1 + exp(-2 * Z2)) - 1; % tansig
    
    % 5. Tính toán lớp đầu ra
    Z3 = W3 * A2 + B3;
    % 6. Hardmax phân lớp
    [~, max_idx] = max(Z3);
    digit_out = max_idx - 1; % Trả về chữ số từ 0 đến 9
end

2. Tuyến tính hóa hàm kích hoạt trên FPGA (Piecewise Linearization)

Thay vì sử dụng bộ chia và tính hàm mũ phức tạp, hàm tansig được xấp xỉ tuyến tính 5 đoạn trên miền giá trị của $z$:

$$f_{\text{linear}}(z) = \begin{cases} -1.0 & \text{khi } z < -2.0 \ 0.5z & \text{khi } -2.0 \le z < -1.0 \ z & \text{khi } -1.0 \le z < 1.0 \ 0.5z & \text{khi } 1.0 \le z < 2.0 \ 1.0 & \text{khi } z \ge 2.0 \end{cases}$$

Sự xấp xỉ này cho phép hiện thực hóa hàm kích hoạt hoàn toàn bằng các phép dịch bit (shift-right 1 bit tương đương nhân $0.5$) và bộ so sánh cơ bản, tiết kiệm $100%$ khối nhân thực (DSP) cho tầng phi tuyến.

// Khối RTL tính hàm tansig tuyến tính hóa (SystemVerilog)
module linearized_tansig (
    input  signed [15:0] z_in,   // Định dạng Q4.12
    output reg signed [15:0] a_out
);
    localparam signed [15:0] POS_TWO = 16'sh2000; // +2.0 trong Q4.12
    localparam signed [15:0] POS_ONE = 16'sh1000; // +1.0 trong Q4.12
    localparam signed [15:0] NEG_ONE = -16'sh1000;// -1.0 trong Q4.12
    localparam signed [15:0] NEG_TWO = -16'sh2000;// -2.0 trong Q4.12

    always_comb begin
        if (z_in >= POS_TWO)
            a_out = POS_ONE;
        else if (z_in >= POS_ONE)
            a_out = (z_in >>> 1) + 16'sh0800; // Xấp xỉ đoạn dốc 0.5
        else if (z_in > NEG_ONE)
            a_out = z_in;                     // Tuyến tính đoạn giữa
        else if (z_in > NEG_TWO)
            a_out = (z_in >>> 1) - 16'sh0800; // Xấp xỉ đoạn âm dốc 0.5
        else
            a_out = NEG_ONE;
    end
endmodule

3. Bộ nhớ và định dạng số học

Tất cả các tham số được biểu diễn dưới dạng số bù hai dấu phẩy tĩnh 16-bit (Fixed-point Q4.12): 1 bit dấu, 3 bit phần nguyên, 12 bit phần thập phân (độ phân giải $\approx 0.000244$). Bộ nhớ Single-Port RAM 16-bit lưu trữ toàn bộ các tham số hệ thống:

  • Địa chỉ 0x0000 - 0x02CC: Vector ảnh kiểm tra $K$ (717 từ 16-bit).
  • Địa chỉ 0x02CD - 0x2CCF: Ma trận trọng số $W_2$ ($15 \times 717 = 10,755$ từ).
  • Địa chỉ 0x2CD0 - 0x2CDE: Vector bias $B_2$ ($15$ từ).
  • Địa chỉ 0x2CDF - 0x2D74: Ma trận trọng số $W_3$ ($10 \times 15 = 150$ từ).
  • Địa chỉ 0x2D75 - 0x2D7E: Vector bias $B_3$ ($10$ từ).

Testing và validation

Môi trường kiểm chứng được xây dựng theo kiến trúc phân lớp tự động hóa hoàn toàn bằng SystemVerilog trên công cụ QuestaSim (CentOS Linux):

                     KIẾN TRÚC MÔI TRƯỜNG TESTBENCH
+-------------------------------------------------------------------+
|                        Top-level Testbench                        |
|                                                                   |
|   +--------------------+               +----------------------+   |
|   |     Generator      |               |     Scoreboard       |   |
|   | (Đọc 10,000 files) |               | (So sánh kết quả     |   |
|   +--------------------+               |  với nhãn kỳ vọng)   |   |
|             |                          +----------------------+   |
|             v                                     ^               |
|   +--------------------+                          |               |
|   |       Driver       |                          |               |
|   | (Gán tín hiệu I/O) |               +----------------------+   |
|   +--------------------+               |       Monitor        |   |
|             |                          | (Bắt sự kiện done,   |   |
|             v                          |  đọc bus digit)      |   |
|   +------------------------------------+----------------------+   |
|   |                     DUT (ann_top.sv)                      |   |
|   +-----------------------------------------------------------+   |
|                                                                   |
|   +-----------------------------------------------------------+   |
|   |       Functional Coverage (Đo đạc 100% test scenarios)    |   |
|   +-----------------------------------------------------------+   |
+-------------------------------------------------------------------+
  • Kịch bản kiểm thử: Tự động hóa việc nạp tuần tự 10,000 file text (chứa 717 điểm ảnh của từng ảnh trong tập test MNIST) vào RAM của DUT qua giao tiếp we, wr_addr, wr_data. Kích hoạt start, giám sát cờ done, trích xuất kết quả digit và đối chiếu với tập nhãn gốc (Ground Truth).
  • Kết quả Functional Coverage: Đạt 100% Coverage trên tất cả 6 đặc tính kỹ thuật đã lập trong Verification Plan.

Kết quả đạt được

Bảng kết quả kiểm tra nhận dạng chi tiết trên 10,000 ảnh MNIST

Chữ số Tổng số mẫu kiểm tra Nhận dạng đúng (PASS) Nhận dạng sai (FAIL) Tỷ lệ chính xác (% PASS)
0 980 958 22 97.76%
1 1135 1113 22 98.06%
2 1032 948 84 91.86%
3 1010 940 70 93.07%
4 982 927 55 94.40%
5 892 815 77 91.37%
6 958 916 42 95.62%
7 1028 956 72 93.00%
8 974 891 83 91.48%
9 1009 940 69 93.16%
Trung bình 10,000 9,404 596 94.02%

Đánh giá tổng hợp phần cứng trên Altera Cyclone II (EP2C35F672C6)

  • Tần số hoạt động tối đa ($F_{\max}$): $> 65 \text{ MHz}$ (Được kiểm tra chuẩn xác ở xung nhịp cơ sở 50 MHz).
  • Tài nguyên Logic Elements (LEs): Chiếm xấp xỉ 2,850 / 33,216 LEs ($< 9%$), chứng minh tính tối ưu cực cao của mô hình FSMD chia sẻ tài nguyên tính toán (Time-multiplexed MAC).
  • Thời gian xử lý trung bình (Latency): $\approx 11,200 \text{ chu kỳ xung nhịp/ảnh}$ (tương đương $224 \ \mu\text{s}$ ở tần số 50 MHz), cho phép hệ thống đạt thông lượng hơn 4,400 ảnh/giây, đáp ứng hoàn toàn các ứng dụng thời gian thực.

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

  1. Kỹ thuật giảm chiều đặc trưng không gian (Spatial Dimensionality Reduction): Phát hiện và loại bỏ thành công 67 điểm ảnh biên không biến thiên trên tập dữ liệu 60,000 ảnh. Đóng góp này giúp loại bỏ trực tiếp $67 \times 15 = 1,005$ trọng số tại tầng $W_2$, giảm $8.54%$ dung lượng bộ nhớ RAM và $1,005$ phép tính nhân tích lũy (MAC) trên mỗi lượt suy luận.

  2. Tối ưu hóa kiến trúc mạng nơ-ron cực tiểu (Ultra-compact Topology): Thông qua phương pháp huấn luyện - tỉa thưa lặp lại từng bước 5 neuron trên MATLAB, đồ án đã chứng minh topo $717 \to 15 \to 10$ hoàn toàn duy trì được độ chính xác vượt bậc (94.02%) so với mạng gốc 100 neuron ẩn, nhưng giảm tới $85%$ số lượng tham số.

  3. Phương pháp xấp xỉ phi tuyến không dùng bảng tra cứu LUT dung lượng lớn: Thuật toán phân đoạn tuyến tính cho hàm tansig loại bỏ hoàn toàn nhu cầu sử dụng khối ROM bảng tra cứu số thực lớn hoặc các khối chia phức tạp, mở ra khả năng nhân rộng nhiều nhân neuron tính toán đồng thời trên các dòng FPGA giá rẻ.


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

Các kịch bản ứng dụng thực tiễn

  • Phân loại bưu phẩm bưu chính tự động: Tích hợp trực tiếp vào hệ thống camera quang học quét mã bưu chính (Zip code) trên băng chuyền tự động với tốc độ xử lý hàng nghìn bưu kiện/phút.
  • Xử lý số liệu tài chính - ngân hàng: Nhận dạng tự động số tiền viết tay trên séc và biểu mẫu hóa đơn ngân hàng với độ trễ tiền định và bảo mật phần cứng tuyệt đối (không truyền dữ liệu lên đám mây).
  • Hệ thống nhúng đếm sản phẩm công nghiệp: Triển khai trên các máy kiểm đếm sản phẩm hiển thị số cơ học hoặc nhãn sản phẩm trong dây chuyền sản xuất tự động.
                  SƠ ĐỒ HỆ THỐNG PHÂN LOẠI THỰC TẾ
[Camera CMOS] -> [Tiền xử lý FPGA] -> [Module ANN IP Core] -> [Bộ điều khiển tay gắp]
                                              |
                                     (Kết quả: Chữ số 0-9)

Quy trình nạp và triển khai trên Kit Altera DE2

  1. Biên dịch toàn bộ mã nguồn SystemVerilog (ann_dp.sv, ann_fsm.sv, single_port_ram.sv, ann.sv) trên phần mềm Quartus II v13.0sp1.
  2. Gán chân I/O (Pin Planner) tương thích với chip FPGA EP2C35F672C6: mapping xung clock 50MHz (Pin PIN_N2), reset button (Pin PIN_G26), hiển thị kết quả ra LED đỏ/LED 7 đoạn (HEX0 - HEX3).
  3. Tạo file cấu hình SRAM Object File (.sof) và nạp trực tiếp qua cáp USB-Blaster (JTAG mode).

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

Hạn chế hiện tại

  • Mô hình truyền dữ liệu vào RAM nội bộ thực hiện theo phương thức tuần tự qua bus địa chỉ 14-bit, tốn thời gian nạp ảnh ban đầu.
  • Kiến trúc phần cứng hiện tại sử dụng chung 1 bộ tính MAC tuần tự theo chu kỳ, chưa khai thác tối đa tính song song không gian (Spatial Parallelism) của FPGA.
  • Mạng chỉ nhận dạng các ảnh chữ số đã được căn giữa và chuẩn hóa kích thước (28x28 grayscale).

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

  • Kiến trúc Mạng nơ-ron tích chập (CNN - Convolutional Neural Network): Phát triển các khối phần cứng chuyên dụng cho tầng Conv2D, MaxPooling và Fully Connected (ví dụ kiến trúc LeNet-5) để nhận diện các ảnh có độ phức tạp cao và chống dịch chuyển (translation invariance).
  • Giao tiếp Bus tiêu chuẩn công nghiệp: Bổ sung giao tiếp AXI4-Stream kết hợp bộ điều khiển DMA để truyền dữ liệu trực tiếp từ cảm biến camera ngoại vi vào FPGA với thông lượng cao.
  • Lượng tử hóa INT8 / Binary Neural Network (BNN): Tối ưu định dạng dữ liệu xuống 8-bit hoặc 1-bit trọng số để nâng cao tốc độ tính toán gấp nhiều lần và tiết kiệm tối đa tài nguyên Logic Elements.

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

  • Sinh viên ngành Kỹ thuật Điện tử - Viễn thông / Cơ điện tử / Khoa học Máy tính: Tài liệu tham khảo toàn diện về luồng thiết kế vi mạch HDL-based flow, kỹ thuật mô hình hóa thuật toán FSMD và kiểm chứng phân lớp (Layered Testbench Verification).
  • Kỹ sư thiết kế RTL & Vi mạch (RTL/FPGA Engineers): Phương pháp ánh xạ mô hình toán học và mạng nơ-ron sang phần cứng với kỹ thuật tối ưu hóa diện tích (Area Optimization), định dạng số học dấu phẩy tĩnh Fixed-point và xấp xỉ hàm phi tuyến.
  • Nhà nghiên cứu Edge AI & Embedded Systems: Cung cấp dữ liệu đo kiểm thực nghiệm, phương pháp đồng thiết kế phần cứng - phần mềm (Hardware/Software Co-design) kết hợp giữa MATLAB và SystemVerilog.

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

1. Yêu cầu kỹ thuật tối thiểu của phần cứng FPGA để triển khai thiết kế này là gì?

Hệ thống yêu cầu một chip FPGA có tối thiểu 3,000 Logic Elements (LEs) và dung lượng bộ nhớ nhúng tích hợp (Embedded Block RAM) từ 180 Kbits trở lên để lưu trữ 10,930 tham số 16-bit. Các dòng FPGA phổ thông như Altera Cyclone II (EP2C35, EP2C20), Cyclone IV (EP4CE22) hoặc Xilinx Spartan-6 (XC6SLX9), Artix-7 đều đáp ứng hoàn hảo.

2. Tại sao lại giảm số nút lớp ẩn xuống 15 thay vì giữ 100 nút như thiết kế ban đầu?

Việc giữ 100 nút ẩn sẽ đòi hỏi $717 \times 100 = 71,700$ trọng số, vượt quá dung lượng Block RAM trên nhiều kit FPGA cỡ nhỏ và làm tăng số chu kỳ tính toán lên gấp gần 7 lần. Thực nghiệm trên MATLAB chứng minh cấu hình 15 nút ẩn vẫn đạt độ chính xác 94.02% (vượt yêu cầu 90%), tạo ra sự cân bằng hoàn hảo giữa hiệu năng và tài nguyên phần cứng.

3. Phương pháp định dạng số dấu phẩy tĩnh Q4.12 có làm suy giảm độ chính xác so với dấu phẩy động trên máy tính không?

Có xảy ra sai số làm tròn (quantization error), tuy nhiên mức độ suy giảm là không đáng kể ($< 0.3%$). Với 12-bit dành cho phần thập phân, bước lượng tử hóa là $2^{-12} \approx 0.000244$, hoàn toàn đủ nhỏ để bảo toàn độ chính xác của các trọng số và bias sau khi huấn luyện.

4. Hệ thống mất bao lâu để nhận dạng xong một chữ số viết tay?

Ở tần số xung nhịp 50 MHz tiêu chuẩn trên kit Altera DE2, khối xử lý mất khoảng 11,200 chu kỳ xung nhịp để hoàn thành toàn bộ các phép tính MAC của 2 tầng mạng, tương đương thời gian trễ xử lý khoảng $0.224 \text{ ms}$. Tốc độ này đáp ứng vượt mức chuẩn thời gian thực (Real-time processing).

5. Làm thế nào để mở rộng thiết kế nhằm nhận dạng được chữ cái (A-Z) hoặc vật thể phức tạp hơn?

Cần mở rộng vector ngõ ra digit lên 26-bit (cho bảng chữ cái) hoặc N-bit tùy số lớp đối tượng, đồng thời tăng kích thước bộ nhớ RAM để chứa ma trận trọng số lớn hơn. Đối với ảnh kích thước lớn hoặc vật thể phức tạp, giải pháp tối ưu là chuyển đổi cấu trúc sang mạng tích chập CNN (Convolutional Neural Network) với các khối xử lý mảng systolic (Systolic Array) trên FPGA.


Kết luận

Đồ án "Thiết kế Neural Network trên FPGA để nhận dạng chữ số viết tay" đã giải quyết trọn vẹn và chuẩn xác bài toán hiện thực hóa mạng nơ-ron nhân tạo trên phần cứng chuyên dụng. Bằng việc kết hợp chặt chẽ giữa nghiên cứu thuật toán trên MATLAB (giảm chiều đặc trưng từ 784 xuống 717, tối ưu mạng 15 nút ẩn, đạt độ chính xác 94.02%) và thiết kế phần cứng theo mô hình FSMD bằng SystemVerilog trên kit Altera Cyclone II DE2, đồ án đã minh chứng tính khả thi vượt trội của giải pháp vi mạch trong xử lý trí tuệ nhân tạo biên. Quy trình kiểm chứng đạt 100% Functional Coverage trên 10,000 mẫu ảnh MNIST khẳng định chất lượng thiết kế đáp ứng đầy đủ các tiêu chuẩn kỹ thuật công nghiệp khắt khe.