PCIE6.3 协议解析-Transaction Layer_1
2026/9/24 22:00:45 网站建设 项目流程

第二章 事务层


2.2 Transaction Layer Protocol‑Packet Definition 事务层报文定义

报文定义(NFM/FM报文头部、OHC正交扩展头)

  1. NFM Non‑Flit Mode:传统PCIe报文模式,TLP由Header DW+payload+ECRC组成;前缀是独立TLP Prefix(Local/End‑End前缀),放在TLP头部前面。
  2. FM Flit Mode:PCIe6新增分片模式;不再使用老的独立TLP前缀,全部前缀信息挪进OHC(Orthogonal Header Content正交扩展头),OHC紧跟基础Header Base之后。
  3. OHC:正交扩展内容,一组可选DW扩展段;OHC[4:0]位于FM TLP第一个DW,位域编码表示后面存在哪些OHC块;多个OHC同时存在时强制顺序:A → B → C
  4. TS[2:0]:FM报文Trailer Size字段,标识报文末尾Trailer(尾部)有多少DW,用于放ECRC、IDE‑MAC、PCRC。
  5. IDE‑TLP:完整性增强TLP,需要OHC‑C,Trailer携带IDE‑MAC/PCRC校验。
  6. UIO:Unordered IO,无序IO虚拟通道,仅FM模式支持;UIO TLP不能转换为NFM
  7. Reserved保留位:发送方必须写全0;接收方必须忽略;交换机透传时原样转发。

PCIe是基于报文的协议,两端器件事务层之间交换TLP报文。基础事务一共4大类:Memory存储器、I/O、配置Configuration、Message消息。存储器请求支持两种地址格式:32位短地址、64位长地址。

  • UIO TLP:绑定UIO虚拟通道的TLP。
  • 事务分为两大类:Request请求、Completion完成包
    • Completion不是每个请求都有;读请求必须返回Completion;I/O写、配置写也会返回Completion确认写完。
    • 所有UIO请求强制要求返回Completion
    • Completion靠报文头内Transaction ID事务ID字段和原始请求做匹配。

      保留字段规则:构造TLP的时候,所有标记Reserved保留位必须填0;接收设备必须忽略保留位的值;交换机转发不能修改保留位。注意:部分字段有“规定值”和“保留值”两套编码,这两种情况的处理规则协议分开定义。

NFM与FM格式转换要点

NFM和FM有两套完全不同TLP头部格式。当入端口和出端口模式不一样(一边FM一边NFM),端口必须做TLP格式翻译转换。部分TLP无法完成转换,协议专门定义这类报错处理逻辑。

2.2.1 公共报文头部字段

2.2.1.1 Non‑Flit Mode(NFM传统模式)公共头部

NFM TLP第一个DW的字节0包含Fmt[2:0]格式字段、Type[4:0]报文类型字段。

  • Fmt[2:0]:说明TLP头部DW长度,以及报文后面有没有payload有效载荷。 Table2‑2:

    Fmt[2:0]含义
    000b3DW头部,无数据载荷
    001b4DW头部,无数据载荷
    010b3DW头部,带数据载荷
    011b4DW头部,带数据载荷
    100b存在TLP Prefix前缀

    其余编码全部保留。

  • Type[4:0]:TLP事务类型,决定报文是什么事务(MRd存储器读、MWr存储器写、CfgRd配置读、Msg消息、Cpl完成包、原子操作等),同时决定交换机如何路由该TLP。
NFM头部其余字段(DW0剩余bit,DW1/DW2)
  1. TC[2:0] Traffic Class流量类别:虚拟通道VC选择依据。
  2. R保留位:原来的LN轻量通知bit,该特性已经废弃;现在保留,未来可重分配。
  3. TH(TLP Hints):=1代表TLP头部存在TPH处理提示字段。
  4. Attr[1:0],Attr[2] 属性字段:存储器事务的强/弱排序、可缓存属性。
  5. TD bit:TLP Digest置1表示报文尾部携带ECRC端到端校验DW。
  6. EP Error Poisoned:数据中毒标记,标记payload数据已经损坏。
  7. Length[9:0]:payload数据长度,单位DW(双字4字节)。
    • ✅数据载荷必须4字节自然对齐
    • 对于没有payload的TLP(Cpl完成包、CplLk锁定完成包、大部分Message消息)Length字段是保留。

