2. PCIE TLP解包封包

第二十一讲、PCIE的TLP包的封包解包原理.pdf
00 Packet Coding.docx

掌握如何发送接收 Mrd(memory read TLP)、Mwr(Memory write TLP)、Cpl(Completion TLP)和Cpld(Completion with data TLP) 命令包

1、 TLP 包是由 PCIE 的 Endpoint 或者 Root Complex 组建发送。
2、 TLP 包只包含两种包头长度 3DW 和 4DW(double word is 32bit),数据内可以选择包含和不包含 ECRC 1DW(循环校验字 32bit)
2. PCIE TLP解包封包_第1张图片

绿色:传输层协议
浅蓝色:数据链路层协议
蓝色:物理层协议
紧挨着链路层的绿色部分由红色圈圈出的是用户的 TLP 包, 也就是接下来我们要重点讲解的部分。(此部分如果选择使用框架那么由框架创建例如 Riffa 和 XDMA,如果完全自定义那么就是需要自己的写这些 TLP

传输层细节讲解

2. PCIE TLP解包封包_第2张图片

Memory write TLP 包结构

2. PCIE TLP解包封包_第3张图片

名称 字段 作用
Fmt DW0[31:29] 决定了包头是3DW长度还是4DW长度的
Type DW0[28:24] 决定了包的类型,类型有Mrd(读地址内数据)、Mwr(向地址写数据)、Cfg(配置PCIe)、Msg(消息)、Cpl(读地址数据请求后返回的数据包)
Traffic Class DW0[22:20] 包交换优先级,数字越大优先级越高
Attr DW0[18]、DW0[13:12] 包的属性。Attr[13]是解析包是顺序还是乱序,一般设置为顺序。Attr[12]是Cache一致性,数据量小的时候可以打开以提高数据传输效率,数据量大则关闭
TH DW0[16] PCIe2.1提出,xilinx7不支持此设置
TD(TLP Digest) DW0[15] 为1是必须添加ECRC,为0时不添加
EP(Error package) DW0[14] 错误包标志。为1时代表此包为错误包,将被忽略
AT(Addr Type) DW0[11:10] 地址类型。一共有三种类型:内存地址(00)、虚拟地址(10)、转换完成的内存地址(11)。当表示虚拟地址是需将地址转换成内存地址
Length DW0[9:0] 用来表示数据包的长度,用于Mwr、Cpl、Msg包。注意单位是DW,也就是32字节的,注意单位转换。一个数据包的数据长度最多为4096byte
Requester ID DW1[31:16] 这个ID是PCIe的endpoint设备在root comlex初始化时对设备分配的,分为bus number[]、Device Number[]、Func[]
Tag DW1[15:8] 扩展标识,由请求方产生,与Requeseter ID构成唯一标识,用来识别应答信息
First/Last byte Enables第一字节和最后一个字节有效标志 DW1[7:0]
Address DW2或者DW2 + DW3 地址位。Fmt决定了这个位数是32位还是64位

Completion/completion with Data TLPs 完成相应包

2. PCIE TLP解包封包_第4张图片

信号名称 信号作用
Completer ID 由谁反馈的数据
Requester ID 由谁请求的数据
Completion status 000 是成功相应, 001 是不支持此请求, 010 配置请求请重试, 100 请求被忽略
Byte Count 剩余未反馈数据的字节数量
routing Tag 从请求包中复制此字段
Lower Address 第一个有效字节地址的低 7bit 位 特别注意: Lower address和 Length 不能跨越 Root Complex 的 RCB(Read Completion Boundary)读完成包的边界但可以是 RCB 的整数倍, RCB 是在 Root Complex 设置的,我们的 IPcore可以通过 link control 控制器知道此值, RCB 一般是 64 字节也可设置为 128 字节, 默认没设置情况是 64 字节。
MPS(Max Payload Size) 每一个 EP 和 RC 都可以设置此值,那么系统的 MPS 会取所有 MPS 的最小值, 比如 X86 系统中有多个

2. PCIE TLP解包封包_第5张图片
系统中最小的 MPS 是 128byte 那么系统的 MPS 是 128, 此值会通过 IP 核接口呈现出来。

你可能感兴趣的:(fpga开发,接口,pcie)