AMBA-CHI协议详解(六)

在这里插入图片描述
AMBA-CHI协议详解(一)
AMBA-CHI协议详解(二)
AMBA-CHI协议详解(三)
AMBA-CHI协议详解(四)
AMBA-CHI协议详解(五)
AMBA-CHI协议详解(六)
AMBA-CHI协议详解(七)

文章目录

    • 2.5 Transaction identifier field flows
      • 2.5.1 Read transactions
        • 2.5.1.1 ID value transfer with DMT
        • 2.5.1.2 ID value transfer with DMT and separate Comp and Data
        • 2.5.1.3 ID value transfer with DCT
        • 2.5.1.3 ID value transfer without Direct Data Transfer
      • 2.5.2 Dataless transactions
      • 2.5.2 .1 ID value transfer in a CleanSharedPersistSep transaction
      • 2.5.3 Write transactions
        • 2.5.3.1 CopyBack transaction
        • 2.5.3.2 WriteNoSnp transaction
        • 2.5.3.3 WriteUnique transaction
        • 2.5.3.4 StashOnce or StashOnceSep transaction
      • 2.5.4 DVMOp transaction
      • 2.5.5 Transaction requests with Retry
      • 2.5.6 Protocol Credit Return transaction


2.5 Transaction identifier field flows

  本节展示不同事务类型的事务ID字段流

● 每个包中包含的字段如下:

Request packet:
TgtID, SrcID, TxnID, StashNID, StashLPID, ReturnNID, ReturnTxnID, PGroupID, StashGroupID, and TagGroupID

Response packet:
TgtID, SrcID, TxnID, DBID, PGroupID, StashGroupID, and TagGroupID.

Data packet:
TgtID, SrcID, TxnID, HomeNID, and DBID

Snoop packet:
SrcNID, TxnID, FwdNID, FwdTxnID, and StashLPID.

● 下图中所有具有相同颜色的字段都具有相同的值。

● 弯曲的回圈箭头显示了Requester和Completer如何使用早期数据包中的字段为后续数据包的字段。

● 包含星号[*]的方框表示字段首次生成的时间,也就是说,它表示确定该字段原始值的Agent。

● 括号内的字段表示该值实际上是固定值。通常情况下,发送数据包时的SrcID字段和到达目的地时的TgtID字段就是这种情况。

● 划掉的字段表示该字段无效。

● 允许将原始事务的TgtID通过互连重新映射到一个新值。(这是一个包含字母R的方框)

——Note—数字硬鉴———————————
在每个发送的数据包中,ID字段属于以下类别之一:
● 新值。星号表示生成新值。
● 由较早的数据包生成。一个回圈箭头表示源。
● 固定值。该值用括号括起来。
● 不是有效的。域段被划掉了。
————————————————————
在下面的示例中,为了清晰起见,有时会省略与示例无关的任何事务ID。

2.5.1 Read transactions

  本节展示了带直接数据传输和不带直接数据传输的读事务中的ID字段流。

2.5.1.1 ID value transfer with DMT

  下图显示了如何派生DMT事务消息中的目标和事务ID值。例如,来自互联的ReadNoSnp请求中的SrcID值是由互联分配的。而在数据响应中用作TgtID的ReturnNID被设置为接收到的读取请求的SrcID值(ReturnNID在响应中会被设置为TgtID)。
在这里插入图片描述
流程中需要完成的步骤如下:

1、Requester节点通过发送请求包启动事务
  请求的ID字段生成如下:

  ● TgtID由请求的目的地决定(TgtID字段可以通过互连重新映射为不同的值。因为请求->互联的tgtid指向互联,互联->内存控制器的tgtid应该指向内存控制器)
  ● SrcID是Requester的固定值。(Requester本身的节点ID,响应需要根据该ID找回来)
  ● RN为一笔事务生成一个唯一的TxnID字段。

2、Home节点接收Requester节点的请求,并向Subordinate节点生成请求。

  请求的ID字段生成如下:

  ● TgtID被设置为SN节点的ID值。(因为已经路由Home节点,指向Home节点的Tgtid要转换为指向SN节点)
  ● SrcID是Home的固定值。(Home本身的节点ID,响应需要根据该ID找回来)
  ● TxnID是由Home生成的唯一值
  ● 将ReturnNID设置为与原始请求的SrcID相同的值。(因为若有需求,SN会根据该ID将响应跨过HN直接返回至RN)
  ● ReturnTxnID被设置为与原始请求的TxnID相同的值。(因为若有需求,SN会根据ReturnNID响应跨过HN直接返回至RN,根据ReturnTxnID找到到原始的请求)

