{"id":13537263,"url":"https://github.com/alexforencich/verilog-pcie","last_synced_at":"2025-03-23T18:42:46.129Z","repository":{"id":39999365,"uuid":"164569208","full_name":"alexforencich/verilog-pcie","owner":"alexforencich","description":"Verilog PCI express components","archived":false,"fork":false,"pushed_at":"2024-04-26T17:15:29.000Z","size":1944,"stargazers_count":1194,"open_issues_count":33,"forks_count":312,"subscribers_count":53,"default_branch":"master","last_synced_at":"2025-01-29T00:49:40.141Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Verilog","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alexforencich.png","metadata":{"files":{"readme":"README","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-01-08T05:28:51.000Z","updated_at":"2025-01-27T12:27:19.000Z","dependencies_parsed_at":"2024-10-14T15:21:35.448Z","dependency_job_id":null,"html_url":"https://github.com/alexforencich/verilog-pcie","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexforencich%2Fverilog-pcie","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexforencich%2Fverilog-pcie/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexforencich%2Fverilog-pcie/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexforencich%2Fverilog-pcie/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alexforencich","download_url":"https://codeload.github.com/alexforencich/verilog-pcie/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245152738,"owners_count":20569399,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T09:00:57.005Z","updated_at":"2025-03-23T18:42:46.108Z","avatar_url":"https://github.com/alexforencich.png","language":"Verilog","funding_links":[],"categories":["Connectivity","Verilog","Applications"],"sub_categories":[],"readme":"# Verilog PCI Express Components Readme\n\n[![Build Status](https://github.com/alexforencich/verilog-pcie/workflows/Regression%20Tests/badge.svg?branch=master)](https://github.com/alexforencich/verilog-pcie/actions/)\n\nFor more information and updates: http://alexforencich.com/wiki/en/verilog/pcie/start\n\nGitHub repository: https://github.com/alexforencich/verilog-pcie\n\n## Introduction\n\nCollection of PCI express related components.  Includes PCIe to AXI and AXI lite bridges and a flexible, high-performance DMA subsystem.  Currently supports operation with several FPGA families from Xilinx and Intel. Includes full cocotb testbenches that utilize [cocotbext-pcie](https://github.com/alexforencich/cocotbext-pcie) and [cocotbext-axi](https://github.com/alexforencich/cocotbext-axi).\n\nExample designs are included for the following FPGA boards:\n\n*  Alpha Data ADM-PCIE-9V3 (Xilinx Virtex UltraScale+ XCVU3P)\n*  BittWare 520N-MX (Intel Stratix 10 MX 1SM21CHU2F53E2VG)\n*  Exablaze ExaNIC X10 (Xilinx Kintex UltraScale XCKU035)\n*  Exablaze ExaNIC X25 (Xilinx Kintex UltraScale+ XCKU3P)\n*  Silicom fb2CG@KU15P (Xilinx Kintex UltraScale+ XCKU15P)\n*  Intel Stratix 10 DX dev kit (Intel Stratix 10 MX 1SD280PT2F55E1VG)\n*  Intel Stratix 10 MX dev kit (Intel Stratix 10 MX 1SM21CHU1F53E1VG)\n*  Terasic DE10-Agilex (Intel Agilex F AGFB014R24B2E2V)\n*  Xilinx Alveo U50 (Xilinx Virtex UltraScale+ XCU50)\n*  Xilinx Alveo U55C (Xilinx Virtex UltraScale+ XCU55C)\n*  Xilinx Alveo U55N/Varium C1100 (Xilinx Virtex UltraScale+ XCU55N)\n*  Xilinx Alveo U200 (Xilinx Virtex UltraScale+ XCU200)\n*  Xilinx Alveo U250 (Xilinx Virtex UltraScale+ XCU250)\n*  Xilinx Alveo U280 (Xilinx Virtex UltraScale+ XCU280)\n*  Xilinx VCU108 (Xilinx Virtex UltraScale XCVU095)\n*  Xilinx VCU118 (Xilinx Virtex UltraScale+ XCVU9P)\n*  Xilinx VCU1525 (Xilinx Virtex UltraScale+ XCVU9P)\n*  Xilinx ZCU106 (Xilinx Zynq UltraScale+ XCZU7EV)\n\n## Documentation\n\n### FPGA-independent PCIe\n\nThe PCIe modules use a generic, FPGA-independent interface for handling PCIe TLPs. This permits the same core logic to be used on multiple FPGA families, with interface shims to connect to the PCIe IP on each target device.\n\nThe `pcie_us_if` module is an adaptation shim for Xilinx 7-series, UltraScale, and UltraScale+.  It handles the main datapath, configuration space parameters, MSI interrupts, and flow control.\n\nThe `pcie_s10_if` module is an adaptation shim for Intel Stratix 10 GX/SX/TX/MX series FPGAs that use the H-Tile or L-Tile for PCIe.  It handles the main datapath, configuration space parameters, MSI interrupts, and flow control.\n\nThe `pcie_ptile_if` module is an adaptation shim for Intel Stratix 10 DX/Agilex series FPGAs that use the P-Tile for PCIe.  It handles the main datapath, configuration space parameters, and flow control.\n\n### PCIe AXI and AXI lite master\n\nThe `pcie_axi_master`, `pcie_axil_master`, and `pcie_axil_master_minimal` modules provide a bridge between PCIe and AXI.  These can be used to implement PCIe BARs.\n\nThe `pcie_axil_master_minimal` module is a very simple module for providing register access, supporting only 32 bit operations.\n\nThe `pcie_axi_master` module is more complex, converting PCIe operations to AXI bursts.  It can be used to terminate device-to-device DMA operations with reasonable performance.\n\nThe `pcie_tlp_demux_bar` module can be used to demultiplex PCIe operations based on the target BAR.\n\n### Flexible DMA subsystem\n\nThe split DMA interface/DMA client modules support highly flexible, highly performant DMA operations.  The DMA interface and DMA client modules are connected by dual port RAMs with a high performance segmented memory interface.  The segmented memory interface is a better 'impedance match' to the PCIe hard core interface - data realignment can be done in the same clock cycle; no bursts, address decoding, arbitration, or reordering simplifies implementation and provides much higher performance than AXI.  The architecture is also quite flexible as it decouples the DMA interface from the clients with dual port RAMs, enabling mixing different client interface types and widths and even supporting clients running in different clock domains without datapath FIFOs.\n\n![DMA system block diagram](dma_block.svg)\n\nThe `dma_if_pcie` module connects a generic, FPGA-independent PCIe interface to the segmented memory interface.\n\nThe `dma_if_axi` module connects an AXI interface to the segmented memory interface.\n\nThe `dma_psdpram` module is a dual clock, parallel simple dual port RAM module with a segmented interface.  The depth is independently adjustable from the address width, simplifying use of the segmented interface.  The module also contains a parametrizable output pipeline register to improve timing.\n\nThe `dma_if_mux` module enables sharing the DMA interface across several DMA clients.  This module handles the tags and select lines appropriately on both the descriptor and segmented memory interface for plug-and-play operation without address assignment - routing is completely determined by component connections.  The module also contains a FIFO to maintain read data ordering across multiple clients.  Make sure to equalize pipeline delay across all paths for maximum performance.\n\nDMA client modules connect the segmented memory interface to different internal interfaces.\n\nThe `dma_client_axis_source` and `dma_client_axis_sink` modules provide support for streaming DMA over AXI stream.  The AXI stream width can be any power of two fraction of the segmented memory interface width.\n\n### `arbiter` module\n\nGeneral-purpose parametrizable arbiter.  Supports priority and round-robin arbitration.  Supports blocking until request release or acknowledge.\n\n### `axis_arb_mux` module\n\nFrame-aware AXI stream arbitrated multiplexer with parametrizable data width and port count.  Supports priority and round-robin arbitration.\n\n### `dma_client_axis_sink` module\n\nAXI stream sink DMA client module.  Uses a segmented memory interface.\n\n### `dma_client_axis_source` module\n\nAXI stream source DMA client module.  Uses a segmented memory interface.\n\n### `dma_if_axi` module\n\nAXI DMA interface module.  Parametrizable interface width.  Uses a double width segmented memory interface.\n\n### `dma_if_axi_rd` module\n\nAXI DMA interface module.  Parametrizable interface width.  Uses a double width segmented memory interface.\n\n### `dma_if_axi_wr` module\n\nAXI DMA interface module.  Parametrizable interface width.  Uses a double width segmented memory interface.\n\n### `dma_if_desc_mux` module\n\nDMA interface descriptor mux module.  Enables sharing a DMA interface module between multiple DMA client modules.\n\n### `dma_if_mux` module\n\nDMA interface mux module.  Enables sharing a DMA interface module between multiple DMA client modules.  Wrapper for `dma_if_mux_rd` and `dma_if_mux_wr`.\n\n### `dma_if_mux_rd` module\n\nDMA interface mux module.  Enables sharing a DMA interface module between multiple DMA client modules.  Wrapper for `dma_if_desc_mux` and `dma_ram_demux_wr`.\n\n### `dma_if_mux_wr` module\n\nDMA interface mux module.  Enables sharing a DMA interface module between multiple DMA client modules.  Wrapper for `dma_if_desc_mux` and `dma_ram_demux_rd`.\n\n### `dma_if_pcie` module\n\nPCIe DMA interface module.  Parametrizable interface width.  Uses a double width segmented memory interface.\n\n### `dma_if_pcie_rd` module\n\nPCIe DMA interface module.  Parametrizable interface width.  Uses a double width segmented memory interface.\n\n### `dma_if_pcie_wr` module\n\nPCIe DMA interface module.  Parametrizable interface width.  Uses a double width segmented memory interface.\n\n### `dma_if_pcie_us` module\n\nPCIe DMA interface module for Xilinx UltraScale series FPGAs.  Supports 64, 128, 256, and 512 bit datapaths.  Uses a double width segmented memory interface.  Wrapper for `dma_if_pcie_us_rd` and `dma_if_pcie_us_wr`.\n\n### `dma_if_pcie_us_rd` module\n\nPCIe DMA interface module for Xilinx UltraScale series FPGAs.  Supports 64, 128, 256, and 512 bit datapaths.  Uses a double width segmented memory interface.\n\n### `dma_if_pcie_us_wr` module\n\nPCIe DMA interface module for Xilinx UltraScale series FPGAs.  Supports 64, 128, 256, and 512 bit datapaths.  Uses a double width segmented memory interface.\n\n### `dma_psdpram` module\n\nDMA RAM module.  Segmented simple dual port RAM to connect a DMA interface module to a DMA client.\n\n### `dma_psdpram_async` module\n\nDMA RAM module with asynchronous clocks.  Segmented simple dual port RAM to connect a DMA interface module to a DMA client.\n\n### `dma_ram_demux` module\n\nDMA RAM interface demultiplexer module.  Wrapper for `dma_ram_demux_rd` and `dma_ram_demux_wr`.\n\n### `dma_ram_demux_rd` module\n\nDMA RAM interface demultiplexer module for read operations.\n\n### `dma_ram_demux_wr` module\n\nDMA RAM interface demultiplexer module for write operations.\n\n### `pcie_axi_dma_desc_mux` module\n\nDescriptor multiplexer/demultiplexer for PCIe AXI DMA module.  Enables sharing the PCIe AXI DMA module between multiple request sources, interleaving requests and distributing responses.\n\n### `pcie_axi_master` module\n\nPCIe AXI master module.  Parametrizable interface width and AXI burst length. Wrapper for `pcie_axi_master_rd` and `pcie_axi_master_wr`.\n\n### `pcie_axi_master_rd` module\n\nPCIe AXI master module.  Parametrizable interface width and AXI burst length.\n\n### `pcie_axi_master_wr` module\n\nPCIe AXI master module.  Parametrizable interface width and AXI burst length.\n\n### `pcie_axil_master` module\n\nPCIe AXI lite master module.  Parametrizable interface width.\n\n### `pcie_axil_master_minimal` module\n\nMinimal PCIe AXI lite master module.  Parametrizable interface width.  Only supports aligned 32-bit operations, all other operations will result in a completer abort.  Only supports 32-bit AXI lite.\n\n### `pcie_msix` module\n\nMSI-X support module.  Implements MSI-X table and pending bit array with AXI lite register interface, accepts interrupt requests on a streaming interface, and generates corresponding write request TLPs.\n\n### `pcie_ptile_cfg` module\n\nConfiguration shim for Intel Stratix 10 DX/Agilex series FPGAs (P-Tile).\n\n### `pcie_ptile_if` module\n\nPCIe interface shim for Intel Stratix 10 DX/Agilex series FPGAs (P-Tile).  Wrapper for all Intel Stratix 10 DX/Agilex PCIe interface shims.\n\n### `pcie_ptile_if_rx` module\n\nPCIe interface shim (RX) for Intel Stratix 10 DX/Agilex series FPGAs (P-Tile).\n\n### `pcie_ptile_if_tx` module\n\nPCIe interface shim (TX) for Intel Stratix 10 DX/Agilex series FPGAs (P-Tile).\n\n### `pcie_s10_cfg` module\n\nConfiguration shim for Intel Stratix 10 GX/SX/TX/MX series FPGAs (H-Tile/L-Tile).\n\n### `pcie_s10_if` module\n\nPCIe interface shim for Intel Stratix 10 GX/SX/TX/MX series FPGAs (H-Tile/L-Tile).  Wrapper for all Intel Stratix 10 GX/SX/TX/MX PCIe interface shims.\n\n### `pcie_s10_if_rx` module\n\nPCIe interface shim (RX) for Intel Stratix 10 GX/SX/TX/MX series FPGAs (H-Tile/L-Tile).\n\n### `pcie_s10_if_tx` module\n\nPCIe interface shim (TX) for Intel Stratix 10 GX/SX/TX/MX series FPGAs (H-Tile/L-Tile).\n\n### `pcie_s10_msi` module\n\nMSI shim for Intel Stratix 10 GX/SX/TX/MX series FPGAs (H-Tile/L-Tile).\n\n### `pcie_tlp_demux` module\n\nPCIe TLP demultiplexer module.\n\n### `pcie_tlp_demux_bar` module\n\nPCIe TLP demultiplexer module.  Wrapper for `pcie_tlp_demux` with parametrizable BAR ID matching logic.\n\n### `pcie_tlp_fifo` module\n\nPCIe TLP FIFO module.\n\n### `pcie_tlp_fifo_raw` module\n\nPCIe TLP FIFO module with raw non-destriped output.\n\n### `pcie_tlp_fifo_mux` module\n\nPCIe TLP FIFO + multiplexer module.\n\n### `pcie_tlp_mux` module\n\nPCIe TLP multiplexer module.\n\n### `pcie_us_axi_dma` module\n\nPCIe AXI DMA module for Xilinx UltraScale series FPGAs.  Supports 64, 128, 256, and 512 bit datapaths.  Parametrizable AXI burst length.  Wrapper for `pcie_us_axi_dma_rd` and `pcie_us_axi_dma_wr`.\n\n### `pcie_us_axi_dma_rd` module\n\nPCIe AXI DMA module for Xilinx UltraScale series FPGAs.  Supports 64, 128, 256, and 512 bit datapaths.  Parametrizable AXI burst length.\n\n### `pcie_us_axi_dma_wr` module\n\nPCIe AXI DMA module for Xilinx UltraScale series FPGAs.  Supports 64, 128, 256, and 512 bit datapaths.  Parametrizable AXI burst length.\n\n### `pcie_us_axi_master` module\n\nPCIe AXI master module for Xilinx UltraScale series FPGAs.  Supports 64, 128, 256, and 512 bit datapaths.  Parametrizable AXI burst length.  Wrapper for `pcie_us_axi_master_rd` and `pcie_us_axi_master_wr`.\n\n### `pcie_us_axi_master_rd` module\n\nPCIe AXI master module for Xilinx UltraScale series FPGAs.  Supports 64, 128, 256, and 512 bit datapaths.  Parametrizable AXI burst length.\n\n### `pcie_us_axi_master_wr` module\n\nPCIe AXI master module for Xilinx UltraScale series FPGAs.  Supports 64, 128, 256, and 512 bit datapaths.  Parametrizable AXI burst length.\n\n### `pcie_us_axil_master` module\n\nPCIe AXI lite master module for Xilinx UltraScale series FPGAs.  Supports 64, 128, 256, and 512 bit PCIe interfaces.\n\n### `pcie_us_axis_cq_demux` module\n\nDemux module for Xilinx UltraScale CQ interface.  Can be used to route incoming requests based on function, BAR, and other fields.  Supports 64, 128, 256, and 512 bit datapaths.\n\n### `pcie_us_axis_rc_demux` module\n\nDemux module for Xilinx UltraScale RC interface.  Can be used to route incoming completions based on the requester ID (function).  Supports 64, 128, 256, and 512 bit datapaths.\n\n### `pcie_us_cfg` module\n\nConfiguration shim for Xilinx UltraScale series FPGAs.\n\n### `pcie_us_if` module\n\nPCIe interface shim for Xilinx UltraScale series FPGAs.  Wrapper for all Xilinx UltraScale PCIe interface shims.\n\n### `pcie_us_if_cc` module\n\nPCIe interface shim (CC) for Xilinx UltraScale series FPGAs.\n\n### `pcie_us_if_cq` module\n\nPCIe interface shim (CQ) for Xilinx UltraScale series FPGAs.\n\n### `pcie_us_if_rc` module\n\nPCIe interface shim (RC) for Xilinx UltraScale series FPGAs.\n\n### `pcie_us_if_rq` module\n\nPCIe interface shim (RQ) for Xilinx UltraScale series FPGAs.\n\n### `pcie_us_msi` module\n\nMSI shim for Xilinx UltraScale series FPGAs.\n\n### `priority_encoder` module\n\nParametrizable priority encoder.\n\n### `pulse_merge` module\n\nParametrizable pulse merge module.  Combines several single-cycle pulse status signals together.\n\n### Common signals\n\n### Common parameters\n\n### Source Files\n\n    arbiter.v                  : Parametrizable arbiter\n    axis_arb_mux.v             : Parametrizable AXI stream mux\n    dma_client_axis_sink.v     : AXI stream sink DMA client\n    dma_client_axis_source.v   : AXI stream source DMA client\n    dma_if_axi.v               : AXI DMA interface\n    dma_if_axi_rd.v            : AXI DMA interface (read)\n    dma_if_axi_wr.v            : AXI DMA interface (write)\n    dma_if_desc_mux.v          : DMA interface descriptor mux\n    dma_if_mux.v               : DMA interface mux\n    dma_if_mux_rd.v            : DMA interface mux (read)\n    dma_if_mux_wr.v            : DMA interface mux (write)\n    dma_if_pcie.v              : PCIe DMA interface\n    dma_if_pcie_rd.v           : PCIe DMA interface (read)\n    dma_if_pcie_wr.v           : PCIe DMA interface (write)\n    dma_if_pcie_us.v           : PCIe DMA interface for Xilinx UltraScale\n    dma_if_pcie_us_rd.v        : PCIe DMA interface for Xilinx UltraScale (read)\n    dma_if_pcie_us_wr.v        : PCIe DMA interface for Xilinx UltraScale (write)\n    dma_psdpram.v              : DMA RAM (segmented simple dual port RAM)\n    dma_psdpram_async.v        : DMA RAM (segmented simple dual port RAM)\n    dma_ram_demux.v            : DMA RAM demultiplexer\n    dma_ram_demux_rd.v         : DMA RAM demultiplexer (read)\n    dma_ram_demux_wr.v         : DMA RAM demultiplexer (write)\n    pcie_axi_dma_desc_mux.v    : Descriptor mux for DMA engine\n    pcie_axi_master.v          : PCIe AXI master module\n    pcie_axi_master_rd.v       : PCIe AXI master read module\n    pcie_axi_master_wr.v       : PCIe AXI master write module\n    pcie_axil_master.v         : PCIe AXI Lite master module\n    pcie_axil_master_minimal.v : PCIe AXI Lite master module (minimal)\n    pcie_msix.v                : PCIe MSI-X support module\n    pcie_ptile_cfg.v           : Configuration shim for Intel P-Tile\n    pcie_ptile_if.v            : PCIe interface shim (Intel P-Tile)\n    pcie_ptile_if_rx.v         : PCIe interface shim (RX) (Intel P-Tile)\n    pcie_ptile_if_tx.v         : PCIe interface shim (TX) (Intel P-Tile)\n    pcie_s10_cfg.v             : Configuration shim for Intel Stratix 10\n    pcie_s10_if.v              : PCIe interface shim (Intel Stratix 10)\n    pcie_s10_if_rx.v           : PCIe interface shim (RX) (Intel Stratix 10)\n    pcie_s10_if_tx.v           : PCIe interface shim (TX) (Intel Stratix 10)\n    pcie_s10_msi.v             : MSI shim for Intel Stratix 10 devices\n    pcie_tlp_demux.v           : PCIe TLP demultiplexer\n    pcie_tlp_demux_bar.v       : PCIe TLP demultiplexer (BAR ID)\n    pcie_tlp_fifo.v            : PCIe TLP FIFO\n    pcie_tlp_fifo_raw.v        : PCIe TLP FIFO (raw output)\n    pcie_tlp_fifo_mux.v        : PCIe TLP FIFO + multiplexer\n    pcie_tlp_mux.v             : PCIe TLP multiplexer\n    pcie_us_axi_dma.v          : PCIe AXI DMA module (Xilinx UltraScale)\n    pcie_us_axi_dma_rd.v       : PCIe AXI DMA read module (Xilinx UltraScale)\n    pcie_us_axi_dma_wr.v       : PCIe AXI DMA write module (Xilinx UltraScale)\n    pcie_us_axi_master.v       : PCIe AXI master module (Xilinx UltraScale)\n    pcie_us_axi_master_rd.v    : PCIe AXI master read module (Xilinx UltraScale)\n    pcie_us_axi_master_wr.v    : PCIe AXI master write module (Xilinx UltraScale)\n    pcie_us_axil_master.v      : PCIe AXI Lite master module (Xilinx UltraScale)\n    pcie_us_axis_cq_demux.v    : Parametrizable AXI stream CQ demux\n    pcie_us_axis_rc_demux.v    : Parametrizable AXI stream RC demux\n    pcie_us_cfg.v              : Configuration shim for Xilinx UltraScale devices\n    pcie_us_if.v               : PCIe interface shim (Xilinx UltraScale)\n    pcie_us_if_cc.v            : PCIe interface shim (CC) (Xilinx UltraScale)\n    pcie_us_if_cq.v            : PCIe interface shim (CQ) (Xilinx UltraScale)\n    pcie_us_if_rc.v            : PCIe interface shim (RC) (Xilinx UltraScale)\n    pcie_us_if_rq.v            : PCIe interface shim (RQ) (Xilinx UltraScale)\n    pcie_us_msi.v              : MSI shim for Xilinx UltraScale devices\n    priority_encoder.v         : Parametrizable priority encoder\n    pulse_merge                : Parametrizable pulse merge module\n\n## Testing\n\nRunning the included testbenches requires [cocotb](https://github.com/cocotb/cocotb), [cocotbext-axi](https://github.com/alexforencich/cocotbext-axi), [cocotbext-pcie](https://github.com/alexforencich/cocotbext-pcie), and [Icarus Verilog](http://iverilog.icarus.com/).  The testbenches can be run with pytest directly (requires [cocotb-test](https://github.com/themperek/cocotb-test)), pytest via tox, or via cocotb makefiles.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexforencich%2Fverilog-pcie","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexforencich%2Fverilog-pcie","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexforencich%2Fverilog-pcie/lists"}