Artix-7 35T · 合成通过 · 时序收敛 · pipe2 round-trip 256/256 通过 ✅ · 2026-07-09
| FPGA 芯片 | Xilinx Artix-7 xc7a35tfgg484-2 |
| 开发板 | MicroPhase A7-Lite |
| 时钟频率 | 49.5 MHz (周期 20.2ns) |
| 综合工具 | Vivado (clean synthesis, 全新项目) |
| 通信接口 | UART (CH340, 115200 baud) |
| 资源 | 用量 | 说明 |
|---|---|---|
| LUT | ~13,000 | 查找表 (含 butterfly pipeline + FSM) |
| FF | ~10,000 | 触发器 |
| DSP | 2 | DSP48E1 (乘法器) |
| BRAM | 1 | Block RAM (zeta 表存储) |
| IO | UART RX/TX + 状态 LED | CH340 USB-UART |
| WNS (Worst Negative Slack) | +0.204 ns | ✅ 通过 |
| WHS (Worst Hold Slack) | +0.049 ns | ✅ 通过 |
| 关键路径 | UART TX 输出路径 · 经 20.2ns 周期优化后闭合 | |
| 模数 | q = 3329 (Kyber NTT 域) |
| 变换长度 | n = 256 |
| Butterfly | Cooley-Tukey (CT) · 5 级流水线 |
| Zeta 表 | Kyber 标准 128-entry zeta 表 |
| 模约减 | Barrett 算法 (26-bit 无符号) |
| 模数 | q = 3329 |
| 变换长度 | n = 256 |
| Butterfly | Gentleman-Sande (GS) · 5 级流水线 |
| Zeta 表 | Kyber 标准 zeta 表 (递减遍历) |
| 缩放因子 | ×3303 (模 3329 的乘法逆元) |
| Stage 遍历 | 反向 (stage 7→1) |
GS butterfly 的差值 (diff) 可能为负。原 Barrett 实现仅支持正数输入。修复方案:计算 |diff| 传入 Barrett,在状态机 S5 阶段根据 diff_sign 修正结果。
修复前:INTT 输出全错 | 修复后:合成通过 ✅ · round-trip 256/256 零误差 ✅
Wrapper FSM 的 F_WAIT 状态原先等待 ntt_done 信号。但 ntt_done 在 dout_valid 脉冲结束后才拉高,导致丢失输出数据。改为等待 !ntt_busy,确保 FSM 在数据仍有效时捕获全部 256 个输出值。
修复前:NTT 输出错位 | 修复后:合成通过 ✅ · round-trip 256/256 零误差 ✅
ntt_top.v L160-161 在 stage=6 时硬编码 zeta=1 而非从 zeta 表读取。删除 stage 判断后统一使用 bf_z <= zeta_dout。
NTT 核的 .rst_n 端口要求低有效复位,但顶层传入的是 ~RESET (高有效)。极性与核期望相反,导致 NTT 核永久处于复位状态。修复:统一为低有效复位信号。
两个 always @(posedge clk) 块同时写同一 RAM 导致 Vivado 无法推断 BRAM。修复:合并为单一 always 块。
| 参考模型 | Python ntt_ref.py (NTT) · intt_ref.py (INTT) — 逐周期硬件仿真 |
| Barrett 验证 | Python 仿真器 59,913 随机测试全部通过 |
| 硬件验证 | 合成通过 (WNS=8.14ns) → 比特流烧录成功 ✅ → pipe2 round-trip 256/256 零误差 ✅ |
| Round-trip | NTT(a) → INTT(b) → 检查 b == a (全部 256 个系数) |
| 文件 | 路径 | 说明 |
|---|---|---|
| 验证比特流 | output/intt_v1_verified.bit | NTT+INTT 双模式通过版 |
| 综合比特流 | output/ntt_intt.bit | 时序收敛版 (A7_lite.xdc) |
| NTT 顶层 | rtl/ntt_top.v | CT butterfly + FSM wrapper |
| INTT 顶层 | rtl/a7_ntt_top.v | GS butterfly + INTT FSM |
| Butterfly | rtl/butterfly.v | CT/GS 双模 butterfly + Barrett 约减 |
| 约束文件 | A7_lite.xdc | xc7a35tfgg484-2 引脚约束 |
| 优先级 | 项目 | 状态 |
|---|---|---|
| P0 ✅ | pipe2 round-trip 256/256 | 已完成 (2026-07-09) |
| P0 ✅ | UART 修复 (CH340 物理接线) | 已完成 |
| P1 | SHAKE-128/256 Keccak 硬件核心 | 规划中 |
| P2 | 采样/编码 + AXI 总线接口 | 规划中 |
| P3 | 密钥生成/封装/解封 FSM | 规划中 |
| P4 | 软硬集成 (ML-KEM 全流程) | 规划中 |
目标:单芯片 ML-KEM-768 硬件加速。A7-Lite 无 PCIe,UART 为通信瓶颈,当前方案以正确性验证和自主可控为首要目标。