Giới thiệu dự án

Trong kỷ nguyên vạn vật kết nối (IoT), công nghiệp 4.0 và xử lý dữ liệu lớn, nhu cầu truyền tải dữ liệu thời gian thực giữa các thiết bị nhúng và trung tâm xử lý tăng trưởng với tốc độ bình quân hơn 25%/năm. Các hệ thống nhúng truyền thống sử dụng vi xử lý để xử lý chồng giao thức mạng (TCP/IP Software Stack) thường đối mặt với hiện tượng "nghẽn cổ chai" tài nguyên (CPU bottleneck) khi băng thông mạng đạt ngưỡng Gigabit (1 Gbps).

                                  +------------------------------------------------+
                                  |            FPGA System-on-Chip (SoC)           |
+-------------------+             |  +---------------+        +-----------------+  |
|  External Host /  |  Ethernet   |  | Marvell PHY   |  GMII  |  1Gbps Ethernet |  |
|  PC (Wireshark /  |<===========>|  | 88E1111 (SFP) |<======>|  Hardware IP    |  |
|  Python Testing)  |   1 Gbps    |  +---------------+ 125MHz |  (MAC/IP/ICMP)  |  |
+-------------------+             |                           +--------+--------+  |
                                  |                                    | AXI4-Lite |
                                  |                           +--------v--------+  |
                                  |                           | MicroBlaze/Ctrl |  |
                                  |                           +-----------------+  |
                                  +------------------------------------------------+

Vấn đề kỹ thuật và điểm nghẽn thực tế

  1. Quá tải CPU nhúng: Chồng giao thức điều khiển bằng phần mềm (như LwIP trên vi điều khiển mềm) chiếm tới 70-90% chu kỳ thực thi của CPU chỉ để giải mã Ethernet frame, tính toán checksum và xử lý gói tin định kỳ (ARP, ICMP ping), khiến hệ thống không còn đủ tài nguyên cho các tác vụ xử lý biên (Edge Computing).
  2. Độ trễ cao và không tiền định (Non-deterministic Latency): Phản hồi gói tin chẩn đoán mạng ICMP (Internet Control Message Protocol) qua tầng phần mềm gây ra độ trễ dao động từ hàng trăm micro-giây đến mili-giây, không đáp ứng được yêu cầu phản hồi tức thời trong tự động hóa công nghiệp.
  3. Chi phí tài nguyên phần cứng lớn: Các IP Core thương mại thường cồng kềnh, tiêu tốn nhiều tài nguyên Logic Cells/Block RAM và không cho phép tùy biến linh hoạt giao tiếp bus nội bộ trên FPGA.

Mục tiêu của dự án

  1. Nghiên cứu toàn diện cấu trúc khung gói tin mạng: Ethernet Frame (IEEE 802.3), Address Resolution Protocol (ARP), Internet Protocol Version 4 (IPv4), User Datagram Protocol (UDP) và Internet Control Message Protocol (ICMP).
  2. Thiết kế và hiện thực lõi phần cứng IP Ethernet 1 Gbps hoàn chỉnh bằng ngôn ngữ mô tả phần cứng Verilog-2001, tích hợp giao diện GMII (Gigabit Media-Independent Interface) và chuẩn bus truyền dữ liệu tốc độ cao AXI4-Stream cùng bus điều khiển AXI4-Lite.
  3. Hiện thực hóa động cơ phần cứng (Hardware Offload Engine) cho giao thức ICMP Echo (Ping), cho phép phản hồi tự động ở tốc độ đường truyền (Line-rate) mà không cần sự can thiệp của bộ xử lý trung tâm.
  4. Triển khai, tổng hợp và đo kiểm thực tế hệ thống trên kit phát triển FPGA Xilinx Virtex-7 VC707 (Chip XC7VX485T-2FFG1761C) kết hợp chip PHY Marvell 88E1111.
