AMBA-CHI协议详解(二十二)
AMBA-CHI协议详解(一)- Introduction
AMBA-CHI协议详解(二)- Channel fields / Read transactions
AMBA-CHI协议详解(三)- Write transactions
AMBA-CHI协议详解(四)- Other transactions
AMBA-CHI协议详解(五)- Transaction identifier fields
AMBA-CHI协议详解(六)- Transaction identifier field flows
AMBA-CHI协议详解(七)- Ordering
AMBA-CHI协议详解(八)- Address, Control, and Data
AMBA-CHI协议详解(九)- Data transfer
AMBA-CHI协议详解(十)- Retry
AMBA-CHI协议详解(十一)- Network Layer
AMBA-CHI协议详解(十二)- Cache line states
AMBA-CHI协议详解(十三)- Read transactions and Cache line states
AMBA-CHI协议详解(十四)- Dataless transactions
AMBA-CHI协议详解(十五)- Write transactions
AMBA-CHI协议详解(十六)- Combined Write/Atomic transactions
AMBA-CHI协议详解(十七)- Snoop request types
AMBA-CHI协议详解(十八)- Response types
AMBA-CHI协议详解(十九)- Cache state transitions at a Requester
AMBA-CHI协议详解(二十)- Cache state transitions at a Snoopee
AMBA-CHI协议详解(二十一)- Hazard conditions
文章目录
- 5.Interconnect Protocol Flows
- 5.1 Read transaction flows
- 5.1.1 Read transactions with DMT and without snoops
- 5.1.2 Read transaction with DMT and with snoops
- 5.1.3 Read transaction with DCT
- 5.1.4 Read transaction without DMT or DCT
- 5.1.5 Read transaction with snoop response with partial data and no memory update
- 5.1.6 Read transaction with snoop response with partial data and memory update.
- 5.1.7 ReadOnce* and ReadNoSnp with early Home deallocation
- 5.1.8 ReadNoSnp transaction with DMT and separate Non-data and Data-only response
- 5.1.9 ReadNoSnp transaction with DMT with ordering and separate Non-data and Data-only
5.Interconnect Protocol Flows
本章展示了不同事务类型的互连协议流程以及互连hazard条件。
在接下来的事务流图中:
- 存在多个一致的请求节点,一个 HN-F 和一个 SN-F。
- 如果 HN-F 收到多个数据响应,即来自被窥探的 RN-F 的一个响应和来自 SN-F 的另一个响应,则转发给请求者的数据以粗体突出显示。
- HN-F 没有互连缓存。这导致所有对 HN-F 的请求都启动对 SN-F 的请求。
5.1 Read transaction flows
5.1.1 Read transactions with DMT and without snoops
对于没有窥探的读取事务,建议使用 DMT。
下图显示了使用 ReadShared 事务的示例 DMT 事务流。SN-F对HN-F的响应不是必需的,因为请求节点的CompAck用于在主节点处释放请求。
ReadShared事务流的步骤如下:
- RN-F向HN-F发送ReadShared请求。
- HN-F向SN-F发送ReadNoSnp请求。
- SN-F直接向RN-F发送数据响应,使用CompData_UC。
- RN-F向HN-F发送CompAck,因为请求是ReadShared,并且需要CompAck来完成事务。
5.1.2 Read transaction with DMT and with snoops
对于带有snoops和来自内存的数据的读取事务,建议使用DMT。
下图显示了使用ReadShared事务的DMT事务流程示例。
从SN-F到HN-F,不需要响应,因为请求者的CompAck用于在Home节点处释放请求。
ReadShared事务流程步骤如下:
- RN-F0向HN-F发送ReadShared请求。
- HN-F向RN-F1发送SnpShared请求。RN-F1向HN-F返回SnpResp_I响应。
- HN-F在收到RN-F1的窥探响应后,向SN-F发送ReadNoSnp请求。这保证了RN-F1没有返回数据。
- SN-F直接向RN-F0发送数据响应,使用CompData_UC。
- RN-F0向HN-F发送CompAck,因为请求是ReadShared,并且需要CompAck来完成事务。
5.1.3 Read transaction with DCT
对于带有snoops和来自其他请求节点缓存的数据的读取事务,建议使用Direct Cache Transfer(DCT)。
DCT from cache line in UC state
下图展示了DCT事务的示例流程。 请求者是 RN-F0,forwarding cache位于 RN-F1。
DCT 事务流的步骤如下:
- RN-F0向HN-F发送ReadShared请求。
- HN-F 发送 SnpSharedFwd,即向 RN-F1 发送转发窥探请求。
- RN-F1 将 CompData_SC 响应转发给 RN-F0。TxnID 与原始 ReadShared 请求相同。
- RN-F1 还向 HN-F 发送 SnpResp_SC_Fwded_SC 窥探响应。RN-F1 的缓存行状态从 UC 转变为 SC。
- 在接收到 CompData_SC 响应后,RN-F0 的缓存行状态从 I 转变为 SC,RN-F0 向 HN-F 发送 CompAck 响应。
DCT 事务流中的步骤 3 和 4 可以以任意顺序发生,因为 CompData 和 SnpResp 是在不同通道上发送的。
Double data return in a DCT transaction
下图显示了一个示例 DCT 事务流,该流将数据发送到 HN-F 并将数据转发到 RN-F0。
DCT 事务流的步骤如下:
- RN-F0向HN-F发送ReadShared请求。
- HN-F 向 RN-F1 发送 SnpSharedFwd 侦听请求。
- RN-F1 向 RN-F0 发送 CompData_SC 响应。TxnID 与原始 ReadShared 请求相同。RN-F0 缓存行从 I 过渡到 SC。
- RN-F1 还向 HN-F 发送了一个 SnpRespData_SC_PD_Fwded_SC 窥探响应,其中包含缓存行的副本,并将脏缓存行的责任转交给 HN-F。RN-F1 的缓存行状态从 UD 转变为 SC。
- HN-F 向 SN-F 发送了一个 WriteNoSnp 请求。
- SN-F 向 HN-F 响应 CompDBIDResp 请求数据。
- HN-F 向 SN-F 发送 NCBWrData。
- RN-F0 在接收到数据响应后发送 CompAck。
5.1.4 Read transaction without DMT or DCT
下图显示了在没有 DMT 的情况下使用 ReadNoSnp 事务的流程示例。 在图中,ReadNoSnp 在原始请求中设置了ExpCompAck。
该请求不会生成任何snoops,并从 HN-F 的内存读取响应中接收数据。
- RN-F0 发起一个ReadNoSnp事务,ExpCompAck 设置为 1。
- HN-F 接收并allocates该请求。
- HN-F 向 SN-F 发送ReadNoSnp请求。
- SN-F 向 HN-F 返回 CompData_I。
- HN-F 将数据返回给 RN-F0。(如果在原始ReadNoSnp请求中未断言 ExpCompAck,HN-F 此时可能会释放该请求)
- RN-F0 释放该请求并向 HN-F 发送 CompAck。
- HN-F 接收 CompAck 响应并释放请求。
(正在传输的数据副本以粗体标记。)
5.1.5 Read transaction with snoop response with partial data and no memory update
下图显示了事务流程,正在传输的数据副本以粗体标记。
- RN-F0向HN-F发送ReadUnique请求。
- HN-F向SN-F发送ReadNoSnp请求,并向RN-F1和RN-F2发送SnpUnique请求。
- RN-F1将缓存行从UDP转换为I,并将SnpRespDataPtl_I_PD返回给HN-F。RN-F2将SnpResp_I返回给HN-F。与此同时,SN-F将CompData响应返回给HN-F。HN-F将从SN-F返回的数据与从RN-F1接收到的部分数据合并。
- HN-F 将 CompData_UD_PD 发送给 RN-F0。RN-F0 缓存行状态从 I 过渡到 UD。
- RN-F0 向 HN-F 发出 CompAck 响应以指示事务完成。
5.1.6 Read transaction with snoop response with partial data and memory update.
下图显示了事务流程,传输的数据副本以粗体标记。
图中 ReadClean 带有部分数据窥探响应事务流程的步骤如下:
- RN-F0 向 HN-F 发送 ReadClean 请求。
- HN-F 向 SN-F 发送 ReadNoSnp 请求,并向 RN-F1 和 RN-F2 发送 SnpClean 请求。RN-F1 缓存行状态从 UDP 过渡到 I。
- RN-F1 返回 SnpRespDataPtl_I_PD,RN-F2 返回 SnpResp_I 到 HN-F。同时,SN-F 返回 CompData_I 响应给 HN-F。合并数据。
- HN-F 发送 CompData_UC 给 RN-F0,发送 WriteNoSnp 给 SN-F。RN-F0 的缓存行状态从 I 转变为UC。
- RN-F0 向 HN-F 发出 CompAck 响应以指示事务完成。
- SN-F 向 HN-F 发出 CompDBIDResp。
- HN-F 发送 NCBWrData 给 SN-F。
5.1.7 ReadOnce* and ReadNoSnp with early Home deallocation
下图显示了没有order要求的ReadOnce的优化流程
图 5-8 中优化的ReadOnce流程的步骤如下:
- RN-F0 向 HN-F 发送无序ReadOnce请求,Order[1:0] 设置为0b00。
- HN-F向SN-F发送DMT ReadNoSnp请求,Order[1:0]设置为0b01。
- SN-F向主节点发送ReadReceipt。
- HN-F在接收到ReadReceipt后释放请求。
- SN-F直接向RN-F0发送CompData_UC。
注意:在不需要CompAck的情况下,从Home节点到从属的ReadNoSnp事务避免了从Home节点到请求者发送RespSepData的需要。
5.1.8 ReadNoSnp transaction with DMT and separate Non-data and Data-only response
下图展示了一个带有分离非数据和仅数据响应的DMT事务流的示例。
在这个示例中,没有保序要求,RN-F可以向HN-F发送CompAck以在主节点释放请求,而无需等待DataSepResp.响应。
- RN-F向HN-F发送无序的ReadNoSnp请求。
- HN-F向SN-F发送读取ReadNoSnpSep请求。
- HN-F向RN-F发送RespSepData数据。
- SN-F向HN-F发送ReadReceipt。
- RN-F在接收到响应RespSepData后发送CompAck。
- SN-F向RN-F发送DataSepResp,返回读取的数据。
5.1.9 ReadNoSnp transaction with DMT with ordering and separate Non-data and Data-only
下图显示了一个具有保序和分离非数据和仅数据的DMT事务流示例。
ReadNoSnp具有非零排序字段,要求:
- 下一个有序请求只能在接收到RespSepData后发送。
- RN-F必须在发送CompAck.之前等待RespSepData和至少一个DataSepResp包。
- HN-F 在收到 CompAck 之前不得向 SN-F 发送下一个有序请求。
- RN-F 向 HN-F 发送ReadNoSnp,ExpCompAck 设置为 1。 Order[1:0] 设置为0b10。
- HN-F 向 SN-F 发送ReadNoSnpSep,Order[1:0] 设置为0b01。
- HN-F 返回RespSepData给 RN-F。
- SN-F 返回ReadReceipt给 HN-F。
- SN-F 直接向 RN-F 发送DataSepResp。
- RN-F 向 HN-F 发出 CompAck。