当前位置: 首页 > news >正文

AMBA-CHI协议详解(五)

在这里插入图片描述

AMBA-CHI协议详解(一)
AMBA-CHI协议详解(二)
AMBA-CHI协议详解(三)
AMBA-CHI协议详解(四)
AMBA-CHI协议详解(五)

文章目录

  • 2.4.Transaction identifier fields
    • 2.4.1 Target Identifier, TgtID, and Source Identifier, SrcID
    • 2.4.2 Transaction Identifier, TxnID
    • 2.4.3 Data Buffer Identifier, DBID
    • 2.4.4 Return Transaction Identifier, ReturnTxnID
    • 2.4.5 Forward Transaction Identifier, FwdTxnID
    • 2.4.6 Data Identifier, DataID, and Critical Chunk Identifier, CCID
    • 2.4.7 Logical Processor Identifier, LPID
    • 2.4.8 Stash Logical Processor Identifier, StashLPID
    • 2.4.9 Stash Node Identifier, StashNID
    • 2.4.10 Return Node Identifier, ReturnNID
    • 2.4.11 Home Node Identifier, HomeNID
    • 2.4.12 Forward Node Identifier, FwdNID
    • 2.4.13 Persistence Group Identifier, PGroupID
    • 2.4.14 Stash Group Identifier, StashGroupID
    • 2.4.15 Tag Group Identifier, TagGroupID


2.4.Transaction identifier fields

  每个事务由许多不同的packets组成,这些数据包通过互连(interconnect)传输。packets内的一组ID域段用于提供有关包的附加信息。

2.4.1 Target Identifier, TgtID, and Source Identifier, SrcID

  请求事务包括标识目标节点的TgtID和标识源节点的SrcID。
  这些id用于在互连(interconnect)中路由。

2.4.2 Transaction Identifier, TxnID

  事务请求包括一个TxnID,用于标识来自给Requester的事务。除了PrefetchTgt之外,对于Requester,TxnID必须是唯一的。SrcID指向Requester ,这确保任何返回的读取数据或响应信息都可以与正确的事务相关联。
  TxnID定义了一个12位字段,outstanding限制为1024。Requester可以在接收到TxnID值后可以重用该值。
●  响应使用相同的值与先前的事务进行关联。(响应通过该值关联到相关的请求)。
●  RetryAck响应使用相同的值与先前事务相关联。

TxnID域段不适用于PrefetchTgt请求,它可以取任何值。

  一旦接收到释放请求所需的所有响应或接收到RetryAck响应,从Home到SN的请求的TxnID域段中使用的值可以被Home重用。

  Retry的事务不需要使用相同的TxnID。

2.4.3 Data Buffer Identifier, DBID

  DBID字段允许事务的Completer提供自己的标识(例如Completer的Buff ID)。Completer发送一个包含DBID的响应。以下情况下,DBID值用作TxnID字段值:
●   Immediate Write,CopyBack Write,Combined Write, Atomic,以及DVMOp transactions的WriteData响应。
●  蕴含Data Pull的Stash transactions的CompData response。
●  包含CompAck响应的Read, Dataless, WriteNoSnp, WriteUnique and Immediate Combined Write transactions的CompAck 响应。

  在以下情况下,Completer在给定事务响应中使用的DBID值对于Requester必须是唯一的:
●   除了WriteNoSnpZero和WriteUniqueZero的所有Write transactions的DBIDResp or DBIDRespOrd或CompDBIDResp
●   所有组合写事务的DBIDResp或DBIDRespOrd或CompDBIDResp。
●   用于原子事务的DBIDResp或DBIDRespOrd或CompDBIDResp。
●   DBIDResp或DBIDRespOrd或CompDBIDResp用于DVMOp事务。
●   包含CompAck的Read事务的CompData或RespSepData,除非ReadOnce*和ReadNoSnp不使用CompAck在Home中释放请求。

  DBID值适用于包含CompAck的读取请求的DataSepResp响应,它必须与关联的RespSepData响应中的DBID值相同。

  对于Write或Combined Write事务,如果Comp和DBIDResp或DBIDRespOrd消息来自同一源,则Comp和DBIDResp或DBIDRespOrd消息中必须包含相同的DBID字段值。

  允许但不要求与原子事务的DBIDResp或DBIDRespOrd消息分开发送的Comp响应消息在Comp和DBIDResp或DBIDRespOrd消息中包含相同的DBID字段值。

  Completer允许(但不是必须)对具有不同Requesters的两个事务使用相同的DBID值。在接收到释放使用相同值的前一个事务所需的所有数据包后,Completer被允许重用DBID值。

  Snoop Completer在响应包含 Data Pull的Stash Snoop时使用的DBID值必须在以下方面是唯一的:
●   对使用Data Pull的Stash snoops的其他Snoop响应中的DBID值。
●   来自该Snoop Completer的任何未完成请求的TxnID。

