CCN-508 规范
写在前面
由于需要在项目中配置多核 cache 一致性以及流量控制相关任务,所以阅读了《corelink_ccn508_cache_coherent_network_technical_reference_manual_100020_0001_01_en》.
在阅读之间,你也许需要了解一下 CHI 总线知识?
第一章-介绍
CCN-508 是基于 AMBA 5 CHI 总线的一个可扩展一致性内部互连硬件模块。
CCN-508 模块中,包含下列的 CHI 总线协议节点:
- RN-F: 完全一致性节点,带 cache 的总线事务请求节点,比如 CPU Cluster;
- RN-I Bridge: I/O 一致性节点桥,用于桥接不带 cache 的总线事务节点,比如各外设控制器;
- HN-F: CHI 总线协议内部节点,用于访问 L3 Cache 与 SN-F, 以及接受来自 RN-F 与 RN-I 的 cache 一致性请求,并且生成 cache 维护与监控给所有的 RN-F;
- HN-I:CHI 总线协议内部节点,用于传递与 RN-I 的总线事务,主要确保发送往 I/O 子系统的请求顺序;
- SN-F: 完全一致性主节点,最多 4 个,链接 DDR 控制器;
- MN: 杂项节点,用于处理屏障指令、DVM 操作、配置访问、错误处理、中断生成,MN 与 HN-I 使用同一个 NodeID;
- RN-D: 支持虚拟内存访问的 I/O 一致性节点,需要SMMU?可以在 snoop 中获取 DVM 消息。
在一个 SOC 中,CCN-508 承担如下图的角色:
在上图中:
- CCN-508 通过 CHI RN-F 接口链接 cpu cluster;
- 通过至多 4 个的 CHI SN-F 链接 memory controller 访问 DDR
- 剩余对外的 AXI4/ ACE-Lite 接口连接 I/O 外设控制器。
第二章-CCN-508 功能描述
CCN-508 将 ARM 架构内部互连与 cache 一致性功能整合到一个模块里。(包含总线功能与 cache 管理),如下图:
功能如下:
- 存在 16 个 crosspoint 的双环形结构,每一个 XP 支持最多两个端口;
- 支持最多 8 个全一致性处理器 clusters;(8 个 RN-F);
- 支持最多 4 个内存控制器(SN-F);
- 支持最多 24 个 ACE-Lite/ACE-Lite+DVM/AXI4 I/O master 设备(GPU/DMA/UART/SPI 等外设);
- 虚拟通道等于物理通道的方式,提供充足的系统带宽;
- 两个 128 位,双采样数据通道;
- 广播监控通道
- master 之间的 DVM 消息传输;
- 针对流量控制的 QoS 调度器;
- 存在一个 PMU 对性能相关事件进行计数;
- 高性能,分布式的系统 L3 cache;(L3 Cache 位于 HN-F)
- OCRAM, 无DDR 情况下运行;(OCRAM 也存在 CCN 508 上面?那应该同上)
- 两个 HN-I (I/O home node)节点, 支持 ACE-Lite/AXI4 协议(那么外设控制器可以通过 HN-I 直接访问系统 cache 或 DDR?),可以用于链接各种外设;
- 存在单独的错误总线,可以为错误生成对应中断;
- 支持 44 位的物理地址空间。
1.XP(Crosspoint)
XP 是一个交换与路由单元,是 CCN 508 的重要组件。
多个 XP 之间的链接组成了 CCN 508 的双环形结构。
Device to XP asynchronous Bridge (DSSB) 是每一个 XP 模块的可选组件用于实现与 device 通信(不过这也是可选的,取决于设备与 XP 的时钟异步要求)。
DSSB 主要用于 XP 与 RN-F 连接。
2. HN-F(Fully-coherent Home Node)
每一个 HN-F 被配置为负责管理 CPU 地址空间的一部分。(所有的 HN-F 共同管理 DDR 地址空间?) 内存映射的 I/O 控制器及其映射的内存空间不在 HN-F 的管理范围内。
HN-F 由以下组件构成:
- L3 Cache
- Combined PoS/PoC
- Snoop filter
3. RN-I brige(I/O-coherent Requesting Node bridge)
RN-I brige 用于链接 I/O-coherent AMBA master 到 CCN 508.(相当于链接内存映射的外设控制器到 CCN-508).
RN-I brige 包括:
- 最多3个 ACE-Lite 从机端口,最多可链接 3 个外设控制器;
- 一个 CHI RN-I 接口,用于链接到 CCN 508 的双环行结构;
4. HN-I(I/O Home Nodes)
称作路由节点更合适?
传输 CHI 总线与 AMBA 总线之间事务。(类似访问外设总线?)可以将 DSB 与 DMB 指令广播到 I/O 子系统中。
5. CHI to AXI brige
CHI to AXI bridge (SBSX) 能够让 AXI4 外设总线上的设备作为 CCN-508 的 SN-F(?涉及总线转换的也不止 SN-F吧,RN-I?).
比如将 DMC-400 内存控制器,作为 SN-F 链接到 CCN-508。
6. MN(Miscellaneous Node)
MN 作为杂项节点,用于处理其他的非正常访问事务,比如cache 一致性管理,错误处理,中断生成。
7.QoS
CCN-508包含一个端到端的QOS能力?(怎么理解)
QoS设备分类如下:
- 存在延迟要求的设备,可以容忍一定程度的延迟;
- 延迟敏感的设备,延迟会极大影响设备性能;
- 带宽敏感的设备,存在最低带宽需求的设备
- 高带宽需求的设备,带宽会影响设备性能
CHI总线架构规定所有的flits存在一个4位的Qos优先级位。数值越大,优先级越高,每一个RN都可以单独配
置Qos。(这也是多个总线事务的排序规则?事务优先级?)
QoS调度器可以控制QoS满足每一个节点的延迟和带宽要求。(双环形队列上的每一个XP都存在QoS,以及
SBSX?)
Qos控制器有3个操作模式,通过内存映射的寄存器控制:
- 透传
- 可编码QoS值
- 调度
通过配置控制器的QoS,来实现延迟与带宽控制。
QoS调度器可以配置为延迟调度模式与周期调度模式。
- 延迟调度模式,根据实际的事务延迟动态调整QPV;
- 周期调度模式,调度器根据总线流量是否满足时间要求来动态调整QPV。
XP还包含优先级仲裁。
soc开发人员以及底层驱动开发人员来正确的配置CCN-508来满足系统的带宽与延迟需求。
不过在配置QoS之前,需要从SOC厂商知道SOC总带宽。
8.DVM消息
Distributed Virtual Memory(DVM)用于RN-F/D访问虚拟地址内存,需要MMU、SMMU支持
9.PCle集成
CCN-508能集成 PCle RC或EP。(那么说明CHI也是差分信号)
10.错误处理
CCN-508同样支持错误处理与报告功能
错误分为可纠正错误与不可纠正错误。每一种错误的处理方式不一样.
都存在相应的寄存器来描述错误。
11.NodeID 映射
CCN-508 中每一个节点包括 XP 都有一个 ID 号。
但是 NodeID 与 XP ID 不一致:
- NodeID 用于 CHI 总线事务传输;
- XP ID 用于确定并配置 XP 的配置寄存器地址;
- NodeID 与 XP ID 可以相等
在一个使用 CCN-508 的 SOC 中,ID 分配如下:
在上图中, 8 个 CPU Cluster 的 ID 为27,28,31,0,11,12,15,16
,CHI 总线事务通过 ID 进行事务帧的传输。
XP to XP Register Slices(XRS) 为 ARM 架构中用于改善时序闭合的机制,通过在 XP 节点之间插入寄存器切片,确保数据传输满足时序要求。
12.系统地址映射-SAM
CHI 总线上传输的可寻址 flits 帧都存在一个 TgtID, 对于可寻址的请求事务,目标ID根据系统地址映射(SAM)确定。
也就是说每一个可以发送可寻址请求的 Node(RN 与 HN) 内部都存在相同的 SAM.
CPU 地址映射分为 20 个独立的分区, 20 个地址映射分区包含整个 44 位地址空间,如下图:
每一个独立分区的解码(表示通过哪一个 HN 访问该地址分区)通过 SAMADDRMAPx[1:0]
确定,可用的寄存器配置如下:
虽然 CCN-508 存在多个 HN-F,但 RN 会将所有的 HN-F 作为同一个目的地,内部硬件会使用一个哈希公司来计算具体的 HN-F 目的地,也就是NODE ID.
CCN-508 存在 16MB 的 CSR 区域,这个区域必须映射到 HN-I 1 所管理的地址分区。
13.时钟与复位
device/XP source-synchronous asynchronous bridge (DSSB)用于CCN-508与Node的时间同步,存在两类
DSSB:
- CCN508_RNF_DSSB,用于RNF与XP的时间同步,一般为cluster;
- CCN508_SNF_DSSB,用于SNF与XP的时间同步,一般为memory controller;
而CCN-508 与 AMBA 总线上各 I/O 外设的时间同步通过 CoreLink ADB-400 AMBA Domain Bridge控制。
14.电源与时钟管理
在CCN-508中L3 Cache存在单独的电源域,可以处于不同的电源状态,可以关闭 L3 Cache.
在CCN-508中,每一个电源域都存在一个单独的P-Channle用于控制电源域。
似乎都是通过外部信号在上电时控制各电源域状态?参考附录《A.4 Power management signals on page Appx-
A-258.》
15.Link层
链路层为CHI总线。
第三章-编程模型
CCN-508 控制寄存器的映射大小为 16MB,分为 256 个 64KB 的子区域,如下图:
从上图可以看出,CCN-508 中 MN/HN-I/SBSX/HN-F/RN-I 的 ID 号已定义好,但为什么没有 RN-F?
1.启动时编程
启动时编程用于支持一致性事务传输与DVMOps操作。
根据 SN-F(内存控制器)的数量,如果是单数个,那么需要编码 hnf_sam_contro1寄存器(lx2080不需要考
虑,4个)。涉及到 3 SN-F memory striping on page 2-57
。
为了确保一致性事务的传输以及DVM操作,开发人员必须确保合适的RN节点被分配到要求的snoop与DVM
域?涉及到 Entry to and exit from snoop and DVM domains
2.运行时编程要求
在 snoop 和 DVM 域中对设备的纳入或排除的控制对于 HN-F 和 MN 来说至关重要,因为 HN-F 和 MN 必须在发
送 snoop 请求或 DVM 消息时知晓 snoop 或 DVM 域中存在的和活跃的 RN。
a.Entry to snoop domain,将 RN 加入 snoop 监控域
需要操作 HN-F(存在多个)节点中的 SDCR(Snoop Domain Control register)
寄存器与 Snoop Domain Control set register
寄存器等:
- 遍历 HN-F;
- 设置 HN-F 的SDCR_set寄存器中
RN NodelD
对应的位置1,直到所有 HN-F设置完毕; - 再遍历 HN-F;
- 读取 HN-F 的
SDCR
寄存器中RN NodelD
对应的位是否置1(需要保证置1);
b. Exit from snoop domain,将 RN 从 snoop 域删除
需要操作 HN-F(存在多个)节点中SDCR(Snoop Domain Control register)
寄存器与 Snoop Domain Control clear register
寄存器等
- 遍历 HN-F;
- 设置 HN-F 的
SDCRClear
寄存器中RN NodelD
对应的位置1,直到所有 HN-F 设置完毕; - 再遍历 HN-F;
- 读取 HN-F 的
SDCR
寄存器中RN NodelD
对应的位是否清0;
c.Entry to DVM domain,将RN加入DVM域
需要操作 MN(只有一个)节点中的 DDCR_set
寄存器与 DDCR
寄存器。
1.在 MN 中的 DDCR_set
寄存器中,将 RN NodelD
对应的位置1;
2.读取 MN
中的 DDCR
寄存器,直到 RN NodelD
对应的位己经置1;
d. Exit from DVM domain,将 RN 从 DVM 域中删除
需要操作 MN(只有一个)节点中的 DDCR_clear
寄存器与DDCR
寄存器。
1.在 MN 中的 DDCR_clear
寄存器中,将 RN NodelD
对应的位置1;
2.读取 DDCR
寄存器,直到 RN NodelD
对应的位已经清0;