3、如果对SN的请求需要ReadReceipt,则下级需要提供read receipt(该响应的作用是保序,后续会提到)

  ReadReceipt响应的ID字段如下所示:

  ● TgtID被设置为与请求的SrcID相同的值。(谁给我发的请求,我就要给谁回响应)
  ● SrcID是SN的固定值。这也与接收到的TgtID匹配。(SN的节点ID,接收请求是作为Tgtid,发送响应时作为Srcid)
  ● 将TxnID设置为与请求的TxnID相同的值。(响应返回到HN,HN要根据TxnID找到原始请求)
  ● DBID字段无效。

4、SN提供读取数据。
   读取数据响应的ID字段生成如下:

   ● TgtID被设置为与请求的ReturnNID相同的值。(该事务是DMT,读取的数据要跨过HN直接给到RN,所以TgtID直接指向RN,ReturnNID就是在原始请求节点RN发送请求时放置的RN的节点ID)
   ● SrcID是SN的固定值。这也与接收到的TgtID匹配。(SN的节点ID,接收请求是作为Tgtid,发送响应时作为Srcid)
  ● TxnID被设置为与请求的ReturnTxnID相同的值。(RN需要根据该ID去找到原始的请求)
  ● HomeNID设置为与请求的SrcID相同的值。(HomeNID指向Home节点,因为RN的CompAck响应需要返回至HN,而不是SN)
  ● DBID被设置为与请求的TxnID相同的值。(因为该DBID会作为CompAck的txnid,Home要根据txnid在Home找到原始请求)

5、Requester接收读取的数据并发送一个完成确认CompAck响应。(该响应的作用先理解为要去为Home释放一些东西)

   ● 生成的CompAck ID字段如下:
  ● TgtID设置为与读数据的HomeNID相同的值。(HomeNID的作用就是作为针对读数据返回CompAck的TgtID)
  ● SrcID是RN的固定值。这也与接收到响应的TgtID匹配。(RN的节点ID)
  ● TxnID设置为与读数据的DBID相同的值。(因为该DBID会作为CompAck的txnid,Home要根据txnid在Home找到原始请求)
  ● DBID字段无效。

并非所有请求都需要从Requester到Home的CompAck响应

2.5.1.2 ID value transfer with DMT and separate Comp and Data

下图说明如何在使用单独的Comp和Data的DMT事务消息中派生ID字段值。
在这里插入图片描述
1、Requester节点通过发送请求包启动事务

  生成请求的标识字段如下:
  ● TgtID由请求的目的地决定。(TgtID字段可以通过互连重新映射为不同的值。)
  ● SrcID是Requester的固定值。
  ● Requester为一笔事务生成一个唯一的TxnID字段。

2、Home节点接收Requester节点的请求,并向Subordinate节点生成请求。
  生成请求的标识字段如下:

  ● TgtID被设置为SN的节点ID。
  ● SrcID是Home的固定值。
  ● TxnID是由Home生成的唯一值。
  ● 将ReturnNID设置为与原始请求的SrcID相同的值。
  ● ReturnTxnID被设置为与原始请求的TxnID相同的值。

3、Home节点提供单独的Read响应
  读取响应的标识字段生成如下:
  ● TgtID被设置为与请求的SrcID相同的值
  ● SrcID是Home的固定值。
  ● TxnID被设置为与原始请求的TxnID相同的值。
  ● DBID值是由Home生成的唯一值,与向SN请求中的TxnID值相同

4、Requester接收Read响应并发送一个完成确认(CompAck)响应。
  ● TgtID被设置为与读响应的SrcID相同的值。
  ● SrcID是请求者的固定值。
  ● TxnID被设置为Home生成的唯一DBID值。
  ● DBID值无效。

5、对SN的请求需要一个ReadReceipt。下级提供ReadReceipt
  ● TgtID被设置为与请求的SrcID相同的值。
  ● SrcID是SN的固定值。这也与接收到的TgtID匹配。
  ● 将TxnID设置为与请求的TxnID相同的值。

