All Projects → corundum → Corundum

corundum / Corundum

Licence: other
Open source, high performance, FPGA-based NIC

Labels

Projects that are alternatives of or similar to Corundum

Mor1kx
mor1kx - an OpenRISC 1000 processor IP core
Stars: ✭ 326 (-43.5%)
Mutual labels:  verilog
Scr1
SCR1 is a high-quality open-source RISC-V MCU core in Verilog
Stars: ✭ 393 (-31.89%)
Mutual labels:  verilog
Vtr Verilog To Routing
Verilog to Routing -- Open Source CAD Flow for FPGA Research
Stars: ✭ 466 (-19.24%)
Mutual labels:  verilog
Riscv Formal
RISC-V Formal Verification Framework
Stars: ✭ 328 (-43.15%)
Mutual labels:  verilog
Microwatt
A tiny Open POWER ISA softcore written in VHDL 2008
Stars: ✭ 383 (-33.62%)
Mutual labels:  verilog
Cascade
A Just-In-Time Compiler for Verilog from VMware Research
Stars: ✭ 413 (-28.42%)
Mutual labels:  verilog
Reduceron
FPGA Haskell machine with game changing performance. Reduceron is Matthew Naylor, Colin Runciman and Jason Reich's high performance FPGA softcore for running lazy functional programs, including hardware garbage collection. Reduceron has been implemented on various FPGAs with clock frequency ranging from 60 to 150 MHz depending on the FPGA. A high degree of parallelism allows Reduceron to implement graph evaluation very efficiently. This fork aims to continue development on this, with a view to practical applications. Comments, questions, etc are welcome.
Stars: ✭ 308 (-46.62%)
Mutual labels:  verilog
Uhd
The USRP™ Hardware Driver Repository
Stars: ✭ 544 (-5.72%)
Mutual labels:  verilog
Awesome Hdl
Hardware Description Languages
Stars: ✭ 385 (-33.28%)
Mutual labels:  verilog
Open Fpga Verilog Tutorial
Learn how to design digital systems and synthesize them into an FPGA using only opensource tools
Stars: ✭ 464 (-19.58%)
Mutual labels:  verilog
Verilog Axi
Verilog AXI components for FPGA implementation
Stars: ✭ 349 (-39.51%)
Mutual labels:  verilog
Apio
🌱 Open source ecosystem for open FPGA boards
Stars: ✭ 366 (-36.57%)
Mutual labels:  verilog
Leflow
Enabling Flexible FPGA High-Level Synthesis of Tensorflow Deep Neural Networks
Stars: ✭ 414 (-28.25%)
Mutual labels:  verilog
Fpga Imaging Library
An open source library for image processing on FPGA.
Stars: ✭ 325 (-43.67%)
Mutual labels:  verilog
Platformio Atom Ide
PlatformIO IDE for Atom: The next generation integrated development environment for IoT
Stars: ✭ 475 (-17.68%)
Mutual labels:  verilog
Riffa
The RIFFA development repository
Stars: ✭ 320 (-44.54%)
Mutual labels:  verilog
Mips Cpu
MIPS CPU implemented in Verilog
Stars: ✭ 409 (-29.12%)
Mutual labels:  verilog
Platformio Core
PlatformIO is a professional collaborative platform for embedded development 👽 A place where Developers and Teams have true Freedom! No more vendor lock-in!
Stars: ✭ 5,539 (+859.97%)
Mutual labels:  verilog
Odrivehardware
High performance motor control
Stars: ✭ 498 (-13.69%)
Mutual labels:  verilog
Sd2snes
SD card based multi-purpose cartridge for the SNES
Stars: ✭ 418 (-27.56%)
Mutual labels:  verilog

Corundum Readme

Build Status

GitHub repository: https://github.com/corundum/corundum

Google group: https://groups.google.com/d/forum/corundum-nic

Introduction

