verilog-pcie/README.md

147 lines
5.8 KiB
Markdown
Raw Normal View History

2018-09-25 19:50:57 -07:00
# Verilog PCI Express Components Readme
For more information and updates: http://alexforencich.com/wiki/en/verilog/pcie/start
GitHub repository: https://github.com/alexforencich/verilog-pcie
## Introduction
Collection of PCI express related components. Includes full MyHDL testbench
with intelligent bus cosimulation endpoints.
## Documentation
### PCIe BFM
2019-07-12 12:15:58 -07:00
A MyHDL transaction layer PCI Express bus functional model (BFM) is included
in pcie.py. This BFM implements an extensive event driven simulation of a
complete PCI express system, including root complex, switches, devices, and
functions, including support for configuration spaces, capabilities and
extended capabilities, and memory and IO operations between devices. The BFM
includes code to enumerate the bus, initialize configuration space registers
and allocate BARs, route messages between devices, perform memory read and
write operations, allocate DMA accessible memory regions in the root complex,
and handle message signaled interrupts. Any module can be connected to a
cosimulated design, enabling testing of not only isolated components and
host-device communication but also communication between multiple components
such as device-to-device DMA and message passing.
A MyHDL model of the Xilinx Ultrascale PCIe hard core is included in
pcie_us.py. This module can be used in combination with the PCIe BFM to test
a MyHDL or Verilog design that targets a Xilinx Ultrascale FPGA. The model
currently only supports operation as a device, not as a root port.
### arbiter module
General-purpose parametrizable arbiter. Supports priority and round-robin
arbitration. Supports blocking until request release or acknowledge.
### axis_arb_mux module
Frame-aware AXI stream arbitrated muliplexer with parametrizable data width
and port count. Supports priority and round-robin arbitration.
### pcie_axi_dma_desc_mux module
Descriptor multiplexer/demultiplexer for PCIe AXI DMA module. Enables sharing
the PCIe AXI DMA module between multiple request sources, interleaving
requests and distributing responses.
### pcie_tag_manager module
PCIe in-flight tag manager.
### pcie_us_axi_dma module
PCIe AXI DMA module for Xilinx Ultrascale series FPGAs. Supports 64, 128, and 256 bit datapaths. Parametrizable AXI burst length. Wrapper for pcie_us_axi_dma_rd and pcie_us_axi_dma_wr
### pcie_us_axi_dma_rd module
PCIe AXI DMA module for Xilinx Ultrascale series FPGAs. Supports 64, 128, and 256 bit datapaths. Parametrizable AXI burst length.
### pcie_us_axi_dma_wr module
PCIe AXI DMA module for Xilinx Ultrascale series FPGAs. Supports 64, 128, and 256 bit datapaths. Parametrizable AXI burst length.
### pcie_us_axi_master module
PCIe AXI master module for Xilinx Ultrascale series FPGAs. Supports 64, 128, and 256 bit datapaths. Parametrizable AXI burst length. Wrapper for pcie_us_axi_master_rd and pcie_us_axi_master_wr.
### pcie_us_axi_master_rd module
PCIe AXI master module for Xilinx Ultrascale series FPGAs. Supports 64, 128, and 256 bit datapaths. Parametrizable AXI burst length.
### pcie_us_axi_master_wr module
PCIe AXI master module for Xilinx Ultrascale series FPGAs. Supports 64, 128, and 256 bit datapaths. Parametrizable AXI burst length.
### pcie_us_axil_master module
PCIe AXI lite master module for Xilinx Ultrascale series FPGAs. Supports 64, 128, and 256 bit PCIe interfaces.
### pcie_us_axis_cq_demux module
Demux module for Xilinx Ultrascale CQ interface. Can be used to route
incoming requests based on function, BAR, and other fields. Supports 64, 128,
and 256 bit datapaths.
### pcie_us_axis_rc_demux module
Demux module for Xilinx Ultrascale RC interface. Can be used to route
incoming completions based on the requester ID (function). Supports 64, 128,
and 256 bit datapaths.
2019-07-13 10:24:25 -07:00
### pcie_us_cfg module
Configuration shim for Xilinx Ultrascale series FPGAs.
2019-07-12 12:15:58 -07:00
### pcie_us_msi module
2019-07-13 10:24:25 -07:00
MSI shim for Xilinx Ultrascale series FPGAs.
2019-07-12 12:15:58 -07:00
### priority_encoder module
Parametrizable priority encoder.
### pulse_merge module
Parametrizable pulse merge module. Combines several single-cycle pulse status
signals together.
2018-09-25 19:50:57 -07:00
### Common signals
### Common parameters
### Source Files
2019-07-12 12:15:58 -07:00
arbiter.v : Parametrizable arbiter
axis_arb_mux.v : Parametrizable AXI stream mux
2019-01-07 21:40:54 -08:00
pcie_axi_dma_desc_mux.v : Descriptor mux for DMA engine
pcie_tag_manager.v : PCIe in-flight tag manager
pcie_us_axi_dma.v : PCIe AXI DMA module with Xilinx Ultrascale interface
pcie_us_axi_dma_rd.v : PCIe AXI DMA read module with Xilinx Ultrascale interface
pcie_us_axi_dma_wr.v : PCIe AXI DMA write module with Xilinx Ultrascale interface
pcie_us_axi_master.v : AXI Master module with Xilinx Ultrascale interface
pcie_us_axi_master_rd.v : AXI Master read module with Xilinx Ultrascale interface
pcie_us_axi_master_wr.v : AXI Master write module with Xilinx Ultrascale interface
pcie_us_axil_master.v : AXI Lite Master module with Xilinx Ultrascale interface
2019-07-12 12:15:58 -07:00
pcie_us_axis_cq_demux.v : Parametrizable AXI stream CQ demux
pcie_us_axis_rc_demux.v : Parametrizable AXI stream RC demux
2019-07-13 10:24:25 -07:00
pcie_us_cfg.v : Configuration shim for Xilinx Ultrascale devices
2019-01-07 21:40:54 -08:00
pcie_us_msi.v : MSI shim for Xilinx Ultrascale devices
2019-07-12 12:15:58 -07:00
priority_encoder.v : Parametrizable priority encoder
pulse_merge : Parametrizable pulse merge module
2019-01-07 21:40:54 -08:00
2018-09-25 19:50:57 -07:00
## Testing
Running the included testbenches requires MyHDL and Icarus Verilog. Make sure
that myhdl.vpi is installed properly for cosimulation to work correctly. The
testbenches can be run with a Python test runner like nose or py.test, or the
individual test scripts can be run with python directly.
### Testbench Files
tb/axis_ep.py : MyHDL AXI Stream endpoints
tb/pcie.py : MyHDL PCI Express BFM
tb/pcie_us.py : MyHDL Xilinx Ultrascale PCIe core model