6、SN提供单独的读取数据。
  ● TgtID被设置为与请求的ReturnNID相同的值。
  ● SrcID是从属的固定值。这也与接收到的TgtID匹配。
  ● TxnID被设置为与请求的ReturnTxnID相同的值。
  ● HomeNID设置为与请求的SrcID相同的值。
  ● DBID被设置为与请求的TxnID相同的值。

2.5.1.3 ID value transfer with DCT

在本例中,数据被转发到请求节点,并将带有或不带有数据的Snoop响应发送到HN-F。
在这里插入图片描述
1、Requester节点通过发送请求包启动事务
  ● TgtID由请求的目的地决定。
  ● SrcID是Requester的固定值。
  ● Requester为一笔事务生成一个唯一的TxnID字段。

2、互连中接收方Home节点向RN-F节点发出Forwarding snoop。
  ● SrcID是Home的固定值
  ● TxnID是由Home生成的唯一值。
  ● FwdNID设置为与原始请求的SrcID相同的值。(因为数据会根据此ID从一个RNF直接回到请求的RNF)
  ● 将FwdTxnID设置为与原始请求的TxnID相同的值。

3、RN-F提供读取数据。
  ● TgtID设置为与Snoop的FwdNID相同的值。
  ● SrcID是RN-F的固定值。
  ● TxnID设置为与Snoop的FwdTxnID相同的值。
  ● HomeNID设置为与Snoop的SrcID相同的值。
  ● DBID设置为与Snoop的TxnID相同的值。

4、RN-F还提供对Home的响应,无论是否读取数据(得把Snoop请求的响应回去呢)
  ● TgtID设置为与Snoop的SrcID相同的值。
  ● SrcID是RN-F的固定值。
  ● TxnID设置为与snoop的TxnID相同的值。
  ● DBID字段无效。

5、Requester接收读取的数据并发送一个完成确认CompAck响应。
  ● TgtID设置为与读数据的HomeNID相同的值。
  ● SrcID是Requester的固定值。这也与接收到的TgtID匹配。
  ● TxnID设置为与读数据的DBID相同的值。
  ● DBID字段无效。

2.5.1.3 ID value transfer without Direct Data Transfer

本节给出了一个没有DMT或DCT的Read ID字段流示例,并描述了在Read事务中使用TxnID和DBID字段。

本例中的Requester和Completer 分别是请求节点和HN-F

ID字段流包括来自Completer的可选ReadReceipt响应和来自Requester的可选CompAck响应。

对于包含CompAck响应的Read事务,Completer使用DBID将CompAck与原始事务关联起来。

不包含CompAck响应的Read事务不需要在数据响应中包含有效的DBID字段。

在这里插入图片描述
1、请求方通过发送请求包启动事务。
  ● TgtID由请求的目的地决定。
  ● SrcID是请求者的固定值。
  ● Requester为一笔事务生成一个唯一的TxnID字段。

2、如果事务包含ReadReceipt,则Completer接收请求包并提供ReadReceipt响应(如果有保序要求,会有该响应)
  ● TgtID被设置为与请求的SrcID相同的值。
  ● SrcID是Completer的固定值。这也与接收到的TgtID匹配。
  ● 将TxnID设置为与请求的TxnID相同的值。
  ● DBID字段无效。

3、Completer接收请求包并提供读取数据。
  ● TgtID被设置为与请求的SrcID相同的值
  ● SrcID是完成器的固定值。这也与接收到的TgtID匹配。
  ● 将TxnID设置为与请求的TxnID相同的值。
  ● HomeNID是Completer的固定值。(用于CompAck响应)
  ● 如果断言请求中的ExpCompAck,则Completer生成唯一的DBID值。

4、Requester接收读取的数据并发送完成确认CompAck和响应
  ● TgtID设置为与读数据的HomeNID相同的值。
  ● SrcID是请求者的固定值。这也与接收到的TgtID匹配。
  ● TxnID设置为与读数据的DBID相同的值。
  ● DBID字段无效。

2.5.2 Dataless transactions

  对于Dataless事务,除了CleanSharedPersistSep和StashOnceSep之外,ID字段的使用类似于Without Direct Data传输的ID值传输。唯一的区别是,从Completer到Requester的响应在CRSP通道上作为单个数据包发送,而不是在RDAT通道上作为多个数据包发送。
  对于StashOnceSep事务,StashGroupID值在请求节点发送到互连的请求中,该值在StashDone和CompStashDone响应中返回。StashDone响应中的TxnID值不适用,必须设置为零。

