Add a New Board Target
This guide shows how to add a new firmware/targets/<Board>/<Target>/
build for an existing protocol+board combination. Adding a brand-new
board (one not in Supported Targets) is out of scope
here — that work lives in axi-pcie-core (see the
axi-pcie-core add-new-board how-to).
Recipe
To add firmware/targets/<Board>/<Board><Protocol>_<Rate>/ for an
existing supported board:
Copy the nearest existing target. For example, to add
XilinxVariumC1100Pgp4_25Gbpsyou would cloneXilinxVariumC1100Pgp4_15Gbps:cp -r firmware/targets/XilinxVariumC1100/XilinxVariumC1100Pgp4_15Gbps \ firmware/targets/XilinxVariumC1100/XilinxVariumC1100Pgp4_25Gbps
Rename the top-level
hdl/files and entity name to match the new target directory:cd firmware/targets/XilinxVariumC1100/XilinxVariumC1100Pgp4_25Gbps/hdl mv XilinxVariumC1100Pgp4_15Gbps.vhd XilinxVariumC1100Pgp4_25Gbps.vhd mv XilinxVariumC1100Pgp4_15Gbps.xdc XilinxVariumC1100Pgp4_25Gbps.xdc # then edit the .vhd to rename the VHDL entity to match
Update the
RATE_G(or equivalent) generic in the top-level VHDL to the new line rate. See Add a New Line Rate for the per-protocol QPLL/rate mapping.Verify the
Makefilesettings (PRJ_PART,PARALLEL_SYNTH) are still correct for the board.PRJ_PARTis per-board and rarely changes between targets on the same board.Build with
makeper First Build — XilinxVariumC1100DmaLoopback.
How the ruckus.tcl Chain Works
Every target’s ruckus.tcl follows the same three-step pattern (see
firmware/targets/XilinxVariumC1100/XilinxVariumC1100Pgp4_6Gbps/ruckus.tcl
for a worked example):
source -quiet $::env(RUCKUS_DIR)/vivado_proc.tcl
loadRuckusTcl $::env(PROJ_DIR)/../../../submodules/surf
loadRuckusTcl $::env(PROJ_DIR)/../../../submodules/axi-pcie-core/hardware/<Board>
loadRuckusTcl $::env(PROJ_DIR)/../../../common/<proto>/hardware/<Board>
loadSource -dir "$::DIR_PATH/hdl"
loadConstraints -dir "$::DIR_PATH/hdl"
The three loadRuckusTcl calls pull in:
surf— base SLAC RTL library (AXI/stream primitives, PGP cores).axi-pcie-core/hardware/<Board>— PCIe DMA + board-specific I/O for the carrier card.common/<proto>/hardware/<Board>— the board-specificHardware.vhdadapter for the chosen protocol (PGP2b / PGP3 / PGP4 / HTSP).
The fourth loadSource plus loadConstraints adds your target’s
own top-level VHDL and XDC.
See Architecture for why the chain is layered this way.
Cross-References
Add a New Line Rate — modify the line rate of an existing target.
Select a Protocol — PGP2b vs PGP3 vs PGP4 vs HTSP — choose between PGP2b, PGP3, PGP4, and HTSP for a given board.
Supported Targets — the matrix of all existing targets.