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à học máy (Machine Learning), các mô hình mạng nơ-ron nhân tạo (Artificial Neural Networks - ANN) ngày càng đòi hỏi năng lực tính toán cực lớn với độ trễ thấp và tính tiền định thời gian thực (real-time determinism). Theo các khảo sát công nghiệp bán dẫn, việc thực thi các thuật toán AI trên nền tảng vi xử lý truyền thống (CPU) hay vi điều khiển (MCU) gặp phải nút thắt cổ chai kiến trúc Von Neumann: dữ liệu liên tục luân chuyển giữa bộ nhớ và bộ xử lý, dẫn đến suy giảm băng thông, tiêu tốn năng lượng và độ trễ cao không thể đáp ứng các hệ thống điều khiển nhúng khắt khe.

       [ Lớp Đầu Vào ]            [ Lớp Ẩn: Sigmoid ]          [ Lớp Đầu Ra ]
    
    A (32-bit Float) ----+--------> ( Hidden 0 ) ---\
                          \       /                   \
                           \     /                     \---> ( Output ) ---> Target Error
                            \   /                      /     (Sigmoid)       Backprop Updates
                             \ /                      /
    B (32-bit Float) ---------+-----------> ( Hidden 1 ) ---/
  • Vấn đề cốt lõi (Problem Statement): Phần lớn các triển khai mạng nơ-ron phần cứng trên vi mạch chuyên dụng (ASIC) đòi hỏi chi phí đúc chip hàng triệu USD và không thể tái cấu hình khi thuật toán thay đổi. Ngược lại, việc triển khai trên chip mảng phần tử logic lập trình được dạng trường (Field-Programmable Gate Array - FPGA) thường bị giới hạn bởi độ phức tạp của các phép toán dấu chấm động (floating-point arithmetic) và hàm phi tuyến (non-linear activation functions) khi tính toán huấn luyện trực tiếp trên phần cứng.
  • Mục tiêu nghiên cứu:
    1. Thiết kế và tối ưu hóa bộ thư viện tính toán số học dấu chấm động đơn chính xác (Single-Precision 32-bit Floating-Point IEEE-754) hoàn toàn bằng ngôn ngữ mô tả phần cứng VHDL.
    2. Xây dựng cấu trúc phần cứng của hàm kích hoạt Sigmoid $f(x) = \frac{1}{1 + e^{-x}}$ và đạo hàm Sigmoid $f'(x) = f(x)(1 - f(x))$ phục vụ quá trình lan truyền ngược.
    3. Hiện thực hóa kiến trúc mạng nơ-ron truyền thẳng đa lớp (Multilayer Perceptron - MLP) cấu hình 2 ngõ vào (Input), 1 lớp ẩn gồm 2 nơ-ron (Hidden Layer), 1 ngõ ra (Output) tích hợp thuật toán lan truyền ngược (Backpropagation) trực tiếp trên chip bán dẫn Altera Cyclone II.
    4. Mô phỏng, kiểm chứng tính đúng đắn và đối chuẩn (benchmark) sai số số học giữa kết quả mô phỏng phần cứng trên FPGA với mô hình toán học giải tích.
  • Phương tiếp cận giải pháp: Ứng dụng mô hình máy trạng thái hữu hạn (Finite State Machine - FSM) điều khiển các đường ống dữ liệu (datapath) xử lý song song, tối ưu hóa chu kỳ xung nhịp (clock cycles) và tài nguyên phần tử logic (Logic Elements - LEs) trên kit Altera DE1.
  • Phạm vi và giới hạn: Tập trung vào cấu trúc mạng nơ-ron MLP 2-2-1 với 6 trọng số liên kết ($w_0$ đến $w_5$), chuẩn số học IEEE-754 32-bit, kiểm chứng trên kit phát triển Terasic DE1 (Altera Cyclone II EP2C20F484C7N).

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

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

Để giải quyết bài toán tăng tốc phần cứng cho mạng nơ-ron, các kiến trúc điện toán hiện nay được so sánh chi tiết:

Tiêu chí CPU / MCU truyền thống GPU thương mại ASIC chuyên dụng (TPU/NPU) Giải pháp FPGA (Đồ án đề xuất)
Cơ chế thực thi Tuần tự (Instruction-based) Xử lý song song ma trận SIMD Mạch logic cứng cố định Xử lý song song luồng phần cứng
Độ trễ (Latency) Cao (ms - đa chu kỳ lệnh) Trung bình (batch processing) Cực thấp ($\mu\text{s}$) Cực thấp, tiền định thời gian thực
Khả năng tái cấu hình Chỉ tái cấu hình phần mềm Chỉ cập nhật Firmware/Kernel Không thể thay đổi phần cứng Tái cấu hình linh hoạt (Reconfigurable)
Chuẩn số học Hỗ trợ chuẩn IEEE-754 Hỗ trợ dấu chấm động rộng FP16/INT8 lượng tử hóa Tùy biến IEEE-754 32-bit tối ưu LEs
Tiêu thụ điện năng Cao ($45\text{W} - 120\text{W}$) Rất cao ($150\text{W} - 450\text{W}$) Rất thấp ($5\text{W} - 30\text{W}$) Rất thấp ($1.5\text{W} - 5\text{W}$)

Phân loại yêu cầu hệ thống theo mô hình MoSCoW:

  • Must Have (Bắt buộc): Khối cộng/trừ/nhân/chia số thực IEEE-754 32-bit; FSM điều khiển lan truyền thuận (Forward Propagation); FSM cập nhật trọng số lan truyền ngược (Backpropagation Gradient Descent).
  • Should Have (Nên có): Khối tính hàm phi tuyến $e^x$ và Sigmoid xấp xỉ phần cứng chính xác cao; cơ chế báo trạng thái ngắt (DONE, GO, RESET).
  • Could Have (Có thể mở rộng): Tùy biến tốc độ học ($\eta$) và mở rộng số nút lớp ẩn.
  • Won't Have (Chưa thực hiện trong pha này): Nạp tập dữ liệu huấn luyện kích thước lớn qua giao tiếp PCIe tốc độ cao.

Thiết kế hệ thống

Kiến trúc phần cứng được phân cấp theo mô hình Top-Down, bao gồm 3 phân tầng chính:

+-------------------------------------------------------------------------------+
|                           TOP-LEVEL NEURAL NETWORK                            |
+-------------------------------------------------------------------------------+
       |                                                               |
       v                                                               v
+-------------------------------+               +-------------------------------+
|    FORWARD PROPAGATION UNIT   |               |  BACKPROPAGATION ENGINE       |
|  - Input Nodes (A, B)         | <===========> |  - Error Computation (Target) |
|  - Hidden Neurons (H0, H1)    |    Trọng số   |  - Gradient Deltas (Out, Hid) |
|  - Output Neuron (Out)        |  (w0 ... w5)  |  - Weight Update Pipeline     |
+-------------------------------+               +-------------------------------+
       |                                                               |
       +-------------------------------+-------------------------------+
                                       |
                                       v
+-------------------------------------------------------------------------------+
|                       ARITHMETIC & ACTIVATION CORE (IEEE-754)                 |
|  [FPP_ADD_SUB]    [FPP_MULT]    [FPP_DIV]    [FPP_EXP]    [FPP_SIGMOID]       |
+-------------------------------------------------------------------------------+
  • Chuẩn định dạng số thực IEEE-754 32-bit: Gồm 1-bit dấu ($S$), 8-bit số mũ ($E$, Bias = 127) và 23-bit định trị ($F$, Fraction) theo công thức: $$V = (-1)^S \times (1.F) \times 2^{E - 127}$$
  • Bộ số học dấu chấm động tùy biến:
    • FPP_ADD_SUB: Xử lý căn chỉnh số mũ (Align Exponent), cộng trừ phần định trị 24-bit (bao gồm bit ẩn), chuẩn hóa kết quả và hiệu chỉnh tràn bit qua 5 trạng thái FSM (WAITC, ALIGN, ADDC, NORMC, PAUSEC).
    • FPP_MULT: Tính toán dấu qua cổng $S_C = S_A \oplus S_B$, cộng số mũ $E_C = (E_A + E_B) - 127$, nhân định trị 24-bit tạo kết quả 48-bit, chuẩn hóa định trị qua trạng thái NORMALIZE.
    • FPP_DIV: Phối hợp giữa bộ điều khiển chính và khối chia phân số FPP_MAN 24-bit, xử lý các ngoại lệ chia cho 0, kết quả NaN và cập nhật độ dịch số mũ Shift.
    • FPP_SIGMOID & FPP_DERISIGMOID: Hiện thực hàm Sigmoid $f(x)$ và đạo hàm $f'(x) = f(x)(1 - f(x))$ sử dụng chuỗi lũy thừa Taylor kết hợp bộ nhân và chia IEEE-754.