下面描述了一个CleanSharedPersistSep事务中的ID值传输。

2.5.2 .1 ID value transfer in a CleanSharedPersistSep transaction

下图展示了如何在使用单独的Comp和Persist响应的CleanSharedPersistSep事务消息中生成ID符字段值。PCMOSep represents CleanSharedPersistSep。
在这里插入图片描述
1、请求方通过发送请求包启动事务。Request的ID字段生成如下:
  ● TgtID由请求的目的地决定。
  ● SrcID是Requester的固定值。
  ● Requester为每笔事务生成一个唯一的TxnID值。(Requester可以在接收到Comp响应后重用TxnID值)
  ● Requester生成一个新的PGroupID值,或者重用当前正在使用的PGroupID值。

2、Home节点向SN节点生成请求。
  ● TgtID被设置为SN所需的值。
  ● SrcID是Home的固定值。
  ● TxnID是由Home生成的唯一值。(在收到Comp响应后,Home可以重用TxnID值。)
  ● 将ReturnNID设置为与原始请求的SrcID相同的值。
  ● ReturnTxnID不适用,必须设置为零。
  ● 将PGroupID设置为与原始请求的PGroupID相同的值。

3、Home节点向请求方发送一个Comp响应
  ● TgtID被设置为与原始请求的SrcID相同的值。
  ● SrcID是Home的固定值。
  ● TxnID被设置为与原始请求的TxnID相同的值。

4、Home节点可以选择性地向请求方发送Persist响应。
  ● TgtID被设置为与请求的SrcID相同的值。
  ● SrcID是Home节点的固定值。
  ● TxnID不适用,必须设置为0。
  ● 将PGroupID设置为与请求的PGroupID相同的值。

接收方Home节点可以选择向请求方发送一个组合的CompPersist响应,而不是单独的Comp和Persist响应。

CompPersist响应中的ID字段生成如下:
  ● TgtID被设置为与原始请求的SrcID相同的值
  ● SrcID是Home的固定值。
  ● TxnID被设置为与原始请求的TxnID相同的值。
  ● 将PGroupID设置为与原始请求的PGroupID相同的值。

5、SN节点生成Home节点的Comp响应
  ● TgtID被设置为与请求的SrcID相同的值。
  ● SrcID是SN的固定值。
  ● 将TxnID设置为与请求的TxnID相同的值。

6、SN节点生成对RN或HN的Persist响应。
  ● TgtID被设置为与请求的ReturnNID相同的值。
  ● SrcID是SN的固定值。
  ● TxnID不适用,必须设置为0。
  ● 将PGroupID设置为与请求的PGroupID相同的值。

7、如果请求的ReturnNID和SrcID是相同的值,SN节点可以选择向Home节点发送一个组合的CompPersist响应,而不是单独的Comp和Persist响应
  ● TgtID被设置为与请求的SrcID相同的值。
  ● SrcID是SN的固定值。
  ● 将TxnID设置为与请求的TxnID相同的值。
  ● 将PGroupID设置为与请求的PGroupID相同的值。

2.5.3 Write transactions

本节描述了写事务中TxnID和DBID字段的使用:

2.5.3.1 CopyBack transaction

本节描述CopyBack 事务中ID字段的使用。
在这里插入图片描述
1、Requester通过发送请求包启动事务。生成请求的ID字段如下:
  ● TgtID由请求的目的地决定。
  ● SrcID是RN的固定值。
  ● Requester为每笔事务生成一个唯一的TxnID值。

2、Completer接收请求包并生成一个CompDBIDResp响应。响应的ID字段生成如下:
  ● TgtID被设置为与请求的SrcID相同的值。
  ● SrcID是Completer的固定值。这也与接收到的TgtID匹配。
  ● 将TxnID设置为与请求的TxnID相同的值。
  ● Completer生成一个唯一的DBID值。

3、Requester接收CompDBIDResp响应并发送写数据。写数据的ID字段生成如下:
  ● TgtID被设置为与CompDBIDResp响应的SrcID相同的值。如果该值是由互连重新映射的,则该值可能与请求的原始TgtID不同。
  ● Requester是请求者的固定值。
  ● TxnID被设置为与CompDBIDResp响应中提供的DBID值相同的值。
  ● 写数据中的DBID字段没有被使用。
  ● 所有写数据包的TgtID、SrcID和TxnID字段必须相同。