+-------------------------------------------------------------------------------+
|                      QUY MÔ VÀ PHẠM VI HỆ THỐNG (SCOPE)                       |
+-------------------------------------------------------------------------------+
| [X] Tốc độ truyền dẫn: Chuẩn Gigabit Ethernet (1000BASE-T / SGMII @ 125 MHz)   |
| [X] Lớp 2 (Data Link): Ethernet MAC (FCS/CRC-32 Check, Preamble/SFD, ARP HW)  |
| [X] Lớp 3 (Network): IPv4 Header Parsing, IPv4 Checksum Engine, ICMP Echo HW  |
| [X] Lớp 4 (Transport): UDP Checksum Calculation, UDP RX/TX Engine             |
| [!] Không hỗ trợ: Phân mảnh IPv4 (Fragmentation), Chế độ kết nối TCP, DHCP     |
+-------------------------------------------------------------------------------+

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

Phân tích hiện trạng và giải pháp cạnh tranh

Tiêu chí kỹ thuật Giải pháp phần mềm (LwIP trên CPU Soft-core) IP Core thương mại (Xilinx AXI Ethernet Subsystem) Giải pháp Đề tài (Hardware Ethernet IP Core + ICMP)
Băng thông thực tế 80 - 150 Mbps (Bị nghẽn bởi CPU) 950 - 990 Mbps 980 - 1000 Mbps (Full Line-rate)
Độ trễ ICMP Echo (Ping) 120 µs - 1.5 ms 5 µs - 15 µs < 1.2 µs (Xử lý trực tiếp tại Pipeline)
Tài nguyên Logic (LUTs) Trung bình (cần thêm CPU Core) Rất cao (> 4.500 LUTs + License) Tối ưu (~2.100 LUTs, gọn nhẹ)
Tải CPU khi Ping/UDP 65% - 90% 10% - 25% 0% (Offload hoàn toàn sang FPGA Hardware)
Chi phí bản quyền Miễn phí (Mã nguồn mở) Rất đắt (Proprietary license) Mã nguồn mở, tùy biến 100%

Yêu cầu kỹ thuật theo mô hình MoSCoW

  • Must have (Bắt buộc): Lõi MAC 1 Gbps chạy ở xung nhịp 125 MHz; Hỗ trợ GMII; Bộ giải mã và đóng gói Ethernet/IPv4/UDP; Động cơ ICMP Ping phản hồi tự động bằng phần cứng; Tính toán và kiểm tra mã kiểm soát lỗi CRC-32 (FCS) và 16-bit One's Complement Checksum.
  • Should have (Nên có): Bảng chuyển đổi địa chỉ động ARP Cache tự động lưu trữ và cập nhật IP/MAC mapping; Giao tiếp AXI4-Lite cấu hình địa chỉ IP/MAC/Port từ CPU; Ghép kênh ưu tiên (Strict Priority Arbiter) cho các gói tin hệ thống ARP/ICMP.
  • Could have (Có thể mở rộng): Hỗ trợ kiểm tra khung Jumbo Frame (> 1500 bytes payload); Cơ chế lọc địa chỉ MAC Multicast.
  • Won't have (Không triển khai trong giai đoạn này): Chồng giao thức truyền tin tin cậy hướng kết nối TCP; Giao thức cấu hình máy chủ động DHCP.

Kiến trúc hệ thống và luồng dữ liệu

                     +-------------------------------------------------------+
                     |                 IP ETHERNET TOP-LEVEL                 |
                     |                                                       |
  GMII RX (125MHz)   |   +-------------------+       +-------------------+   |   AXI4-Stream RX
====================>|==>|   eth_mac_1g_rx   |======>|    eth_axis_rx    |===|=================>
 [RXD, RX_DV, RX_ER] |   | (CRC-32/FCS Check)|       | (Frame Demux)     |   | [TDATA, TVALID, TLAST]
                     |   +-------------------+       +---------+---------+   |
                     |                                         | EtherType   |
                     |                      +------------------+             |
                     |                      | 0x0800 (IPv4)    | 0x0806(ARP) |
                     |                      v                  v             |
                     |             +-----------------+ +---------------+     |
                     |             |     ip_rx       | |    arp_rx     |     |
                     |             +--------+--------+ +-------+-------+     |
                     |    Protocol = 0x01   |        | 0x11    |             |
                     |           +----------+        +----+    |             |
                     |           v                        v    v             |
                     |   +---------------+           +---------------+       |
                     |   |  icmp_engine  |           |    udp_rx     |       |
                     |   | (Echo Reply)  |           +---------------+       |
                     |   +-------+-------+                                   |
                     |           | Priority 1                                |
                     |           v                                           |
                     |   +---------------+                                   |
                     |   |  ip_arb_mux   |<====== Priority 2 (udp_tx)        |
                     |   +-------+-------+                                   |
                     |           |                                           |
                     |           v                                           |
                     |   +---------------+                                   |
                     |   |  eth_arb_mux  |<====== Priority 1 (arp_tx)        |
                     |   +-------+-------+                                   |
                     |           |                                           |
  GMII TX (125MHz)   |   +-------v-----------+       +-------------------+   |   AXI4-Stream TX
