PCIeTLP包格式 v2.0

  1. PCIe基本拓步结构
    基本拓步结构
    PCIe网络为树状拓步结构,一般只能有一个Root Complex(RC),可以有多个Switch,和多个Endpoints.

PCIe的节点本身均具有一个配置空间,继承于PCI设备。EP配置空间为TYPE0,RC配置空间为TYPE1,该空间包含了节点本身的设备和厂家信息寄存器,同时也包含了设置节点运行状态的功能寄存器。设备启动后需要对相关寄存器进行设置才能使得节点正常工作,包括TLP包接收、发送、过滤等。
在这里插入图片描述
Command寄存器

bit功能备注
0IO地址空间解码使能
1Memory地址空间解码使能
2Bus Master Enable ,EP:节点是否可以产生内存和IO请求,如果置零MSI/MSI-X也被禁止,RC:上行方向,节点是否转发接收的内存和IO请求,当置零时,节点接收到内存或IO请求需要按照Unsupport Request处理,同时,对Non-posted Request,必须返回UR completion包,除去内存和IO包,其他包转发不受该位影响
3 -5置零
6ep置零,rc,parity error response
7置零
8SERR# Enable
9置零
10Interrupt Disable 置位时禁止产生INT x中断 ,对RC的中断转发无影响

BIST Built-in Self Test
Header Header type声明接下来的配置空间是TYPE0或TPEY1,以及是否有扩展空间
Lat time 和Cache Line 不能使用
在这里插入图片描述

  1. PCIe End point节点规则