Corundum is an open-source, high-performance FPGA-based NIC. Features include a high performance datapath, 10G/25G/100G Ethernet, PCI express gen 3, a custom, high performance, tightly-integrated PCIe DMA engine, many (1000+) transmit, receive, completion, and event queues, scatter/gather DMA, MSI interrupts, multiple interfaces, multiple ports per interface, per-port transmit scheduling including high precision TDMA, flow hashing, RSS, checksum offloading, and native IEEE 1588 PTP timestamping. A Linux driver is included that integrates with the Linux networking stack. Development and debugging is facilitated by an extensive simulation framework that covers the entire system from a simulation model of the driver and PCI express interface on one side to the Ethernet interfaces on the other side.

Corundum has several unique architectural features. First, transmit, receive, completion, and event queue states are stored efficiently in block RAM or ultra RAM, enabling support for thousands of individually-controllable queues. These queues are associated with interfaces, and each interface can have multiple ports, each with its own independent scheduler. This enables extremely fine-grained control over packet transmission. Coupled with PTP time synchronization, this enables high precision TDMA.

Corundum currently supports Xilinx Virtex 7, UltraScale, and UltraScale+ series devices. Designs are included for the following FPGA boards:

  • Alpha Data ADM-PCIE-9V3 (Xilinx Virtex UltraScale+ XCVU3P)
  • Exablaze ExaNIC X10 (Xilinx Kintex UltraScale XCKU035)
  • Exablaze ExaNIC X25 (Xilinx Kintex UltraScale+ XCKU3P)
  • Silicom [email protected] (Xilinx Kintex UltraScale+ XCKU15P)
  • NetFPGA SUME (Xilinx Virtex 7 XC7V690T)
  • Xilinx Alveo U50 (Xilinx Virtex UltraScale+ XCU50)
  • Xilinx Alveo U200 (Xilinx Virtex UltraScale+ XCU200)
  • Xilinx Alveo U250 (Xilinx Virtex UltraScale+ XCU250)
  • Xilinx Alveo U280 (Xilinx Virtex UltraScale+ XCU280)
  • Xilinx VCU108 (Xilinx Virtex UltraScale XCVU095)
  • Xilinx VCU118 (Xilinx Virtex UltraScale+ XCVU9P)
  • Xilinx VCU1525 (Xilinx Virtex UltraScale+ XCVU9P)
  • Xilinx ZCU106 (Xilinx Zynq UltraScale+ XCZU7EV)

For operation at 10G and 25G, Corundum uses the open source 10G/25G MAC and PHY modules from the verilog-ethernet repository, no extra licenses are required. However, it is possible to use other MAC and/or PHY modules. Operation at 100G currently requires using the Xilinx CMAC core with RS-FEC enabled, which is covered by the free CMAC license on Xilinx UltraScale+ parts.

Documentation

Block Diagram

Corundum block diagram

Block diagram of the Corundum NIC. PCIe HIP: PCIe hard IP core; AXIL M: AXI lite master; DMA IF: DMA interface; PTP HC: PTP hardware clock; TXQ: transmit queue manager; TXCQ: transmit completion queue manager; RXQ: receive queue manager; RXCQ: receive completion queue manager; EQ: event queue manager; MAC + PHY: Ethernet media access controller (MAC) and physical interface layer (PHY).

Modules

cmac_pad module

Frame pad module for 512 bit 100G CMAC TX interface. Zero pads transmit frames to minimum 64 bytes.

cpl_op_mux module

Completion operation multiplexer module. Merges completion write operations from different sources to enable sharing a single cpl_write module instance.

cpl_queue_manager module

Completion queue manager module. Stores device to host queue state in block RAM or ultra RAM.

cpl_write module

Completion write module. Responsible for enqueuing completion and event records into the completion queue managers and writing records into host memory via DMA.

desc_fetch module

Descriptor fetch module. Responsible for dequeuing descriptors from the queue managers and reading descriptors from host memory via DMA.

desc_op_mux module

Descriptor operation multiplexer module. Merges descriptor fetch operations from different sources to enable sharing a single desc_fetch module instance.

event_mux module

Event mux module. Enables multiple event sources to feed the same event queue.

mqnic_interface module

Interface module. Contains the event queues, interface queues, and ports.

mqnic_port module

