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_sim
target or a target to be run in a simulatorzephyr-tests
- a directory with tests runnable via Zephyr Twister