Giter VIP home page Giter VIP logo

fpga-ethernet-udp's Introduction

FPGA Ethernet UDP Transmitter

This project creates a module that can be used to interface with an Ethernet PHY for transmitting UDP packets. Only transmission is supported, and there is no receiver implemented on the FPGA.

The module is built specifically for streaming fixed width data from the FPGA. For example, the module works well for streaming data sampled on an ADC or data generated by some process. Though the module can somewhat handle variable sized data, it is not directly supported. To send variable sized data, each data point must be padded to the size of the largest data point to be sent. The size of the data points must be declared up front and the module guarantees that a single data point will never be fragmented accross multiple packets.

This project was specifically built for and tested on the Digilent Arty A7, which uses a Xilinx Artix-7 XC7A100T FPGA and has a Texas Instruments DP83848J Ethernet PHY controller. However, the MII standard will work with any PHY.

Will this work in my project?

You should use this module if

  • You need high-speed data transfer over Ethernet/UDP
  • The data to be sent is all the same size
  • You need to assign the the FPGA specific IP, MAC, and port addresses

You should not use this module if

  • You need a high reliability connection based protocol like TCP
  • You need the FPGA to receive packets
  • You need DHCP

Using in a Project

To use this module in a project, there are two files that must be included

  • src/hdl/eth_udp.sv
  • src/ip/eth_udp_fifo_async/eth_udp_fifo_async.xci

The ethernet_udp_transmit module is to be instantiated, and it internally uses the eth_udp_fifo_async IP.

If the Xilinx IP is locked, then it is likely that the IP was configured for a different part. Check this by running report_ip_status in the Tcl console, and the fix is to run upgrade_ip [get_ips *].

Building the HDL

Open Xilinx Vivado and select Tools > Run Tcl Script..., then select the generate_project.tcl script in the file exporer. The script will run and produce the Vivado project in a new proj/ directory by importing all of the project sources. If the project fails to be created, it is most likely that the proj/ directory already exists.

Testing

The project can be tested using the the ether_tester program. The tester generates a pseudo-random sequence of bytes on the FPGA to send over UDP, and the test program verifies that the sequence it receives is correct.

To use the test program, make sure that Cargo is installed for compiling Rust programs, then navigate to the ether_tester directory and run

cargo build

to download dependencies and build the project. To view the program help information, run

cargo run -- -h

A sample invocation of the program is

cargo run --                              \
    -b256                                 \
    --serial-port=/dev/ttyUSB1:115200     \
    --src=8.8.8.8:4096,aa:bb:cc:dd:ee:ff  \
    --dest=1.2.3.4:4096,00:11:22:33:44:55 \
    -r1000

In order, the arguments mean the following.

  1. Generate UDP packets with 256 bytes of data. This depends on the configuration of the FPGA.
  2. Set the serial port and baudrate to use. The baudrate depends on the FPGA configuration.
  3. Set the IP address, port number, and MAC address of the FPGA. These are dynamic and can be changed at any time. They do not depend on the FPGA configuration.
  4. Set the IP address, port number, and MAC address of the host to receive packets from the FPGA.
  5. Perform 1000 tests.

fpga-ethernet-udp's People

Contributors

adamchristiansen avatar dependabot[bot] avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.