This project is part of a complete end-to-end trading system:
- Main Repository: fpga-trading-systems
- Project Number: 31 of 35
- Category: FPGA Core
- Dependencies: None - project will not be updated beyond this point
This project integrates the ALINX 10GbE UDP vendor design with a UART debug interface for monitoring network traffic and system status. It serves as the foundation for ITCH market data reception on the AX7325B (Kintex-7 XC7K325T) FPGA.
- 10GbE SFP+ Ethernet: Xilinx 10G Ethernet Subsystem with GTX transceivers
- UDP Protocol Stack: Full UDP/IP implementation with ARP handling
- Loopback/Speed Test Modes: Button-controlled mode switching for testing
- UART Debug Output: 115200 baud serial output for monitoring packet counts and status
- LED Status Indicators: Visual feedback for link status and system state
+-------------------+ +-------------------+ +-------------------+
| SFP+ PHY | --> | 10G Ethernet | --> | UDP/IP Stack |
| (GTX 10.3125G) | | MAC Subsystem | | (alinx_udp_ip) |
+-------------------+ +-------------------+ +-------------------+
|
+-------------------+ v
| UART Debug TX | <-- +-------------------+
| (115200 baud) | | UDP Read/Write |
+-------------------+ | Controller |
| (Loopback/Speed) |
+-------------------+
| Parameter | Value |
|---|---|
| Local IP | 192.168.0.215 |
| Local MAC | 00:0a:35:01:fe:c0 |
| Destination IP | 192.168.0.144 |
| UDP Port | 8080 |
| LED | Status |
|---|---|
| LED0 | PCS Block Locked |
| LED1 | RX Synchronized |
| LED2 | PLL Locked |
| LED3 | UDP Active |
| Button | Function |
|---|---|
| BTN0 (rst_n) | System Reset (active low) |
| BTN1 (push_button) | Toggle Loopback/Speed Mode |
| BTN2 (debug_btn) | Trigger UART Debug Output |
Press the debug button to output current status:
10G:Y RX:00000042 TX:00000042
10G:Y/N- UDP active status (Y = active, N = inactive)RX:xxxxxxxx- Received packet count (hex)TX:xxxxxxxx- Transmitted packet count (hex)
- Vivado 2019.1+ with Enterprise license (required for XC7K325T)
- ALINX UDP IP core (included in ip_repo/) - License required to compile IP
-
Open Vivado and create a new project targeting
xc7k325tffg900-2 -
Add source files:
src/top/udp_10gbe_uart_top.v (Top-level, set as top) src/10gbe/*.v (10GbE vendor modules) src/uart/uart_tx.vhd (UART transmitter) src/btn/*.vhd (Button debouncer, edge detector) src/fifo/fifo.vhd (Generic FIFO) -
Add IP repository path:
ip_repo/ -
Add/regenerate Xilinx IP cores:
- clk_wiz_0: 200 MHz input, 100 MHz + 200 MHz outputs
- axi_10g_ethernet: 10GBASE-R with shared logic in core
- axis_fifo: 74-bit x 512 deep
- udp_ip_0: Custom UDP/IP stack from ip_repo
-
Add constraints:
constraints/ax7325b_10gbe_uart.xdc -
Run synthesis and implementation
# Create project
create_project p31_10gbe_uart ./vivado_project -part xc7k325tffg900-2
# Add sources
add_files -norecurse {
src/top/udp_10gbe_uart_top.v
src/10gbe/udp_test.v
src/10gbe/udp_read_write_ctrl.v
src/10gbe/ax_debounce.v
src/10gbe/axi_10g_ethernet_0_sync_reset.v
src/10gbe/axi_10g_ethernet_0_axi_lite_sm.v
src/uart/uart_tx.vhd
src/btn/button_debouncer.vhd
src/btn/edge_detector.vhd
src/fifo/fifo.vhd
}
# Add IP repo
set_property ip_repo_paths {ip_repo} [current_project]
update_ip_catalog
# Add constraints
add_files -fileset constrs_1 -norecurse constraints/ax7325b_10gbe_uart.xdc
# Set top module
set_property top udp_10gbe_uart_top [current_fileset]
# Run build
launch_runs impl_1 -to_step write_bitstream -jobs 8-
Configure network interface:
sudo ip addr add 192.168.0.144/24 dev eth0 sudo ip link set eth0 up -
Connect SFP+ fiber (crossover: FPGA TX -> PC RX, FPGA RX -> PC TX)
-
Verify link:
# Check LEDs: LED0-2 should be ON when link is up # LED3 will light after ARP exchange ping 192.168.0.215
# Terminal 1: Listen for echoed packets
nc -u -l 8080
# Terminal 2: Send test data
echo "Hello FPGA" | nc -u 192.168.0.215 8080# Connect to UART (115200 8N1)
picocom -b 115200 /dev/ttyUSB0
# Press debug button on FPGA to see packet counts31-10gbe-uart-debug/
├── README.md
├── constraints/
│ └── ax7325b_10gbe_uart.xdc
├── docs/
├── ip_repo/
│ └── udp_ip_1.0/
│ └── hdl/
│ └── udp_top.v
├── scripts/
├── src/
│ ├── 10gbe/
│ │ ├── udp_test.v
│ │ ├── udp_read_write_ctrl.v
│ │ ├── ax_debounce.v
│ │ ├── axi_10g_ethernet_0_sync_reset.v
│ │ └── axi_10g_ethernet_0_axi_lite_sm.v
│ ├── btn/
│ │ ├── button_debouncer.vhd
│ │ └── edge_detector.vhd
│ ├── fifo/
│ │ └── fifo.vhd
│ ├── top/
│ │ └── udp_10gbe_uart_top.v
│ └── uart/
│ └── uart_tx.vhd
└── test/
-
Vivado IP Encryption: The ALINX UDP IP (
alinx_udp_ip.vp) is encrypted with 2017 keys and require vendor IP license. -
Mixed VHDL/Verilog: Vivado handles mixed HDL compilation, but ensure all VHDL files are properly listed in the project.
Status: Development Created: January 2026 Author: Adilson Dias
Target Board: ALINX AX7325B (Kintex-7 XC7K325T-2FFG900I)