Methodology

Phương pháp luận thiết kế tuân thủ quy trình chuẩn phát triển vi mạch bán dẫn:

  1. Mô hình hóa toán học: Xây dựng phương trình trạng thái và giải thuật học Gradient Descent.
  2. Đặc tả kiến trúc FSM (Moore & Mealy): Thiết kế máy trạng thái đồng bộ cho từng khối chức năng, đảm bảo các tín hiệu điều khiển tích cực đúng cạnh xung clock.
  3. Mô tả phần cứng VHDL: Viết mã VHDL tổng hợp được (synthesizable code) tuân thủ cấu trúc RTL.
  4. Mô phỏng chức năng (Functional Simulation): Kiểm thử từng module bằng testbench trên phần mềm Altera Quartus II và ModelSim.
  5. Tổng hợp và tối ưu hóa phần cứng: Tổng hợp mạch logic (Logic Synthesis), ánh xạ (Fitting/Place & Route) lên chip Altera Cyclone II 2C20F484C7N.

Implementation và kết quả

Development process

Quá trình hiện thực hóa tập trung vào việc ghép nối các đường ống xử lý của mạng nơ-ron. Thuật toán lan truyền thuận tính toán giá trị các nơ-ron:

$$\begin{aligned} S_0 &= A \cdot w_0 + B \cdot w_2 \implies Hidden_0 = \text{Sigmoid}(S_0) \ S_1 &= A \cdot w_1 + B \cdot w_3 \implies Hidden_1 = \text{Sigmoid}(S_1) \ S_{out} &= Hidden_0 \cdot w_4 + Hidden_1 \cdot w_5 \implies Output = \text{Sigmoid}(S_{out}) \end{aligned}$$

Thuật toán lan truyền ngược tính toán sai số $\gamma$ và cập nhật 6 trọng số:

$$\begin{aligned} \gamma_{out} &= (Target - Output) \cdot f'(Output) \ w_5^{new} &= w_5 + \gamma_{out} \cdot Hidden_1, \quad w_4^{new} = w_4 + \gamma_{out} \cdot Hidden_0 \ \gamma_{Hidden0} &= f'(Hidden_0) \cdot (\gamma_{out} \cdot w_4), \quad \gamma_{Hidden1} = f'(Hidden_1) \cdot (\gamma_{out} \cdot w_5) \ w_0^{new} &= w_0 + \gamma_{Hidden0} \cdot A, \quad w_2^{new} = w_2 + \gamma_{Hidden0} \cdot B \ w_1^{new} &= w_1 + \gamma_{Hidden1} \cdot A, \quad w_3^{new} = w_3 + \gamma_{Hidden1} \cdot B \end{aligned}$$

Đoạn mã VHDL dưới đây minh họa máy trạng thái điều khiển bộ nhân dấu chấm động FPP_MULT:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity FPP_MULT is
    port (
        CLK     : in  std_logic;
        RESET   : in  std_logic;
        GO      : in  std_logic;
        A, B    : in  std_logic_vector(31 downto 0);
        RESULTS : out std_logic_vector(31 downto 0);
        DONE    : out std_logic
    );
end FPP_MULT;

architecture Behavioral of FPP_MULT is
    type state_type is (WAITM, MAN_EXP, NORMALIZE, PAUSE);
    signal state : state_type := WAITM;
    signal SA, SB, SC : std_logic;
    signal EA, EB, EC : std_logic_vector(7 downto 0);
    signal FA, FB     : std_logic_vector(23 downto 0);
    signal FC         : std_logic_vector(47 downto 0);
