SimLink

August 11, 2026 ยท View on GitHub

SimLink lets Rogue and PyRogue software communicate with an HDL simulation through the same Stream, Memory, and SideBand interfaces used for hardware. SURF provides interchangeable adapters for GHDL/VHPIDIRECT, Synopsys VCS/VHPI, and Vivado xsim/DPI. The downstream Rogue*Wrap interfaces are common; only the simulator leaf and foreign-function boundary change.

Start here

If you are setting up SimLink for the first time, follow the getting-started guide. It covers backend selection, the common native dependencies, a clean GHDL setup, a real Rogue/PyRogue Memory round trip, and the equivalent VCS and xsim entry points.

TaskDocumentation
Choose a backend and run the first transactionGetting started
Add Stream, Memory, or SideBand to VHDLHDL integration
Connect production Rogue/PyRogue softwareRogue clients
Move an existing axi/simlink VCS targetLegacy VCS migration
Diagnose setup, bind, readiness, or traffic failuresTroubleshooting
Integrate with a specific simulatorGHDL, VCS, or xsim
Understand lifecycle, ownership, or pacingArchitecture reference
Check ports, framing, or compatibility invariantsProtocol reference
Maintain the common C transport/model layerShared internals
Run or extend the regressionsSimLink test guide

Use the public Rogue*Wrap entities in downstream VHDL. The backend leaves, foreign-function adapters, deterministic pyzmq peer, and flat test harnesses are integration or test implementation details.

Public interfaces

LinkBackend VHDL leafPublic SURF wrapperDUT-facing role
StreamRogueTcpStreamRogueTcpStreamWrapBidirectional AXI Stream/SSI frames
MemoryRogueTcpMemoryRogueTcpMemoryWrapAXI-Lite master driven by Rogue memory transactions
SideBandRogueSideBandRogueSideBandWrapEight-bit opcode events and remote-data state

The leaves are backend integration details. The public simulation interfaces retain one API across simulators, derive Stream width from AXIS_CONFIG_G, enforce complete port-pair ownership, and provide optional aggregate Stream pacing.

Backend summary

All backends require libzmq >= 4.1.0, discoverable through pkg-config. simlink/ruckus.tcl loads the reusable simulation interfaces and exactly one backend implementation:

BackendForeign interfaceCombined libraryGuide
GHDLVHPIDIRECTlibRogueSimLinkVhpiDirect.soGHDL
VCSVHPIlibRogueSimLinkVhpi.soVCS
xsimDPI-ClibRogueSimLinkDpi.soxsim

Use RUCKUS_SIM_BACKEND to select explicitly. The getting-started guide covers setup and automatic selection; the architecture reference compares the three adapter and lifecycle implementations.

Source layout

PathPurposeNormal ruckus import
sim/Reusable, simulator-neutral VHDL interfaces and pacingYes, simulation-only
shared/Common C model, transport, lifecycle, and ownership codeThrough the selected backend library
ghdl/, vcs/, xsim/Simulator-specific leaves and foreign-interface adaptersExactly one selected backend
test/HDL and SystemVerilog harnesses, bridges, and testbench tops used only by tests/simlinkNo; tests supply sources explicitly

The directory names describe responsibility rather than synthesizability: sim/ is downstream simulation library code, while test/ is verification infrastructure and is not part of the public SimLink import.

Further reading