Table2‑3:Fmt+Type组合表,定义全部NFM TLP:MRd、MRdLk、MWr、IORd/IOWr、CfgRd0/CfgWr0、CfgRd1/CfgWr1、DMWr可延迟存储器写、Msg/MsgD消息、Cpl/CplD/CplLk/CplDLk完成包、FetchAdd/Swap/CAS原子操作、LPrfx本地前缀、EPrfx端到端前缀。

Table2‑4 Length编码:Length值=00_0000_0001b代表1DW;最大值1023DW;Length=0代表1024DW载荷。⚠️极易踩坑:Length=0不是0字节,是最大值1024DW。

2.2.1.2 Flit Mode(FM分片模式)头部定义

FM TLP报文语法结构(报文组成顺序)

  1. 0个或多个1DW大小Local TLP Prefix本地前缀
  2. Header Base基础头部(大小由Type[7:0]决定);紧随其后0‑7DWOHC正交扩展头(由OHC[4:0]字段指明有哪些OHC块)
  3. TLP payload载荷,0~1024DW
  4. TLP Trailer尾部(可选,TS[2:0]指明尾部DW数量;放ECRC / IDE‑MAC /PCRC)
NOP TLP空报文

链路没有其他TLP发送的时候,必须发NOP填充报文;接收设备收到NOP直接丢弃,不产生任何影响;NOP除Type字段以外,其余头部全部是保留位。

FM对比NFM关键架构变更(重点)

  1. NFM中独立的End‑End TLP前缀,FM全部移入OHC扩展头,不再放在报文最前面。
  2. NFM中Steering Tag、PH、ST、AMA、AV字段,FM不再复用字节使能位置;全部收拢放到OHC‑B里面。
  3. UIO TLP只允许FM链路;禁止转换成NFM格式。如果UIO报文转发去往NFM出端口,报不可纠正错误。

FM Header Base第一个DW字段(Figure2‑6)

从低bit到高bit字段:Type[7:0]TC流量类别、OHC[4:0]TS[2:0]Attr属性、Length长度。

  1. Type[7:0]FM的TLP类型,比NFM的5bit更宽。
    • 所有接收器件必须完整解码全部Type编码,哪怕硬件不支持该事务类型。
    • 流控FC要按照Type对应的FC类型处理。
    • FC‑Type=None的TLP,接收端不需要缓存,静默丢弃。
    • Switch交换机要缓存、路由TLP(包含保留编码的TLP)。
    • EP上游端口、RootPort必须缓存报文;遇到不支持OHC内容,允许丢弃不支持OHC部分,但要做Header logging。

TS[2:0] Trailer Size字段
  • 000b:无Trailer
  • 001b:1DW Trailer,存放ECRC
  • 010b~111b:不同DW长度的Trailer;其中IDE‑MAC/PCRC只有OHC‑C存在并且标记IDE TLP时才有意义,否则Trailer内容保留。
OHC[4:0]字段(5bit,核心!)

用来指示后面紧跟哪些OHC扩展块:

  • 0 0000b:没有OHC
  • x xxx1b:OHC‑A存在
  • x xx1x b:OHC‑B存在
  • x x1xx b:OHC‑C存在
  • 0 0xxx b:无OHC‑E
  • 0 1xxx b:OHC‑E1
  • 1 0xxx b:OHC‑E2
  • 1 1xxx b:OHC‑E4

⚠️规则:多个OHC同时存在时,物理顺序强制OHC‑A → OHC‑B → OHC‑C,不能乱序。 发送端:特定TLP类型强制要求带上指定OHC; 接收端:检查OHC规则违例;

  • 请求报文违反OHC强制规则:报Unsupported Request不支持请求
  • Completion报文违反OHC强制规则:报Unexpected Completion意外完成包

全部OHC块逐条解析 A1/A2/A3/A4/A5 / B / C