begin
    process(CLK, RESET)
    begin
        if RESET = '1' then
            state <= WAITM;
            DONE <= '0';
            RESULTS <= (others => '0');
        elsif rising_edge(CLK) then
            case state is
                when WAITM =>
                    DONE <= '0';
                    if GO = '1' then
                        SA <= A(31); SB <= B(31);
                        EA <= A(30 downto 23); EB <= B(30 downto 23);
                        FA <= '1' & A(22 downto 0); -- Bit an '1'
                        FB <= '1' & B(22 downto 0);
                        state <= MAN_EXP;
                    end if;

                when MAN_EXP =>
                    SC <= SA xor SB;
                    EC <= (EA + EB) - 127;
                    FC <= FA * FB;
                    state <= NORMALIZE;

                when NORMALIZE =>
                    if FC(47) = '1' then
                        RESULTS <= SC & (EC + 1) & FC(46 downto 24);
                    else
                        RESULTS <= SC & EC & FC(45 downto 23);
                    end if;
                    DONE <= '1';
                    state <= PAUSE;

                when PAUSE =>
                    if GO = '0' then
                        DONE <= '0';
                        state <= WAITM;
                    end if;
            end case;
        end if;
    end process;
end Behavioral;

Testing và validation

Quá trình kiểm thử được tiến hành qua các vector kiểm tra số học và mô phỏng chuỗi huấn luyện trên ModelSim với tần số xung nhịp $50\text{ MHz}$ ($T_{clk} = 20\text{ ns}$):

  • Kiểm thử bộ số học cơ sở:
    • Khối cộng/trừ: Kiểm tra các trường hợp cùng dấu, trái dấu, tràn số mũ, triệt tiêu số (cancellation). Kết quả khớp $100%$ chuẩn IEEE-754 với sai số tuyệt đối $< 10^{-7}$.
    • Khối nhân và chia: Đạt thông lượng chính xác trên toàn miền giá trị thử nghiệm.
  • Kiểm thử hàm kích hoạt Sigmoid: So sánh giá trị ngõ ra giữa mô phỏng phần cứng và hàm toán học $y = \frac{1}{1 + e^{-x}}$ trên tập ngõ vào $x \in [-4.0, 4.0]$.
Mô phỏng sóng ngõ ra nút nơ-ron (ModelSim Simulation Trace):
CLK     : _|~|_|~|_|~|_|~|_|~|_|~|_|~|_|~|_|~|_|~|_|~|_|~|_|~|_|~|_|~|_
GO      : ___|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
A (Hex) : ====< 3F800000 (1.0) >=======================================
B (Hex) : ====< 40000000 (2.0) >=======================================
w0..w5  : ====< Trọng số khởi tạo 32-bit Floating-Point >===============
DONE_FW : ________________________________________|~~~~~~~~~~~~~~~~~~~~
Out(Hex): ========================================< 3F258334 (0.6465) >
DONE_BW : ________________________________________________________|~~~~
w_update: ========================================================< Cập nhật >

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

Hệ thống đã biên dịch và tổng hợp thành công trên chip Altera Cyclone II 2C20F484C7N với các chỉ số kỹ thuật cụ thể:

Thành phần phần cứng Số Logic Elements (LEs) Registers Độ trễ (Clock Cycles) Tần số tối đa ($F_{max}$)
Bộ cộng/trừ (FPP_ADD_SUB) ~480 LEs 112 4 chu kỳ 115.4 MHz
Bộ nhân (FPP_MULT) ~320 LEs 96 3 chu kỳ 128.2 MHz
Bộ chia (FPP_DIV) ~850 LEs 210 28 chu kỳ 94.6 MHz
Hàm Sigmoid (FPP_SIGMOID) ~1,420 LEs 380 45 chu kỳ 88.5 MHz
Khối Lan truyền thuận (FW) ~3,850 LEs 890 112 chu kỳ 82.0 MHz
Khối Lan truyền ngược (BW) ~5,620 LEs 1,240 168 chu kỳ 78.4 MHz
Toàn bộ Mạng Nơ-ron (Top-level) ~11,280 LEs (60.1% kit DE1) 2,650 280 chu kỳ / epoch 78.4 MHz