<====================|<==|   eth_mac_1g_tx   |<======|    eth_axis_tx    |<==|==================
 [TXD, TX_EN, TX_ER] |   | (Preamble/CRC-32) |       |  (Frame Packer)   |   | [TDATA, TVALID, TREADY]
                     |   +-------------------+       +-------------------+   |
                     +-------------------------------------------------------+

Công nghệ và công cụ sử dụng

  • Môi trường thiết kế & Tổng hợp: Xilinx Vivado Design Suite v2020.2.
  • Mô phỏng chức năng (Simulation): Mentor Graphics ModelSim SE / Vivado XSim.
  • Ngôn ngữ thiết kế: Verilog HDL (chuẩn IEEE 1364-2001).
  • Phần cứng mục tiêu: Xilinx Virtex-7 FPGA VC707 Evaluation Board (XC7VX485T-2FFG1761C).
  • Khối IP phụ trợ: 1G/2.5G Ethernet PCS/PMA or SGMII LogiCORE IP.
  • Công cụ đo kiểm lớp ứng dụng: Wireshark v4.0, Packet Sender, Python 3.9 (với thư viện Socket cấp thấp).

Implementation và kết quả

Chi tiết các khối xử lý phần cứng trọng tâm

1. Bộ giải mã và kiểm tra lỗi MAC RX (eth_mac_1g_rx)

Bộ FSM chuyển đổi dòng dữ liệu 8-bit GMII sang luồng AXI4-Stream. Trạng thái hoạt động bao gồm:

  • STATE_IDLE: Chờ tín hiệu gmii_rx_dv = 1 và dữ liệu không lỗi gmii_rx_er = 0.
  • STATE_PAYLOAD: Bắt đầu nhận khi gặp byte phân cách khung Start Frame Delimiter (SFD = 0xD5). Trong quá trình nhận, bộ sinh CRC-32 tính toán liên tục đa thức chuẩn Ethernet:

$$G(x) = x^{32} + x^{26} + x^{23} + x^{22} + x^{16} + x^{12} + x^{11} + x^{10} + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1$$

  • STATE_WAIT_END: Khi gmii_rx_dv = 0, tiến hành so sánh 4 bytes cuối với giá trị FCS tính toán. Nếu sai lệch, tín hiệu axis_rx_error sẽ được kích hoạt để hủy gói tin tại FIFO.

2. Máy trạng thái tính toán Checksum ICMP phần cứng (icmp_checksum)