OHC‑A组(OHC‑A1 ~ A5,同属OHC‑A大类)

OHC‑A表:不同子A格式分别对应不同事务;当报文使用A1,那么A2‑A5所有bit全部保留。

OHC‑A1(Figure 2‑7)

适用场景:带显式字节使能、带PASID的存储器请求;ATS翻译请求。 字段:

  1. NW(No‑Write):仅ATS翻译请求有效;其余请求下该位保留。
  2. PV(PASID Valid):PASID有效位。PV=0时,PASID、ER、PMR全部保留必须为0
  3. ER Execute Request;PMR Privileged Mode Request:ATS翻译请求才使用;其他请求保留。
  4. PASID:进程地址空间ID。
  5. 1st DW BE / Last DW BE:第一个DW、最后一个DW字节使能。

OHC‑A2(Figure 2‑8)

用于IO请求;只携带首DW、末DW字节使能;其余bit保留。

OHC‑A3(Figure 2‑9)

用于配置事务。

  • DSV(Destination Segment Valid):目标分段有效标记。
  • DSV=0,则Destination Segment字段保留。
  • Destination Segment:目标Hierarchy分层域编号。

OHC‑A4(Figure 2‑10)

用于ID路由消息报文;需要PASID或者Destination‑Segment的时候必须带A4。

  • PV=0 → PASID字段保留;
  • DSV=0 → Destination Segment字段保留。

OHC‑A5(Figure2‑11,Completion完成包专用!)

就是前面讲跨Hierarchy返回Completion的扩展头

  • LA[1:0] LowerAddress:低地址两位。
  • DSV:Destination Segment有效位;DSV=0时Destination Segment保留。
  • Destination Segment:Completion要返回的目标分层域(复制原始请求Requester_Segment)
  • Completer Segment:响应方设备自身所属分层域编号
  • Cpl Status:Completion完成状态。

OHC‑B(Figure 2‑12)

⚠️重要:OHC‑B仅允许用于【地址路由请求】;别的TLP里面出现OHC‑B,则B全部bit是保留。 用途:承载TPH TLP处理提示相关PH、ST、AMA、AV字段。

  • HV Hints‑Valid:提示有效,用来限定PH/ST哪些位有效
    • 00b:PH、ST全部无效,保留
    • 01b:PH有效,ST高8bit无效,ST低8bit有效
    • 10b:保留编码,接收按00b处理
    • 11b:PH全部、ST全部字段有效
  • PH:Processing Hint处理提示
  • ST:Sub‑Stream子流ID
  • AV:AMA有效位;AV=0时AMA字段保留。
  • AMA:Address Mask Attribute地址掩码属性。

OHC‑C(Figure 2‑13)【分段+IDE TLP核心】

字段列表:

  1. Requester Segment:请求发起方所在Hierarchy分层域编号
  2. RSV(Requester‑Segment Valid):RSV=1代表Requester‑Segment字段有效;RSV=0,该字段保留。
  3. PR_Sent_Counter
  4. Stream_ID流ID
  5. Sub‑Stream子流
  6. R、K、T字段
OHC‑C硬性规则(高频易错)
  1. IDE‑TLP必须携带OHC‑C
    • Sub‑Stream = 000b/001b/010b:PR_Sent_Counter、Stream_ID、K、T有效;
    • Sub‑Stream=011b~100b:接收行为未定义;
  2. IDE Completion报文:Requester‑Segment字段保留,RSV必须清0。
  3. 非IDE TLP携带OHC‑C时,Sub‑Stream必须等于111b。此时PR_Sent_Counter、StreamID/K/T全部保留。

    IDE‑TLP注意:IDE报文不能在FM/NFM边界做转换;一旦IDE TLP从FM端口发往NFM端口,报文必须丢弃,报Misrouted IDE‑TLP错误。NOP报文严禁被标记成IDE TLP。

Segment分段字段完整规则(只存在FM模式)

