How oct-fpga/udp-network-demo works
This repository demonstrates sending UDP packets between two U280 FPGA systems, with optional AES-128 encryption on transmit and decryption on receive, or pass-through. A host application reads packet data, configures network settings, and launches the FPGA kernels; received data is copied back to host memory. The README also documents dual-port operation and Python/PYNQ sender and receiver examples. The network and CMAC kernels are supplied as prebuilt objects, so their internal implementation and exact interconnect are not represented here; the sampled host excerpts show register configuration and kernel launches.
Main entry points: networklayer.xo UDP network layer · udp_host_sender_if3.cpp Sender host · udp_host_receiver_if3.cpp Receiver host · rxkrnl.cpp Receive kernel
Components 14
Host applications
- Sender host
host/udp_host_sender_if3.cpp - Receiver host
host/udp_host_receiver_if3.cpp - Packet text
host/alice29.txt - Python sender
notebooks/sender.py - Python receiver
notebooks/receiver.py - Received packet data
User kernels
- Transmit kernel
user_krnl/src/txkrnl.cpp - Receive kernel
user_krnl/src/rxkrnl.cpp - AES routines
user_krnl/src/aes/AESfunctions.cpp - AES tables
user_krnl/src/aes/AEStables.h
Network hardware
- UDP network layer
networklayer/networklayer.xo - CMAC interfaces
cmac/cmac_0.xo
Remote endpoint
- Other U280
Other components
- Operator
Connections 27
- Operator → Sender host: runs sender
- Operator → Receiver host: runs receiver
- Packet text → Sender host: reads packets
- Sender host → UDP network layer: configures network
- Sender host → CMAC interfaces: checks link
- Sender host → Transmit kernel: launches kernel
- Sender host → Transmit kernel: sends buffer
- Transmit kernel → AES routines: encrypts with
- AES routines → AES tables: uses tables
- Transmit kernel → UDP network layer: streams packets
- UDP network layer → CMAC interfaces: transmits frames
- CMAC interfaces → Other U280: sends packets
- Other U280 → CMAC interfaces: delivers packets
- CMAC interfaces → UDP network layer: receives frames
- Receiver host → UDP network layer: configures network
- Receiver host → CMAC interfaces: checks link
- Receiver host → Receive kernel: launches kernel
- UDP network layer → Receive kernel: streams packets
- Receive kernel → AES routines: decrypts with
- Receive kernel → Receiver host: writes host buffer
- Receiver host → Received packet data: reads buffer
- Python sender → Packet text: reads packets
- Python sender → UDP network layer: configures network
- Python sender → Transmit kernel: launches kernel
- Python receiver → UDP network layer: configures network
- Python receiver → Receive kernel: launches kernel
- Receive kernel → Python receiver: writes host buffer