【PG054】7 Series Integrated Block for PCI Express IP核的学习

本文深入探讨PCIe基础知识,重点关注Xilinx提供的PCIe IP核,包括7Series Integrated Block for PCI Express。内容涵盖PCIe数据链路与拓扑结构,IP核配置参数,以及如何通过示例设计进行仿真和应用。文中详细阐述了PCIe IP核的接口,配置流程,以及与Endpoint的交互,特别是Programmed Input/Output (PIO)事务的处理,包括读写操作和基地址寄存器(BAR)的管理。此外,还介绍了RootPort Model Test Bench的架构和测试用例,用于验证PCIe Endpoint配置和功能。

PCIe学习笔记系列:

  1. PCIe基础知识及Xilinx相关IP核介绍
    概念了解:简单学习PCIe的数据链路与拓扑结构,另外看看有什么相关的IP核。
  2. 【PG054】7 Series Integrated Block for PCI Express IP核的学习
    基础学习:关于Pcie IP核的数据手册,学习PCIe相关的IP核的配置参数及其对应的含义。
  3. Xilinx PCIe IP核示例工程代码分析与仿真
    基础学习:关于PCIe IP核的仿真,学习PCIe的配置流程以及应用过程。
  4. Xilinx XDMA 例程代码分析与仿真结果
    应用学习:关于Xilinx PCIe DMA IP核的仿真,学习 PCIe DMA 的配置过程以及具体的数据传输流程。
  5. XDMA linux平台调试过程记录
    应用学习:关于XDMA的实际调试过程,可在此基础上定制自己的需求。

1 IP核说明

结构:

在这里插入图片描述

主要的接口:

  • 系统接口(SYS)。
  • PCIe接口(PCI_EXP)。
  • 配置接口(CFG)。
  • 事务接口(AXI-Stream)。
  • 物理层控制与状态接口(PL)。

该模块以数据包的形式与各模块进行通信。从发送到接收组件,携带信息(指的是用户的信息)的数据包在事务层以及数据链路层形成。在发送的过程中加了一些其他的必要的信息(各层处理数据包需要的信息)。在接收端,接收单元的每一层处理进入的包,剥离相关信息并将包转发给下一层。

1.1 遵循的标准

《PCI Express Base Specification, rev. 2.1 》
《PCI Express Card Electromechanical (CEM) v2.0》
《PCI Industrial Computer Manufacturers Group (PICMG) 3.4 specifications》

1.3 IP核的接口

2 设计例程

2.1 集成块Endpoint配置概览

PCI Express设备需要在上电后进行设置,然后系统中的设备才能开始与其他设备进行特定于应用程序的通信。通过PCI Express Link连接的至少两个设备必须初始化其配置空间并被枚举以进行通信。

Root Port通过给【像Endpoint或Switch这样的下游设备】发送【Configuration Read(CfgRd)和Write(CfgWr) TLP 并进行配置空间的设置】来实现【PCI Express枚举和配置】。当此过程完成时,才可以在PCI Express系统内发生更高级别的交互,如内存读取(MemRd TLPs)和写入(MemWr TLPs) 。

配置器示例设计 完成 枚举和配置单个连接的PCIe Endpoint配置空间 所需的配置事务,允许应用程序特定的交互发生。

Endpoint配置的示例的仿真设计包含两个部分:

  • Root Port模型:生成、使用和检查PCI Express总线数据流的testbench。
  • 可编程的输入输出(Programmed Input/Output ,PIO)示例设计:一个完整的PCI Express应用。PIO示例设计响应对其内存空间的读和写请求,可以在硬件测试中是可综合的。

仿真设计概览

在仿真设计中,事务从Root Port模型中发送到被配置为Endpoint的IP核中,示例设计的结构:

在这里插入图片描述

对应的文件结构:
在这里插入图片描述

2.2 Programmed Input/Output: Endpoint 示例设计

Programmed Input/Output (PIO) 事务一般由PCI Express系统host CPU来访问内存映射输入/输出(Memory Mapped Input/Output,MMIO)和配置映射PCI Express逻辑中的输入/输出(Configuration Mapped
Input/Output,CMIO)位置。PCI Express的Endpoint通过【完成数据事务】来 【接受内存和I/O写事务】 和 【响应内存和I/O读事务】 。

一般PIO是包含在IP核中的,但在7 Series FPGAs Integrated Block for PCI Express 、Endpoint Block Plus for PCI Express、Endpoint PIPE for PCI Express IP核中共享PIO设计端口模型,也就是pcie_app_7x中的PIO模块。可以在实际的板子中使用PIO设计来验证板的链路和功能。

2.2.1 系统概览

