1 of 8

Corundum status updates

Alex Forencich

1/30/2023

2 of 8

Agenda

  • Status updates

3 of 8

Status update summary

  • Bugs
    • FIFO memory inference issue (in progress)
  • Simulation updates
  • Priority flow control (todo)
  • AXI Virtual FIFO (in progress)
  • Switch version of Corundum

4 of 8

Bugs: FIFO memory inference issue

  • Seeing TX packets with incorrect IP layer checksums, only on Intel devices
  • MLE traced the issue to FIFO between TX engine and TX checksum compute block incorrectly setting “enable” bit
  • Appears to be a Quartus tool bug related to merging pipeline registers into MLABs
    • Connecting RAM output register to logic analyzer or adding “preserve” attribute results in the bug disappearing
  • Status: reported to Intel

5 of 8

Simulation updates

  • Verilator 5.006 (released Jan 22) fixes the main bug that was breaking cocotb integration
    • Verilator is much faster than Icarus Verilog and should significantly improve simulation performance
    • Looking at adding Verilator to CI pipeline
    • Looking in to lint complaints (Verilator is highly pedantic)
  • Simulation model updates
    • Fixed CI and (python) code coverage
    • Optimizations to improve simulation performance
      • Mainly by putting sources/sinks to “sleep” when idle

6 of 8

Priority Flow Control

  • Starting to look at supporting PFC in Corundum
  • HW
    • PFC frame TX/RX, pause quanta counters
    • Per-TC queues
    • Connection to TX/RX queues and PFC frame logic
    • Internal flow control
    • TC-aware/per-TC scheduling
  • SW
    • Driver support
  • Outstanding questions
    • How to map RX traffic to priority levels (and is this necessary)?
    • How to efficiently handle multiple traffic classes in HW?
    • What needs to be done in the driver?

7 of 8

AXI virtual FIFO

  • Large packet buffer capability in DRAM
  • Store both packet data as well as sideband data
  • Intent is to support operation at 100G with all packet sizes
    • 2x DDR4-2400 channels or 2-4 HBM ports
    • Main bottleneck is memory BW, so need efficient encoding scheme for framing and sideband data
  • Status
    • Reworking FIFO channel module to support segments
    • Working on encode/decode logic

8 of 8

Switch version of Corundum

  • Context: two different research groups interested in an FPGA-based packet switch (PFC, TSN)
    • Is anyone else interested in helping out?
  • Capabilities
    • 10G-100G operation with reasonable port count
    • Multiple traffic classes/virtual channels
    • Switching capabilities – Ethernet switching, IP routing, match/action…
    • Reasonable resource utilization
  • Target boards
    • Alveo or similar PCIe form factor – 2-4 QSFP, 2-4x 100G or 8-16x 25G
    • HTG-9200 or similar – 9 or 15 QSFP28
  • Any useful references or existing designs?