Completer不需要使用DBID字段,并允许将其设置为以下格式中的任何值:
●   WriteNoSnpZero和WriteUniqueZero事务。
●   不带CompAck的Read事务。
●   不带CompAck的Dataless事务。
●   Snoop对不包含Data Pull的Stash Snoop响应。
●   Non-stash snoop的Snoop响应。

——Note-数字硬鉴——————
使用由Completer分配的DBID而不是由Requester分配的TxnID的优点是:Completer可以使用DBID索引其请求结构,而不是使用TxnID和SrcID执行查找,以确定哪个事务Write Data或CompAck与哪个请求相关联。
如果Completer对不同的Requesters使用相同的DBID值(如果它的操作需要同时激活1024个以上的DBID响应,它必须这样做),它必须使用SrcID和DBID来确定哪个请求应该与写数据或响应消息相关联。
———————————————

DBIDResp响应还用于提供与事务相关的某些保序(order)保证。

2.4.4 Return Transaction Identifier, ReturnTxnID

●   从Home到SN的事务请求还包括一个ReturnTxnID字段,用于传递数据响应和SN的DBIDResp响应中的TxnID值。当适用时,其值必须为:
●   当ReturnNID为Home节点ID时,是由Home生成的TxnID。(例如响应返回至HN)
●   当ReturnNID是原始请求者的节点ID时,是由原始Requester生成的TxnID。(例如响应直接返回至RN)。

   ReturnTxnID仅适用于从Home到SN的ReadNoSnp、ReadNoSnp、WriteNoSnp、Combined Write和Atomic请求。该字段不适用时,必须在从Home到从属的所有其他请求中设置为零。

   ReturnTxnID不适用,必须在从Requester到Home和Requester到SN所有请求中设置为零。(因为会影响响应路由等判断)

以下是从主节点到从属节点的请求中ReturnTxnID的期望值和允许值。(常用场景DMT、DWT等)

In ReadNoSnp and ReadNoSnpSep:
●   期望值是原始的RN 的TxnID,但允许是Home TxnID。
●   在CompData和DataSepResp响应中用作TxnID。

In Atomic with TagOp Invalid or Match:
●   对于AtomicStore, ReturnTxnID可以取任何值,并且该值不会在任何响应中使用。
●   对于 Non-store原子,ReturnTxnID必须是Home TxnID。该值在CompData响应中用作TxnID。

In WriteNoSnp with any TagOp value:
●   当DoDWT = 0时,ReturnTxnID可以取任意值,该值不用于任何响应。
●   当DoDWT = 1时,ReturnTxnID值应该是原始的RN的TxnID(DBIDResp响应直接回到RN),但允许是Home TxnID。在DBIDResp响应中用作TxnID。

In WriteNoSnpDef:
●   当DoDWT = 0时,ReturnTxnID可以取任意值,该值不用于任何响应。
●   当DoDWT = 1时,ReturnTxnID值应该是原始的RN的TxnID,但允许是Home TxnID。在DBIDResp响应中用作TxnID。

In Combined Write:
●   当DoDWT = 0时,ReturnTxnID可以取任意值,该值不用于任何响应。
●   当DoDWT = 1时,ReturnTxnID值应该是原始的RN的TxnID,但允许是Home TxnID。在DBIDResp响应中用作TxnID。

2.4.5 Forward Transaction Identifier, FwdTxnID

   从Home到RN-F的Snoop请求还包括一个FwdTxnID字段,用于传递来自Snoopee的Data响应中的TxnID值。它的值必须是原始请求的TxnID。

FwdTxnID字段仅适用于:
●  SnpSharedFwd
●  SnpCleanFwd
●  SnpOnceFwd
●  SnpNotSharedDirtyFwd
●  SnpUniqueFwd
●  SnpPreferUniqueFwd
在所有其他的Snoop,它是不适用的,必须设置为零。

2.4.6 Data Identifier, DataID, and Critical Chunk Identifier, CCID

该字段标识事务中的各个数据包。

2.4.7 Logical Processor Identifier, LPID

   当单个请求Requester 包含多个逻辑上独立的处理Agent时,使用此字段。SrcID与LPID一起用于唯一标识生成请求的逻辑处理器。

对于以下事务,LPID必须设置为正确的值:
●   对于任何Non-snoopable Non-cacheable 或Device访问:
●   — ReadNoSnp
●   — WriteNoSnp
●   — WriteNoSnpDef

●   对于Exclusive访问,可以是以下事务类型之一:
●   — ReadClean
●   — ReadShared
●   — ReadNotSharedDirty
●   — ReadPreferUnique
●   — MakeReadUnique
●   — CleanUnique
●   — ReadNoSnp
●   — WriteNoSnp

对于其他事务,LPID值是允许的,但不是必需的,用于指示事务发出的原始逻辑处理器。