4、Completer接收写数据并使用TxnID字段,该字段现在包含了Completer生成的DBID值。这有助于确定要关联哪个事务的写数据。

在接收到所有写数据包后,Completer可以在另一个事务中重用相同的DBID值。

2.5.3.2 WriteNoSnp transaction

本节描述WriteNoSnp事务中标ID字段的使用

显示单独Comp和DBIDResp的ID值传输。Completer可以将Comp和DBIDResp组合成单个CompDBIDResp响应。Requester可以一些情况下将NCBWrData与CompAck结合起来。
在这里插入图片描述

ID字段的使用与合并响应的事务相同,附加要求如下:
  ● 用于单独的DBIDResp和Comp响应的ID字段必须相同。
  ● 只有当接收到DBIDResp和Comp响应时,请求者才能重用TxnID值。

1、Requester通过发送请求包启动事务。生成请求的标识字段如下:
  ● TgtID由请求的目的地决定。
  ● SrcID是Requester的固定值。
  ● Requester生成一个唯一的TxnID字段。

2、Completer接收请求包并生成一个DBIDResp响应。响应的ID字段生成如下:
  ● TgtID被设置为与请求的SrcID相同的值。
  ● SrcID是Completer的固定值。这也与接收到的TgtID匹配。
  ● 将TxnID设置为与请求的TxnID相同的值。
  ● Completer生成一个唯一的DBID值。

3、Requester接收到DBIDResp响应并发送写数据。写数据的ID字段生成如下:
  ● TgtID被设置为与DBIDResp响应的SrcID相同的值。如果该值是由互连重新映射的,则该值可能与请求的原始TgtID不同。
  ● SrcID是Requester的固定值。
  ● TxnID被设置为与DBIDResp响应中提供的DBID值相同的值。
  ● 写数据中的DBID字段没有被使用。
  ● 所有写数据包的TgtID、SrcID和TxnID字段必须相同。

4、Completer接收写数据并使用TxnID字段(即Completer生成的DBID值)来确定写数据与哪个事务相关联。

5、Completer在完成事务后生成一个Comp响应。
  Comp响应的ID字段必须与DBIDResp响应相同,生成方式如下:
  ● TgtID被设置为与请求的SrcID相同的值。
  ● SrcID是Completer的固定值。这也与接收到的TgtID匹配。
  ● 将TxnID设置为与请求的TxnID相同的值。
  ● Completer使用与在DBIDResp响应中使用的相同的DBID值。

6、如果事务需要,Requester在接收到DBIDResp或Comp后发送一个CompAck消息。
  ● TgtID被设置为与DBIDResp或Comp响应的SrcID相同的值。
  ● SrcID是请求者的固定值。这也与接收到的TgtID匹配。
  ● TxnID设置为与DBIDResp或Comp响应的DBID相同的值。
  ● DBID字段无效。

在接收到Comp和DBIDResp响应之后,Requester可以在另一个事务中重用相同的TxnID值。

在接收到所有写数据包后,Completer可以在另一个事务中重用相同的DBID值。

在单独的DBIDResp和Comp响应之间没有order要求。当两个消息来自同一来源时,需要使用相同的id值。

2.5.3.3 WriteUnique transaction

  在某些情况下,WriteUnique事务还可以包括从Requester到Completer的CompAck响应。在这种情况下,使用ID字段的附加规则是:

● Requester给Completer的CompAck响应的TgtID、SrcID和TxnID标识字段必须与写数据使用的字段相同,即:
  —TgtID被设置为与CompDBIDResp响应的SrcID相同的值。如果给出了单独的Comp和DBIDResp响应,则将TgtID设置为与Comp或DBIDResp响应的SrcID相同的值,因为两者中的SrcID值必须相同。但是,如果该值已被互连重新映射,则该值可能与请求的原始TgtID不同。

  —SrcID是Requester的固定值。

  —TxnID被设置为与CompDBIDResp响应中提供的DBID值相同的值。如果给出了单独的Comp和DBIDResp响应,则将TxnID设置为与Comp或DBIDResp响应的DBID相同的值,因为两者中的DBID值必须相同。

  —没有使用WriteData和CompAck中的DBID字段

  —如果发送WriteData和CompAck联合响应,则TgtID值与Comp、DBIDResp或CompDBIDResp中的SrcID值相同,TxnID值与Comp、DBIDResp或CompDBIDResp中的DBID值相同。

