Page 76 - 《软件学报》2025年第10期
P. 76
胡跃 等: 基于 FPGA 的格基数字签名算法硬件优化 4473
为 480 和 256, 最多可存储 23 个多项式系数. 向量 w 中的多项式系数存储在 BRAM_w 单元中, 设置深度为 256,
对应 8 个多项式系数的存放位置, 并且与运算过程 w−cs 2 +ct 0 的中间值和输出结果共享存储空间, 对应上文所述
的第 2 种情况. 此外, 向量 y 的多项式系数有两种存在形式: 运算过程 Ay 中系数在 NTT 域内, 而运算过程
z = y+cs 1 中系数在自然数域内. 因此, 同样需要设置独立的存储空间用于存储向量中系数的初始值和数论变换结
果, 对应 BRAM_y 单元, 并与运算结果 z 共享存储空间.
BRAM_PWM 单元用于存放乘法运算的中间值, 由于 3 个关键的乘法运算过程 cs 1 、cs 2 和ct 0 中多项式系数均
在 NTT 域内, 可直接参与点乘运算, 因此硬件层面的存储空间应与维度最高的向量对应, 其深度设定为 256. 在乘
法累加运算过程中, 仅使用到了 BRAM_PWM 单元的前 32 个存储地址位, 具体地: 运算过程 A ji y i + A j(i−1) y i−1 对应
的乘法操作和累加操作同步执行, 此过程仅对应一个多项式的存储空间, 迭代 l 次可得到向量 w 中一个完整的多
w 已经分配了独立的存储空间, 此时 BRAM_PWM 单元的前 32 个地址位空间可以被释放. 考
项式系数. 由于向量
虑到流水线运算的连续性, 在完成一轮运算后使用 0 值覆盖 BRAM_PWM 单元前 32 个地址位中的数据, 此时每
轮迭代的第 1 次乘法累加可解释为运算过程 0+ A j0 y 0 . 将上述迭代过程进行 k 次即可得到运算的完整输出结果
w = Ay. 此外, 在实现第 3.1 节中介绍的脉动阵列单元对应的置换网络具体功能时, 需要专用的存储空间暂存多项
式系数并完成排列顺序的转换, 对应 BRAM_RO 单元, 存储深度同样与维度最高的向量对应.
3.6 读写地址映射逻辑设计
在设计 BRAM 阵列的访存逻辑时还需要考虑脉动阵列单元两方面的运行特点: 多项式运算需要基于多功能
重排序网络实现系数匹配; 运算单元的输入端和输出端存在固定的延迟时间, 这意味着从多项式向量的尺度上看,
可能出现同一组系数的访存过程和运算过程的时钟复用. 为了在避免时序冲突的前提下提升整体架构的运行效
率, 本文针对上述两种情况分别设计了 4 种地址映射规则和两组同步访存逻辑.
重排序网络将操作数的存储位置在多项式尺度层面进行了定向置换, 旨在满足脉动阵列单元的运算需求, 因
此重排序网络的功能实现可具象化为多项式系数在存储单元阵列中的读写地址映射规则. 具体地, 在第 1 种重排
序模式下, 输入端的每组操作数分布在 8 个不相邻的地址位, 初始读地址映射规则为 (0,16,4,20,8,24,12,28), 之后
每组读数据位置在此基础上递增, 最终遍历 32 个地址位上的存储系数. 在第 2 种重排序模式下, 每组操作数对应
4 个不同的地址位, 其输出端的写地址初始映射规则为 (0,8,16,24), 此时存储单元中的系数呈现顺序排列的形式,
从而使得下一步的乘法累加运算 Ay 的读数据地址与时钟周期数同步. 其余两种重排序模式遵循类似的设计逻辑,
旨在满足 INTT 后的模加运算和 NTT 后的 INTT 运算规则. 本文将 4 种专用的读写地址映射预存储在 160 比特的
寄存器网络中, 根据顶层的片选信号以及每周期的比特左移操作即可得到正确的读写地址位信息, 如表 1 所示.
表 1 输入系数地址位与时钟周期偏移量映射关系
工作模式 Cycle 1 Cycle 2 Cycle 3 Cycle 4 Cycle 5 Cycle 6 Cycle 7 Cycle 8
采样后NTT 0/1/2/3 16/17/18/19 4/5/6/7 20/21/22/23 8/9/10/11 24/25/26/27 12/13/14/15 28/29/30/31
NTT后模乘 0/2/1/3 4/6/5/7 8/10/9/11 12/14/13/15 16/18/17/19 20/22/21/23 24/26/25/27 28/30/29/31
INTT后模加 0/2/1/3 16/18/17/19 8/10/9/11 24/26/25/27 4/6/5/7 20/22/21/23 12/14/13/15 28/30/29/31
NTT后INTT 0/8/4/12 1/9/5/13 2/10/6/14 3/11/7/15 16/24/20/28 17/25/21/29 18/26/22/30 19/27/23/31
考虑到脉动阵列运算单元的输入输出端的时序差异, 通过合理的功能设计可以实现读操作、重排序操作、写
操作这 3 个过程的同步运行, 从而保持整体的流水线运算结构的统一性. 本文针对存储单元阵列设计了两组并行
的读写地址生成器: (1) 针对核心的多项式运算过程的计数器组 (ctr k ,ctr k_v2 ), 其中主计数器 ctr k 负责确定输入过程
ctr k_v2 根据运算类型、在主计数器的基础上延迟确定的时钟周期后即可生成写地址位;
的总时钟周期数, 辅计数器
(2) 重排序、采样数据存储等辅助运算过程使用计数器组 (raddr RO ,waddr RO ) 生成读地址和写地址, 与第 1 组计数
器采用相同的设计逻辑. 图 7 以核心运算过程 Ay 为例给出了两组地址生成器同步运行的具体规则. 首先, 向量 y
中的多项式系数根据第 3.3 节所述的重排序模式实现数据存储, 此过程共消耗 (l×32+4) 个时钟周期, 容易看出,
此时点乘运算和重排序操作存在时序复用的情况, 根据上文分析, 需要同时启动两组地址生成器分别完成两种运