‰ A PCI Express Endpoint must be a Function with a Type 00h Configuration Space header.(节点需要有Type0 配置空间
‰ If the PCI Express Endpoint is a Trusted Device:
• It must have a Trusted Configuration Space header.(必须有Trusted Configuration配置空间)
• It must support Trusted Configuration Requests as a Completer.(必须支持Trusted Configuration Requests包)
• It must support a Configuration Access Correlation (CAC) Extended Capability in Standard Configuration Space and a CAC Trusted Capability in Trusted Configuration Space.
‰ A PCI Express Endpoint must support Configuration Requests as a Completer.***(必须支持Configuration Requests包)***
‰ A PCI Express Endpoint must not depend on operating system allocation of I/O resources claimed through BAR(s).
‰ A PCI Express Endpoint must not generate I/O Requests.***(不能产生IO请求)***
‰ A PCI Express Endpoint must not generate Trusted Configuration Requests.***(不能产生Trusted Configuration Requests包)***
‰ A PCI Express Endpoint must not support Locked Requests as a Completer or generate them as a Requestor. PCI Express-compliant software drivers and applications must be written to prevent the use of lock semantics when accessing a PCI Express Endpoint.(不能支持接收或发送Locked Requests包 )
‰ A PCI Express Endpoint operating as the Requester of a Memory Transaction is required to be capable of generating addresses greater than 4 GB.
‰ A PCI Express Endpoint is required to support MSI or MSI-X or both if an interrupt resource is requested., If MSI is implemented, a PCI Express Endpoint must support the 64-bit Message Address version of the MSI Capability structure.
‰ A PCI Express Endpoint requesting memory resources through a BAR must set the BAR’s Prefetchable bit unless the range contains locations with read side-effects or locations in which the Function does not tolerate write merging.
‰ For a PCI Express Endpoint, 64-bit addressing must be supported for all BARs that have the prefetchable bit set. 32-bit addressing is permitted for all BARs that do not have the prefetchable bit set.
‰ The minimum memory address range requested by a BAR is 128 bytes
‰ A PCI Express Endpoint must appear within one of the hierarchy domains originated by the Root Complex.
3. TLP包
完整的PCIe包结构,TLP包为Transaction layer部分
上图为完整的PCIe包结构,TLP包为Transaction layer部分
TLP包分为五种memory, I/O, and configuration,Trusted Configuration and Message。
在这里插入图片描述
TLP包格式框架如下图
在这里插入图片描述
在进行发送时,依次发送byte0,byte1.。。。。

通用数据包头部分
所有的TLP包前4个字节均为下图格式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Fmt[1:0] TLP包格式
Type[4:0] 包类型
TC[2:0] 通信类别
Attr[1:0] 属性
TD TLP digest是否存在,如果目的设备不支持ECRC,必须忽略TLP DIGEST,如果目的设备支持ECRC,则将TLP Digest按照ECRC解析。
EP 接收端是否抛弃该数据包
Length[9:0] 数据长度,DWORD对齐,必须是DW的整倍数,1代表1个dword
AT address type

带数据的TLP包
TLP包携带的数据不能超过配置空间中,MAX_PAYLOAD_SIZE的值。Memory Read Requests中LENGTH不受该约束限制,当超过最大允许负载时,返回包分包发送。

TLP包路由和寻址规则
TLP可以通过ID或address或implicit(模糊路由,仅message包使用)三种方式进行路由。
其中message数据包特殊,三种路由方式都可以使用。

address路由
Memory and I/O Requests使用该路由方式。32位地址使用3DW header TLP包,64位地址使用4DW header包
For Addresses below 4 GB, Requesters must use the 32-bit format
需要进行全地址解析,不允许出现地址混叠
在这里插入图片描述
For Memory Read Requests and Memory Write Requests, the Address Type (AT) field is encoded as shown in Table 2-5, with full descriptions contained in the Address Translation Services
Specification, Revision 1.0. For all other Requests, the AT field is reserved。(AT仅用于内存读写请求,)
在这里插入图片描述
ID Based Routing Rules
Configuration Requests and Trusted Configuration Requests, Vendor_Defined Messages,Completions四种包采用ID路由方式。ID路由使用Bus, Device, and Function Number 指定目的地址。
在这里插入图片描述
First/Last DW Byte Enables Rules
在这里插入图片描述

  • length超过1DW的request,1st DW BE不允许全为0
  • length=1dw的request,last DW BE必须为0,超过1DW的必须不能都为0
  • length=1dw的request,允许1st DW BE为不连续的使能,Non-contiguous Byte Enable examples: 1010b, 0101b, 1001b, 1011b, 1101b
  • length=2dw的request,允许两个DW BE都为不连续的
  • 所有非双字对齐的内存请求,字节使能必须连续,如下图
    在这里插入图片描述
    在这里插入图片描述

RC — EP 模式下的链路建立过程及通讯理解

初始时,PHY层建立连接并进行数据同步,同步完成后连接建立成功。
此时RC主动对EP进行配置,主要包含Bus Number、Device Number、Function Number、这三个参数可以使得EP获取唯一确定的ID(以上三个参数简称)地址,Configuration Requests and Trusted Configuration Requests, Vendor_Defined Messages,Completions四种格式通过以上三个参数组合成的ID进行路由,当EP接收到与自身ID相符合的TLP包会进行接收解析,如当xilinx的pcie-ip接收到与自身ID相符的Configuration Requests 包时会自动解析该请求包,并执行相关操作,执行完成后自动返回完成包,完成包中Completer ID即为该ID。
EP相关ID配置完成后,对于PCIe一般为memroy设备,RC需要对通讯过程中最重要的EP的BARS寄存器进行配置,BAR寄存器代表的地址空间与TYPE0/1寄存器空间不同。
BAR(基地址寄存器),基于ADRESS的TLP路由方式依靠BAR寄存器实现。BAR寄存器初始值由EP决定,包含了EP节点类型和操作方式,以及空间大小。RC在初始化时对EP进行内存地址分配,需要先获取BAR寄存器中包含的节点空间和类型等信息,在对BAR寄存器进行写操作,完成地址分配。当系统中有多个EP时,由RC保证分配地址不重叠。完成分配后RC即可通过读写相关地址实现对EP的操作。EP接收到读写TLP包会对包内地址与BAR寄存器存储的地址进行匹配,如果在范围内则接收该TLP包并发送给APP进行相应操作,如果不在范围内则丢弃,并产生丢弃包的相关信号。
BARS寄存器在RC和EP中均存在,这里只说明EP的BARS,在通讯建立的过程中,EP需要依靠RC配置BARS寄存器以获取在系统中的内存地址的分配。
EP的BARS寄存器一共有6个,为BAR0-BAR5。寄存器位说明如图 在这里插入图片描述
PCIe不建议配置为IO设备,所以仅介绍Memory。EP的BAR寄存器初始值由EP节点配置决定,其中作为Memory设备bit0必须为0,bit[2:1]代表Memory地址类型,包含32位(2‘b00’)和64位(2‘b10’)两种。当为64位地址Memory时,两个连续的BAR寄存器(32位)组合成一个64位BAR寄存器。bit3代表是否具有数据预取功能。bit[3:0]表示EP节点对应BAR空间的工作模式,只读,当寄存器表示基地址时bit[3:0]应认为为4‘b0’。
以32位地址为例,当BARS为初始值时,bit[31:4]表示对应BAR空间大小。当bit[31:4]都为1时表示16字节空间,当bit[31:21]为1,bit[20:4]为0,表示1MB空间。RC在配置BAR时会先向寄存器写入全1,并回读此时寄存器的值,忽略低4位,通过剩余为0的位数量确认空间大小,然后写入分配内存地址即完成EP节点配置。可正常读写通讯。
BAR空间读写请求格式包如下图所示。
在这里插入图片描述
完成包
在这里插入图片描述

1
RC向EP发起读写请求
当RC发起写请求TLP包时,根据地址位宽选择3DW或4DW格式包,确保Length与后续携带DW数据个数相符,Address位于EP节点的BAR空间内,EP节点即可正确接收该TLP包。
当RC发起读请求TLP包时,根据地址位宽选择3DW或4DW格式包,确保Address位于EP节点的BAR空间内,EP节点即可正确接收该TLP包。
读请求包要求必须有Completions包作为回应,包格式如下图,确保携带数据时Length与数据DW个数一致,Completer ID为EP节点的ID(上文提及),Requester ID 在读请求TLP包内包含。
在这里插入图片描述
EP向RC发起读写
RC端为ROOT port 时,rp需要设置command寄存器bit2为1才可以接收ep发送的请求包。

pcie DMA模式
ep向RC发送数据:首先通过RC将发送数据的物理地址(应该是ddr或其他的真实物理地址)和数据大小发送给EP,ep接收后开始产生write request包发送给RC完成EP到RC的DMA传输。
RC向ep的数据发送:RC向EP发送读取数据的地址和数据大小,EP产生读请求发送给RC,rc接收后产生completion包

  • 2
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值