● 在为另一个事务重用相同的DBID值之前,Completer必须接收所有写数据项和CompAck响应。

在这里插入图片描述

在这里插入图片描述

2.5.3.4 StashOnce or StashOnceSep transaction

本节描述了在蕴含DataPull的StashOnce或StashOnceSep事务中ID字段的使用:
在这里插入图片描述
1、Requester通过发送一个Stash请求包来启动事务。
  ● TgtID由请求的目的地决定。
  ● SrcID是Requester的固定值。
  ● 请Requester为请求生成一个唯一的TxnID字段。
  ● Requester包含StashNID字段,以指示要向哪个RN-F发送Stash(划重点)。
  ● Requester包含StashLPID字段,以指示RN-F中的逻辑处理器。

2、Home节点接收Stash请求包并向请求节点发送Comp响应
  ● TgtID被设置为与请求的SrcID相同的值。
  ● 将TxnID设置为与请求的TxnID相同的值。

3、对于StashOnceSep请求,互连中的Home节点向请求节点发送StashDone响应。
  ● TgtID被设置为与请求的SrcID相同的值。
  ● TxnID无效
  ● 将StashGroupID设置为与请求的StashGroupID相同的值。

另外,对于StashOnceSep请求,互连中的Home节点可以发送组合的CompStashDone响应,而不是单独的Comp和StashDone响应到请求节点。
  ● TgtID被设置为与请求的SrcID相同的值。
  ● 将TxnID设置为与请求的TxnID相同的值。
  ● 将StashGroupID设置为与请求的StashGroupID相同的值。

4、Home节点使用Stash生成对适当的RN-F的Snoop。
  ● SrcID是Home的固定值。
  ● TxnID是由Home生成的唯一值
  ● 将StashLPID设置为与原始请求的StashLPID相同的值。
—Note—————
Snoop请求不包括tgtid域段
————————

5、被Snoop的RN-F产生一个Snoop响应。在本例中,它包括一个Data Pull指示。
  ● TgtID被设置为与请求的SrcID相同的值。
  ● SrcID是RN-F的固定值。
  ● 将TxnID设置为与请求的TxnID相同的值。
  ● DBID字段是由RN-F生成的唯一值。

6、Home提供读取数据。
  ● TgtID被设置为与Snoop响应的SrcID相同的值。
  ● SrcID是Home的固定值。(在本例中,读取数据由Home提供。)
  ● TxnID被设置为与Snoop响应的DBID相同的值。
  ● DBID字段是Home生成的唯一值。
  ● HomeNID是Home的固定值。

7、RN-F接收读取的数据并发送完成确认CompAck响应。
  ● TgtID设置为与读数据的HomeNID相同的值。
  ● SrcID是RN-F的固定值。这也与接收到的TgtID匹配。
  ● TxnID设置为与读数据的DBID相同的值。
  ● DBID字段无效。

2.5.4 DVMOp transaction

对DVMOp事务的TgtID、SrcID、TxnID和DBID标识符字段的使用与writensnp事务的相同。

2.5.5 Transaction requests with Retry

对于接收到RetryAck响应的事务,有关于如何使用ID字段的特定规则。
在这里插入图片描述
1、Requester通过发送请求包启动事务。生成请求的ID字段如下:
  ● TgtID由请求的目的地决定
  ● SrcID是请求者的固定值。
  ● Requester生成唯一的TxnID字段。

2、Completer接收请求包并确定它将发送一个RetryAck响应。RetryAck响应的ID字段生成如下:
  ● TgtID被设置为与请求的SrcID相同的值。
  ● SrcID是Completer的固定值。这也与接收到的TgtID匹配。
  ● 将TxnID设置为与请求的TxnID相同的值。
  ● DBID字段无效。
  ● Completer使用一个PCrdType值,该值指示Retry事务所需的信用类型。

3、当Completer能够接受给定PCrdType的Retry事务时,它使用PCrdGrant响应向Requester发送一个信用。生成PCrdGrant响应的标识符字段如下:
  ● TgtID被设置为与请求的SrcID相同的值。
  ● SrcID是Completer的固定值。这也与请求的TgtID相匹配。
  ● TxnID字段没有被使用,必须设置为零。
  ● DBID字段没有被使用,必须设置为零。
  ● PCrdType值被设置为再次发出原始事务所需的类型。

