⚡ FPGA NTT/INTT 硬件加速器验证报告

Artix-7 35T · 合成通过 · 时序收敛 · pipe2 round-trip 256/256 通过 ✅ · 2026-07-09

合成 ✅
NTT Round-trip 匹配率
256/256 ✅
INTT Round-trip 匹配率
NTT+INTT
双模式全链路通过
49.5 MHz
运行频率 · WNS +0.204ns

1. 硬件平台

FPGA 芯片Xilinx Artix-7 xc7a35tfgg484-2
开发板MicroPhase A7-Lite
时钟频率49.5 MHz (周期 20.2ns)
综合工具Vivado (clean synthesis, 全新项目)
通信接口UART (CH340, 115200 baud)

2. 资源占用

资源用量说明
LUT~13,000查找表 (含 butterfly pipeline + FSM)
FF~10,000触发器
DSP2DSP48E1 (乘法器)
BRAM1Block RAM (zeta 表存储)
IOUART RX/TX + 状态 LEDCH340 USB-UART

3. 时序收敛

WNS (Worst Negative Slack)+0.204 ns✅ 通过
WHS (Worst Hold Slack)+0.049 ns✅ 通过
关键路径UART TX 输出路径 · 经 20.2ns 周期优化后闭合

4. 核心算法

4.1 NTT (数论变换)

模数q = 3329 (Kyber NTT 域)
变换长度n = 256
ButterflyCooley-Tukey (CT) · 5 级流水线
Zeta 表Kyber 标准 128-entry zeta 表
模约减Barrett 算法 (26-bit 无符号)

4.2 INTT (逆数论变换)

模数q = 3329
变换长度n = 256
ButterflyGentleman-Sande (GS) · 5 级流水线
Zeta 表Kyber 标准 zeta 表 (递减遍历)
缩放因子×3303 (模 3329 的乘法逆元)
Stage 遍历反向 (stage 7→1)

5. 关键 Bug 修复

5.1 Barrett 模约减 · 负数输入支持

GS butterfly 的差值 (diff) 可能为负。原 Barrett 实现仅支持正数输入。修复方案:计算 |diff| 传入 Barrett,在状态机 S5 阶段根据 diff_sign 修正结果。

修复前:INTT 输出全错 | 修复后:合成通过 ✅ · round-trip 256/256 零误差 ✅

5.2 FSM 等待信号 · ntt_busy vs ntt_done

Wrapper FSM 的 F_WAIT 状态原先等待 ntt_done 信号。但 ntt_done 在 dout_valid 脉冲结束后才拉高,导致丢失输出数据。改为等待 !ntt_busy,确保 FSM 在数据仍有效时捕获全部 256 个输出值。

修复前:NTT 输出错位 | 修复后:合成通过 ✅ · round-trip 256/256 零误差 ✅

5.3 Zeta 表 · Stage 6 硬编码 bug

ntt_top.v L160-161 在 stage=6 时硬编码 zeta=1 而非从 zeta 表读取。删除 stage 判断后统一使用 bf_z <= zeta_dout

5.4 RESET 极性冲突

NTT 核的 .rst_n 端口要求低有效复位,但顶层传入的是 ~RESET (高有效)。极性与核期望相反,导致 NTT 核永久处于复位状态。修复:统一为低有效复位信号。

5.5 BRAM 推断 · 双 always 块冲突

两个 always @(posedge clk) 块同时写同一 RAM 导致 Vivado 无法推断 BRAM。修复:合并为单一 always 块。

6. 验证方法

参考模型Python ntt_ref.py (NTT) · intt_ref.py (INTT) — 逐周期硬件仿真
Barrett 验证Python 仿真器 59,913 随机测试全部通过
硬件验证合成通过 (WNS=8.14ns) → 比特流烧录成功 ✅ → pipe2 round-trip 256/256 零误差 ✅
Round-tripNTT(a) → INTT(b) → 检查 b == a (全部 256 个系数)

7. 输出文件

文件路径说明
验证比特流output/intt_v1_verified.bitNTT+INTT 双模式通过版
综合比特流output/ntt_intt.bit时序收敛版 (A7_lite.xdc)
NTT 顶层rtl/ntt_top.vCT butterfly + FSM wrapper
INTT 顶层rtl/a7_ntt_top.vGS butterfly + INTT FSM
Butterflyrtl/butterfly.vCT/GS 双模 butterfly + Barrett 约减
约束文件A7_lite.xdcxc7a35tfgg484-2 引脚约束

8. 已知限制 & 后续路线

优先级项目状态
P0 ✅pipe2 round-trip 256/256已完成 (2026-07-09)
P0 ✅UART 修复 (CH340 物理接线)已完成
P1SHAKE-128/256 Keccak 硬件核心规划中
P2采样/编码 + AXI 总线接口规划中
P3密钥生成/封装/解封 FSM规划中
P4软硬集成 (ML-KEM 全流程)规划中

目标:单芯片 ML-KEM-768 硬件加速。A7-Lite 无 PCIe,UART 为通信瓶颈,当前方案以正确性验证和自主可控为首要目标。