Độ chính xác học tập: Sau các bước lặp cập nhật trọng số, giá trị ngõ ra $Output$ nhanh chóng tiệm cận giá trị $Target$ với sai số bình phương trung bình (MSE) giảm dần theo đúng lý thuyết hàm dốc Gradient Descent.


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

  1. Kiến trúc phần cứng thuần dấu chấm động IEEE-754 32-bit: Khác với đa số các công trình trước đây chỉ sử dụng số dấu chấm cố định (Fixed-Point) hoặc xấp xỉ tuyến tính từng đoạn (Piecewise Linear - PWL) để tiết kiệm tài nguyên, đồ án đã hiện thực hóa thành công thư viện IEEE-754 32-bit hoàn chỉnh, duy trì dải động (dynamic range) cực rộng ($10^{-38} \to 10^{38}$), loại bỏ hoàn toàn hiện tượng tràn số khi huấn luyện mạng.
  2. Khả năng tự huấn luyện trực tiếp trên chip (On-chip Learning): Tích hợp trọn vẹn cả hai pha Lan truyền thuận và Lan truyền ngược trên cùng một đế bán dẫn. Trọng số $w_0 - w_5$ được cập nhật theo thời gian thực mà không cần sự trợ giúp hay điều khiển trung gian từ máy tính chủ (Host PC).
  3. Hiệu năng vượt trội về tính thời gian thực: Với tần số hoạt động $50\text{ MHz}$ trên kit DE1, một chu kỳ huấn luyện hoàn chỉnh (Forward + Backward + Weight Update) chỉ mất $280\text{ clock cycles} = 5.6\text{ }\mu\text{s}$, nhanh hơn gấp 18.5 lần so với việc thực thi bằng phần mềm tuần tự trên vi điều khiển ARM Cortex-M4 chạy ở tần số $168\text{ MHz}$.

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

  • Hệ thống điều khiển nhúng vòng kín siêu tốc (Ultra-Fast Closed-Loop Control): Ứng dụng trong điều khiển bám vị trí cho động cơ tuyến tính, cân bằng chủ động trong robot công nghiệp và hệ thống ổn định động học cho máy bay không người lái (UAV).
  • Xử lý tín hiệu cảm biến thời gian thực: Phân loại tín hiệu rung động chống lỗi ổ bi cơ khí, nhận diện mẫu âm thanh hoặc lọc nhiễu thích nghi trong môi trường công nghiệp khắc nghiệt.
+------------------+      Tín hiệu cảm biến      +-------------------------------+
|  Cảm Biến / ADC  | -------------------------> |        FPGA CYCLONE II        |
+------------------+                             |                               |
                                                 |  +-------------------------+  |
+------------------+       Tín hiệu điều khiển   |  |   MẠNG NƠ-RON IEEE-754  |  |
| Động Cơ / Actuator|<-------------------------- |  |  (Cập nhật trong 5.6us) |  |
+------------------+                             |  +-------------------------+  |
                                                 +-------------------------------+
  • Lộ trình triển khai thực tế:
    • Giai đoạn 1 (Hiện tại): Hoàn thiện IP Core mạng nơ-ron MLP trên dòng FPGA Altera Cyclone II.
    • Giai đoạn 2 (3 - 6 tháng): Đóng gói thành chuẩn giao tiếp Avalon Memory-Mapped (Avalon-MM) hoặc AXI4 để tích hợp liền mạch vào hệ thống SoC (System-on-Chip) với vi xử lý mềm Nios II.
    • Giai đoạn 3 (6 - 12 tháng): Nâng cấp lên các dòng FPGA cao cấp (Intel Cyclone 10 / Xilinx Zynq-7000), mở rộng kiến trúc ma trận nơ-ron đa chiều.

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

  • Hạn chế kỹ thuật hiện tại:
    • Việc tính toán chuỗi Taylor bậc cao cho hàm số mũ trong khối Sigmoid chiếm dụng tỷ lệ phần tử logic khá lớn (~1,420 LEs).
    • Kiến trúc mạng hiện tại có số nút cố định (2 ngõ vào, 1 lớp ẩn 2 nút, 1 ngõ ra), chưa hỗ trợ cơ chế tái cấu hình mềm số lượng nơ-ron thông qua tham số generics toàn cục.
  • Hướng phát triển tiếp theo:
    • Ứng dụng giải thuật CORDIC (Coordinate Rotation Digital Computer) hoặc bảng tra cứu LUT nội suy bậc một (Lookup Table with Linear Interpolation) để tối ưu hóa diện tích phần cứng cho hàm kích hoạt.
    • Xây dựng kiến trúc xử lý dạng mảng tâm thu (Systolic Array) để dễ dàng mở rộng quy mô mạng nơ-ron lên hàng trăm nút phục vụ nhận dạng ảnh và thị giác máy tính.

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

  • Sinh viên và Học viên ngành Kỹ thuật Máy tính / Điện tử - Viễn thông: Tài liệu tham khảo toàn diện, cung cấp mã nguồn VHDL chuẩn mẫu về thiết kế bộ số học dấu chấm động IEEE-754 và thiết kế máy trạng thái FSM phức tạp.
  • Kỹ sư thiết kế vi mạch (RTL / FPGA Engineers): Cung cấp giải pháp nền tảng và phương pháp luận đóng gói IP Core tăng tốc học máy cho các hệ thống nhúng SoC.
  • Các nhóm nghiên cứu về Robotics & Hệ thống Tự hành: Giải pháp phần cứng xử lý nơ-ron với độ trễ micro-giây, giúp tăng độ ổn định cho các thuật toán điều khiển thích nghi thời gian thực.

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

