跳转至

总线接口

昆明湖 V2R2 的总线接口具有 256 位宽度,支持 CHI Issue B 或 Issue E.b 的子集。 关于该协议的详细内容,请参考 AMBA® CHI Architecture Specification。

支持的响应类型

CHI 协议的 RespErr 可以表示响应正常或是错误。 昆明湖 V2R2 支持的响应类型如下。

RespErr的值 响应类型
0b00 Normal Okay
0b01 Exclusive Okay
0x11 Non-data Error,即 NDERR

由于 昆明湖 V2R2 不具有数据校验码,因此不支持 DERR。

不同总线响应下的行为

  • Normal Okay:普通传输访问成功,或 exclusive 传输访问失败;读传输 exclusive 访问失败代表总线不支持 exclusive 传输,产生访问错误异常,写传输 exclusive 访问失败仅代表抢锁失败,不会返回异常。
  • Exclusive Okay:exclusive 访问成功。
  • NDERR:访问出错,读传输产生访问错误异常,写传输忽略此错误。

接口信号

CHI 使用不同的通道传输不同的消息,传输的消息包括:

  • 数据(DAT)
  • 请求(REQ)
  • 响应(RSP)
  • 监听(SNP)

以 TX 字母为前缀的通道用于发送消息,以 RX 字母为前缀的通道用于接收消息。 昆明湖 V2R2 一共有 6 个通道:

  • RXDAT
  • RXRSP
  • RXSNP
  • TXDAT
  • TXREQ
  • TXRSP

后文将会列出这些通道包含的信号。 除了这些通道外,总线接口还包含以下的信号。

信号名 I/O 功能描述
chi_rx_linkactiveack O 决定 RX 的状态。
chi_rx_linkactivereq I 决定 RX 的状态。
chi_tx_linkactiveact I 决定 TX 的状态。
chi_tx_linkactivereq O 决定 TX 的状态。
chi_rxsactive I 表示 RX 有正在进行的事务。
chi_txsactive O 表示 TX 有正在进行的事务。

RX 的 linkactiveack 和 linkactivereq 决定了 RX 的状态;TX 的 linkactiveack 和 linkactivereq 决定了 TX 的状态。

状态 linkactivatereq linkactivateack
STOP 0 0
ACTIVATE 1 0
RUN 1 1
DEACTIVATE 0 1

通道信号

RXDAT 通道信号
信号名 I/O 功能描述
chi_rx_dat_flitv I flit 的有效信号,高电平表示 flit 有效
chi_rx_dat_lcrdv O L-Credit 有效信号
chi_rx_dat_flit I RXDAT 通道的 flit
chi_rx_dat_flitpend I flit 的 pending 信号,表示接下来会传输一个 flit
RXRSP 通道信号
信号名 I/O 功能描述
chi_rx_rsp_flitv I flit 的有效信号,高电平表示 flit 有效
chi_rx_rsp_lcrdv O L-Credit 的有效信号
chi_rx_rsp_flit I RXRSP 通道的 flit
chi_rx_rsp_flitpend I flit 的 pending 信号,表示接下来会传输一个 flit
RXSNP 通道信号
信号名 I/O 功能描述
chi_rx_snp_flitv I flit 的有效信号,高电平表示 flit 有效
chi_rx_snp_lcrdv O L-Credit 的有效信号
chi_rx_snp_flit I RXSNP 通道的 flit
chi_rx_snp_flitpend I flit 的 pending 信号,表示接下来会传输一个 flit
TXDAT 通道信号
信号名 I/O 功能描述
chi_tx_dat_flitv O flit 的有效信号,高电平表示 flit 有效
chi_tx_dat_lcrdv I L-Credit 的有效信号
chi_tx_dat_flit O TXDAT 通道的 flit
chi_tx_dat_flitpend O flit 的 pending 信号,表示接下来会传输一个 flit
TXREQ 通道信号
信号名 I/O 功能描述
chi_tx_req_flitv O flit 的有效信号,高电平表示 flit 有效
chi_tx_req_lcrdv I L-Credit 的有效信号
chi_tx_req_flit O TXREQ 通道的 flit
chi_tx_req_flitpend O flit 的 pending 信号,表示接下来会传输一个 flit
TXRSP 通道信号
信号名 I/O 功能描述
chi_tx_rsp_flitv O flit 的有效信号,高电平表示 flit 有效
chi_tx_rsp_lcrdv I L-Credit 的有效信号
chi_tx_rsp_flit O TXRSP 通道的 flit
chi_tx_rsp_flitpend O flit 的 pending 信号,表示接下来会传输一个 flit

flit 格式

位宽为空,代表此信号与上一行的信号是共用的。 信号名后面标注*,代表此信号仅适用于 CHI Issue E.b。 位宽后面标注*,代表此信号在 CHI Issue B 和 Issue E.b 中具有不同的位宽,两个位宽中标注*的是 E.b 中的位宽。

