一个面向硬件实现的 4096 点、64 位全流水 NTT/INTT 原型。模数和旋转因子可配置,仓库包含 RTL、生成的乘法器 VHDL、Python 参考模型、测试向量、SystemVerilog testbench 以及交付文档。
rtl/: NTT 顶层、控制器、PE、RAM/FIFO、模加减、Barrett 模约简和生成的 VHDL 乘法器。sim/: Python 参考模型、FNTT/INTT 旋转因子、FNTT golden result 和顶层 testbench。ip/: 模加与 Barrett 模约简的独立源码和原始 IP 手册。docs/: 4096 点全流水 NTT 使用手册。
顶层模块为:
rtl/ntt_top_64_4096_11.v
主要特性:
- 4096 点 FNTT/INTT;
- 64 位数据与模数;
- 双端口系数 RAM;
- 独立的 FNTT/INTT 旋转因子输入;
- 全流水 PE 和 Barrett 模约简;
start_fntt、start_intt启动,done指示完成。
测试向量使用的参数为:
p = 18446744073709436929
mu = 0x800000000000dfff8
inv2 = 9223372036854718465
接口时序和数据装载流程见 docs/全流水NTT使用手册.docx。
Python 参考模型依赖 Python 3.9+ 和 galois:
python3 -m pip install -r requirements.txt
python3 sim/Ntt.py脚本会在 sim/ 中生成:
fntt_zetas.txtintt_zetas.txtfntt_result.txt
并检查 INTT(FNTT([1, 2, ..., 4096])) 是否恢复原输入。
testbench 为 sim/ntt_top_tb.sv。设计同时包含 VHDL、Verilog 和 SystemVerilog,需要支持 mixed-language 的仿真器,例如 Vivado XSim、QuestaSim 或其他等价工具。
建议按以下依赖顺序加入工程:
rtl/64_64_600M_karatsu_irregu_dsp_1pipe.vhdlrtl/66_68.vhdlrtl/64_65.vhdlrtl/mod_add_comb.sv、rtl/mod_sub_comb.svrtl/barrett_redu_pipe.sv、rtl/PE_pipe.svrtl/dp_nc_ram.sv、rtl/fifo_loop_sync.svrtl/mem_control_64_4096_11.vrtl/ntt_top_64_4096_11.vsim/ntt_top_tb.sv
运行仿真时将工作目录设为 sim/,使 testbench 能读取旋转因子文件。
rtl/ 是顶层 NTT 所需的完整源码集合;ip/ 保留交付包中的独立算术 IP 与文档,便于单模块验证和复用。仓库不包含特定 FPGA 工程文件,综合约束、器件型号和时钟配置需按目标平台补充。