在请求中,当适用时,数据包中的相同位用于TagGroupID、PGroupID和StashGroupID(即复用)。

2.4.8 Stash Logical Processor Identifier, StashLPID

   当断言相应的StashLPIDValid位时,StashLPID字段可用于指定由StashNID指定的请求节点内的特定LP(Logical Processor)。

2.4.9 Stash Node Identifier, StashNID

   当断言相应的StashNIDValid位时,StashNID字段提供作为Stash事务的目标节点。

2.4.10 Return Node Identifier, ReturnNID

   从Home节点到SN节点的事务请求包含一个ReturnNID,用于确定来自SN节点的以下响应的TgtID:(就是响应要回到SN还是HN)
●  Data response
●  DBIDResp response
●  Persist response
●  TagMatch response

它的值必须是Home的节点ID或原始RN的节点ID。

ReturnNID仅适用于从Home到SN的ReadNoSnp、ReadNoSnp、CleanSharedPersistSep、WriteNoSnp、Combined Write和Atomic请求。该字段不适用时,必须在从Home到从属的所有其他请求中设置为零。

ReturnNID不适用时,必须在从Requester到Home和Requester到从属的所有请求中设置为零。

以下是从Home节点到SN节点的请求中ReturnNID的期望值和允许值

In ReadNoSnp, ReadNoSnpSep, and CleanSharedPersistSep:
●  期望值是原始RN节点ID,但允许是Home节点ID
●  在CompData, DataSepResp和Persist响应中用作TgtID

In Atomic with TagOp Invalid:
●  对于AtomicStore, ReturnNID可以为任何值,并且该值不会在任何响应中使用。
●  对于Non-store原子,ReturnNID必须是主节点ID。该值作为CompData中的TgtID。

In Atomic with TagOp Match:
●  ReturnNID必须是Home节点ID。
●  该值在CompData和TagMatch响应中用作TgtID。

In WriteNoSnp with TagOp not Match:
●  当DoDWT = 0时,ReturnNID可以取任意值,该值不会用于任何响应。
●  当DoDWT = 1时,ReturnNID值应该是原始的RN节点ID,但允许是主节点ID。在DBIDResp响应中用作TgtID。

In WriteNoSnp with TagOp Match:
●  不管DoDWTt的值是什么,ReturnNID值应该是原始的请求者节点ID,但允许是Home节点ID。
●  当DoDWT= 0时,ReturnNID值仅用作TagMatch响应中的TgtID。
●  当DoDWT= 1时,ReturnNID值用作DBIDResp和TagMatch响应中的TgtID。

In WriteNoSnpDef:
●  当DoDWT = 0时,ReturnNID可以取任意值,该值不用于任何响应。
●  当DoDWT = 1时,ReturnNID值应该是原始的Requester节点ID,但允许是Home节点ID。在DBIDResp响应中用作TgtID。

In Non-PCMO Combined Write:
●  当DoDWT = 0时,ReturnNID可以取任意值,该值不用于任何响应。
●  当DoDWT = 1时,ReturnNID值应该是原始的Requester节点ID,但允许是Home节点ID。在DBIDResp响应中用作TgtID。

In WriteNoSnpFullClnShPer and WriteNoSnpPtlClnShPer:
●  不管DoDWT 的值是什么,ReturnNID值应该是原始的Requester节点ID,但允许是Home节点ID。
●  当DoDWT = 0时,ReturnNID值仅用作Persist响应中的TgtID。
●  当DoDWT = 1时,ReturnNID值被用作DBIDResp和Persist响应中的TgtID。

2.4.11 Home Node Identifier, HomeNID

  CompData包含HomeNID字段,Requester使用它来标识针对CompData的CompAck相应的目标ID。HomeNID适用于CompData和DataSepResp,不适用于所有其他数据消息,必须设置为零。
——Note—数字硬鉴—————
在DataSepResp响应中没有对HomeNID和DBID字段的功能需求,因为在RespSepData响应中提供的值是相同的,并且总是可以使用。但是,需要包含这些值来帮助调试和协议检查。
——————————————

2.4.12 Forward Node Identifier, FwdNID

  从Home到RN-F的Snoop请求包含一个FwdNID,用于确定来自Snoopee的Data响应的TgtID。它的值必须是原始Requester的节点ID。
fwdid字段只适用于以下情况:
●  SnpSharedFwd
●  SnpCleanFwd
●  SnpOnceFwd
●  SnpNotSharedDirtyFwd
●  SnpUniqueFwd
●  SnpPreferUniqueFwd

●  除了基于范围的TLBI DVM操作外,它在所有其他Snoop中都不适用,必须设置为零。对于基于范围的TLBI操作,字段中的位用于DVM payload。