Data flit
信号名 位宽 功能描述
QoS 4 Quality of Service,数值越大优先级越高。
TgtID id_width 目标 ID。
SrcID id_width 来源 ID。
TxnID 8/12* 事务 ID。
HomeNID id_width Home 节点 ID,请求者在发送 CompAck 时把这个 ID 作为 TgtID。
Opcode 3/4* 操作码。
RespErr 2 相应错误码。
Resp 3 响应状态。
DataSource 3/4* 数据来源。
{1'b0,FwdState[2:0]}* 指示从监听者发送到请求者的 CompData 中的状态。
{1'b0, DataPull[2:0]}*
CBusy 3 完成者的繁忙程度,其编码由具体的实现决定。
DBID 8/12* 数据缓冲区 ID,用于请求方的 TxnID。
CCID 2 关键数据块的 ID。
DataID 2 正在被传输的数据块的 ID。0b00 表示 [255:0],0b10表示 [511:256]。
TagOp 2 表示要对 Tag 执行的操作。
Tag 8 n 组 4 位 tag,每个 tag 绑定对应顺序的 16B 数据,地址对齐。
TU 2 指示要更新的 tag。
TraceTag 1 标记,用于跟踪。
RSVDC 4 保留给用户使用,其含义由具体的实现决定。
BE 32 字节使能。表示每个字节是否有效。
Data 256 数据。
Request flit
信号名 位宽 功能描述
QoS 4 Quality of Service,数值越大优先级越高。
TgtID id_width 目标 ID。
SrcID id_width 来源 ID。
TxnID 8/12* 事务 ID。
ReturnNID id_width 需要回复的节点 ID。
StashNID Stash 请求的目标 ID。
{4'b0, SLCRepHint[6:0]}* SLCRepHint:SLC 替换提示。
StashNIDValid 1 用于 Stash 事务,表示 StashNID 是否有效。
Endian 用于原子事务,0 表示小端,1 表示大端。
Deep 在响应之前是否必须先写入最终目的地。
ReturnTxnID 8/12* 用于DMT。
{6'b0,StashLPIDValid,StashLPID[4:0]}* StashLPIDValid:用于 stash 事务,StashLPID 的有效信号。StashLPID:用于 Stash 事务。
Opcode 6/7* 操作码。
Size 3 数据大小。
Addr RAW 地址。
NS 1 用于指示物理地址空间。
LikelyShared 1 表示请求的数据是否可能与另一个请求节点共享。
AllowRetry 1 是否允许重试。
Order 2 用于指定事务的顺序要求。
PCrdType 4 Credit 类型。
MemAttr 4 本次事务的属性。
SnpAttr 1 Snoop 属性。
DoDWT 执行 DWT, 影响 DBIDResp 的 TgtID 和 TxnID 取值。
PGroupID 5/8* 用于 PCMO 事务。
StashGroupID 用于 StashOnceSep 事务。
TagGroupID 用于标记。
{3'b0,LPID[4:0]}* 逻辑处理器 ID,用于一个请求者包含多个逻辑处理器的情况。
Excl 1 用于 exclusive 事务。
SnoopMe 用于原子事务,指定是否必须向请求者发送 Snoop。
ExpCompAck 1 表示事务是否包含了一个 CompAck 响应。
TagOp 2 表示要对 Tag 执行的操作。
TraceTag 1 标记,用于跟踪。
RSVDC 4 保留给用户使用,其含义由具体的实现决定。可以是任何值。
Response flit
信号名 位宽 功能描述
QoS 4 Quality of Service,数值越大优先级越高。
TgtID id_width 目标 ID。
SrcID id_width 来源 ID。
TxnID 8/12* 事务 ID。
Opcode 4/5* 操作码。
RespErr 2 响应错误码。
Resp 3 响应状态。
FwdState 3 用于 DCT,指示从监听者发送到请求者的 CompData 中的状态。
{2'b0,DataPull} 用于 Stash 事务,指示 Snoop 响应是否需要 Data Pull。
CBusy 3 完成者的繁忙程度,其编码由具体的实现决定。
DBID 8/12* 数据缓冲区 ID,用于请求方的 TxnID。
{4'b0,PGroupID[7:0]} 用于 Persistent CMO 事务。
{4'b0,StashGroupID[7:0]} 用于 Stash 事务。
{4'b0,TagGroupID[7:0]} 用于标记。
PCrdType 4 Credit 类型。
TagOp 2 表示要对 Tag 执行的操作。
TraceTag 1 标记,用于跟踪。
Snoop flit
信号名 位宽 功能描述
QoS 4 Quality of Service,数值越大优先级越高。
SrcID id_width 来源 ID。
TxnID 8/12* 事务 ID。
FwdNID id_width 指示 CompData 响应可以转发到哪个请求者。
FwdTxnID 8/12* 用于 DCT。
{6'b0,StashLPIDValid[0:0],StashLPID[4:0]}* StashLPIDValid:用于 Stash 事务,StashLPID 的有效位。StashLPID:用于 Stash 事务。
{4'b0,VMIDExt[7:0]}* VMIDExt:用于 DVM 事务。
Opcode 5 操作码。
Addr SAW 地址。
NS 1 用于指示物理地址空间。
DoNotGoToSD 1 指示是否要求 Snoopee 不转换到 SD 状态。
RetToSrc 1 该字段请求 Snoopee 将缓存行的副本返回给 Home。
TraceTag 1 标记,用于跟踪。

支持的 Coherency Transaction 类型

  • SnpShared
  • SnpClean
  • SnpOnce
  • SnpNotSharedDirty
  • SnpUniqueStash
  • SnpMakeInvalidStash
  • SnpUnique
  • SnpCleanShared
  • SnpCleanInvalid
  • SnpMakeInvalid
  • SnpStashUnique
  • SnpStashShared
  • SnpSharedFwd
  • SnpCleanFwd
  • SnpOnceFwd
  • SnpNotSharedDirtyFwd
  • SnpUniqueFwd