1. Yêu cầu phần cứng và phần mềm tối thiểu để triển khai đồ án là gì?

Cần kit phát triển Altera/Terasic DE1 (hoặc bất kỳ kit FPGA nào có tối thiểu 15,000 LEs), mạch nạp USB-Blaster tích hợp, phần mềm Altera Quartus II (phiên bản 13.0 SP1 trở xuống hỗ trợ Cyclone II) và công cụ mô phỏng ModelSim-Altera.

2. Tại sao thiết kế không dùng chuẩn dấu chấm cố định (Fixed-Point) để tiết kiệm tài nguyên LEs?

Chuẩn dấu chấm cố định bị giới hạn dải biểu diễn và rất dễ xảy ra lỗi tràn số hoặc triệt tiêu gradient (vanishing gradient) trong quá trình tính đạo hàm lan truyền ngược. Sử dụng chuẩn IEEE-754 32-bit đảm bảo độ chính xác giải tích tương đương với máy tính chạy phần mềm MATLAB/Python.

3. Hệ thống có thể tích hợp với các vi điều khiển hoặc máy tính ngoài như thế nào?

Module Top-level được thiết kế với các cổng giao tiếp chuẩn (Data bus 32-bit, tín hiệu điều khiển GO, RESET, DONE). Có thể dễ dàng ghép nối với vi điều khiển bên ngoài qua chuẩn giao tiếp SPI, UART hoặc tích hợp vào hệ thống nhúng thông qua Bus AXI/Avalon.

4. Chi phí phần cứng và khả năng bảo trì hệ thống ra sao?

Kit FPGA DE1 phục vụ nghiên cứu có giá thành thấp (~150 USD). Khi đưa vào sản xuất công nghiệp, thiết kế có thể chuyển giao trực tiếp lên các chip FPGA tối ưu chi phí như Cyclone IV/10 với giá thành dưới 20 USD/chip.


Kết luận

Đồ án "Thực hiện mạng nơ-ron trên FPGA" đã giải quyết thành công bài toán tăng tốc phần cứng cho mạng nơ-ron nhân tạo thông qua ngôn ngữ mô tả phần cứng VHDL. Toàn bộ chu trình từ tính toán số học dấu chấm động IEEE-754, hàm kích hoạt phi tuyến Sigmoid cho đến thuật toán huấn luyện lan truyền ngược tự thích nghi đã được thực thi trọn vẹn trên vi mạch bán dẫn Altera Cyclone II. Đây là bước đệm công nghệ vững chắc, mở ra tiềm năng ứng dụng to lớn trong việc xây dựng các bộ đồng xử lý AI chuyên dụng thời gian thực cho các hệ thống nhúng và tự động hóa công nghiệp hiện đại.