2.4.13 Persistence Group Identifier, PGroupID

  CleanSharedPersistSep和 Combined Write with Persistent CMO (PCMO)请求包含一个PGroupID,用于标识该请求所属的 Persistence组。如果Requester有来自不同功能Agent的Persistent CMO请求,它希望识别这些请求以进行高性能的 Persist CMO处理,那么它可以为每组 Persist请求分配不同的PGroupID值。这个8位字段的使用适用于CleanSharedPersistSep和组合写与PCMO事务。它也适用于Persist和CompPersist响应。
●  PGroupID必须在CleanSharedPersistSep请求和包含PCMO的组合写请求中发送。
●  Requster可以使用Persist响应中返回的PGroupID值分别跟踪来自每个组的Persist响应的完成情况。
●  不支持多个persistence 的RN可以将PGroupID值设置为零。
●  使用PGroupID传递barrier的RN通常不会重用PGroupID值,直到该组先前发送的所有CleanSharedPersistSep请求都收到了Persist响应。
●  Completer需要在Persist和CompPersist响应中携带PGroupID,以及包含PCMO的组合写请求的响应。
●  来自Home和SN的Comp和CompCMO响应中的PGroupID字段不适用,必须设置为零。

2.4.14 Stash Group Identifier, StashGroupID

  为了识别请求所属的Stash组,StashOnceSep请求包含一个StashGroupID。来自请求的相同StashGroupID值随后由事务流中的StashDone响应使用。如果RN有来自不同功能Agent的StashOnceSep请求,它想要识别这些请求以进行高性能的stash处理,那么它可以为每组存储请求分配不同的StashGroupID值。
  这个8位字段的使用适用于StashOnceSep请求和StashDone响应。如果它不适用,必须在所有其他请求和响应中设置为零。
●  StashGroupID必须在StashOnceSep请求中发送。
●  RN可以使用StashDone响应中返回的StashGroupID值分别跟踪来自每个组的Stash事务的完成情况。
●  不支持多个Stash组的RN将StashGroupID值设置为零。
●  Completer需要在StashDone响应中携带StashGroupID。

2.4.15 Tag Group Identifier, TagGroupID

  为了识别请求所属的Tag组,将TagOp设置为Match的写请求包含TagGroupID。随后,事务流中的TagMatch响应将使用来自请求的相同TagGroupID值,以便在TagMatch操作通过或失败时通知RN。
  使用这个8位字段适用于写请求,其中TagOp设置为Match,以及TagMatch响应。如果它不适用,必须在所有其他请求和响应中设置为零。
●  TagGroupID必须在TagOp设置为Match的写请求中发送。
●  TagGroupID的确切内容是实现决定的。通常,TagGroupID应该包含异常级别、TTBR值和PE标识符(Exception Level, TTBR value, and PE identifier)。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 基本卫星介绍
  • STM32 的外设驱动
  • 什么是实时数据仓库?它有哪些不可替代之处?
  • Redis的持久化的策略
  • Java之MySQL
  • [Unity]关闭URP的SRP,开启GPU Instancing。
  • Neural Architecture Search:使用Ultralytics框架进行YOLO-NAS目标检测
  • 代理服务器在HTTP请求中的应用:Ruby实例
  • 腾讯二面 智力题 赛马问题
  • 腾讯大模型算法实习生面试题
  • 二.PhotoKit - 相册权限(彻底读懂权限管理)
  • 程序员变副业达人:AI绘画月入5千+,看我如何用技术打造自媒体收益流
  • 数据结构--树与二叉树
  • 网络安全自学入门:(超详细)从入门到精通学习路线规划,学完即可就业
  • Python编码系列—Python 异步编程:asyncio 的魔法与实战
  • 收藏网友的 源程序下载网
  • [数据结构]链表的实现在PHP中
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • JS学习笔记——闭包
  • maya建模与骨骼动画快速实现人工鱼
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • Vue.js源码(2):初探List Rendering
  • win10下安装mysql5.7
  • windows-nginx-https-本地配置
  • 搭建gitbook 和 访问权限认证
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 经典排序算法及其 Java 实现
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 在weex里面使用chart图表
  • 怎么把视频里的音乐提取出来
  • hi-nginx-1.3.4编译安装
  • NLPIR智能语义技术让大数据挖掘更简单
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (02)vite环境变量配置
  • (13):Silverlight 2 数据与通信之WebRequest
  • (31)对象的克隆
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (ZT)一个美国文科博士的YardLife
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (篇九)MySQL常用内置函数
  • (全注解开发)学习Spring-MVC的第三天
  • (实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee
  • (四)activit5.23.0修复跟踪高亮显示BUG
  • (四)React组件、useState、组件样式
  • (四)软件性能测试
  • (图)IntelliTrace Tools 跟踪云端程序
  • (转)visual stdio 书签功能介绍
  • .bat批处理(五):遍历指定目录下资源文件并更新