Overview
What axi-pcie-core Is
axi-pcie-core is a SLAC FPGA firmware submodule library providing AXI-Lite/AXI-Stream
interconnect and DMA infrastructure for PCIe carrier boards. Downstream firmware projects
consume it as a git submodule, integrating support for boards such as XilinxKcu1500,
XilinxAlveoU200, and XilinxAlveoU55c among the fourteen supported PCIe carriers.
Audience
This library targets two groups of engineers. FPGA engineers integrate axi-pcie-core
as a submodule into a downstream firmware project, wiring board I/O, DMA channels, and
application AXI-Lite slaves through the board’s top-level <Board>Core entity. Software
engineers use the PyRogue device-driver layer under python/axipcie/ to enumerate the
BAR0 register map, configure DMA channels, and stream data through rogue transport
backends.
Scope
axi-pcie-core provides:
PCIe PHY wrapping (pre-compiled Vivado
.dcpper board)AXI-Lite register crossbar (
AxiPcieReg)AXI-Stream DMA engine (
AxiPcieDma)DDR4 and HBM DMA buffers (
MigDmaBuffer,HbmDmaBuffer)Optional PIP peer-FPGA and GPU-direct async protocols
PyRogue Python driver layer (
python/axipcie/)
It does not cover:
Board bring-up or hardware validation procedures
Vivado or toolchain installation guides
Kernel-driver development — that is tracked in the
aes-stream-driversrepository
Relationship to ruckus and surf
ruckus is the TCL build framework that drives Vivado project assembly. The minimum
version is v4.24.2, enforced in shared/ruckus.tcl via SubmoduleCheck; downstream
projects are free to track a newer ruckus revision. Each supported board ships a
ruckus.tcl that a downstream project sources via loadRuckusTcl, pulling in all
board-specific RTL, IP, and constraints without any manual Vivado project setup.
surf is the SLAC FPGA RTL common library; the minimum version is v2.71.0 (same
enforcement mechanism as ruckus). It supplies the primitives that every file under
shared/rtl/ depends on: AxiLitePkg, AxiStreamPkg, AxiStreamDmaV2,
synchronisation primitives, and peripheral device drivers. Both submodule version locks
are enforced at build time, so a downstream project built against a mismatched surf or
ruckus revision receives a hard error rather than a silent ABI mismatch. Set the
environment variable OVERRIDE_SUBMODULE_LOCKS=1 before invoking make to bypass
the check during development.