PIO设计是一个简单的应用程序,它连接【PCIe核心事务(AXI4-Stream)接口】与【Endpoint】,也可以作为构建用户设计的起点。特点包括:

  • 使用Xilinx FPGA内部的block RAM 实现 四个特定事务的2 KB目标区域,提供8192个字节的总目标空间。
  • 支持【单DWORD载荷】的到32/64位地址的内存空间或I/O空间的PCIe读写事务,并支持完成事务层包(TLPs)。
  • 利用IP核的(rx_bar_hit[7:0]) m_axis_rx_tuser[9:2]信号来区分TLP目的基地地址寄存器。
  • 提供针对单独实现32位、64位和128位优化的AXI4-Stream接口。

PCI Express系统架构组件如下图,包括一个Root Complex,一个PCIe switch器件,一个PCIe Endpoint。【PIO操作】将数据从 Root Complex(CPU寄存器)向下移动(downstream)到Endpoint,或者从端点向上移动(upstream)到 Root Complex((CPU寄存器)。无论哪种情况,移动数据的PCI Express协议请求都是由主机CPU发起的。

在这里插入图片描述

当CPU发出向【内存映射输入/输出(MMIO)地址】写寄存器 命令时,数据就下行移动。Root Complex通常生成一个Memory Write TLP,其中含MMIO单元的地址、字节使能和寄存器内容。当Endpoint接收到Memory Write TLP并更新相应的本地寄存器时,事务终止。

当CPU发出从一个MMIO地址读寄存器的命令时,数据就上行移动。Root Complex通常生成一个Memory Read TLP,其中包含MMIO单元的地址,以及字节使能。Endpoint 在收到 Memory Read TLP 后产生一个 Completion with Data TLP 。 Completion被发送到Root Complex,有效负载被加载到目标寄存器中,完成事务。

2.2.2 PIO硬件

PIO设计在FPGA block RAM中实现了一个8192字节的目标空间,在PCIe Endpoint 之后。这个32位目标空间可以通过single DWORD I/O Read,I/O Write, Memory Read 64, Memory Write 64, Memory Read 32, 以及 Memory Write 32 TLP 进行访问。

PIO设计生成一个有效负载为一个DWORD的Completion,用来响应有效的Memory Read 32 TLP, Memory Read 64 TLP, or I/O Read TLP 请求。此外,PIO设计为I/O Write TLP请求返回一个没有数据且状态成功的ComCpletion。

PIO设计通过更新载荷到FPGA block RAM空间的目标地址来处理一个【有一个DWORD载荷的 Memory 或 I/O Write TLP】。

2.2.3 支持基地址寄存器(Base Address Register,BAR)

PIO设计支持4个不连续的目标空间,每个空间由一个独立的Base Address Register(BAR)表示的2KB内存块组成。使用默认参数时,Vivado IDE生成一个配置为配合PIO设计使用的IP核,它包括:

  • 一个64位可寻址内存空间BAR
  • 一个32位可寻址内存空间BAR

可以改变PIO设计使用的默认参数,但是,在某些情况下,可能需要根据系统更改用户应用程序。

BAR表示的四个2KB地址空间与PIO设计中的四个2kb地址区域对应。每个2kB区域都使用一个2KB 双端口 block RAM 来实现。当IP核收到事务时,IP核解码出地址以及确定四个区域中哪个时目标区域。IP核将TLP传递到PIO设计并断言相应的bitm_axis_rx_tuser[9:2](rx_bar_hit[7:0])。这些位的定义如下:

Block RAM TLP事务类型 默认BAR rx_bar_hit[7:0]
ep_mem0 I/O TLP 事务 禁用 禁用
ep_mem1 32-bit address Memory TLP事务 0 0000_0001b
ep_mem2 64-bit address Memory TLP事务 禁用 禁用
ep_mem3 指定EROM(Expansion ROM)的32-bit address Memory TLP事务 扩展ROM 0100_0000b
2.2.3.1 改变默认的BAR设置

可以改变参数然后继续使用PIO设计来创建自定义的HDL源文件来匹配选择的BAR设置。然而,由于PIO设计参数比IP核参数限制更大,在更改默认参数时,需要考虑以下示例设计限制:

  • 示例设计支持一个I/O空间BAR,一个32位内存空间(不是外部ROM空间),以及一个64位内存空间。如果超出了这些限制,则只有给定类型的第一个空间是有效的,这意味这对其他空间的访问不会导致completion。
  • 每个空间都有2KB内存的大小限制。如果相应的BAR配置为更大的大小,超过2kb限制的访问将与2kb内存空间交叠。
  • PIO设计支持一个I/O空间BAR,默认情况下是禁用的,但如果需要可以更改。

尽管PIO设计有局限性,但提供了Verilog或VHDL源代码,以便可以根据自己的具体需求定制示例设计。

2.2.3.2 TLP数据流
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChipWeaver

觉得有用的话点个赞吧 :)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值