Introduction¶
Warp Pipe is a library (refered to as “warp-pipe”) and a tool allowing you to create PCIe links in a distributed simulation environment.
This includes:
packetizing/depacketizing PCIe transactions into PCIe Data Link-Layer Packets (DLLPs) and PCIe Transaction Layer Packets (TLPs)
transmitting PCIe transactions over sockets using a custom PCIe/IP TCP-based protocol
creating PCIe links between instances of different simulators/emulators (e.g. Renode and QEMU) and operating systems (e.g. Zephyr)
handling MSIs, packet routing and flow control
The structure of the Warp Pipe-oriented flow can be visualized in a ISO-style stack format:
This document covers Warp Pipe itself, its usage and companion utilities, like Wireshark PCIe dissector.
Structure of the repository¶
The repository is organized as follows:
.github/workflows- GitHub Actions CI configurationdocs- directory hosting this documentationinc/warppipe- header files for warp-pipememory-mock- sample application simulating a PCIe memoryqemu- submodule with warp-pipe fork of QEMUscripts- additional scripting to report test coveragesrc- warp-pipe sourcestests- unit tests for warp-pipezephyr- Zephyr RTOS configuration to enable using warp-pipe as a Zephyr modulezephyr-samples- a range of Zephyr RTOS tests, targeting either thenative_simtarget or a target to be run in a simulatorzephyr-tests- a directory with tests runnable via Zephyr Twister