Port module. Contains the transmit and receive datapath components, including transmit and receive engines and checksum and hash offloading.

queue_manager module

Queue manager module. Stores host to device queue state in block RAM or ultra RAM.

rx_checksum module

Receive checksum computation module. Computes 16 bit checksum of Ethernet frame payload to aid in IP checksum offloading.

rx_engine module

Receive engine. Manages receive datapath operations including descriptor dequeue and fetch via DMA, packet reception, data writeback via DMA, and completion enqueue and writeback via DMA. Handles PTP timestamps for inclusion in completion records.

rx_hash module

Receive hash computation module. Extracts IP addresses and ports from packet headers and computes 32 bit Toeplitz flow hash.

tdma_ber_ch module

TDMA bit error ratio (BER) test channel module. Controls PRBS logic in Ethernet PHY and accumulates bit errors. Can be configured to bin error counts by TDMA timeslot.

tdma_ber module

TDMA bit error ratio (BER) test module. Wrapper for a tdma_scheduler and multiple instances of tdma_ber_ch.

tdma_scheduler module

TDMA scheduler module. Generates TDMA timeslot index and timing signals from PTP time.

tx_checksum module

Transmit checksum computation and insertion module. Computes 16 bit checksum of frame data with specified start offset, then inserts computed checksum at the specified position.

tx_engine module

Transmit engine. Manages transmit datapath operations including descriptor dequeue and fetch via DMA, packet data fetch via DMA, packet transmission, and completion enqueue and writeback via DMA. Handles PTP timestamps for inclusion in completion records.

tx_scheduler_ctrl_tdma module

TDMA transmit scheduler control module. Controls queues in a transmit scheduler based on PTP time, via a tdma_scheduler instance.

tx_scheduler_rr module

Round-robin transmit scheduler. Determines which queues from which to send packets.

Source Files

cmac_pad.v               : Pad frames to 64 bytes for CMAC TX
cpl_op_mux.v             : Completion operation mux
cpl_queue_manager.v      : Completion queue manager
cpl_write.v              : Completion write module
desc_fetch.v             : Descriptor fetch module
desc_op_mux.v            : Descriptor operation mux
event_mux.v              : Event mux
event_queue.v            : Event queue
mqnic_interface.v        : Interface
mqnic_port.v             : Port
queue_manager.v          : Queue manager
rx_checksum.v            : Receive checksum offload
rx_engine.v              : Receive engine
rx_hash.v                : Receive hashing module
tdma_ber_ch.v            : TDMA BER channel
tdma_ber.v               : TDMA BER
tdma_scheduler.v         : TDMA scheduler
tx_checksum.v            : Transmit checksum offload
tx_engine.v              : Transmit engine
tx_scheduler_ctrl_tdma.v : TDMA transmit scheduler controller
tx_scheduler_rr.v        : Round robin transmit scheduler

Testing

Running the included testbenches requires cocotb, cocotbext-axi, cocotbext-eth, cocotbext-pcie, scapy, and Icarus Verilog. The testbenches can be run with pytest directly (requires cocotb-test), pytest via tox, or via cocotb makefiles.

Publications

  • A. Forencich, A. C. Snoeren, G. Porter, G. Papen, Corundum: An Open-Source 100-Gbps NIC, in FCCM'20, Paper, Presentation

  • J. A. Forencich, System-Level Considerations for Optical Switching in Data Center Networks, Paper

Citation

If you use Corundum in your project please cite one of the following papers and/or link to the github project:

@inproceedings{forencich2020fccm,
    author = {Alex Forencich and Alex C. Snoeren and George Porter and George Papen},
    title = {Corundum: An Open-Source {100-Gbps} {NIC}},
    booktitle = {28th IEEE International Symposium on Field-Programmable Custom Computing Machines},
    year = {2020},
}

@phdthesis{forencich2020thesis,
    author = {John Alexander Forencich},
    title = {System-Level Considerations for Optical Switching in Data Center Networks},
    school = {UC San Diego},
    year = {2020},
    url = {https://escholarship.org/uc/item/3mc9070t},
}

Dependencies

Corundum internally uses the following libraries:

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].