4、Requester接收信用授予,并通过发送请求包重新发送原始事务。生成请求的标识字段如下:
  ● TgtID被设置为与RetryAck响应的SrcID相同的值(也与PCrdGrant响应的SrcID相同),或者与原始请求中使用的值相同。
  ● SrcID是请求者的固定值
  ● Requester生成一个唯一的TxnID字段。这是允许的,但不是必需的,与接收到RetryAck响应的原始请求不同。
  ● 将PCrdType值设置为对原始请求的RetryAck响应中的PCrdType值,该值与PCrdGrant响应的PCrdType值相同。

2.5.6 Protocol Credit Return transaction

  P-Credit返回事务使用PCrdReturn请求返回已授予但不再需要的信用。TgtID、SrcID和TxnID要求如下:

● Requester通过发送PCrdReturn请求包发送协议信用返回事务。生成请求的标识字段如下:
  —TgtID必须与获得的credit的SrcID匹配。
  —SrcID是请求者的固定值。
  —TxnID字段没有被使用,必须设置为零。

PCrdType必须与再次发出原始事务所需的原始PCrdGrant中的PCrdType值匹配。

没有响应或使用与协议信用返回事务相关的DBID字段。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/403665.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

硬件面试经典 100 题(71~90 题)

71、请问下图电路的作用是什么? 该电路实现 IIC 信号的电平转换(3.3V 和 5V 电平转换),并且是双向通信的。 上下两路是一样的,只分析 SDA 一路: 1) 从左到右通信(SDA2 为输入状态&…

Golang | Leetcode Golang题解之第349题两个数组的交集

题目&#xff1a; 题解&#xff1a; func intersection(nums1 []int, nums2 []int) (res []int) {sort.Ints(nums1)sort.Ints(nums2)for i, j : 0, 0; i < len(nums1) && j < len(nums2); {x, y : nums1[i], nums2[j]if x y {if res nil || x > res[len(re…

Python基础和变量使用

1. 基础了解 1.1 运行方式 Python有多种运行方式&#xff0c;以下是几种常见的执行Python代码的方法&#xff1a; 交互式解释器&#xff1a; 打开终端或命令提示符&#xff0c;输入python或python3&#xff08;取决于你的系统配置&#xff09;&#xff0c;即可进入Python交互…

设计模式---构建者模式(Builder Pattern)

构建者模式&#xff08;Builder Pattern&#xff09; 是一种创建型设计模式&#xff0c;旨在将复杂对象的构建过程与其表示分离。它允许使用相同的构建过程创建不同的表示。该模式通常用于构建复杂对象&#xff0c;这些对象由多个部分组成或具有多个可选属性。 构建者模式的核…

Python做统计图之美

Python数据分析可视化 案例效果图 import pandas as pd import matplotlib.pyplot as plt import matplotlib# 数据 data {"房型": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],"住宅类型": ["普通宅", "普通宅", "普通宅", &q…

ffmpeg开发者视频剪辑器

5G 时代的来临&#xff0c;加速了视频类作品的创作&#xff0c;由于现在的流量越来越便宜&#xff0c;网速越来越快&#xff0c;特别是流量无限用套餐&#xff0c;大家更愿意去看视频作品&#xff0c;特别是抖音的兴起&#xff0c;更是加速了小视频的流量。不会剪辑的我们该如何…

内网安全:跨域攻击

目录 获取域信息 利用域信任密钥获取目标域 利用krbtgt哈希值获取目标域 内网中的域林&#xff1a; 很多大型企业都拥有自己的内网&#xff0c;一般通过域林进行共享资源。根据不同职能区分的部门&#xff0c;从逻辑上以 主域和子域进行区分&#xff0c;以方便统一管理。在…

选择排序(直接选择排序与堆排序的比较)

选择排序 选择排序时间复杂度 1. 直接选择排序思考⾮常好理解&#xff0c;但是效率不是很好。实际中很少使用&#xff0c;思路是先进行遍历找到元最小的元素&#xff0c;然后与第一个进行交换 2. 时间复杂度&#xff1a;O&#xff08;&#xff09; 3. 空间复杂度&#…

openharmony 南向开发基础:ohos自定义子系统,自定义部件,调用hilog部件,hilog日志封装傻瓜式教程

openharmony 南向开发基础:ohos自定义子系统,自定义部件,调用hilog部件,hilog日志封装 自定义单部件 关于开源鸿蒙的南向教程不多,很多都是从官方文档上抄的的例子,官网的例子不是很适合入门,写的很粗糙,不适合傻瓜阅读,毕竟对于刚入行鸿蒙的新手而言,gn语法就是第一劝退魔咒…

vue 路由用法 router-view

通过router-view 点击子路由显示子路由关于我们的内容&#xff0c;点击关于信息显示关于信息内容。

map/set和unordered_map/unordered_set的区别及使用情况

map/set和unordered_map/unordered_set的区别 容器底层数据结构是否有序实现版本复杂度迭代器map/set红黑树有序C98O(logN&#xff09;双向迭代器unordered_map/unordered_set哈希表/散列表无序C11O(1)单向迭代器 unordered_set无序的&#xff08;VS下&#xff09; void uno…

【机器学习】探索数据矿藏:Python中的AI大模型与数据挖掘创新实践

&#x1f496; 前言&#xff1a;探索数据矿藏1. &#x1f4ca;数据获取与预处理&#xff1a;AI大模型的燃料1.1 &#x1f310;数据获取&#xff1a;多样性与规模并重1.2 &#x1f9f9;数据清洗与处理&#xff1a;提升数据质量1.3 &#x1f50d;特征工程&#xff1a;挖掘数据的深…

蓝牙音视频远程控制协议(AVRCP) command跟response介绍

零.声明 本专栏文章我们会以连载的方式持续更新&#xff0c;本专栏计划更新内容如下&#xff1a; 第一篇:蓝牙综合介绍 &#xff0c;主要介绍蓝牙的一些概念&#xff0c;产生背景&#xff0c;发展轨迹&#xff0c;市面蓝牙介绍&#xff0c;以及蓝牙开发板介绍。 第二篇:Trans…

[Qt][QSS][下]详细讲解

目录 1.样式属性0.前言1.盒模型(Box Model) 2.常用控件样式属性1.按钮2.复选框3.单选框4.输入框5.列表6.菜单栏7.注意 1.样式属性 0.前言 QSS中的样式属性⾮常多&#xff0c;不需要都记住&#xff0c;核⼼原则是⽤到了就去查 ⼤部分的属性和CSS是⾮常相似的 QSS中有些属性&am…

稚晖君发布5款全能人形机器人,开源创新,全能应用

8月18日&#xff0c;智元机器人举行“智元远征 商用启航” 2024年度新品发布会&#xff0c;智元联合创始人彭志辉主持并发布了“远征”与“灵犀”两大系列共五款商用人形机器人新品——远征A2、远征A2-W、远征A2-Max、灵犀X1及灵犀X1-W&#xff0c;并展示了在机器人动力、感知、…

爱心商城系统pf

TOC springboot424爱心商城系统pf 第1章 绪论 1.1 课题背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人们思想上不可跨域的鸿沟&…

在亚马逊云科技上安全、合规地创建AI大模型训练基础设施并开发AI应用服务

项目简介&#xff1a; 小李哥将继续每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案&#xff0c;帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践&#xff0c;并应用到自己的日常工作里。 本次介绍的是如何在亚马逊云科技利用Servi…

Mac电脑虚拟机安装win11教程

Mac分享吧 文章目录 效果一、准备工作二、安装步骤方法1&#xff1a;使用虚拟机自带的win11系统&#xff0c;选中系统软件--继续--安装&#xff0c;即可完成win11安装方法2&#xff1a;通过下载好的镜像安装Windows11系统。选择镜像文件位置&#xff0c;安装&#xff0c;配置1…

前后端项目交互异步请求JSON数据类型后端标准响应数据格式

java同步请求 当网页与后端交互时,前端不能再进行其他操作 服务器响应回来的内容,会把整个浏览器中的内容覆盖 这种请求方式在前后端交互时不太友好 现在的前后端交互请求都使用异步请求 异步请求(不同步) 通过在前端中使用js中提供的XMLHttpRequest对象实现发送异步请求…

算法的学习笔记—二叉树的镜像(牛客JZ27)

&#x1f600;前言 在二叉树相关的问题中&#xff0c;镜像操作是一个非常经典且常见的题目。本文将通过一道具体的题目&#xff0c;详细讲解如何将一棵二叉树转换为它的镜像&#xff0c;并提供实现该操作的Java代码示例。 &#x1f3e0;个人主页&#xff1a;尘觉主页 文章目录 …