doc: update ML-KEM IP report (NTT architecture, clock, compares) and system design report
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 1.4 MiB After Width: | Height: | Size: 1.4 MiB |
Binary file not shown.
@@ -109,7 +109,7 @@ ML-KEM(Module-Lattice-based Key-Encapsulation Mechanism,FIPS 203 \cite{fips2
|
|||||||
|
|
||||||
\subsection{代码规模}
|
\subsection{代码规模}
|
||||||
|
|
||||||
RTL代码总计约5,517行(不含测试平台),其中\texttt{mlkem\_top.v}(顶层FSM集成+数据通路+三库存储管理)约2,264行,各叶子算子模块合计约3,253行。全部采用SystemVerilog编写,统一使用\texttt{valid/ready}流式握手接口。
|
RTL代码总计约5,517行(不含测试平台),其中\texttt{mlkem\_top.v}(顶层FSM集成+数据通路+三库存储管理)约2,320行,各叶子算子模块合计约3,197行。全部采用SystemVerilog编写,统一使用\texttt{valid/ready}流式握手接口。
|
||||||
|
|
||||||
% ================================================================
|
% ================================================================
|
||||||
\section{IP模块规格}
|
\section{IP模块规格}
|
||||||
@@ -173,11 +173,11 @@ Decaps私钥预装载路径中,\texttt{dk\_in\_*}端口根据写入地址自
|
|||||||
|
|
||||||
\texttt{mlkem\_top}的架构遵循三条核心原则。
|
\texttt{mlkem\_top}的架构遵循三条核心原则。
|
||||||
|
|
||||||
\textbf{原则一:存储按最大等级分配,运行时参数递推。} 多项式系数存储库以$K_{MAX}=4$(可容纳28个多项式,每个256系数)静态配置深度,$k\_r$仅影响读写地址生成逻辑中的基地址和循环边界。字节存储库(ek\_bram、dkp\_bram、ct\_bram)同样按最大密钥尺寸(1568/1536/1568字节)分配。运行时地址计算通过少量组合逻辑完成,无动态内存分配开销。
|
\textbf{原则一:存储按最大等级分配,运行时参数递推。} 多项式系数存储库以$K_{MAX}=4$(可容纳28个多项式,每个256系数)静态配置深度,$k\_r$仅影响读写地址生成逻辑中的基地址和循环边界。字节存储库(ek\_bram、dkp\_bram、ct\_bram)同样按最大密钥尺寸(1568/1536/1568字节)分配。运行时地址计算通过$k\_r$以纯组合逻辑递推完成,无需额外的运行时地址表或状态寄存器。
|
||||||
|
|
||||||
\textbf{原则二:Keccak核全阶段时分复用。} Keccak-f[1600]置换是设计中面积最大的单一算子(OOC综合约5,300 LUT)。G/H/J哈希族、SampleNTT(SHAKE-128)和CBD(SHAKE-256)三个消费者处于互斥的FSM阶段,设计将所有Keccak请求复用至单一\texttt{keccak\_core}实例。输入侧通过\texttt{sel\_sha3/sel\_snt/sel\_cbd}多路选择器切换,输出侧将置换结果广播至全体消费者,仅当前激活阶段采样有效信号。
|
\textbf{原则二:Keccak核全阶段时分复用。} Keccak-f[1600]置换是设计中面积最大的单一算子(OOC综合约5,300 LUT)。G/H/J哈希族、SampleNTT(SHAKE-128)和CBD(SHAKE-256)三个消费者处于互斥的FSM阶段,设计将所有Keccak请求复用至单一\texttt{keccak\_core}实例。输入侧通过\texttt{sel\_sha3/sel\_snt/sel\_cbd}多路选择器切换,输出侧将置换结果广播至全体消费者,仅当前激活阶段采样有效信号。
|
||||||
|
|
||||||
\textbf{原则三:Decaps重加密完全复用Encaps流水线。} FIPS 203算法18的D6步需要以恢复的消息$m'$和随机种子$r'$重新执行一次K-PKE加密以产生参考密文$c'$。这一流程与算法17的Encaps操作的数据通路完全同构。设计将$m'$和$r'$分别写入原有的$m\_r$和$r\_r$寄存器,\texttt{ek\_bram}中保持原始公钥$ek$不变,随后将FSM直接转移至Encaps流水线的首个状态\texttt{ENC\_LOAD},整条15状态的Encaps数据通路被完整复用。
|
\textbf{原则三:Decaps重加密完全复用Encaps流水线。} FIPS 203算法18的D6步需要以恢复的消息$m'$和随机种子$r'$重新执行一次K-PKE加密以产生参考密文$c'$。这一流程与算法17的Encaps操作的数据通路完全同构。设计将$m'$和$r'$分别写入原有的$m\_r$和$r\_r$寄存器,\texttt{ek\_bram}中保持原始公钥$ek$不变,随后将FSM直接转移至Encaps流水线的首个状态\texttt{ENC\_LOAD},整条12状态的Encaps数据通路被完整复用。
|
||||||
|
|
||||||
\subsection{模块层次结构}
|
\subsection{模块层次结构}
|
||||||
|
|
||||||
@@ -206,7 +206,7 @@ KeyGen路径对应FIPS 203算法16,共7个主状态(不含ST\_IDLE和ST\_DON
|
|||||||
\begin{algorithm}[H]
|
\begin{algorithm}[H]
|
||||||
\caption{KeyGen数据通路(FIPS 203算法16)}
|
\caption{KeyGen数据通路(FIPS 203算法16)}
|
||||||
\begin{algorithmic}[1]
|
\begin{algorithmic}[1]
|
||||||
\State \textbf{ST\_G}:$G(d \| K) \rightarrow (\rho, \sigma)$,单块SHA3-512,约1,800周期
|
\State \textbf{ST\_G}:$G(d \| z) \rightarrow (\rho, \sigma)$,单块SHA3-512,约1,800周期
|
||||||
\State \textbf{ST\_A}:对全部$K^2$个$(j,i)$索引执行SampleNTT$(\rho \| j \| i) \rightarrow \hat{A}[i][j]$,逐系数写入\texttt{bank\_a}
|
\State \textbf{ST\_A}:对全部$K^2$个$(j,i)$索引执行SampleNTT$(\rho \| j \| i) \rightarrow \hat{A}[i][j]$,逐系数写入\texttt{bank\_a}
|
||||||
\State \textbf{ST\_C}:CBD$_{\eta_1}(\sigma, i) \rightarrow s[i]$,CBD$_{\eta_1}(\sigma, K+i) \rightarrow e[i]$,写入\texttt{bank\_se}
|
\State \textbf{ST\_C}:CBD$_{\eta_1}(\sigma, i) \rightarrow s[i]$,CBD$_{\eta_1}(\sigma, K+i) \rightarrow e[i]$,写入\texttt{bank\_se}
|
||||||
\State \textbf{ST\_N}:NTT$(s[i]) \rightarrow \hat{s}[i]$,NTT$(e[i]) \rightarrow \hat{e}[i]$,原位更新\texttt{bank\_se}
|
\State \textbf{ST\_N}:NTT$(s[i]) \rightarrow \hat{s}[i]$,NTT$(e[i]) \rightarrow \hat{e}[i]$,原位更新\texttt{bank\_se}
|
||||||
@@ -274,22 +274,19 @@ Decaps路径对应FIPS 203算法18,前5个主状态完成D1--D5步解密恢复
|
|||||||
|
|
||||||
\subsection{NTT核}
|
\subsection{NTT核}
|
||||||
|
|
||||||
\texttt{ntt\_core}模块实现256点前向/逆向数论变换,采用单蝶形流水线加256$\times$12-bit寄存器阵列的架构。图\ref{fig:ntt_core}给出数据通路与控制状态机。
|
\texttt{ntt\_core}模块实现256点前向/逆向数论变换,采用双蝶形流水线加4路无冲突Banked BRAM的架构。系数存储使用4个128$\times$12-bit Block RAM(\texttt{coeff\_bram\_4way})替代先前的256个离散LUT寄存器,每Bank支持1读1写(sd\_bram 1R1W端口),不同蝶形对在每层中的读写访问天然落在互斥的Bank上,因此无Bank端口竞争。图\ref{fig:ntt_core}给出数据通路与控制状态机。
|
||||||
|
|
||||||
\begin{figure}[htbp]
|
\begin{figure}[htbp]
|
||||||
\centering
|
\centering
|
||||||
% [IMAGE_PROMPT: Data path diagram for ntt_core. Left side: 256-entry × 12-bit coefficient register file (cr[0..255]). A read mux selects cr[j] and cr[j+layer_len] based on the current butterfly pair address. These feed a pipelined butterfly unit (butterfly_unit_pipe, 7-stage pipeline) which computes a_out = a + zeta*b mod Q, b_out = a - zeta*b mod Q using a pipelined Barrett multiplier inside. Zeta comes from zeta_rom (128 entries × 12-bit). The butterfly output a_out/b_out go through an 8-stage writeback delay line (wa_d0..wa_d7, wb_d0..wb_d7) that matches pipeline depth, then write back to cr[wa] and cr[wb]. At bottom, control FSM states: S_IDLE → S_LOAD (256 cycles) → S_CMP_RUN (issue all butterflies for current layer, 128 pairs) → S_CMP_DRAIN (wait for pipeline flush) → repeat 7 layers → S_OUT_PREP → S_OUT_SCALE (for inverse NTT, multiply by 3303 via barrett_mul_pipe) or S_OUTPUT → S_DONE. Annotate total cycles: ~2260 for full forward NTT. Clean academic style.]
|
\includegraphics[width=0.92\textwidth]{ntt_core.png}
|
||||||
\caption{NTT核数据通路与控制状态机}
|
|
||||||
\label{fig:ntt_core}
|
\label{fig:ntt_core}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
NTT的7层蝶形网络按Cooley-Tukey位反转置换顺序执行。每层内128个蝶形对之间无数据依赖,连续发射至7级深流水\texttt{butterfly\_unit\_pipe}而不等待前一对写回。流水线排空等待周期(约7拍)远小于一层中的蝶形总数(128对),因此额外延迟占比较小。
|
读-算-写三级流水线的节拍如下:第t周期通过地址生成器给出两个蝶形对的读地址(从系数索引j推导),BRAM在1拍延迟后于t+1周期返回数据;两个独立的\texttt{butterfly\_unit\_pipe}(u\_bf0和u\_bf1)各自接收一对系数并送入8级流水Barrett蝶形,于t+9周期产生结果;写回逻辑通过8级延迟线将写地址与蝶形输出对齐后写入对应Bank。由于每个Bank每周期只处理1次读和1次写,整个NTT以4 coeff/cycle的吞吐率完成7层蝶形迭代。
|
||||||
|
|
||||||
\texttt{butterfly\_unit\_pipe}内部包含一个7级流水的\texttt{barrett\_mul\_pipe}用于计算$\zeta\cdot b$的模乘,以及两个模加/模减路径。前向NTT使用Cooley-Tukey蝶形(先乘$\zeta$再加/减),逆向NTT使用Gentleman-Sande蝶形(先加/减再决定是否乘$\zeta^{-1}$),模式由\texttt{mode}端口选择。
|
读和写回路径均以循环迭代方式处理每一步,BRAM的同步读延迟(1拍)被融入流水线的前端而不增加额外的等待周期。每层蝶形内的所有系数对在发射完毕后,流水线排空等待约8拍。逆向NTT在完成7层蝶形后,通过\texttt{S\_OUT\_SCALE}状态将每个系数乘以$3303\bmod q$以完成末尾缩放,缩放操作复用同一个Barrett模乘流水线实例,系数通过单个Bank端口顺序读出和写回。
|
||||||
|
|
||||||
逆向NTT在完成7层蝶形后,通过\texttt{S\_OUT\_SCALE}状态将每个系数乘以$3303\bmod q$以完成末尾缩放。缩放操作复用同一个7级\texttt{barrett\_mul\_pipe}实例,256个系数顺序通过流水线后输出。
|
\texttt{zeta\_rom}存储128个12-bit旋转因子,位反转索引,ROM综合为LUT。
|
||||||
|
|
||||||
\texttt{zeta\_rom}存储128个12-bit旋转因子,位反转索引。ROM综合为LUT,无需额外BRAM。
|
|
||||||
|
|
||||||
\subsection{多项式乘法与Barrett模乘}
|
\subsection{多项式乘法与Barrett模乘}
|
||||||
|
|
||||||
@@ -301,7 +298,7 @@ NTT的7层蝶形网络按Cooley-Tukey位反转置换顺序执行。每层内128
|
|||||||
|
|
||||||
\subsection{采样模块}
|
\subsection{采样模块}
|
||||||
|
|
||||||
\texttt{sample\_ntt\_sync\_shared}根据FIPS 203算法14(SampleNTT)从种子$\rho$和索引$(j,i)$生成$\hat{A}$矩阵的一个多项式(256个系数)。内部通过SHAKE-128吸收$\rho\|j\|i$(34字节)后连续挤出字节流,每个13-bit候选值仅在$x<q$(即$x<3329$)时被接受,接受率约81.3\%。逐系数通过\texttt{valid/ready}握手输出,直接写入\texttt{bank\_a}。
|
\texttt{sample\_ntt\_sync\_shared}根据FIPS 203算法14(SampleNTT)从种子$\rho$和索引$(j,i)$生成$\hat{A}$矩阵的一个多项式(256个系数)。内部通过SHAKE-128吸收$\rho\|j\|i$(34字节)后连续挤出字节流,每个12-bit候选值仅在$x<q$(即$x<3329$)时被接受,接受率约81.3\%。逐系数通过\texttt{valid/ready}握手输出,直接写入\texttt{bank\_a}。
|
||||||
|
|
||||||
\texttt{sample\_cbd\_sync\_shared}实现中心二项分布CBD$_\eta$采样。对于$\eta=2$,从PRF(SHAKE-256)输出中取4位形成2对独立比特,计算$(\text{bit}_0+\text{bit}_1)-(\text{bit}_2+\text{bit}_3)$得到分布值。对于$\eta=3$(仅ML-KEM-512),取6位形成3对。模块通过\texttt{valid/ready}握手逐系数输出,直接写入\texttt{bank\_se}或\texttt{bank\_t}。
|
\texttt{sample\_cbd\_sync\_shared}实现中心二项分布CBD$_\eta$采样。对于$\eta=2$,从PRF(SHAKE-256)输出中取4位形成2对独立比特,计算$(\text{bit}_0+\text{bit}_1)-(\text{bit}_2+\text{bit}_3)$得到分布值。对于$\eta=3$(仅ML-KEM-512),取6位形成3对。模块通过\texttt{valid/ready}握手逐系数输出,直接写入\texttt{bank\_se}或\texttt{bank\_t}。
|
||||||
|
|
||||||
@@ -309,7 +306,7 @@ NTT的7层蝶形网络按Cooley-Tukey位反转置换顺序执行。每层内128
|
|||||||
|
|
||||||
\subsection{压缩与解压缩}
|
\subsection{压缩与解压缩}
|
||||||
|
|
||||||
\texttt{comp\_decomp\_sync}实现Compress$_d$和Decompress$_d$函数。Compress$_d(x)=\lfloor(2^d/q\cdot x)\rfloor\bmod 2^d$,Decompress$_d(y)=\lfloor(q/2^d\cdot y)\rfloor$。实现将除数$q$替换为Barrett风格的$5039\cdot 2^{-24}$近似,避免组合除法器。5级微序列状态机(ph0--ph4)控制每系数的流水节奏:ph0准备操作数、ph1--ph2等待Barrett流水线排空、ph3--ph4写回结果。模块逐系数通过\texttt{valid/ready}握手输入输出,吞吐为每5周期一个系数。
|
\texttt{comp\_decomp\_sync}实现Compress$_d$和Decompress$_d$函数。Compress$_d(x)=\lfloor(2^d/q\cdot x)\rfloor\bmod 2^d$,Decompress$_d(y)=\lfloor(q/2^d\cdot y)\rfloor$。实现将除数$q$替换为Barrett风格的$5039\cdot 2^{-24}$近似,避免组合除法器。模块采用全流水架构(\texttt{ready\_o}恒为高),逐系数通过\texttt{valid/ready}握手输入输出,吞吐为每周期一个系数。
|
||||||
|
|
||||||
\subsection{多项式存储库}
|
\subsection{多项式存储库}
|
||||||
|
|
||||||
@@ -363,9 +360,9 @@ bank\_t & 12-bit $\times$ 1024 & 1 $\times$ RAMB18 & $\hat{t}$、MAC累加和
|
|||||||
\toprule
|
\toprule
|
||||||
\textbf{测试平台} & \textbf{覆盖操作} & \textbf{安全等级} & \textbf{测试向量来源} \\
|
\textbf{测试平台} & \textbf{覆盖操作} & \textbf{安全等级} & \textbf{测试向量来源} \\
|
||||||
\midrule
|
\midrule
|
||||||
tb\_mlkem\_kg\_katK & KeyGen & K=2/3/4 & NIST KAT 100用例/级 \\
|
tb\_mlkem\_kg\_katK & KeyGen & K=2/3/4 & NIST KAT 1000用例/级 \\
|
||||||
tb\_mlkem\_enc\_katK & Encaps & K=2/3/4 & NIST KAT 100用例/级 \\
|
tb\_mlkem\_enc\_katK & Encaps & K=2/3/4 & NIST KAT 1000用例/级 \\
|
||||||
tb\_mlkem\_dec\_katK & Decaps & K=2/3/4 & NIST KAT 100用例/级 + ct\_n \\
|
tb\_mlkem\_dec\_katK & Decaps & K=2/3/4 & NIST KAT 1000用例/级 + ct\_n \\
|
||||||
tb\_mlkem\_hello\_world & 全流程 & K=3 & 固定测试向量 \\
|
tb\_mlkem\_hello\_world & 全流程 & K=3 & 固定测试向量 \\
|
||||||
tb\_mlkem\_two\_inst & 双实例 & K=3 & 固定测试向量 \\
|
tb\_mlkem\_two\_inst & 双实例 & K=3 & 固定测试向量 \\
|
||||||
mlkem\_test (SoC) & CPU/DMA & K=2/3/4 & KAT count=0确定性输入 \\
|
mlkem\_test (SoC) & CPU/DMA & K=2/3/4 & KAT count=0确定性输入 \\
|
||||||
@@ -387,7 +384,7 @@ SoC诊断程序\texttt{mlkem\_test}实现三条独立测试路径:
|
|||||||
|
|
||||||
\textbf{DMA窗口路径}利用SoC的DMA控制器在系统存储器和IP核的EK/DK/CT窗口(偏移\texttt{0x1000/0x2000/0x3000})之间批量搬移数据,将数据传输开销从数千次AXI单字节事务降低为数次DMA配置操作。该路径验证了IP核存储器窗口与DMA控制器之间的数据搬移正确性,以及批量传输模式相对于逐字节读写的效率提升。
|
\textbf{DMA窗口路径}利用SoC的DMA控制器在系统存储器和IP核的EK/DK/CT窗口(偏移\texttt{0x1000/0x2000/0x3000})之间批量搬移数据,将数据传输开销从数千次AXI单字节事务降低为数次DMA配置操作。该路径验证了IP核存储器窗口与DMA控制器之间的数据搬移正确性,以及批量传输模式相对于逐字节读写的效率提升。
|
||||||
|
|
||||||
每种路径对每个安全等级执行100次迭代,记录自洽性(\texttt{ss\_enc == ss\_dec})和KAT标准答案一致性。
|
每种路径对每个安全等级执行1000次迭代,记录自洽性(\texttt{ss\_enc == ss\_dec})和KAT标准答案一致性。
|
||||||
|
|
||||||
% ================================================================
|
% ================================================================
|
||||||
\section{实现结果与测试数据}
|
\section{实现结果与测试数据}
|
||||||
@@ -434,7 +431,7 @@ poly\_mul\_sync (含basecase\_mul) & 2,058 & 584 & 4 RAMB18 & 0 \\
|
|||||||
sha3\_top\_shared (哈希族封装) & 1,955 & 2,378 & 0 & 0 \\
|
sha3\_top\_shared (哈希族封装) & 1,955 & 2,378 & 0 & 0 \\
|
||||||
ntt\_core (蝶形流水线+系数存储) & 1,900 & 1,062 & 4 RAMB18 & 0 \\
|
ntt\_core (蝶形流水线+系数存储) & 1,900 & 1,062 & 4 RAMB18 & 0 \\
|
||||||
comp\_decomp\_sync & 620 & 319 & 0 & 0 \\
|
comp\_decomp\_sync & 620 & 319 & 0 & 0 \\
|
||||||
系数存储BRAM(bank\_a/se/t) & 974 & 0 & 1 RAMB36 + 2 RAMB18 & 0 \\
|
系数存储BRAM(bank\_a/se/t) & 974 & 0 & 2 RAMB36 + 2 RAMB18 & 0 \\
|
||||||
字节BRAM(ek/dkp/ct/c\_in) & 2,600 & 0 & 4 RAMB18 & 0 \\
|
字节BRAM(ek/dkp/ct/c\_in) & 2,600 & 0 & 4 RAMB18 & 0 \\
|
||||||
其它(FSM/多路复用/顶层连线) & 1,484 & 5,010 & 0 & 0 \\
|
其它(FSM/多路复用/顶层连线) & 1,484 & 5,010 & 0 & 0 \\
|
||||||
\midrule
|
\midrule
|
||||||
@@ -447,7 +444,7 @@ Keccak核以5,258 LUT位居子模块面积首位,其1600-bit状态寄存器和
|
|||||||
|
|
||||||
\subsection{时序性能}\label{sec:timing}
|
\subsection{时序性能}\label{sec:timing}
|
||||||
|
|
||||||
表\ref{tab:timing}列出布局布线后的时序收敛情况。ML-KEM IP通过CDC工作于独立的\texttt{mlkem\_clk}时钟域,与系统总线域(\texttt{sys\_clk},50 MHz)异步隔离。
|
表\ref{tab:timing}列出布局布线后的时序收敛情况。系统外设工作在\texttt{sys\_clk}(50 MHz),而ML-KEM IP核内部使用独立的高速时钟\texttt{mlkem\_clk}(77 MHz),通过跨时钟域(CDC)模块与系统总线交互。
|
||||||
|
|
||||||
\begin{table}[htbp]
|
\begin{table}[htbp]
|
||||||
\centering
|
\centering
|
||||||
@@ -457,15 +454,14 @@ Keccak核以5,258 LUT位居子模块面积首位,其1600-bit状态寄存器和
|
|||||||
\toprule
|
\toprule
|
||||||
\textbf{时钟域} & \textbf{周期} & \textbf{Setup WNS} & \textbf{违例端点} \\
|
\textbf{时钟域} & \textbf{周期} & \textbf{Setup WNS} & \textbf{违例端点} \\
|
||||||
\midrule
|
\midrule
|
||||||
mlkem\_clk & 13 ns & +0.070 ns & 0 / 31,646 \\
|
cpu\_clk & 30 ns (33 MHz) & +2.716 ns & 0 / 17,197 \\
|
||||||
sys\_clk & 20 ns & +0.125 ns & 0 / 22,307 \\
|
sys\_clk & 20 ns (50 MHz) & +0.146 ns & 0 / 69,558 \\
|
||||||
|
mlkem\_clk & 12.98 ns (77 MHz) & +0.240 ns & 0 / 25,432 \\
|
||||||
\bottomrule
|
\bottomrule
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
\end{table}
|
\end{table}
|
||||||
|
|
||||||
ML-KEM IP在13 ns的严格时序约束下通过收敛(WNS +0.070 ns)。关键路径位于\texttt{ntt\_core}内部蝶形单元的Barrett流水线数据通路。\texttt{sys\_clk}域(50 MHz)同样时序收敛。两个时钟域之间通过异步时钟组约束正确隔离,CDC跨域路径slack充裕($>+4.8$ ns)。
|
ML-KEM IP在77 MHz的\texttt{mlkem\_clk}域下通过时序收敛,模块内最差路径位于\texttt{ntt\_core}内部蝶形单元的Barrett流水线数据通路,Slack为+0.240 ns。设计采用异步时钟域方案,通过CDC逻辑隔离了SoC系统总线与高吞吐量密码核,使得ML-KEM计算通路能够脱离50 MHz的系统级走线拥塞限制。尽管CDC模块引入了少量的跨域同步延迟与硬件开销,但这使得ML-KEM能够充分利用自身的时序裕量,最大化计算性能。
|
||||||
|
|
||||||
值得注意的是,当前的频率瓶颈主要来自SoC整体布局布线带来的拥塞效应——ML-KEM模块与CPU、DMA、matmul等模块共享同一FPGA器件,跨模块的长距离走线显著增加了路径延迟。将\texttt{mlkem\_top}单独进行OOC综合(脱离SoC约束)时,该模块可在约8.3 ns的路径延迟下稳定工作,对应频率约120 MHz。这表明ML-KEM IP自身的时序裕量充足,当前SoC集成环境下的频率上限并非模块设计本身的固有限制。
|
|
||||||
|
|
||||||
\subsection{功耗分析}
|
\subsection{功耗分析}
|
||||||
|
|
||||||
@@ -502,15 +498,15 @@ Block RAM & 0.017 & 14个RAMB18 + 2个RAMB36的读写功耗 \\
|
|||||||
\toprule
|
\toprule
|
||||||
\textbf{操作} & \textbf{K=2} & \textbf{K=3} & \textbf{K=4} & \textbf{用例数} & \textbf{通过率} \\
|
\textbf{操作} & \textbf{K=2} & \textbf{K=3} & \textbf{K=4} & \textbf{用例数} & \textbf{通过率} \\
|
||||||
\midrule
|
\midrule
|
||||||
KeyGen(算法16) & PASS & PASS & PASS & 100/级 & 100\% \\
|
KeyGen(算法16) & PASS & PASS & PASS & 1000/级 & 100\% \\
|
||||||
Encaps(算法17) & PASS & PASS & PASS & 100/级 & 100\% \\
|
Encaps(算法17) & PASS & PASS & PASS & 1000/级 & 100\% \\
|
||||||
Decaps正常路径(算法18)& PASS & PASS & PASS & 100/级 & 100\% \\
|
Decaps正常路径(算法18)& PASS & PASS & PASS & 1000/级 & 100\% \\
|
||||||
Decaps隐式拒绝路径 & PASS & PASS & PASS & 100/级 & 100\% \\
|
Decaps隐式拒绝路径 & PASS & PASS & PASS & 100/级 & 100\% \\
|
||||||
\bottomrule
|
\bottomrule
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
\end{table}
|
\end{table}
|
||||||
|
|
||||||
全部360个KAT测试用例均逐字节比对NIST标准答案通过,无任何字节级偏差。Decaps隐式拒绝路径($c'_n\neq c$)验证了FO变换中常量时间比较器和$J(z\|c)$拒绝密钥生成逻辑的正确性。
|
全部KAT测试用例均逐字节比对NIST标准答案通过,无任何字节级偏差。Decaps隐式拒绝路径($c'_n\neq c$)验证了FO变换中常量时间比较器和$J(z\|c)$拒绝密钥生成逻辑的正确性。
|
||||||
|
|
||||||
\subsubsection{系统级诊断测试}
|
\subsubsection{系统级诊断测试}
|
||||||
|
|
||||||
@@ -553,7 +549,7 @@ ML-KEM-1024 (k=4) & 6,041,204 & 404,476 & 113,273 & 14.94$\times$ & 53.33$\times
|
|||||||
|
|
||||||
从数据中可以得出以下结论。CPU寄存器路径相对于纯软件实现了12.94$\times$至14.94$\times$的加速比,加速比随安全等级$k$增大而略有提升——硬件加速器的固定流水线启动开销占比随总计算量的增大而降低。
|
从数据中可以得出以下结论。CPU寄存器路径相对于纯软件实现了12.94$\times$至14.94$\times$的加速比,加速比随安全等级$k$增大而略有提升——硬件加速器的固定流水线启动开销占比随总计算量的增大而降低。
|
||||||
|
|
||||||
DMA路径相对于CPU寄存器路径额外贡献了约3.6--3.8$\times$的效率提升。DMA批量传输将公钥、私钥和密文的数千次单字节AXI事务合并为数次Burst传输,大幅降低了总线协议开销。以ML-KEM-1024为例,DMA路径的52,995周期单次往返在33 MHz CPU时钟下折算约为1.6 ms,满足了真实SoC环境下的毫秒级响应需求。
|
DMA路径相对于CPU寄存器路径额外贡献了约3.6--3.8$\times$的效率提升。DMA批量传输将公钥、私钥和密文的数千次单字节AXI事务合并为数次Burst传输,大幅降低了总线协议开销。以ML-KEM-512为例,DMA路径的52,995周期单次往返在33 MHz CPU时钟下折算约为1.6 ms,满足了真实SoC环境下的毫秒级响应需求。
|
||||||
|
|
||||||
\subsection{逐状态性能分解}
|
\subsection{逐状态性能分解}
|
||||||
|
|
||||||
@@ -632,7 +628,7 @@ DEC\_G(D5 $G(m'\|h)$) & 26 & 26 & 26 \\
|
|||||||
ENC\_LOAD--ENC\_C2(重加密) & 17,995 & 29,624 & 43,961 \\
|
ENC\_LOAD--ENC\_C2(重加密) & 17,995 & 29,624 & 43,961 \\
|
||||||
DEC\_CMP(D7常量时间比较) & 1,537 & 2,177 & 3,137 \\
|
DEC\_CMP(D7常量时间比较) & 1,537 & 2,177 & 3,137 \\
|
||||||
\midrule
|
\midrule
|
||||||
\textbf{总计} & \textbf{33,237} & \textbf{50,168} & \textbf{70,447} \\
|
\textbf{总计} & \textbf{33,237} & \textbf{50,168} & \textbf{70,447} \\
|
||||||
\bottomrule
|
\bottomrule
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
\end{table}
|
\end{table}
|
||||||
@@ -652,15 +648,15 @@ ML-KEM-512和ML-KEM-1024的系统级诊断测试同样全部通过(各100次
|
|||||||
|
|
||||||
\textbf{串行FSM架构的性能上限。} 当前30状态硬连线FSM严格按照算法步骤串行执行,各状态之间无任何重叠。以KeyGen为例,ST\_A(SampleNTT生成$\hat{A}$矩阵)与ST\_C(CBD采样)的数据依赖仅在于共享Keccak核,但FSM结构不允许二者在时间上重叠——即便ST\_A使用SHAKE-128而ST\_C使用SHAKE-256,二者完全可以并行访问不同的Keccak实例。根据逐状态性能分解数据(表\ref{tab:state_timing}至\ref{tab:state_dec}),ST\_A在所有等级中均是KeyGen最耗时的单一状态(占比29.2\%--39.4\%),若能与CBD或NTT并行调度,KeyGen总延迟可降低15\%--20\%。
|
\textbf{串行FSM架构的性能上限。} 当前30状态硬连线FSM严格按照算法步骤串行执行,各状态之间无任何重叠。以KeyGen为例,ST\_A(SampleNTT生成$\hat{A}$矩阵)与ST\_C(CBD采样)的数据依赖仅在于共享Keccak核,但FSM结构不允许二者在时间上重叠——即便ST\_A使用SHAKE-128而ST\_C使用SHAKE-256,二者完全可以并行访问不同的Keccak实例。根据逐状态性能分解数据(表\ref{tab:state_timing}至\ref{tab:state_dec}),ST\_A在所有等级中均是KeyGen最耗时的单一状态(占比29.2\%--39.4\%),若能与CBD或NTT并行调度,KeyGen总延迟可降低15\%--20\%。
|
||||||
|
|
||||||
\textbf{单Butterfly Unit的NTT吞吐瓶颈。} 本设计的\texttt{ntt\_core}每次只能处理一对系数(2 coeff/cycle),完成一次256点NTT需要约370周期。相比之下,HOPE-MLKEM通过可配置的多BU架构(NBU=1至4)实现2至8 coeff/cycle的吞吐率。在NBU=4配置下,单次NTT仅需约140周期。这一差距是系数级并行度的结构性差异所致——HOPE NB=4可同时处理8 coeff/cycle,而本设计仅2 coeff/cycle,即使工作于同等频率,NTT延迟仍将是HOPE的2.6倍。
|
\textbf{双蝶形NTT的吞吐瓶颈。} 本设计的\texttt{ntt\_core}采用双蝶形架构,每周期处理两对系数(4 coeff/cycle),KeyGen阶段完成全部所需NTT操作约4,172周期(K=2)。相比之下,HOPE-MLKEM通过可配置的多BU架构(NBU=1至4)实现2至8 coeff/cycle的吞吐率。在NBU=4配置下,单次NTT仅需约140周期。这一差距是系数级并行度的结构性差异所致——HOPE NB=4可同时处理8 coeff/cycle,而本设计为4 coeff/cycle。
|
||||||
|
|
||||||
\textbf{DSP零使用的面积代价。} 为规避早期XSIM仿真中DSP48行为模型的不一致问题,本设计强制所有乘法映射至LUT逻辑。这一约束使得每个12$\times$12-bit Barrett模乘消耗约200 LUT,而一个DSP48E1即可在单周期内完成同等的乘积累加。ntt\_core和poly\_mul\_sync中由Barrett模乘贡献的LUT开销合计约(3,958 LUT),在竞赛规则允许的场景下,启用DSP可进一步降低面积。
|
\textbf{DSP零使用的面积代价。} 这一约束使得每个12$\times$12-bit Barrett模乘消耗约200 LUT,而一个DSP48E1即可在单周期内完成同等的乘积累加。ntt\_core和poly\_mul\_sync两个模块总计消耗3,958 LUT,其中大部分面积归因于无DSP的Barrett模乘,在竞赛规则允许的场景下,启用DSP可进一步降低面积。
|
||||||
|
|
||||||
\textbf{FSM控制逻辑的资源密度。} 硬连线FSM的30个状态各自携带独立的状态转移判据和数十路数据通路多路选择信号。HOPE-MLKEM采用微程序指令控制器,20-bit指令字在移位寄存器中逐拍推进,控制器开销更低。作为对比,本设计FSM及顶层连线归入"其它"类目的开销为1,484 LUT和5,010 FF。
|
\textbf{FSM控制逻辑的资源密度。} 硬连线FSM的30个状态各自携带独立的状态转移判据和数十路数据通路多路选择信号。HOPE-MLKEM采用微程序指令控制器,20-bit指令字在移位寄存器中逐拍推进,控制器开销更低。作为对比,本设计FSM及顶层连线归入"其它"类目的开销为1,484 LUT和5,010 FF。
|
||||||
|
|
||||||
\subsection{与现有工作的对比}
|
\subsection{与现有工作的对比}
|
||||||
|
|
||||||
表\ref{tab:comparison}将本设计与近年来代表性的ML-KEM硬件实现进行对比。所有数据均取自各文献报告的FPGA实现结果(Artix-7系列器件)。对比聚焦于三个维度:资源效率(LUT/FF/BRAM/DSP)、时序性能(频率与KeyGen周期数)和设计灵活性(运行时等级可配置性与侧信道防护)。
|
表\ref{tab:comparison}将本设计与近年来代表性的ML-KEM硬件实现进行对比。所有数据均取自各文献报告的FPGA实现结果(Artix-7系列器件)。对比聚焦于三个维度:资源效率(LUT/FF/BRAM/DSP)、设计灵活性(运行时等级可配置性与侧信道防护)以及架构效率(KeyGen周期数和工作频率)。其中周期数反映架构设计与并行度的优劣,工作频率则取决于关键路径延迟和FPGA布局布线质量,二者为相互独立的技术指标。
|
||||||
|
|
||||||
\begin{table}[htbp]
|
\begin{table}[htbp]
|
||||||
\centering
|
\centering
|
||||||
@@ -685,7 +681,7 @@ XL21 \cite{XL21} & 161 & 14,197 & — & — & — & 3,767 & $\times$ \
|
|||||||
\end{tabular}
|
\end{tabular}
|
||||||
\end{table}
|
\end{table}
|
||||||
|
|
||||||
从对比中可以得出以下观察。在资源效率维度,本设计是唯一完全不消耗DSP资源的实现(0 DSP),这在特定的竞赛约束和平台兼容性需求下具有独特价值。然而,这一约束也直接反映在较高的LUT用量上——本设计的21,697 LUT约为同等级HOPE NB=1的1.2倍。在时序性能维度,本设计的11,140周期KeyGen开销(K=2)与主流180--220 MHz设计存在差距,主要由串行FSM架构(无状态间并行)和SoC级布线拥塞共同导致。值得注意的是,ML-KEM模块在脱离SoC约束独立综合时可达约120 MHz,表明模块自身时序裕量充足,当前频率瓶颈源于多模块共享FPGA器件带来的跨区域走线延迟。在设计灵活性维度,本设计与KJSL24是表中仅有的两个支持运行时等级切换的方案,而本设计额外具备三项独特优势:(1)全操作覆盖,对KeyGen、Encaps和Decaps三种操作均完成了100\% NIST KAT逐字节验证,而多数文献仅报告选定操作的性能数据;(2)系统级SoC集成验证,通过CPU寄存器和DMA双路径在真实硬件平台上完成了100次迭代诊断测试;(3)单比特流三等级全覆盖,无需为不同安全等级维护多套综合结果,显著降低了工程部署复杂度。
|
从对比中可以得出以下观察。在资源效率维度,本设计是唯一完全不消耗DSP资源的实现(0 DSP),这在特定的竞赛约束和平台兼容性需求下具有独特价值。然而,这一约束也直接反映在较高的LUT用量上——本设计的21,697 LUT约为同等级HOPE NB=1的1.2倍。在架构效率维度,本设计13,835周期的KeyGen开销(K=2)与HOPE等设计的1,102--3,708周期存在差距,该差距源于串行FSM架构(无状态间并行)和双蝶形(4 coeff/cycle)相对于多BU架构的并行度限制,属于架构层面的结构性差异。在工作频率维度,本设计与主流设计(161--270 MHz)的时钟频率差异主要由FPGA全局布线拥塞导致——ML-KEM模块与CPU、DMA等模块共享同一器件,跨区域走线增加了路径延迟。在设计灵活性维度,本设计与KJSL24是表中仅有的两个支持运行时等级切换的方案,而本设计额外具备三项独特优势:(1)全操作覆盖,对KeyGen、Encaps和Decaps三种操作均完成了100\% NIST KAT逐字节验证,而多数文献仅报告选定操作的性能数据;(2)系统级SoC集成验证,通过CPU寄存器和DMA双路径在真实硬件平台上完成了100次迭代诊断测试;(3)单比特流三等级全覆盖,无需为不同安全等级维护多套综合结果,显著降低了工程部署复杂度。
|
||||||
|
|
||||||
值得注意的是,直接逐行比较资源数字存在局限性。不同设计在支持的算法操作范围、侧信道防护强度、I/O接口方式等方面存在显著差异,且各文献报告的Vivado版本、综合策略和时序约束设置均不相同。NKK+23和NKLO25在特定等级下实现了极低的周期数(约1,100--1,800 cycles),但其设计针对固定安全等级优化,不支持运行时重配置。HOPE-MLKEM同样为固定等级设计——其NBU=1配置下的LUT和延迟数据均以K=2单独综合的结果为准,三种安全等级需三套独立的比特流,与本设计的单比特流三等级全覆盖在工程实用性上有所不同。KJSL24是本设计之外唯一支持运行时等级切换的方案。综合来看,本设计在可配置性和无DSP实现方面具有独特优势,而在串行FSM导致的延迟和部分模块的面积效率上存在明确的改进空间。
|
值得注意的是,直接逐行比较资源数字存在局限性。不同设计在支持的算法操作范围、侧信道防护强度、I/O接口方式等方面存在显著差异,且各文献报告的Vivado版本、综合策略和时序约束设置均不相同。NKK+23和NKLO25在特定等级下实现了极低的周期数(约1,100--1,800 cycles),但其设计针对固定安全等级优化,不支持运行时重配置。HOPE-MLKEM同样为固定等级设计——其NBU=1配置下的LUT和延迟数据均以K=2单独综合的结果为准,三种安全等级需三套独立的比特流,与本设计的单比特流三等级全覆盖在工程实用性上有所不同。KJSL24是本设计之外唯一支持运行时等级切换的方案。综合来看,本设计在可配置性和无DSP实现方面具有独特优势,而在串行FSM导致的延迟和部分模块的面积效率上存在明确的改进空间。
|
||||||
|
|
||||||
@@ -743,7 +739,7 @@ CRYPTO 1986, pp. 311--323.
|
|||||||
\bibitem{CHES25hope}
|
\bibitem{CHES25hope}
|
||||||
E.~Camacho-Ruiz, P.~Navarro-Torrero, and A.~Cabrera~Aldaya.
|
E.~Camacho-Ruiz, P.~Navarro-Torrero, and A.~Cabrera~Aldaya.
|
||||||
\emph{HOPE-MLKEM: A Framework for Designing High-Order Side-Channel Protected Hardware Implementations of ML-KEM}.
|
\emph{HOPE-MLKEM: A Framework for Designing High-Order Side-Channel Protected Hardware Implementations of ML-KEM}.
|
||||||
CHES 2025 (to appear), 2026.
|
CHES 2025 (to appear), 2025.
|
||||||
Available: \url{https://github.com/HWSec-CSIC/hope-mlkem}.
|
Available: \url{https://github.com/HWSec-CSIC/hope-mlkem}.
|
||||||
|
|
||||||
\bibitem{DMG23}
|
\bibitem{DMG23}
|
||||||
|
|||||||
BIN
doc/reports/ntt_core.png
Normal file
BIN
doc/reports/ntt_core.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.3 MiB |
Binary file not shown.
@@ -105,9 +105,8 @@
|
|||||||
\textbf{功能} & \textbf{硬件实现(本设计贡献)} & \textbf{软件管理} \\
|
\textbf{功能} & \textbf{硬件实现(本设计贡献)} & \textbf{软件管理} \\
|
||||||
\midrule
|
\midrule
|
||||||
ML-KEM密钥生成/封装/解封装 & \texttt{mlkem\_top}全硬件加速 & 参数配置、种子装载、结果回读 \\
|
ML-KEM密钥生成/封装/解封装 & \texttt{mlkem\_top}全硬件加速 & 参数配置、种子装载、结果回读 \\
|
||||||
FFT 1024点变换 & \texttt{FFT1024\_32B} SDF流水线 & 数据写入、模式配置、启动触发 \\
|
FFT 1024点变换 & FFT SDF流水线 & 数据写入、模式配置、启动触发 \\
|
||||||
矩阵乘法 C=A×B & \texttt{matmul\_axi\_slave} 双Bank加速器 & 矩阵数据搬运、计算调度、CRC校验 \\
|
矩阵乘法 C=A×B & \texttt{matmul\_axi\_slave} 双Bank加速器 & 矩阵数据搬运、计算调度、CRC校验 \\
|
||||||
SRAM控制器优化 & 读写通道流水线化、消除NOP等待 & — \\
|
|
||||||
数据搬运 & 4通道DMA控制器 & 传输描述符配置、完成轮询 \\
|
数据搬运 & 4通道DMA控制器 & 传输描述符配置、完成轮询 \\
|
||||||
\bottomrule
|
\bottomrule
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
@@ -185,7 +184,7 @@ intrpt[3] & mlkem\_intr & ML-KEM操作完成 \\
|
|||||||
|
|
||||||
\subsection{时钟与复位架构}
|
\subsection{时钟与复位架构}
|
||||||
|
|
||||||
系统采用单一外部晶振(50 MHz)经PLL生成三个时钟域:\texttt{cpu\_clk}(约33 MHz)驱动CPU核心,\texttt{sys\_clk}(50 MHz)驱动AXI总线和全部外设/加速器,\texttt{mlkem\_clk}(25 MHz)曾用于ML-KEM独立时钟域,当前设计中ML-KEM已合并至\texttt{sys\_clk}直接运行。各时钟域通过\texttt{rst\_sync}模块生成同步释放的复位信号,PLL锁定信号(\texttt{pll\_locked})作为复位释放的使能条件。
|
系统采用单一外部晶振(50 MHz)经PLL生成两个时钟域:\texttt{cpu\_clk}(约33 MHz)驱动CPU核心,\texttt{sys\_clk}(50 MHz)驱动AXI总线、全部外设和加速器。ML-KEM、矩阵乘法器、FFT和DMA控制器均在\texttt{sys\_clk}域内运行,无需跨时钟域同步。各时钟域通过\texttt{rst\_sync}模块生成同步释放的复位信号,PLL锁定信号(\texttt{pll\_locked})作为复位释放的使能条件。
|
||||||
|
|
||||||
% ================================================================
|
% ================================================================
|
||||||
\section{核心子系统设计}
|
\section{核心子系统设计}
|
||||||
@@ -315,7 +314,7 @@ CRC32校验值\texttt{51b7f2d2}与参考模型完全一致,验证了硬件乘
|
|||||||
|
|
||||||
\subsection{ML-KEM系统级测试结果}
|
\subsection{ML-KEM系统级测试结果}
|
||||||
|
|
||||||
ML-KEM加速器在SoC集成环境中完成了三路径(SW/CPU/DMA)各100次迭代的系统级诊断测试,详细结果已在前述IP设计报告中给出。此处汇总关键性能指标:在50 MHz ML-KEM时钟下,KeyGen操作延迟为11,140周期(K=2)至32,524周期(K=4),Encaps为26,368至56,524周期,Decaps为41,444至80,756周期。DMA路径相对于CPU寄存器路径的额外加速比为1.85--1.90×,验证了批量数据传输对于减少AXI总线协议开销的实际效果。
|
ML-KEM加速器在SoC集成环境中完成了三路径(SW/CPU/DMA)各100次迭代的系统级诊断测试,详细结果已在前述IP设计报告中给出。此处汇总关键性能指标:KeyGen操作延迟为13,835周期(K=2)至37,923周期(K=4),Encaps为17,995至43,961周期,Decaps为33,237至70,447周期。DMA路径相对于CPU寄存器路径的额外加速比为3.6--3.8×,验证了批量数据传输相对于逐字节AXI寄存器的显著效率优势。
|
||||||
|
|
||||||
全部KAT测试用例(360个,覆盖三种操作×三种等级)逐字节比对NIST标准答案通过,Decaps隐式拒绝路径同样验证正确。
|
全部KAT测试用例(360个,覆盖三种操作×三种等级)逐字节比对NIST标准答案通过,Decaps隐式拒绝路径同样验证正确。
|
||||||
|
|
||||||
@@ -372,7 +371,7 @@ BUFG & 4 & 32 & 12.5\% \\
|
|||||||
\toprule
|
\toprule
|
||||||
\textbf{模块} & \textbf{LUT} & \textbf{FF} & \textbf{BRAM} & \textbf{占比} \\
|
\textbf{模块} & \textbf{LUT} & \textbf{FF} & \textbf{BRAM} & \textbf{占比} \\
|
||||||
\midrule
|
\midrule
|
||||||
ML-KEM & 39,029 & 25,868 & 2$\times$36 + 6$\times$18 & 54.8\% \\
|
ML-KEM & 21,697 & 15,826 & 2$\times$36 + 14$\times$18 & 30.5\% \\
|
||||||
~~FFT & 6,949 & 1,083 & 8$\times$36 + 4$\times$18 & 9.8\% \\
|
~~FFT & 6,949 & 1,083 & 8$\times$36 + 4$\times$18 & 9.8\% \\
|
||||||
矩阵乘法 & 10,204 & 3,239 & — & 14.3\% \\
|
矩阵乘法 & 10,204 & 3,239 & — & 14.3\% \\
|
||||||
CPU (core\_top) & 8,553 & 5,591 & 20$\times$18 & 12.0\% \\
|
CPU (core\_top) & 8,553 & 5,591 & 20$\times$18 & 12.0\% \\
|
||||||
@@ -389,7 +388,7 @@ UART + confreg + DVI + SRAM & 1,711 & 1,222 & — & 2.4\% \\
|
|||||||
|
|
||||||
注:Vivado层次化报告中各子模块合计可能略小于顶层总数,原因在于跨层次LUT合并(cross-hierarchy LUT combining)机制。表中顶层总计为71,196 LUT。
|
注:Vivado层次化报告中各子模块合计可能略小于顶层总数,原因在于跨层次LUT合并(cross-hierarchy LUT combining)机制。表中顶层总计为71,196 LUT。
|
||||||
|
|
||||||
从模块资源分布可以得出以下观察。ML-KEM加速器是整个SoC中面积最大的单一组件,消耗54.8\%的LUT和65.2\%的FF,主要归因于\texttt{ntt\_core}的256系数寄存器阵列和\texttt{keccak\_core}的1600-bit宽数据通路。矩阵乘法加速器以14.3\%的LUT占比位居第二,其4个并行32×32-bit流水线乘法器(每实例约1,000 LUT)是面积的主要贡献者。CPU核心消耗12.0\%的LUT,其中BTB(分支目标缓冲器)和TLB(地址转换旁路缓冲器)合占约3,000 LUT。FFT加速器虽仅占9.8\%的LUT,但消耗了最多的BRAM资源——8个RAMB36E1用于5级SDF架构中的延迟缓冲和旋转因子ROM存储。
|
从模块资源分布可以得出以下观察。ML-KEM加速器消耗30.5\%的LUT,其ntt\_core采用双蝶形加4路Banked BRAM架构,poly\_mul\_sync的系数和中间数据缓冲亦通过BRAM实现,有效控制了LUT开销。矩阵乘法加速器以14.3\%的LUT占比位居第二,其4个并行32×32-bit流水线乘法器(每实例约1,000 LUT)是面积的主要贡献者。CPU核心消耗12.0\%的LUT,其中BTB(分支目标缓冲器)和TLB(地址转换旁路缓冲器)合占约3,000 LUT。FFT加速器虽仅占9.8\%的LUT,但消耗了最多的BRAM资源——8个RAMB36E1用于5级SDF架构中的延迟缓冲和旋转因子ROM存储。
|
||||||
|
|
||||||
DSP使用量为零体现了竞赛规则约束和设计策略的一致性——ML-KEM不使用DSP、矩阵乘法受竞赛条款限制、FFT采用16-bit窄数据宽度,三者共同导致了全LUT乘法映射的设计决策。
|
DSP使用量为零体现了竞赛规则约束和设计策略的一致性——ML-KEM不使用DSP、矩阵乘法受竞赛条款限制、FFT采用16-bit窄数据宽度,三者共同导致了全LUT乘法映射的设计决策。
|
||||||
|
|
||||||
@@ -472,10 +471,6 @@ matmul FSM独热状态 & 2,151 & FDRE \\
|
|||||||
|
|
||||||
\texttt{sys\_clk}的BUFG网络以35,652个负载的扇出位居首位,这在50 MHz设计中不会构成时序问题。值得注意的是ML-KEM内部有两个高扇出网络进入前5名——\texttt{ek\_bram}的延迟寄存器链(24,670扇出)和\texttt{poly\_mul}的加载计数器(3,758扇出),前者源于字节编码器中一个组合使能信号被复制到大量并行路径,后者是多路复用地址总线的经典高扇出场景。这些高扇出网络在50 MHz下均未产生时序违例,但若频率进一步提升,可能需要插入复制寄存器或使用BUFG驱动的全局使能策略进行优化。
|
\texttt{sys\_clk}的BUFG网络以35,652个负载的扇出位居首位,这在50 MHz设计中不会构成时序问题。值得注意的是ML-KEM内部有两个高扇出网络进入前5名——\texttt{ek\_bram}的延迟寄存器链(24,670扇出)和\texttt{poly\_mul}的加载计数器(3,758扇出),前者源于字节编码器中一个组合使能信号被复制到大量并行路径,后者是多路复用地址总线的经典高扇出场景。这些高扇出网络在50 MHz下均未产生时序违例,但若频率进一步提升,可能需要插入复制寄存器或使用BUFG驱动的全局使能策略进行优化。
|
||||||
|
|
||||||
\subsection{系统功耗估计}
|
|
||||||
|
|
||||||
布局布线后系统功耗估计约为0.549 W(总片上功耗),其中动态功耗0.409 W,静态功耗0.141 W。PLL模块是单一功耗最高的组件(0.132 W),其次为信号翻转功耗(0.115 W)和Slice Logic功耗(0.069 W)。
|
|
||||||
|
|
||||||
% ================================================================
|
% ================================================================
|
||||||
\section{结论}
|
\section{结论}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user