本节术语
术语词 | 解释 |
---|---|
ARI | Alternative Routing-ID,用于Requester IDs,Completer IDs以及Routing ID。 |
ARI Device | 与Upstream Port关联设备,其Functions均包含 ARI Extended |
ARI Downstream Port | 支持 ARI 转发的Switch Downstream Port或Root Port。 |
little endian | 小端,一种存放二进制数据的格式,其中所有数字的低位组放在最前面 |
big endian | 大端,一种二进制数据储存和传输格式,位于前面的是最高位位元或位元组 |
带Data Payloads的TLP封装规则
- Length表示DW为整数
- 除了引用数据长度明确的消息外,Length[9:0] 为所有Message保留
- 请参阅第 2.2.8 节中的Message Code表。
- 有 data payload的 TLP 不允许发送器TLP Length字段给出的data payload比发送器长Device Control寄存器 Max_Payload_Size 指定字段中的值DW长度。
- 对于ARI 设备,Max_Payload_Size 仅由Function 0 其他设置决策被忽略Function中的 Max_Payload_Size 设置。
- 如果一个非ARI Multi-Function Device(MFD)中的所有Functions 的Max_Payload_Size如果有一个,完全一样Upstream Port与这个MFD它传输的相关联 TLP data payload不得超过一般 Max_Payload_Size 设置。
- 如果一个非ARI Multi-Function Device(MFD)中的所有Functions 的Max_Payload_Size如果有一样的话,如果有一个Upstream Port与这个MFD相关联,它传输的 TLP data payload不得超过我们的自定义 Max_Payload_Size 设置。
- 使用推荐的发送器生成事务Function的 Max_Payload_Size 设置,或所有Functions的最小 Max_Payload_Size 设置。
- 除非软件知道具体的实现,否则软件不应该不同Functions中的Max_Payload_Size设置为不同的值。
- 注意:Max_Payload_Size 仅适用于有data payload的 TLP; Memory Read Request的长度不受 Max_Payload_Size 限制它的大小 Length 字段控制。
- 由 TLP 的 Length 已接收的字段 TLP 的data payload大小不得超过接收设备Controller 寄存器的 Max_Payload_Size 指定字段值的长度。
- 接收人必须检查是否违反这一规则。 若接收器确定 TLP 违反这一规则,就该了 TLP 格式错误 TLP,这是一个与接收端口相关的报告错误。
- 对于 ARI 设备,Max_Payload_Size 仅由Function 0 确定设置Function中的 Max_Payload_Size 设置将被忽略。
- 如果一个非ARI Multi-Function Device(MFD)中的所有Functions 的Max_Payload_Size如果有一个,完全一样Upstream Port与这个MFD根据一般情况,接收器需要相关联 Max_Payload_Size 的设置检查 TLP data payload大小。
- 如果一个非ARI Multi-Function Device(MFD)中的所有Functions 的Max_Payload_Size如果有一样的话,如果有一个Upstream Port与这个MFD接收器需要根据自定义进行相关联Max_Payload_Size 设置检查 TLP 的data payload。
- 鼓励接收器实现使用事标Function的 Max_Payload_Size 设置,或所有Function中最大的 Max_Payload_Size。软件不应该不同 Functions 中的 Max_Payload_Size 除非软件知道具体实现,否则将其设置为不同的值。
- 包含数据的 TLP,Length字段中的值与 TLP 必须匹配实际数据量。同时,接收者必须检查是否违反这一规则。 若接收器确定 TLP 违反这一规则,就该了 TLP 是Malformed TLP,这是一个跟Receiving Port相关的Reported Error。
- Length字段仅指示数据部分 - TLP Digest不包含在Length中。
- 当与字节地址关联的data payload包含在 AtomicOp Request或 AtomicOp Completion以外的 TLP 中时,header数据的第一个字节对应于最接近零的字节地址,然后按增加的字节地址排列。
- 例子:位置 100h 的16 字节写入,header后面的第一个字节是写入位置 100h ,第二个字节写入位置 101h,以此类推,最后一个字节将写入位置 10Fh。
- AtomicOp Requests 和 AtomicOp Completions 中的data payload格式必须使 TLP header第一个数据字节是第一个数据值的最低有效字节,后续数据字节的重要性严格增加。 对于Compare And Swap (CAS) Requests,第二个数据值跟随第一个数据值,必须采用相同的格式。
- AtomicOp Completers 字节存储的序列格式用于在目标位置读取和写入数据,取决于实现方式,可以是 Completer 任何适合目标内存的内容(例如,little endian, big endian等)。
- 小端示例:64位(8字节),目标内存为小端格式Swap Request,目标内存为小端格式,header第一个字节写入位置100h,第二个字节写入位置101h,以此类推,最后一个字节写入位置107h。请注意,在执行写入之前,Completer首先,读取目标内存位置,使其返回Completion中原始值。Completion字节地址和中数据Request对应相同。
Location | Header | 100h | 101h | 102h | 103h | 104h | 105h | 106h | 107h |
Order | -->... --> |
- 大端示例:64位(8字节),目标内存为大端格式Swap Request,目标内存为大端格式,header第一个字节写入位置107h,第二个字节写入位置106h,以此类推,最后一个字节写入位置100h。请注意,在执行写入之前,Completer首先,读取目标内存位置,使其返回Completion中原始值。Completion字节地址和中数据Request对应相同。
Location | Header | 107h | 106h | 105h | 104h | 103h | 102h | 101h | 100h |
Order | -->... --> |
- 图1显示针对性 64 位(8 字节)FetchAdd 的 Completer 访问目标内存的小端和大端示例。 结果中的结果中的字节编号为 0-7,字节 0 字节最低有效 7 最高有效。 每种情况Completer 都使用适当的endian格式获取目标内存操作数。 接下来,Completer 中的 AtomicOp 计算逻辑使用原始目标内存值和 FetchAdd 请求中的“添加”值执行 FetchAdd 操作。 最后,Completer 使用与获取相同的endian格式将 FetchAdd 结果存储回目标内存。