Segment的两大作用:

  1. 跨Hierarchy分层域P2P路由:让RC不需要强制对NP请求做taking‑ownership接管;Completion报文依靠Destination‑Segment直接路由回原始发起端分层域。
  2. 错误日志增强:AER日志里带上Segment;多个Hierarchy内存在相同BDF号的时候,可以区分是哪个域设备报的错。

字段位置总结:

  • Requester‑Segment:存于OHC‑C,标记请求发起设备所在分层域;RSV位控制该字段是否有效。
  • Completer‑Segment:存于OHC‑A5,标记响应设备所在分层域。
  • Destination‑Segment:OHC‑A3 / OHC‑A4 / OHC‑A5;DSV位控制是否有效;告诉交换机该报文要送往哪个分层域。

配置写请求FM模式下,Root Port发出配置TLP强制携带OHC‑A3,DSV=1,填入正确Destination‑Segment;Completer设备依靠这个配置报文捕获自己Segment值。

高频踩坑&容易理解错误汇总

  1. ❌Length=0代表0DW数据 ✅Table2‑4:Length=0 → payload=1024DW;Length只有1‑1023直接对应DW数量。
  2. ❌FM模式下本地前缀还是放在TLP报文最前面 ✅FM模式:Local TLP Prefix依旧在报文最开头;老的End‑End前缀全部取消,功能迁移进OHC扩展头
  3. ❌OHC块可以随便排顺序 ✅当多个OHC同时存在,物理DW顺序强制A→B→C,不能调换。
  4. ❌UIO TLP可以做FM→NFM转换 ✅UIO仅FM;转发到NFM端口直接报错不可纠正错误。
  5. ❌OHC‑B可以用于Completion包、消息报文 ✅协议明确:OHC‑B只允许地址路由请求;其余TLP里面OHC‑B全部bit保留。
  6. ❌DSV=1可以随便写Destination‑Segment ✅DSV=0时,硬件强制忽略该字段,字段内容是保留,发送方写0。
  7. ❌只要带上OHC‑C就一定是IDE TLP ✅不是;非IDE报文也允许带OHC‑C,但是此时Sub‑Stream必须=111b;IDE‑TLP是Sub‑Stream取000/001/010。
  8. ❌Trailer的IDE‑MAC一直有效 ✅只有OHC‑C指明该TLP是IDE TLP的时候,TS字段里面IDE‑MAC/PCRC才生效;其余情况Trailer对应位置是保留内容
  9. ❌FM模式Type字段和NFM一样是5bit ✅NFM Type是5bit;FM的Type拓宽为8bit Type[7:0]
  10. ❌NOP报文可以带IDE标记 ✅协议强制禁止:NOP不能当IDE‑TLP;如果收到NOP标记IDE,判定畸形报文Malformed TLP。
  11. ❌配置请求的Completion也要携带Destination Segment ✅配置请求本身不带Requester_Segment;所以对应的Completion不携带Destination Segment,只依靠Transaction ID在RP内完成匹配。
  12. ❌RSV=1/DSV=1可以独立随便置位 ✅RSV=0,则Requester‑Segment字段硬件层面当作保留;DSV=0,Destination‑Segment当作保留;发送端必须对应字段写0,接收直接忽略。

NFM vs FM头部核心差异速表

项目NFM Non‑Flit ModeFM Flit Mode
Fmt2bit Fmt字段控制头部DW长度、有无数据取消Fmt;头部长度完全由8bit Type[7:0]决定
TLP Prefix独立前缀LPrfx/EPrfx,放在报文头部之前Local前缀保留;End‑End前缀全部移入OHC扩展头
扩展机制TLP Prefix前缀OHC正交扩展头(A/B/C/E系列)
尾部校验TD位控制ECRC DWTS[2:0] Trailer Size;支持ECRC、IDE‑MAC+PCRC
分段Segment不存在Segment字段Requester‑Segment(OHC‑C),Destination‑Segment(OHC‑A3/A4/A5),Completer‑Segment(OHC‑A5)
字节使能放在TLP头部DW挪入OHC‑A1/A2
TPH PH/ST/AMA复用头部保留bit全部放入OHC‑B
UIO支持不支持UIO虚拟通道原生支持UIO;UIO报文禁止转NFM

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询