Compact CHI 协议环境¶
功能描述¶
Compact CHI 协议环境为 ICache、DCache、PTW 和 UnCache 请求方提供统一的接口类型、参数和编码常量。它定义 REQ、EVT、RSP、DAT、SNP 五类 Flit,以及包含七个 ready/valid 通道的 CompactCHIRequesterIO。
协议环境只负责描述消息格式和基础编码辅助函数。缓存命中、MSHR、一致性状态、DBID 生命周期、CompAck 时机、Snoop 数据生成和请求重试由请求方控制器负责。
当前单核集成约定上游节点号如下:
请求方 |
NodeID |
|---|---|
ICache |
|
PTW |
|
DCache |
|
UnCache |
|
NodeID 字段宽度仍由 CompactCHIParams 参数决定。上述数值是系统集成约定,不改变协议字段宽度。
参数描述¶
协议参数由 CompactCHIParams 定义。
参数 |
默认值 |
含义 |
|---|---|---|
|
48 |
REQ/EVT 字节地址宽度 |
|
7 |
上游请求方 NodeID 宽度 |
|
7 |
下游 Completer NodeID 宽度 |
|
8 |
REQ/EVT 和下游返回消息 TxnID 宽度 |
|
8 |
上游完成消息、写数据和 SNP TxnID 宽度 |
|
无默认值 |
TagAlias 宽度,由上游 VIPT Cache 的参数规格确定,或由其索引配置自动导出;REQ 与 SNP 必须使用相同宽度 |
|
256 |
单拍数据宽度,允许 64/128/256/512 |
|
1 |
必须等于 |
|
6 |
Compact CHI REQ Opcode 宽度 |
|
1 |
EVT Opcode 宽度 |
|
2 |
SNP Opcode 宽度 |
|
1 |
上游 RSP Opcode 宽度 |
|
3 |
下游 RSP Opcode 宽度 |
|
2 |
上游 DAT Opcode 宽度 |
|
1 |
下游 DAT Opcode 宽度 |
TagAlias 由具体 VIPT 请求方根据自身索引结构生成,协议环境不规定它对应哪些虚拟地址位。tagAliasBits 必须由 DCache 或其他上游 Cache 的参数显式传入,不能在协议包中假定固定值。REQ 和 SNP 使用同一 tagAliasBits 配置;配置为 0 表示系统不启用硬件别名维护。
Resp 编码由 CompactCHIResp 提供:
常量 |
编码 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
0b011 和 0b111 为保留编码。协议环境不实现缓存状态机,只提供状态编码。
接口描述¶
请求方使用:
val port = IO(new CompactCHIRequesterIO(c, wayBits))
端口 |
请求方方向 |
Flit |
TxnID 宽度 |
|---|---|---|---|
|
发出 |
|
|
|
发出 |
|
|
|
发出 |
|
|
|
发出 |
|
|
|
接收 |
|
|
|
接收 |
|
|
|
接收 |
|
|
所有端口使用 ready/valid 握手。
REQ 包含 TagAlias、NS、Order、MemAttr、Excl、ExpCompData、ExpCompStash、WayValid 和 Way。EVT 的 MemAttr 只有 Allocate 属性。UpRSP/UpDAT 和 DnRSP/DnDAT 保留 RespErr;UpDAT 保留 byteEnable,用于部分写;DnRSP/DnDAT 保留 CBusy 和 DataSource。
SNP 的 Addr 是物理地址右移 3 位。SNP 扩展携带 TagAlias,表示被探测的上游旧副本使用的 alias;它不替代物理地址,也不携带 Way。
事务描述¶
ReadOnce 与 Snoop¶
ReadOnce 在收齐 CompData 后结束,不发送 CompAck。收到 SNP 后,使用 SNP 的 TxnID 生成 SnpResp,源和目标对调:
port.txRsp.bits := CompactCHIEdge.snoopResponse(
c,
port.rxSnp.bits,
resp = CompactCHIResp.I,
respErr = CompactCHIRespErr.NoError,
)
需要返回数据时,控制器另外发送 CompactCHIUpDatFlit,使用 SnpRespData 和 SNP 的 TxnID。
非缓存写¶
WriteNoSnpPtl 和 WriteNoSnpFull 的数据必须在收到 DBIDResp 或 CompDBIDResp 后发送。byteEnable 表示本拍每个字节是否有效;256 bit 数据拍包含 32 个字节,部分 MMIO 写不能因为总线宽度为 32B 而省略掩码。
Opcode 范围¶
协议环境定义以下非保留 Opcode:
EVT:
Evict、WriteBackFull;REQ:
StashShared、StashUnique、ReadNoSnp、ReadOnce、ReadShared、WriteNoSnpPtl、WriteNoSnpFull、WriteUniquePtl、WriteUniqueFull、CleanShared、CleanInvalid、MakeInvalid、ReadUnique、MakeUnique;SNP:
SnpMakeInvalid、SnpToInvalid、SnpToShared、SnpToClean;DnRSP:
CompStash、Comp、DBIDResp、CompDBIDResp、CompCMO;UpRSP:
CompAck、SnpResp;DnDAT:
CompData;UpDAT:
NonCopyBackWrData、CopyBackWrData、SnpRespData。
REQ 的 0x20..0x31 保留为 Atomic 编码范围,当前协议环境只保留合法编码判断,不提供 Atomic 事务 helper 或执行逻辑。保留编码不定义为正常 Opcode。
状态机与控制边界¶
本协议环境没有事务状态机、MSHR、DBID 配对、CompAck 调度、Retry/P-Credit、缓存状态迁移或 Snoop 数据生成。请求方控制器必须自行保存跨周期事务上下文,并保证各通道在反压期间保持 Flit 稳定。