Read Completion Boundary (RCB)切分规则

本文详细解释了ReadCompletionBoundary(RCB)在处理多完成度读请求时的地址对齐规则,包括不同长度请求导致的不同完成包拆分策略,以及系统中如何通过控制寄存器保持组件间的RCB一致性。
摘要由CSDN通过智能技术生成

Read Completion Boundary(RCB) 切分规则
Read Completion Boundary(RCB) 简介
当Read Completion 包含multi-completions时,RCB 规定了多个Completions地址的align规则。Spec中规定RCB可以是64 Byte或者128 Byte,该值可以在link_control register中得到。

RCB 切分规则
Read request length 不大于RCB
例如RCB为128 Byte,read request length 小于128 Byte。这时不会返回multi-completions,所以不会对返回包进行切分,从request的起始地址读够length长度的数据返回。
Read request length 大于RCB,这种情况会返回multi-completions,且与起始地址有关系
例如RCB为128 Byte,read request length 为200 Bytes,起始地址为0X60。这时会有三笔completion返回,第一笔从0X60开始读取32 Bytes数据,第二笔数据从0X80开始读取128 Bytes数据,第三笔从0X100地址开始读取40 Bytes数据。
例如RCB为128 Byte,read request length 为200 Bytes,起始地址为0X10。这时会有两笔completion返回,第一笔从0X10开始读取112 Bytes数据,第二笔数据从0X80开始读取88 Bytes数据。

第一笔completion必须开始于request的起始地址,当request的length不大于RCB时不进行切分,当request的length大于RCB时在RCB处结束。
最后一笔completion返回的地址必须满足所有completion payload长度满足request的length。
所有中间的completions payload大小必须满足RCB

系统中所有component保持一致机制
在讨论这个问题时,首先需要了解控制RCB的寄存器。

从Spec的定义可以看出,对于RC/Bridge 或者EP来说该寄存器的属性是不同的。
所以在系统中由系统软件来管理各个component的RCB,首先读取RC/Bridge的值,并把相同的值写到EP中,这样就可以使整个系统RCB保持一致。

Exp:

     当主机发送一个读取128B MemRd的TLP时,虽然MPS(Max Payload Size)= 512B, 但返回多个CqlD。

      如果RCB=64Bytes,返回完成报文长度=128Bytes,读取起始地址=10020h,则返回完成报文组合可以是:     

    32, 96
    32, 64, 32
    96, 32
    128
(一个地址对应1Byte;10020h%64=32,所以为了地址边界对齐,第一个TLP需要补全32的缺口;中间的TLP应该是64的整数倍;最后的TLP需要靠一端对齐)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值