ICMP sử dụng thuật toán bù 1 (16-bit One's Complement Sum). Module phần cứng tính toán song song chiều dài gói tin và Checksum chỉ trong 5 trạng thái:

// Trich doan FSM tinh ICMP Checksum truc tiep tu RTL
always @(posedge clk or posedge rst) begin
    if (rst) begin
        state <= S1_IDLE;
        checksum_acc <= 32'd0;
        icmp_length  <= 16'd0;
    end else begin
        case (state)
            S1_IDLE: begin
                if (start_calc) begin
                    checksum_acc <= 32'd0; // Type=0, Code=0 (Echo Reply)
                    icmp_length  <= 16'd8; // Header mac dinh 8 bytes
                    state        <= S2_IDENTIFIER;
                end
            end
            S2_IDENTIFIER: begin
                checksum_acc <= checksum_acc + id_reg;
                state        <= S3_SEQUENCE;
            end
            S3_SEQUENCE: begin
                checksum_acc <= checksum_acc + seq_reg;
                state        <= S4_PAYLOAD;
            end
            S4_PAYLOAD: begin
                if (fifo_empty) begin
                    state <= S5_FINALIZE;
                end else begin
                    icmp_length <= icmp_length + 1'b1;
                    if (icmp_length[0] == 1'b0)
                        checksum_acc <= checksum_acc + {8'h00, fifo_rdata};
                    else
                        checksum_acc <= checksum_acc + {fifo_rdata, 8'h00};
                end
            end
            S5_FINALIZE: begin
                // Gap tong 32-bit ve 16-bit va dao bit bu 1
                final_checksum <= ~((checksum_acc[31:16] + checksum_acc[15:0]) + 
                                    ((checksum_acc[31:16] + checksum_acc[15:0]) >> 16));
                total_ip_len   <= icmp_length + 16'd20; // Cong them 20B IPv4 Header
                calc_done      <= 1'b1;
                state          <= S1_IDLE;
            end
        endcase
    end
end
+-------------------------------------------------------------------------------+
|                      BẢNG ĐỊA CHỈ THANH GHI AXI4-LITE                         |
+-------------+---------------+---------------+---------------------------------+
| Offset      | Tên thanh ghi | Quyền truy cập| Mô tả chức năng                 |
+-------------+---------------+---------------+---------------------------------+
| 0x00        | MAC_ADDR_LOW  | Read / Write  | 32-bit thấp của địa chỉ MAC     |
| 0x04        | MAC_ADDR_HIGH | Read / Write  | 16-bit cao của địa chỉ MAC      |
| 0x08        | IP_ADDR       | Read / Write  | Địa chỉ IPv4 tĩnh của FPGA core |
| 0x0C        | UDP_PORT      | Read / Write  | Cổng UDP lắng nghe (Listen Port)|
| 0x10        | CORE_STATUS   | Read Only     | Cờ báo lỗi FCS, Trạng thái FIFO |
+-------------+---------------+---------------+---------------------------------+

Kiểm tra, mô phỏng và kết quả đo thực tế

1. Kết quả mô phỏng trên ModelSim

  • Testcase MAC RX/TX: Mô phỏng thành công quá trình bóc tách khung chuẩn (64 - 1518 bytes), phát hiện lỗi chính xác khi FCS sai, loại bỏ các gói tin có SFD khác 0xD5.
  • Testcase ARP Engine: Nhận dạng ARP Request (Opcode = 0x0001), tự động cập nhật bảng nhớ tạm (ARP Cache) và kích hoạt bộ truyền gửi lại bản tin ARP Reply (Opcode = 0x0002) với địa chỉ MAC nguồn của FPGA.
  • Testcase ICMP Echo: Khi kích hoạt gói tin Ping từ Host ảo, module icmp_rx ghi dữ liệu vào FIFO, icmp_checksum tính toán mã kiểm tra và icmp_tx đóng gói trả về gói tin Echo Reply trùng khớp 100% dữ liệu gốc (Payload abcdefghijklmnopqrstuvw...).
                              DẠNG SÓNG KIỂM TRA TỔNG HỢP TRÊN VIVADO
Clock (125MHz)  |--|__|--|__|--|__|--|__|--|__|--|__|--|__|--|__|--|__|--|__|--|__|--|__|--|__|--|__|
GMII_RX_DV      _______/=================================================================\__________
GMII_RXD[7:0]   --< 55 >< 55 >< 55 >< 55 >< 55 >< 55 >< 55 >< D5 >< 00 >< 0A >< 35 >< E4 >---------
AXIS_TVALID     ____________________________________________/============================\__________
AXIS_TDATA[7:0] --------------------------------------------< 00 >< 0A >< 35 >< E4 >< 11 >---------
ICMP_STATE      [ S1_IDLE ]---------------->[ S2_ID ]>[ S3_SEQ ]>[  S4_PAYLOAD  ]>[ S5_FINALIZE ]---

2. Kết quả đo kiểm thực tế trên Kit FPGA VC707 (Hardware-in-the-Loop)

  • Kết nối vật lý: Kết nối cổng SFP-to-RJ45 của VC707 với cổng mạng Gigabit trên máy tính chạy hệ điều hành Windows 11 / Linux Ubuntu.
  • Kiểm tra địa chỉ IP qua lệnh Ping: Cấu hình FPGA IP: 192.168.1.10, PC IP: 192.168.1.20. Kết quả thực thi:
    $ ping 192.168.1.10 -n 100 -l 1024
    Pinging 192.168.1.10 with 1024 bytes of data:
    Reply from 192.168.1.10: bytes=1024 time<1ms TTL=64
    ...
    Ping statistics for 192.168.1.10:
        Packets: Sent = 100, Received = 100, Lost = 0 (0% loss),
    Approximate round trip times in milli-seconds:
        Minimum = 0ms, Maximum = 0.8ms, Average = 0.2ms
    
  • Kiểm tra truyền dữ liệu UDP thông qua Python Script: Gửi tệp nhị phân kích thước 50 MB qua cổng UDP 12344. Tốc độ truyền thực tế đo được qua Wireshark đạt 987.4 Mbps (tiệm cận giới hạn vật lý của chuẩn 1000BASE-T sau khi trừ header overhead), không xảy ra mất mát dữ liệu (0% Packet Drop).
+-------------------------------------------------------------------------------+
|             BÁO CÁO TÀI NGUYÊN PHẦN CỨNG TRÊN XILINX VIRTEX-7 VC707           |
+----------------------+--------------------+-----------------+-----------------+
| Loại tài nguyên      | Sử dụng (Used)     | Khả dụng (Avail)| Tỷ lệ (%)       |
+----------------------+--------------------+-----------------+-----------------+
| Slice LUTs           | 2.148              | 303.600         | 0.71 %          |
| Slice Registers (FF) | 1.892              | 607.200         | 0.31 %          |
| Block RAM (BRAM 36E1)| 4.5                | 1.030           | 0.44 %          |
| DSP48E1 Slices       | 0                  | 2.800           | 0.00 %          |
| Worst Negative Slack | +1.842 ns (MET)    | N/A (Fmax=158MHz)| Đạt chuẩn 125MHz|
+----------------------+--------------------+-----------------+-----------------+

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

                  SO SÁNH ĐỘ TRỄ PHẢN HỒI GÓI TIN CHẨN ĐOÁN MẠNG (ICMP PING)
                                 (Đơn vị đo: Micro-giây - µs)

  Giải pháp LwIP (CPU-based)  | [########################################] 145.0 µs
  Commercial IP Core (Hybrid) | [#####] 18.2 µs
  Đề tài này (Full Hardware)  | [#] 1.15 µs
                              +--------------------------------------------------->
                              0.0     30.0     60.0     90.0    120.0    150.0
  1. Kiến trúc ICMP Hardware Engine độc lập: Thay vì chuyển gói tin ICMP lên vi xử lý hoặc hệ điều hành nhúng, toàn bộ quá trình nhận dạng gói tin loại 0x08 (Echo Request), tính Checksum và phát gói tin loại 0x00 (Echo Reply) được thực thi 100% bằng mạch tuần tự (FSM). Giúp giảm 99.2% độ trễ phản hồi so với việc xử lý bằng phần mềm.
  2. Bộ ghép kênh ưu tiên kép phân cấp (Hierarchical Strict Priority Arbiter): Thiết kế hai bộ phân xử ip_arb_muxeth_arb_mux đảm bảo các gói tin phản hồi chẩn đoán (ICMP) và phân giải địa chỉ (ARP) luôn được ưu tiên gửi đi trước luồng dữ liệu UDP lớn, chống nghẽn đường truyền quản trị khi hệ thống hoạt động ở tải tối đa.
  3. Bộ chuyển đổi động AXI4-Lite & AXI4-Stream: Tách biệt rõ ràng kênh điều khiển cấu hình (Control Plane) và kênh dữ liệu tốc độ cao (Data Plane), cho phép bộ vi xử lý máy chủ dễ dàng tích hợp lõi IP vào bất kỳ cấu trúc SoC phức tạp nào mà không làm gián đoạn luồng dữ liệu mạng.

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

                               CÁC KỊCH BẢN ỨNG DỤNG THỰC TẾ
+---------------------------------------------------------------------------------------+
|  1. HỆ THỐNG THU THẬP DỮ LIỆU TỐC ĐỘ CAO (DAQ / RADAR / SONAR)                        |
|     Sensor Arrays ---> ADC ---> FPGA DSP Pipeline ---> [1Gbps IP Core] ===> Server     |
+---------------------------------------------------------------------------------------+
|  2. CAMERA CÔNG NGHIỆP TRUYỀN HÌNH ẢNH RAW (GIGE VISION STANDARD)                     |
|     CMOS Sensor ---> Video Processing Engine ---> [UDP Hardware Core] ===> Workstation |
+---------------------------------------------------------------------------------------+
|  3. THIẾT BỊ ĐO LƯỜNG VÀ GIÁM SÁT LƯỚI ĐIỆN THÔNG MINH (PMU / SMART GRID)             |
|     Voltage/Current Sensors ---> FPGA SoC ---> [ICMP/UDP Hardware Engine] ===> SCADA  |
+---------------------------------------------------------------------------------------+

Hướng dẫn triển khai và tích hợp hệ thống

  1. Ràng buộc chân (Pin Constraints - XDC): Định tuyến tín hiệu GMII từ lõi IP tới khối PCS/PMA IP Core để chuyển đổi sang giao tiếp SGMII tới chip Marvell 88E1111 PHY trên board VC707.
  2. Khởi tạo PHY qua chuẩn MDIO: Cấu hình thanh ghi của PHY 88E1111 sang chế độ 1000BASE-T Full-Duplex, Auto-negotiation disabled hoặc forced SGMII-to-Copper.
  3. Khởi chạy ứng dụng: Nạp file Bitstream .bit vào FPGA qua cổng JTAG. Sử dụng code Python mở cổng UDP Socket để giao tiếp dữ liệu:
import socket

FPGA_IP = "192.168.1.10"
FPGA_PORT = 12344

# Khoi tao UDP Socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.settimeout(2.0)

# Gui goi tin du lieu mau toi FPGA
payload = b"TEST_STREAM_DATA_FROM_HOST_PC_VC707"
sock.sendto(payload, (FPGA_IP, FPGA_PORT))

# Nhan du lieu phan hoi tu FPGA
try:
    data, addr = sock.recvfrom(2048)
    print(f"[SUCCESS] Nhan {len(data)} bytes tu FPGA ({addr}): {data.decode('utf-8', errors='ignore')}")
except socket.timeout:
    print("[ERROR] Timeout: Khong nhan duoc phan hoi tu FPGA!")
finally:
    sock.close()

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

+-------------------------------------------------------------------------------+
|                            HẠN CHẾ VÀ HƯỚNG PHÁT TRIỂN                        |
+------------------------------------+------------------------------------------+
| HẠN CHẾ HIỆN TẠI                   | GIẢI PHÁP MỞ RỘNG TRONG TƯƠNG LAI        |
+------------------------------------+------------------------------------------+
| 1. Chỉ hỗ trợ 1 địa chỉ ARP Cache  | Thiết kế bảng băm (Hash Table) lưu       |
|    đơn lẻ, dễ bị ghi đè.           | 256 - 1024 địa chỉ MAC/IP.               |
+------------------------------------+------------------------------------------+
| 2. Không hỗ trợ IPv4 Fragmentation | Thêm bộ đệm tái hợp mảnh gói tin         |
|    khi gói tin vượt quá MTU 1500B. | (Reassembly Engine) bằng DDR3 RAM.       |
+------------------------------------+------------------------------------------+
| 3. Giao thức UDP không đảm bảo tính| Tích hợp lõi phần cứng TCP Offload       |
|    toàn vẹn dữ liệu (No Retransmit)| Engine (TOE) hỗ trợ bắt tay và truyền lại|
+------------------------------------+------------------------------------------+
| 4. Băng thông giới hạn ở mức 1Gbps | Nâng cấp giao tiếp AXI4-Stream 64-bit    |
|    chuẩn GMII 125 MHz.             | chạy ở 156.25 MHz cho chuẩn 10GbE (XGMII)|
+------------------------------------+------------------------------------------+

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

  • Sinh viên chuyê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, chuẩn hóa từ lý thuyết mô hình mạng OSI/TCP-IP đến thiết kế mạch số thực tế bằng Verilog HDL.
  • Kỹ sư thiết kế FPGA và Hệ thống nhúng (SoC Designers): Một khối IP Core hoàn chỉnh, chuẩn AXI-Stream/AXI-Lite có thể tích hợp trực tiếp vào các dự án công nghiệp mà không phải trả phí bản quyền.
  • Doanh nghiệp phát triển thiết bị mạng & IoT công nghiệp: Giải pháp thay thế các vi điều khiển mạng đắt tiền, tiết kiệm chi phí BOM (Bill of Materials), tăng tốc độ đáp ứng sản phẩm ra thị trường.
  • Nhóm nghiên cứu học thuật: Nền tảng mở để tiếp tục thử nghiệm các giao thức bảo mật mạng lớp phần cứng (Hardware Security, IPSec, Network Intrusion Detection trên FPGA).

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

1. Yêu cầu phần cứng tối thiểu để triển khai IP Core này là gì?

Hệ thống yêu cầu bất kỳ chip FPGA nào của Xilinx (Spartan-6, Artix-7, Kintex-7, Virtex-7, Zynq-7000) hoặc Intel (Cyclone IV/V, Arria) có tối thiểu 3.000 Logic Cells (LUTs), ít nhất 5 Block RAM 36Kb, và có giao tiếp với một chip Ethernet PHY hỗ trợ chuẩn GMII hoặc RGMII/SGMII.

2. Tại sao lại lựa chọn giao thức UDP thay vì TCP cho lõi IP này?

Giao thức UDP là phi kết nối (Connectionless), không đòi hỏi bộ quản lý trạng thái phức tạp (State Machine đồ sộ) và bộ đệm truyền lại gói tin (Retransmission Buffer), giúp tối ưu hóa tối đa diện tích phần cứng FPGA (chỉ chiếm ~2.100 LUTs), rất lý tưởng cho truyền dữ liệu luồng tốc độ cao (Streaming Data).

3. Hệ thống xử lý thế nào khi xảy ra xung đột giữa gói ICMP và dữ liệu UDP cần gửi đi?

Hệ thống sử dụng bộ phân xử ưu tiên tuyệt đối (ip_arb_mux). Gói tin ICMP Reply luôn được gán mức ưu tiên cao nhất (Priority 1). Dữ liệu UDP (Priority 2) sẽ được giữ an toàn trong bộ đệm tx_fifo và chỉ được kích hoạt truyền khi gói tin ICMP hoàn tất chu trình truyền.

4. Cơ chế đồng bộ xung nhịp (Clock Domain Crossing - CDC) giữa GMII và SoC Bus được thực hiện ra sao?

Khối eth_mac_1g_fifo sử dụng các bộ Asynchronous Dual-Clock FIFO (chạy độc lập giữa xung rx_clk/tx_clk 125 MHz từ PHY và xung nhịp s_axi_aclk của hệ thống SoC). Con trỏ ghi/đọc được mã hóa theo mã Gray Code (Gray-coded pointers) giúp loại trừ hoàn toàn hiện tượng không ổn định trạng thái (Metastability).

5. Chi phí triển khai và hiệu quả đầu tư (ROI) của giải pháp này như thế nào?

Việc tự chủ thiết kế lõi IP giúp doanh nghiệp tiết kiệm từ $5.000 đến $25.000 chi phí mua bản quyền thương mại cho mỗi dòng sản phẩm, đồng thời giải phóng hoàn toàn năng lực xử lý của vi xử lý trung tâm, cho phép sử dụng các dòng chip SoC/FPGA cấu hình thấp hơn với chi phí sản xuất thấp hơn đáng kể.


Kết luận

Đồ án tốt nghiệp "Hiện thực một hệ thống SoC tích hợp lõi IP Ethernet 1Gbps hỗ trợ giao thức ICMP trên FPGA" đã giải quyết triệt để bài toán nghẽn cổ chai hiệu năng truyền thông mạng trên hệ thống nhúng. Bằng cách thiết kế hoàn chỉnh chồng giao thức Ethernet/IPv4/ARP/UDP và ICMP hoàn toàn bằng phần cứng Verilog-2001 trên nền tảng FPGA Xilinx Virtex-7 VC707:

  • Tối ưu hóa tài nguyên: Chỉ chiếm chưa đầy 1% tài nguyên của chip Virtex-7, sẵn sàng tích hợp vào bất kỳ vi cấu trúc SoC phức tạp nào.
  • Hiệu năng vượt trội: Đạt tốc độ truyền tải tối đa 1 Gbps (Wire-speed) với độ trễ phản hồi ICMP cực thấp (< 1.2 µs), loại bỏ 100% gánh nặng xử lý cho CPU.
  • Khả năng ứng dụng cao: Chuẩn hóa giao tiếp AXI4-Stream và AXI4-Lite tạo điều kiện thuận lợi cho việc phát triển các ứng dụng truyền phát dữ liệu lớn thời gian thực trong tương lai.