PCIe的IP核,给的是完整的工程,包含代码和例程(不是加密的那种IP),学习Verilog同学可以参考,下面内容机翻,我就不详细校对了(还请见谅,大致浏览一下)。
1、获得本篇提到的IP核开源代码
2、这个代码是有K7325以及A7的例程的。
4、放些图片
本站代码下载:
#介绍:
PCI Express相关组件的集合。包括PCIe至AXI和AXI lite桥接器,简单的PCIe AXI DMA引擎以及灵活的高性能DMA子系统。当前支持使用64位和512位接口的Xilinx Ultrascale和Ultrascale Plus PCIe硬IP内核。
包括可利用的完整Cocotb测试平台
#文件:
## PCIe AXI and AXI lite master
pcie_us_axi_master和pcie_us_axil_master模块提供了PCIe和AXI之间的桥梁。这些可用于实现PCIe BAR。pcie_us_axil_master模块是一个非常简单的模块,用于提供寄存器访问,仅支持32位操作。pcie_us_axi_master模块更加复杂,将PCIe操作转换为AXI突发。它可用于以合理的性能终止设备到设备的DMA操作。pcie_us_axis_cq_demux模块可用于对基于PCIe的操作进行多路分解。
## PCIe AXI DMA
pcie_us_axi_dma模块为DMA引擎提供了内部AXI接口。AXI接口宽度必须与PCIe接口宽度匹配。该模块直接将AXI操作转换为PCIe操作。结果,它相对简单,但是由于AXI接口的限制,性能受到了限制。AXI接口上的背压也传递到PCIe接口。
pcie_axi_dma_desc_mux模块可用于在多个请求源之间共享AXI DMA模块。
## Flexible DMA subsystem
分离的DMA接口/ DMA客户端模块支持高度灵活,高性能的DMA操作。DMA接口和DMA客户端模块通过具有高性能分段存储器接口的双端口RAM连接。分段存储器接口是PCIe硬核接口更好的“阻抗匹配”,可以在同一时钟周期内完成数据重新对齐。没有突发,地址解码,仲裁或重新排序简化了实现,并提供了比AXI高得多的性能。该架构还非常灵活,因为它通过双端口RAM将DMA接口与客户端分离,从而可以混合使用不同的客户端接口类型和宽度,甚至支持在不同时钟域中运行的客户端而无需数据路径FIFO。
![DMA系统框图](dma_block.svg)
dma_if_pcie_us模块将Xilinx Ultrascale PCIe接口连接到分段存储器接口。当前,它不支持TLP跨越,但是应该可以通过分段接口来支持它。
dma_psdpram模块是具有分段接口的双时钟,并行简单双端口RAM模块。深度可根据地址宽度独立调整,从而简化了分段接口的使用。该模块还包含一个可参数化的输出流水线寄存器,以改善时序。
dma_if_mux模块允许在多个DMA客户端之间共享DMA接口。该模块可在描述符和分段存储器接口上适当地处理标签和选择行,以进行即插即用操作,而无需分配地址-路由完全由组件连接决定。该模块还包含一个FIFO,以维护多个客户端之间的读取数据顺序。确保均衡所有路径上的流水线延迟,以实现最佳性能。
DMA客户端模块将分段的内存接口连接到不同的内部接口。dma_client_axis_source和dma_client_axis_sink模块为通过AXI流的DMA流提供支持。AXI流宽度可以是分段存储器接口宽度的二分之一的任意幂。
## arbiter module
通用可参数化仲裁器。支持优先级和循环仲裁。支持阻塞,直到请求释放或确认。
## axis_arb_mux module
具有可参数化的数据宽度和端口数的帧感知AXI流仲裁多路复用器。支持优先级和循环仲裁。
## dma_client_axis_sinkmodule
AXI流接收器DMA客户端模块。使用分段的内存接口。
## dma_client_axis_source module
AXI流源DMA客户端模块。使用分段的内存接口。
## dma_if_mux module
DMA接口多路复用器模块。允许在多个DMA客户端模块之间共享DMA接口模块。dma_if_mux_rd和dma_if_mux_wr的包装。
## dma_if_mux_rd module
DMA接口多路复用器模块。允许在多个DMA客户端模块之间共享DMA接口模块。多路复用器描述符和多路复用器存储器写操作。
## dma_if_mux_wr module
DMA接口多路复用器模块。允许在多个DMA客户端模块之间共享DMA接口模块。多路复用器描述符,多路复用器存储器读取命令和多路复用器读取数据。
## dma_if_pcie_us module
用于Xilinx Ultrascale系列FPGA的PCIe DMA接口模块。支持64,128、256和512位数据路径。使用双倍宽度分段存储器接口。dma_if_pcie_us_rd和dma_if_pcie_us_wr的包装。
## dma_if_pcie_us_rd module
用于Xilinx Ultrascale系列FPGA的PCIe DMA接口模块。支持64,128、256和512位数据路径。使用双倍宽度的分段内存接口。
## dma_if_pcie_us_wr module
用于Xilinx Ultrascale系列FPGA的PCIe DMA接口模块。支持64,128、256和512位数据路径。使用双倍宽度分段存储器接口。
## dma_psdpram module
DMA RAM模块。分段的简单双端口RAM,用于将DMA接口模块连接到DMA客户端。
## pcie_axi_dma_desc_mux module
用于PCIe AXI DMA模块的描述符多路复用器/多路分解器。支持在多个请求源之间共享PCIe AXI DMA模块,交织请求和分配响应。
## pcie_us_axi_dma module
用于Xilinx Ultrascale系列FPGA的PCIe AXI DMA模块。支持64、128、256和512位数据路径。可设置参数的AXI突发长度。包装为pcie_us_axi_dma_rd和pcie_us_axi_dma_wr。
## pcie_us_axi_dma_rd module
用于Xilinx Ultrascale系列FPGA的PCIe AXI DMA模块。支持64、128、256和512位数据路径。可设置参数的AXI突发长度。
## pcie_us_axi_dma_wr module
用于Xilinx Ultrascale系列FPGA的PCIe AXI DMA模块。支持64、128、256和512位数据路径。可设置参数的AXI突发长度。
## pcie_us_axi_master module
用于Xilinx Ultrascale系列FPGA的PCIe AXI主模块。支持64、128、256和512位数据路径。可设置参数的AXI突发长度。包装为pcie_us_axi_master_rd和pcie_us_axi_master_wr。
## pcie_us_axi_master_rd module
用于Xilinx Ultrascale系列FPGA的PCIe AXI主模块。支持64、128、256和512位数据路径。可设置参数的AXI突发长度。
## pcie_us_axi_master_wr module
用于Xilinx Ultrascale系列FPGA的PCIe AXI主模块。支持64、128、256和512位数据路径。可设置参数的AXI突发长度。
## pcie_us_axil_master module
用于Xilinx Ultrascale系列FPGA的PCIe AXI lite主模块。支持64,128、256和512位PCIe接口。
## pcie_us_axis_cq_demux module
用于Xilinx Ultrascale CQ接口的Demux模块。可用于根据功能,BAR和其他字段路由传入的请求。支持64、128、256和512位数据路径。
## pcie_us_axis_rc_demux module
用于Xilinx Ultrascale RC接口的Demux模块。可用于根据请求者ID(函数)路由传入的完成。支持64、128、256和512位数据路径。
## pcie_us_cfg module
Xilinx Ultrascale系列FPGA的配置垫片。
## pcie_us_msi module
用于Xilinx Ultrascale系列FPGA的MSI垫片。
## priority_encoder module
可设置参数的优先级编码器。
## pulse_merge module
可参数化的脉冲合并模块。将几个单周期脉冲状态信号组合在一起。