# ML-KEM AXI 前端与跨时钟域技术说明 ## 1. 共享从端结构 `fft_mlkem_axi_slave` 将 Crossbar Slave 6 分成 FFT 和 ML-KEM 两个内部目标。写地址或读 地址的 bits 15:12 小于等于 3 时选择 ML-KEM;FFT 使用 0x8000--0xc000 窗口。ML-KEM 以外且未被 FFT 定义的地址仍会路由到 FFT 前端,但返回零或忽略写入,因此软件只应使用 文档化区间。 AXI 写地址和写数据通道彼此独立。共享前端在 AW 握手时锁存 `write_sel`,直到对应 B 响应完成才释放;读路径在 AR 握手时锁存 `read_sel`,直到带 RLAST 的最后一个 R beat 完成才释放。响应选择不使用实时地址,避免 burst 期间地址变化导致响应串到另一个内部 从端。 FFT 控制器直接工作在 `sys_clk`。ML-KEM 的完整 AXI 五通道通过 `Axi_CDC` 跨入 `mlkem_clk`,之后由 `mlkem_axi_slave` 和 `mlkem_top` 在同一计算时钟域处理。ML-KEM 中断从计算域返回系统域时经过两级同步寄存器。 XDC 将 SYS 与 ML-KEM 声明为异步时钟组,因此跨域有效性由 `Axi_CDC` 的双时钟 FIFO 保证,而不是由 PLL 同源关系或普通时序路径保证。具体约束和复位关系见 [时钟域、复位与跨时钟域设计说明](00_clock_domains.md)。 ## 2. ML-KEM 寄存器接口 ML-KEM 物理基址为 `0x1f40_0000`,CPU 未缓存映射为 `0xbf40_0000`。 | 偏移 | 名称 | 说明 | |---|---|---| | `0x000` | CTRL | bit 0 启动,bit 1 软复位 | | `0x004` | STATUS | bit 0 busy,bit 1 done,bit 2 preload busy;done 为 W1C | | `0x008` | CONFIG | bits 2:0 为 K,bits 5:4 为操作码 | | `0x010--0x02c` | D | 32 字节 KeyGen 随机种子 | | `0x030--0x04c` | Z | 32 字节隐式拒绝种子 | | `0x050--0x06c` | MSG | 32 字节 Encaps 消息 | | `0x070--0x08c` | SS | 32 字节共享密钥,只读 | | `0x100/104/108` | PRE_SEL/ADR/DAT | 逐字节预装载接口 | | `0x10c/110/114` | RDB_SEL/ADR/DAT | 逐字节读回接口 | | `0x1000` | EK window | 公钥批量输入或输出窗口 | | `0x2000` | DK window | 私钥批量输入或输出窗口 | | `0x3000` | CT window | 密文批量输入或输出窗口 | CONFIG 的操作码 0、1、2 分别表示 KeyGen、Encaps、Decaps。软件必须在启动前完成参数与 输入装载,并在 busy 期间保持配置不变。done 保持到软件 W1C,便于轮询程序不丢失短脉冲。 ## 3. 字节端口与批量窗口 传统 PRE 接口通过 PRE_SEL 选择 ek、dk 或 c,通过 PRE_ADR 设置字节地址,向 PRE_DAT 写入低 8 位并自动递增地址。读回接口以同样方式选择 ek、完整 dk 或 ct。该路径便于调试, 但每个字节至少需要一次 AXI 寄存器事务,传输大密钥时开销较高。 三个批量窗口把 AXI 32 位 beat 分解为最多四个有效字节。写状态机依据 WSTRB 跳过无效 lane,将字节地址、选择和数据送入核心 BRAM 写口,并等待内部确认后继续下一个 lane。 读状态机按字节地址读取内部 BRAM,补偿同步读延迟后组装 32 位 RDATA。窗口支持 INCR burst,使通用 DMA 能以少量控制事务搬运完整公钥、私钥和密文。 批量窗口不改变密码核心的算法执行时间,但显著减少 CPU 逐字节访问开销。性能报告应把 CPU 寄存器路径和 DMA 窗口路径分别列出,不能把两者差值解释为核心计算加速。 ## 4. 事件控制与复位 CTRL start、软复位和 done clear 在 `mlkem_axi_slave` 中均转换为 toggle 事件,再通过 边沿检测产生单拍控制。软复位事件经计数器展宽,形成核心局部复位。预装载写入使用 request/ack toggle,使 AXI 写 beat 只有在目标字节被核心侧接收后才完成。 外层 `Axi_CDC` 已承担 SYS--ML-KEM 的 AXI 通道跨域;前端内部的 toggle 机制主要用于 把寄存器写动作转换为不会重复触发的单拍事件,并串行化字节预装载。系统复位有效期间, 所有 AXI valid、start 和预装载事件必须保持无效。 ## 5. 协议验证重点 共享前端需要覆盖 AW 与 W 不同拍到达、B/R 反压、ML-KEM 与 FFT 交替访问、长 burst 末拍、WSTRB 空洞以及读写并发。ML-KEM 窗口还需验证 800--3168 字节的非统一长度、最后 一个不满字、BRAM 读延迟和软复位中止。当前板级 CPU 与 DMA 双路径证明了常用顺序访问, 但不等价于覆盖所有并发和异常协议组合。