从CHI开始协议分层了,这是跟以往的总线协议不同的,针对SOC系统内的一致性处理,用于系统开发。 |
|
CHI协议是AMBA的第五代协议,可以说是ACE协议的进化版,将所有的信息传输采用包(packet)的形式来完成。但是从接口的角度看,CHI和ACE,AXI这些协议完全不一样了 |
|
CHI : coherent hub interface |
|
MTE: ARM memory tagging extension |
|
CHI可以认为是一个通信协议,也分成了三层:因为是数字世界,因此没有物理层。 |
|
link layer: 提供flow control,管理link channel。信息的粒度是flit(flow
control units,最小的流控单元大小) |
|
network layer: 对protocol来的message进行打包,确定source和dest
nodeID,在网络上进行路由。信息的粒度是packet。通信的对象是endpoint之间 |
|
protocol layer:
最顶层的layer,信息的粒度是transaction(message),通信的对象是component之间 |
|
一个message可能由多个packet来组成,一个packet可以包含多个flit,一个packet的所有flit必须走相同的route路径。 |
|
phit:physical layer transer unit, 一个flit可以包含多个phit |
|
DVM(Distributed Virtual Memory): 虚内存地址管理 |
|
CHI架构是和topology无关的,底层的topology可以是mesh,
ring,crossbar等都是可以的。 |
|
crossbar:多输入多输出,适合node数目较少的设计 |
|
mesh:2D网络,适合大的node数目,但是wire非常多 |
|
PoS: point of serialization,有序request,
这是network上的一个点,从不同的agents来的request到这个点的order会被确定。也就是变成有序的request。 |
|
PoC: point of Coherence, 访问一致性,
这是能保持一致性的点,在这个点上,所有的agents看到的memory的数据是做过一致性的,也就是保证一致。 |
|
PoP: point of persistence, 这是memory系统中的一个点,这是来做power
off的保持的,也就是如果一个write request来了,但是正好power off,这个点会来负责恢复状态 |
|
requester: 发起request的component |
|
completer: 响应request的component,可以是home node(HN)或者subordinate
node(SN) |
|
endpoint/subordinate: 最终响应request的component |
|
Protocol credit/link layer credit:
信令,发送端只有得到credit后才能开始进行传输,也就是接收端一定能接。没有credit是不能开始传输的。 |
|
RN: Request node,产生协议transaction给互连,包含读和写, master |
|
HN: home
node,用于接收来自RN的协议transaction,完成相应的一致性操作并返回一个响应。通常是interconnect(ICN)
硬件作为HN |
|
SN: subordinate Node,用于接收来自HN的请求,完成相应的操作并返回一个响应, slave |
|
MN: misc node,用于接收来自RN的DVM操作,完成相应的操作并返回一个响应 |
|
RN->HN->SN, RN的request是通过HN来进行中转再发送给SN的。 |
|
snoopee: 这是一个能够接收snoop的RN,其实就是对transaction的过程进行监控的agent |
|
Coherency:
所谓的一致性,本质上就是如果一个网络中有2个或者以上的node在写同一个地址的时候,需要能够让网络中所有的node都能观察到相同的order,这样每一个node都 |
|
能够来处理这个一致性。这种一致性可以用硬件的方式来保证,也可以用软件的方式来保证。 |
|
Regions of memory are coherent if writes to the same memory
location by two components are observable in the same order by all
components. |
|
Coherency model:
通常是和cache相关的,如果整个系统都没有cache,那么大家都只能看到一个memory,那么就不存在一致性的问题。因为很多node本身具有local
cache, |
|
这样才会导致和main
memory不一致,导致其它node和当前node看到的同一个地址有不同的值的情况。因此所有的coherency都是在cache
line的粒度。 |
|
coherency protocol: 这个协议就是来保证每一个node的一致性,ensures that all
Requesters observe the correct data value at any given address
location。 |
|
协议基本的保证方式就是如果node观察到了自己的local
cache中对应的地址有数据的更新,那么就应该去copy回来更新自己的cache line。这个观察到的点可能是在main
memory上,也可能 |
|
是在某一个node更新到了自己的cache line中而没有及时更新到main memory的情况都需要处理(write
back vs write through). |
|
让request能够知道当前的某一个memory location 是否只有自己的local
cache中存在copy,还是其它的node的local cache也有cache line存在。 |
|
如果只有当前node中有一个cache
line中存在copy,那么协议就不需要通知其它的node来更新;如果有多个,那么requester必须通知其它的node有数据改动。 |
|
valid, invalid: cache line 的有效性 |
|
unique, shared : unique表示这个cache
line只是在当前cache中,其它cache中没有;shared表示存在多个cache中。 |
|
clean, dirty : clean表示的是当前cache line和main memory是一致的,不用去更新main
memory;dirty表示这个cache line已经被写过了,需要负责更新到main memory。 |
|
full, partial, empty: 表示一个cache
line中有多少bytes是有效的,可以全部有效,可以部分有效,可以全部无效。 |
|
一条cache line是可以有上面多个状态的组合,比如UC : unique+clean, SC: shared +
clean, SD:shared + dirty, UDP: unique + dirty + partial |
|
RN-F : Fully coherent RN, 包括硬件coherent
cache,支持协议支持的所有的transaction |
|
RN-D: IO coherent RN with DVM support, 支持了协议的一个子集,可以接收DVM
transaction |
|
RN-I: IO coherent RN, 更小的子集支持 |
|
SN-F : SN node for normal memory |
|
SN-I: SN node for peripherals or normal memory |
|
数据传输路径:request的顺序正好是下面的反方向,RN开始发出request |
|
DMT: direct memory transfer, SN直接传输数据给RN |
|
DCT: direct cache transfer, RN直接发数据给RN |
|
DWT: direct write-data transfer, RN直接把write data写到SN中。 |
|
Channel的类型:CHI是基于channel的通信,这是和AXI是类似的 |
|
TX REQ channel: RN 发出,SN接收 |
|
TX WDAT channel: RN 发出, SN接收 |
|
TX SRSP channel: RN发出,没有接收?? snoop response |
|
RX CRSP channel: SN发出,RN接收 |
|
RX RDAT channel: SN发出,RN接收 |
|
RX SNP channel: RN接收, 没有发出方?? |
|
QoS:QoS的优先级,一共支持16个优先级,也就是说一个request是可以带上QoS信号了表示当前request的优先级。这是为了让request的node有能力通知end
point来保证它的带宽需求、。 |
|
TgtID: target ID,也就是request的end point的ID |
|
LPID: logic processor ID,和srcID一起来确定request是哪一个logic
processor产生的 |
|
ReturnNID: return node ID |
|
ReturnTxnID: return transaction ID |
|
Opcode: 6bit, request opcode,描述transaction的类型等 |
|
Addr: 读写request要访问的memory地址 |
|
size: Data size, 3bit, 1~64B |
|
MPAM: memory system performance resource partitioning and
monitoring, 这是来有效的使用资源和能够监控资源的使用情况。 |
|
MPAM支持把资源划分成不同的partition,使用partition ID和 performance monitoring
group。 一个request可以带上MPAM
信号来表示当前request是属于哪一个partition和这个partition |
|
中的哪一个performance monitoring group。 |
|
MPAM的field一共11bit包括: perfMonGroup(1bit), PartID(9bits),
MPAMNS(1bit). Receiver
可以支持不支持或者部分支持或者全部支持MPAM的所有bits,这个在能力协商的过程中就会告知。 |
|
tagOp,TagGroupID, traceTag: |
|
MTE: memory tagging
extension,这是用来检测在memory中的数据是否被正确使用的机制。基本的原理就是给每一个需要tagging的地址额外分配一个tag |
|
目前支持的tag包括: allocation tag, physical address tag, 两个的差别在于: data
+ tag, address + tag |
|
allocation tag: 这是在一个memory被分配作为特殊用途时,可以分配一个memory tag,这个memory
tag和这个memory的data一起保存 |
|
physical address tag:
单一个memory地址后来被访问,requester使用这个memory的地址和这个地址对应的tag值,这个tag称为physcal
tag |
|
对于任何的tag检查访问,使用的都是physical tag而不是allocation tag。 |
|
memory tag给每一个16B的data提供一个4bit的tag |
|
Issues : 一个transaction的第一个message |
|
Sends: Requester发出的message |
|
Sends a downstream: 中转node中转了从requester来的message |
|
returns: 发给requester的message |
|
provides: 对snoop的response的message |
|
NodeID: 每一个连接到interconnect
port上的component都会被分配一个或者多个nodeID,但是一个nodeID只能被分配到一个port上。这样可以通过nodeID来找到 |
|
通信的各个组件。如何定义和分配nodeID不在CHI标准的范围内,可以由实现来自己设计 |
|
cache state: I(invalid), UC(unique clean), UCE(UC+empty),
UD(Unique dirty), UDP(UD+Partial), SC(shared clean), SD(shared
dirty) |
|
empty cache line: 一个cache
line中没有byte是valid的,这种cache有下面2个用途: |
|
一个RN在发出写命令的时候去获取一个empty的cache line来写,这其实就是write
allocated,这样不用写到main memory中,可以得到性能的提升。 |
|
ReadNoSnp: 读数据请求, read request by a erquest node to a
non-snoopable address region |
|
ReadNoSnpSep: 请求completer只发送data response, read request from a
HN to SN |
|
ReadOnceMakeInvalid: 对一个可以snoopable的地址发出请求,目的是获得这个地址的数据的copy
|