| |||
根据uMCTL2(通用存储控制器)文档中关于 XPI模块 (AXI Port Interface) 的描述,以下是其核心功能的详细解析:
一、XPI 模块的核心作用
核心定位:XPI 是连接 AXI 总线master 与 uMCTL2的DDRC控制器 的关键接口模块。
核心任务:实现 协议转换(aix与hif互转)、数据管理、时序协调,确保 AXI 协议命令高效、正确地映射到 DDR 物理层操作。
队列管理:使用多级队列(RAQ, WAQ, RDQ, WDQ)处理地址、数据和响应,解决时钟域交叉和速率匹配问题。
数据宽度转换:支持AXI数据宽度与DDR控制器内部数据宽度之间的转换(上转换和下转换)。
读数据重排序:通过读重排序缓冲区(RRB)解决DDR控制器内部命令重排引起的读数据乱序问题。
二、核心功能详解
1. 协议转换与命令分解
AXI 转 DDRC 命令:
将 AXI 的 突发读写请求 转换为 uMCTL2 的 读/写命令包(HIF 格式)。
关键处理逻辑:
地址对齐:根据 DDR Burst Length (BL2/4/8/16),拆分未对齐的 AXI 突发(例如:首包处理未对齐地址)。
突发拆分:将长 AXI 突发分解为多个 DDR Burst 包(例如:AXI 长度 256 拆分为多个 BL8 包)。
类型转换:支持 INCR(增量)和 WRAP(回环)两种 AXI 突发类型。
2. 地址通道管理
读地址通道 (RAQ - Read Address Queue):
队列机制:支持单队列或双队列(Blue/Red),深度可配置 (UMCTL2_AXI_RAQD_n)。接收AXI读地址通道信号(ARID, ARADDR, ARLEN, ARSIZE, ARBURST等),将AXI突发请求拆分为多个DDR burst长度的请求(根据DDR burst长度BL2/BL4/BL8/BL16)。
时钟域隔离:同步或异步 AXI 时钟到 DDRC 时钟 (core_ddrc_core_clk)。
令牌生成:为每个读请求生成唯一令牌,供 DDRC 追踪数据返回路径。
if RAQ未满:
接收AXI读请求(araddr, arlen, arsize, arburst)
计算DDR Burst边界对齐:
if 未对齐:
首包拆分为"未对齐包" + 后续"对齐包"
生成HIF命令包(token, 地址, 长度)
推入RAQ
else:
拉低arready # 反压AXI主设备
写地址通道 (WAQ - Write Address Queue):
类似读地址通道,独立队列管理写地址,深度可配 (UMCTL2_AXI_WAQD_n)。
与读通道独立:读写请求顺序可能乱序,需软件层保证一致性(如等待响应)。
注意:读地址和写地址通道相互独立,因此读写请求的顺序可能被打乱。若需要顺序一致性,需软件层面保证(如等待响应后再发下一个请求)。
队列类型 | 硬件参数 | 功能 | 深度约束 |
RAQ(读) | UMCTL2_AXI_RAQD_n | 存储读请求+时钟域转换 | 最小≥最大读outstanding |
WAQ(写) | UMCTL2_AXI_WAQD_n | 存储写地址+ECC状态 | ≥写命令管道深度 |
双队列模式 | UMCTL2_XPI_USE2RAQ_n=1 | Blue/Red队列并行仲裁 | 减少同端口竞争 |
3. 数据通道处理
写数据通道 (WDQ - Write Data Queue):
时钟域转换:AXI 时钟 → DDRC 时钟。
ECC 支持:
若启用读改写 (RMW) 和 ECC,对子尺寸写入(如部分字节掩码)触发 RMW 操作。
Store-and-Forward:接收AXI写数据通道信号(WID, WDATA, WSTRB, WLAST),收集完整写数据并分析掩码后,才转发命令到 DDRC。
读数据通道 (RDQ - Read Data Queue):
存储 DDRC 返回的读数据,按 AXI 时钟返回给主机。
乱序重整:通过 RRB (Read Reorder Buffer) 解决 DDRC 内部命令重排问题。
4. 读数据乱序重整 (RRB)
核心问题:DDRC 可能重排读命令以优化带宽,导致数据返回顺序与 AXI 提交顺序不一致。
解决方案:
虚拟通道 (Virtual Channels):
动态映射(默认):根据硬件参数UMCTL2_NUM_VIR_CH_n设置虚拟通道数量(最多32个)。RRB动态分配AXI ID到虚拟通道,尽量将不同ID分配到不同通道以减少阻塞。
分配策略:当新ID到来时,优先分配空闲通道;若无空闲,则使用轮询选择一个已有通道(可能导致该通道内ID的数据被阻塞直到先前数据返回)。
优化建议:虚拟通道数应等于AXI ID数(若ID数不超过32)或等于CAM深度(若CAM深度不超过32)。
静态映射:通过寄存器 (PCFGIDMASKCHm_n, PCFGIDVALUECHm_n) 手动绑定 ID 到通道。
若ID匹配多个通道,则选择编号最小的通道。
未映射的ID处理:可配置为分配到通道0或进入旁路通道
§ RRB虚拟通道分配规则
Bypass 模式:
对未映射 ID 可选择直通(不排序),不经过重排序,直接返回数据,但需满足严格条件(如单 DDR 命令(不能burst拆分)、不跨 Burst 边界)。
关键约束:数据宽度转换时 (UMCTL2_PORT_DW_n ≠ DDR 位宽),必须禁用 Bypass。
5. 响应生成
写响应通道:
在 DDRC 接收完最后一拍写数据后生成 OKAY 响应, 生成写响应(BID, BRESP)并返回给AXI主机。
支持独占访问 (EXOKAY 表示成功)。
读响应通道:
与读数据共用 RDQ,生成 rlast 信号标识突发结束。
ECC 不可纠正错误时返回 SLVERR。
6. 高级功能支持
独占访问 (Exclusive Access):
通过硬件监视器跟踪指定地址(数量由 UMCTL2_EXCL_ACCESS 配置)。
成功独占写返回 EXOKAY,失败返回 OKAY 并屏蔽写入。
跨端口监控:写操作会触发所有端口的独占地址检查。
交易毒化 (Transaction Poisoning):
通过 arpoison/awpoison 信号标记非法交易。
读中毒:返回全零数据 + SLVERR;写中毒:屏蔽写入(等效透明操作)。
中毒类型 | 数据路径 | 响应信号 | 内存影响 |
读中毒 | 数据置零 | SLVERR | 执行读操作 |
写中毒 | 掩码置零 | OKAY | 跳过写入 |
软件一致性保障:
启用 UMCTL2_RDWR_ORDERED_n 后,XPI 强制读写交替仲裁,避免同地址命令乱序。
UMCTL2_RDWR_ORDERED_n=1
7. 数据宽度转换
自动适配机制:
上行转换 (AXI 位宽 < HIF 位宽):合并多拍 AXI 数据为单拍 HIF 数据。
下行转换 (AXI 位宽 > HIF 位宽):拆分单拍 AXI 数据为多拍 HIF 数据。
队列位宽:WDQ/RDQ 宽度始终按 AXI 与 HIF 中较大位宽 实现。
8. 配置灵活性
关键硬件参数:
参数 | 功能 |
UMCTL2_A_SYNC_n | AXI 时钟与 DDRC 时钟同步/异步 |
UMCTL2_AXI_ADDR_BOUNDARY | 放宽 AXI 4K 边界限制(最高 4G) |
UMCTL2_XPI_USE2RAQ_n | 启用双读地址队列 (Blue/Red) |
UMCTL2_NUM_VIR_CH_n | 设置 RRB 虚拟通道数量(最多 32) |
三、XPI 模块核心价值总结
功能维度 | 实现价值 |
协议桥接 | 无缝转换 AXI4 复杂突发协议 → DDRC 高效物理层命令 |
数据管理 | 通过多级队列 (RAQ/WAQ/RDQ/WDQ) 解决时钟域、位宽、乱序问题 |
性能优化 | 虚拟通道 (RRB) 最大化读并行性;双队列减少仲裁冲突 |
可靠性增强 | ECC/RMW 保障数据完整性;独占访问/中毒机制支持安全关键操作 |
设计灵活性 | 参数化配置队列深度、通道数、时钟模式,适配不同应用场景 |
关键设计约束:
· AXI 突发不可跨 4K 边界(除非配置 UMCTL2_AXI_ADDR_BOUNDARY)。
· ECC 启用但禁用 RMW 时,禁止子尺寸写入(必须全字节使能,不能mask)。
· 静态映射 RRB 模式下需严格配置 ID 路由规则。
此模块是 DDR 控制器高效对接 SoC 总线系统的核心枢纽,其设计直接影响系统吞吐率、延迟及数据一致性。