doc: update ML-KEM IP design report with latest timing and test data
This commit is contained in:
BIN
doc/reports/logo_cicc.png
Normal file
BIN
doc/reports/logo_cicc.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 63 KiB |
Binary file not shown.
@@ -16,20 +16,25 @@
|
|||||||
\usepackage{fancyhdr}
|
\usepackage{fancyhdr}
|
||||||
\usepackage{tikz}
|
\usepackage{tikz}
|
||||||
\usepackage{enumitem}
|
\usepackage{enumitem}
|
||||||
|
\usepackage[normalem]{ulem}
|
||||||
\usepackage{listings}
|
\usepackage{listings}
|
||||||
\usepackage{xcolor}
|
\usepackage{xcolor}
|
||||||
\usepackage{algorithm}
|
\usepackage{algorithm}
|
||||||
\usepackage{algpseudocode}
|
\usepackage{algpseudocode}
|
||||||
|
|
||||||
% ─── Styling ─────────────────────────────────────────────────
|
% ─── Styling ─────────────────────────────────────────────────
|
||||||
|
\raggedbottom
|
||||||
\hypersetup{colorlinks=true,linkcolor=black,citecolor=black,urlcolor=blue}
|
\hypersetup{colorlinks=true,linkcolor=black,citecolor=black,urlcolor=blue}
|
||||||
\pagestyle{fancy}
|
\pagestyle{fancy}
|
||||||
\fancyhead[LO,RE]{ML-KEM硬件IP设计报告}
|
\fancyhead[LO,RE]{ML-KEM硬件IP设计报告}
|
||||||
\fancyhead[RO,LE]{\thepage}
|
\fancyhead[RO,LE]{\thepage}
|
||||||
\fancyfoot[C]{}
|
\fancyfoot[C]{}
|
||||||
\setlength{\parskip}{6pt plus 2pt minus 1pt}
|
\setlength{\parskip}{4pt plus 2pt minus 1pt}
|
||||||
\setlength{\parindent}{2em}
|
\setlength{\parindent}{2em}
|
||||||
\setlength{\headheight}{14pt}
|
\setlength{\headheight}{14pt}
|
||||||
|
\setlength{\intextsep}{6pt plus 2pt}
|
||||||
|
\setlength{\textfloatsep}{8pt plus 2pt}
|
||||||
|
\captionsetup{skip=4pt}
|
||||||
|
|
||||||
\lstset{basicstyle=\ttfamily\small,breaklines=true,frame=single,numbers=left,numberstyle=\tiny,xleftmargin=2em,language=Verilog}
|
\lstset{basicstyle=\ttfamily\small,breaklines=true,frame=single,numbers=left,numberstyle=\tiny,xleftmargin=2em,language=Verilog}
|
||||||
|
|
||||||
@@ -38,10 +43,44 @@
|
|||||||
|
|
||||||
\title{\textbf{ML-KEM后量子密钥封装硬件IP核\\设计与验证}}
|
\title{\textbf{ML-KEM后量子密钥封装硬件IP核\\设计与验证}}
|
||||||
\author{碳基生物\\[4pt] \small 团队编号:CICC1008439\\[8pt] \normalsize 龙芯中科杯·2026全国大学生集成电路创新创业大赛}
|
\author{碳基生物\\[4pt] \small 团队编号:CICC1008439\\[8pt] \normalsize 龙芯中科杯·2026全国大学生集成电路创新创业大赛}
|
||||||
\date{\today}
|
\date{}
|
||||||
|
|
||||||
\begin{document}
|
\begin{document}
|
||||||
|
|
||||||
|
% ================================================================
|
||||||
|
% 封 面
|
||||||
|
% ================================================================
|
||||||
|
\begin{titlepage}
|
||||||
|
\thispagestyle{empty}
|
||||||
|
\begin{center}
|
||||||
|
|
||||||
|
\vspace*{30pt}
|
||||||
|
|
||||||
|
\includegraphics[width=0.45\textwidth]{logo_cicc.png}
|
||||||
|
|
||||||
|
\vspace{36pt}
|
||||||
|
|
||||||
|
{\fontsize{22pt}{28pt}\selectfont\bfseries 第十届}
|
||||||
|
|
||||||
|
\vspace{4pt}
|
||||||
|
|
||||||
|
{\fontsize{22pt}{28pt}\selectfont\bfseries 全国大学生集成电路创新创业大赛}
|
||||||
|
|
||||||
|
\end{center}
|
||||||
|
|
||||||
|
\vspace{80pt}
|
||||||
|
|
||||||
|
\begin{flushleft}
|
||||||
|
\fontsize{14pt}{22pt}\selectfont
|
||||||
|
报告类型:\uline{\hfill MLKEM IP设计报告\hfill} \\[18pt]
|
||||||
|
参赛杯赛:\uline{\hfill 龙芯中科杯\hfill} \\[18pt]
|
||||||
|
作品名称:\uline{\hfill ML-KEM后量子密钥封装硬件IP核设计与验证\hfill} \\[18pt]
|
||||||
|
队伍编号:\uline{\hfill CICC1008439\hfill} \\[18pt]
|
||||||
|
团队名称:\uline{\hfill 碳基生物\hfill}
|
||||||
|
\end{flushleft}
|
||||||
|
|
||||||
|
\end{titlepage}
|
||||||
|
|
||||||
\maketitle
|
\maketitle
|
||||||
\tableofcontents
|
\tableofcontents
|
||||||
\newpage
|
\newpage
|
||||||
@@ -51,9 +90,9 @@
|
|||||||
|
|
||||||
\subsection{设计背景}
|
\subsection{设计背景}
|
||||||
|
|
||||||
ML-KEM(Module-Lattice-based Key-Encapsulation Mechanism,FIPS 203)是NIST于2024年8月发布的后量子密码标准,用于替代RSA和ECC在密钥交换中的角色。其安全性建立在模格上的带误差学习问题(MLWE)之上,多项式环为$\Zq[x]/(x^{256}+1)$,素数模$q=3329$,多项式次数$n=256$。
|
ML-KEM(Module-Lattice-based Key-Encapsulation Mechanism,FIPS 203 \cite{fips203})是NIST于2024年8月发布的后量子密码标准,源自CRYSTALS-Kyber \cite{kyber},用于替代RSA和ECC在密钥交换中的角色。其安全性建立在模格上的带误差学习问题(MLWE)之上,多项式环为$\Zq[x]/(x^{256}+1)$,素数模$q=3329$,多项式次数$n=256$。
|
||||||
|
|
||||||
软件实现的ML-KEM在嵌入式处理器上存在显著性能瓶颈——以ML-KEM-768为例,一轮完整的密钥生成、封装和解封装在通用CPU上需要数百万个时钟周期。本文设计的硬件IP核\texttt{mlkem\_top}旨在通过专用数据通路和计算资源时分复用,在FPGA平台上实现高性能、低面积的ML-KEM加速。
|
软件实现的ML-KEM在嵌入式处理器上存在显著性能瓶颈 \cite{dang2022,xing2023}——以ML-KEM-768为例,一轮完整的密钥生成、封装和解封装在通用CPU上需要数百万个时钟周期。本文设计的硬件IP核\texttt{mlkem\_top}旨在通过专用数据通路和计算资源时分复用,在FPGA平台上实现高性能、低面积的ML-KEM加速。
|
||||||
|
|
||||||
\subsection{关键设计特性}
|
\subsection{关键设计特性}
|
||||||
|
|
||||||
@@ -79,7 +118,7 @@ RTL代码总计约5,517行(不含测试平台),其中\texttt{mlkem\_top.v}
|
|||||||
|
|
||||||
\texttt{mlkem\_top}的运行时参数由输入端口$k\_i$和$op\_i$在\texttt{start\_i}脉冲时刻锁存至内部寄存器$k\_r$和$op\_r$,后续所有数据通路宽度、存储子区间基地址和循环次数均由$k\_r$推导。表\ref{tab:params}列出三种安全等级的密钥和密文尺寸。
|
\texttt{mlkem\_top}的运行时参数由输入端口$k\_i$和$op\_i$在\texttt{start\_i}脉冲时刻锁存至内部寄存器$k\_r$和$op\_r$,后续所有数据通路宽度、存储子区间基地址和循环次数均由$k\_r$推导。表\ref{tab:params}列出三种安全等级的密钥和密文尺寸。
|
||||||
|
|
||||||
\begin{table}[H]
|
\begin{table}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\caption{运行时安全等级参数}
|
\caption{运行时安全等级参数}
|
||||||
\label{tab:params}
|
\label{tab:params}
|
||||||
@@ -100,7 +139,7 @@ $k\_i$ & 方案 & $K$ & $\eta_1$ & $(d_u,d_v)$ & ek(B) & dk(B) & ct(B) \\
|
|||||||
|
|
||||||
\texttt{mlkem\_top}的端口按功能分为四组。表\ref{tab:ports}列出主要信号。
|
\texttt{mlkem\_top}的端口按功能分为四组。表\ref{tab:ports}列出主要信号。
|
||||||
|
|
||||||
\begin{table}[H]
|
\begin{table}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\caption{mlkem\_top主要端口}
|
\caption{mlkem\_top主要端口}
|
||||||
\label{tab:ports}
|
\label{tab:ports}
|
||||||
@@ -109,7 +148,7 @@ $k\_i$ & 方案 & $K$ & $\eta_1$ & $(d_u,d_v)$ & ek(B) & dk(B) & ct(B) \\
|
|||||||
\toprule
|
\toprule
|
||||||
\textbf{信号} & \textbf{位宽} & \textbf{功能} \\
|
\textbf{信号} & \textbf{位宽} & \textbf{功能} \\
|
||||||
\midrule
|
\midrule
|
||||||
clk, rst\_n & 1, 1 & 时钟(25 MHz)与低电平异步复位 \\
|
clk, rst\_n & 1, 1 & 时钟与低电平异步复位 \\
|
||||||
k\_i, op\_i & 3, 2 & 安全等级(2/3/4)与操作码(0=KG, 1=Enc, 2=Dec) \\
|
k\_i, op\_i & 3, 2 & 安全等级(2/3/4)与操作码(0=KG, 1=Enc, 2=Dec) \\
|
||||||
d\_i, z\_i, msg\_i & 256×3 & KeyGen种子$d$、隐式拒绝种子$z$、Encaps消息$m$ \\
|
d\_i, z\_i, msg\_i & 256×3 & KeyGen种子$d$、隐式拒绝种子$z$、Encaps消息$m$ \\
|
||||||
start\_i & 1 & 启动脉冲,锁存$k\_i$和$op\_i$ \\
|
start\_i & 1 & 启动脉冲,锁存$k\_i$和$op\_i$ \\
|
||||||
@@ -144,9 +183,9 @@ Decaps私钥预装载路径中,\texttt{dk\_in\_*}端口根据写入地址自
|
|||||||
|
|
||||||
图\ref{fig:mlkem_modules}给出\texttt{mlkem\_top}的内部层次结构。设计分为三个逻辑层:控制调度层(FSM + 地址生成 + 数据通路复用)、算子计算层(7个已验证的叶子模块)和存储层(7个BRAM实例)。
|
图\ref{fig:mlkem_modules}给出\texttt{mlkem\_top}的内部层次结构。设计分为三个逻辑层:控制调度层(FSM + 地址生成 + 数据通路复用)、算子计算层(7个已验证的叶子模块)和存储层(7个BRAM实例)。
|
||||||
|
|
||||||
\begin{figure}[H]
|
\begin{figure}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[width=\textwidth]{mlkem_modules.png}
|
\includegraphics[width=0.92\textwidth]{mlkem_modules.png}
|
||||||
\caption{mlkem\_top内部三层模块结构}
|
\caption{mlkem\_top内部三层模块结构}
|
||||||
\label{fig:mlkem_modules}
|
\label{fig:mlkem_modules}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
@@ -155,9 +194,9 @@ Decaps私钥预装载路径中,\texttt{dk\_in\_*}端口根据写入地址自
|
|||||||
|
|
||||||
全部运算由5-bit状态机集中调度,从\texttt{ST\_IDLE}出发按$op\_r$分支为三条数据通路。图\ref{fig:fsm}给出状态转移图。
|
全部运算由5-bit状态机集中调度,从\texttt{ST\_IDLE}出发按$op\_r$分支为三条数据通路。图\ref{fig:fsm}给出状态转移图。
|
||||||
|
|
||||||
\begin{figure}[H]
|
\begin{figure}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[width=\textwidth]{fsm.png}
|
\includegraphics[width=0.92\textwidth]{fsm.png}
|
||||||
\caption{mlkem\_top顶层FSM状态转移图}
|
\caption{mlkem\_top顶层FSM状态转移图}
|
||||||
\label{fig:fsm}
|
\label{fig:fsm}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
@@ -220,24 +259,24 @@ Decaps路径对应FIPS 203算法18,前5个主状态完成D1--D5步解密恢复
|
|||||||
|
|
||||||
\subsection{Keccak-f[1600]置换核与哈希族}
|
\subsection{Keccak-f[1600]置换核与哈希族}
|
||||||
|
|
||||||
\texttt{keccak\_core}模块实现24轮连续Keccak-f[1600]置换,内部结构为简单的迭代流水线:1600-bit状态寄存器$\rightarrow$组合\texttt{keccak\_round}$\rightarrow$写回状态寄存器。\texttt{keccak\_round}为纯组合逻辑,实现Keccak的$\theta/\rho/\pi/\chi/\iota$五步映射,其中$\theta$步的5路XOR归约和$\chi$步的非线性变换是面积消耗的主要来源。
|
\texttt{keccak\_core}模块实现24轮连续Keccak-f[1600]置换,内部结构为简单的迭代流水线:1600-bit状态寄存器$\rightarrow$组合\texttt{keccak\_round}$\rightarrow$写回状态寄存器。\texttt{keccak\_round}为纯组合逻辑,实现Keccak \cite{fips202} 的$\theta/\rho/\pi/\chi/\iota$五步映射,其中$\theta$步的5路XOR归约和$\chi$步的非线性变换是面积消耗的主要来源。
|
||||||
|
|
||||||
\begin{figure}[H]
|
\begin{figure}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[width=\textwidth]{keccak_core.png}
|
\includegraphics[width=0.92\textwidth]{keccak_core.png}
|
||||||
\caption{Keccak-f[1600]核数据通路与共享机制}
|
\caption{Keccak-f[1600]核数据通路与共享机制}
|
||||||
\label{fig:keccak_core}
|
\label{fig:keccak_core}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
\texttt{sha3\_top\_shared}模块在\texttt{keccak\_core}之上封装了SHA3/SHAKE协议层,包括1088-bit速率域/512-bit容量域的填充、domain separator拼接(SHA3末尾\texttt{01}、SHAKE末尾\texttt{1111})以及多块顺序吸收的状态管理。支持三种模式:SHA3-512($G$函数,单块64字节吸收)、SHA3-256($H$函数,多块吸收,块数$=\lceil(ek\_bytes+1)/136\rceil$)和SHAKE-256($J$函数和PRF派生)。
|
\texttt{sha3\_top\_shared}模块在\texttt{keccak\_core}之上封装了SHA3/SHAKE协议层,包括1088-bit速率域/512-bit容量域的填充、domain separator拼接(SHA3末尾\texttt{01}、SHAKE末尾\texttt{1111})以及多块顺序吸收的状态管理。支持三种模式:SHA3-512($G$函数,单块64字节吸收)、SHA3-256($H$函数,多块吸收,块数$=\lceil(ek\_bytes+1)/136\rceil$)和SHAKE-256($J$函数和PRF派生)。
|
||||||
|
|
||||||
\textbf{共享Keccak的复用机制}通过两级多路选择实现。输入侧:三个消费者的1600-bit状态和\texttt{valid}信号经\texttt{sel\_*}信号选择后送入\texttt{keccak\_core};选择信号由FSM状态直接推导(例如\texttt{sel\_snt = (st==ST\_A || st==ST\_ENC\_A)})。输出侧:\texttt{keccak\_core}的置换结果和\texttt{valid\_o}广播至所有消费者,各消费者内部仅在自己激活的上下文中采样,天然实现了无冲突分派。此复用方案将Keccak的硬件开销从三份实例(约16,000 LUT)降至一份(约5,300 LUT),是IP核面积仅为25.5\% LUT利用率的关键设计决策。
|
\textbf{共享Keccak的复用机制}通过两级多路选择实现。输入侧:三个消费者的1600-bit状态和\texttt{valid}信号经\texttt{sel\_*}信号选择后送入\texttt{keccak\_core};选择信号由FSM状态直接推导(例如\texttt{sel\_snt = (st==ST\_A || st==ST\_ENC\_A)})。输出侧:\texttt{keccak\_core}的置换结果和\texttt{valid\_o}广播至所有消费者,各消费者内部仅在自己激活的上下文中采样,天然实现了无冲突分派。此复用方案将Keccak的硬件开销从三份实例(约16,000 LUT)降至一份(约5,300 LUT)。
|
||||||
|
|
||||||
\subsection{NTT核}
|
\subsection{NTT核}
|
||||||
|
|
||||||
\texttt{ntt\_core}模块实现256点前向/逆向数论变换,采用单蝶形流水线加256$\times$12-bit寄存器阵列的架构。图\ref{fig:ntt_core}给出数据通路与控制状态机。
|
\texttt{ntt\_core}模块实现256点前向/逆向数论变换,采用单蝶形流水线加256$\times$12-bit寄存器阵列的架构。图\ref{fig:ntt_core}给出数据通路与控制状态机。
|
||||||
|
|
||||||
\begin{figure}[H]
|
\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.]
|
% [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.]
|
||||||
\caption{NTT核数据通路与控制状态机}
|
\caption{NTT核数据通路与控制状态机}
|
||||||
@@ -256,9 +295,9 @@ NTT的7层蝶形网络按Cooley-Tukey位反转置换顺序执行。每层内128
|
|||||||
|
|
||||||
\texttt{poly\_mul\_sync}实现NTT域两个多项式的逐点乘法,即对128个系数对$(a_0,a_1)$和$(b_0,b_1)$按$c_0=a_0b_0+a_1b_1\zeta\bmod q$和$c_1=a_0b_1+a_1b_0\bmod q$计算。内部调度为三阶段:LOAD(256个系数,每周期一对)$\rightarrow$ RUN(128次basecase,每次2周期)$\rightarrow$ OUTPUT(256个系数)。
|
\texttt{poly\_mul\_sync}实现NTT域两个多项式的逐点乘法,即对128个系数对$(a_0,a_1)$和$(b_0,b_1)$按$c_0=a_0b_0+a_1b_1\zeta\bmod q$和$c_1=a_0b_1+a_1b_0\bmod q$计算。内部调度为三阶段:LOAD(256个系数,每周期一对)$\rightarrow$ RUN(128次basecase,每次2周期)$\rightarrow$ OUTPUT(256个系数)。
|
||||||
|
|
||||||
\texttt{basecase\_mul}为纯组合逻辑,数据通路包含5个\texttt{barrett\_mul}实例。$c_0$路径串联两次Barrett模乘(先算$a_1b_1\bmod q$,再算$(a_1b_1)\zeta\bmod q$)再加$a_0b_0\bmod q$,在50 MHz约束下构成关键路径(70逻辑级、约52 ns)。
|
\texttt{basecase\_mul}内部数据通路包含5个\texttt{barrett\_mul\_pipe}流水线实例。$c_0$路径串联两次Barrett模乘(先算$a_1b_1\bmod q$,再算$(a_1b_1)\zeta\bmod q$)再加$a_0b_0\bmod q$,在当前工作频率下不构成时序瓶颈。
|
||||||
|
|
||||||
\texttt{barrett\_mul}基于恒等式$a\cdot b\bmod q\approx(a\cdot b\cdot\lfloor 2^{24}/q\rfloor)\gg 24$实现模约简。对于$q=3329$,$\lfloor 2^{24}/3329\rfloor=5039$。实现流程为:计算$p=a\cdot b$(24-bit乘积)$\rightarrow$计算$qe=(p\cdot 5039)\gg 24$(商估计)$\rightarrow$计算$r=p-qe\cdot 3329$(余数估计)$\rightarrow$两次条件减$q$修正(保证$r<q$)。当前实现为纯组合逻辑,在25 MHz集成频率下不构成时序违例。关于流水线化改造以支持50 MHz的讨论见第\ref{sec:timing}节。
|
\texttt{barrett\_mul} \cite{barrett} 基于恒等式$a\cdot b\bmod q\approx(a\cdot b\cdot\lfloor 2^{24}/q\rfloor)\gg 24$实现模约简。对于$q=3329$,$\lfloor 2^{24}/3329\rfloor=5039$。实现流程为:计算$p=a\cdot b$(24-bit乘积)$\rightarrow$计算$qe=(p\cdot 5039)\gg 24$(商估计)$\rightarrow$计算$r=p-qe\cdot 3329$(余数估计)$\rightarrow$两次条件减$q$修正(保证$r<q$)。该模块已通过流水线化改造支持高频率工作。
|
||||||
|
|
||||||
\subsection{采样模块}
|
\subsection{采样模块}
|
||||||
|
|
||||||
@@ -276,7 +315,7 @@ NTT的7层蝶形网络按Cooley-Tukey位反转置换顺序执行。每层内128
|
|||||||
|
|
||||||
三系数存储库是数据通路的交换中枢,全部基于\texttt{sd\_bram}(1R/1W、1周期寄存读延迟,综合为Block RAM)。表\ref{tab:banks}列出配置和内容。
|
三系数存储库是数据通路的交换中枢,全部基于\texttt{sd\_bram}(1R/1W、1周期寄存读延迟,综合为Block RAM)。表\ref{tab:banks}列出配置和内容。
|
||||||
|
|
||||||
\begin{table}[H]
|
\begin{table}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\small
|
\small
|
||||||
\caption{多项式系数存储库配置}
|
\caption{多项式系数存储库配置}
|
||||||
@@ -312,11 +351,11 @@ bank\_t & 12-bit $\times$ 1024 & 1 $\times$ RAMB18 & $\hat{t}$、MAC累加和
|
|||||||
\item \textbf{系统级诊断}:在SoC集成环境中,通过CPU寄存器路径和DMA窗口路径各执行100次迭代,验证硬件与软件参考实现的一致性及数据传输路径的正确性。
|
\item \textbf{系统级诊断}:在SoC集成环境中,通过CPU寄存器路径和DMA窗口路径各执行100次迭代,验证硬件与软件参考实现的一致性及数据传输路径的正确性。
|
||||||
\end{enumerate}
|
\end{enumerate}
|
||||||
|
|
||||||
\subsection{测试平台与黄金向量}
|
\subsection{测试平台与KAT测试向量}
|
||||||
|
|
||||||
表\ref{tab:tbs}列出全部操作级和系统级测试平台。参数化测试平台通过XSIM的\texttt{xelab -generic\_top K=n}选项编译安全等级,通过\texttt{+CASE=n}运行时选项选择KAT用例编号。
|
表\ref{tab:tbs}列出全部操作级和系统级测试平台。参数化测试平台通过XSIM的\texttt{xelab -generic\_top K=n}选项编译安全等级,通过\texttt{+CASE=n}运行时选项选择KAT用例编号。
|
||||||
|
|
||||||
\begin{table}[H]
|
\begin{table}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\caption{测试平台清单}
|
\caption{测试平台清单}
|
||||||
\label{tab:tbs}
|
\label{tab:tbs}
|
||||||
@@ -334,7 +373,7 @@ mlkem\_test (SoC) & CPU/DMA & K=2/3/4 & KAT count=0确定性输入 \\
|
|||||||
\end{tabular}
|
\end{tabular}
|
||||||
\end{table}
|
\end{table}
|
||||||
|
|
||||||
黄金向量来自NIST FIPS 203的KAT响应文件,由Python脚本解析为每用例独立的hex文件。每个KAT用例包含种子$d$、$z$、$m$以及期望的$ek$、$dk$、$c$和共享密钥。Decaps测试额外包含$ct\_n$(伪造密文)和$ss\_n$(对应拒绝路径输出),用于验证隐式拒绝机制(Decaps在$c'\neq c$时输出$J(z\|c)$而非$K'$)。
|
KAT测试向量来自NIST FIPS 203的KAT响应文件,由Python脚本解析为每用例独立的hex文件。每个KAT用例包含种子$d$、$z$、$m$以及期望的$ek$、$dk$、$c$和共享密钥。Decaps测试额外包含$ct\_n$(伪造密文)和$ss\_n$(对应拒绝路径输出),用于验证隐式拒绝机制(Decaps在$c'\neq c$时输出$J(z\|c)$而非$K'$)。
|
||||||
|
|
||||||
Decaps的KAT测试平台还通过\texttt{dbg\_*}调试抽头逐阶段(D0--D7)验证中间量,包括$\rho/\sigma/r$等哈希输出、D1解压缩结果、D3减法中间值、D4恢复消息$m'$等,确保问题可精确定位到具体计算步骤。
|
Decaps的KAT测试平台还通过\texttt{dbg\_*}调试抽头逐阶段(D0--D7)验证中间量,包括$\rho/\sigma/r$等哈希输出、D1解压缩结果、D3减法中间值、D4恢复消息$m'$等,确保问题可精确定位到具体计算步骤。
|
||||||
|
|
||||||
@@ -342,90 +381,97 @@ Decaps的KAT测试平台还通过\texttt{dbg\_*}调试抽头逐阶段(D0--D7
|
|||||||
|
|
||||||
SoC诊断程序\texttt{mlkem\_test}实现三条独立测试路径:
|
SoC诊断程序\texttt{mlkem\_test}实现三条独立测试路径:
|
||||||
|
|
||||||
\textbf{软件参考路径}在33 MHz Loongson CPU上运行纯C语言ML-KEM实现,记录各阶段周期数作为加速比的基准,并验证结果自洽性与黄金向量一致性。
|
\textbf{软件参考路径}在33 MHz Loongson CPU上运行纯C语言ML-KEM实现,记录各阶段周期数作为加速比的基准,并验证结果自洽性与KAT标准答案一致性。
|
||||||
|
|
||||||
\textbf{CPU寄存器路径}通过AXI寄存器接口直接控制IP核:写入CONFIG配置、通过D[0..7]/Z[0..7]写入种子、通过PRE\_SEL/ADR/DAT序列逐字节预装载公钥/私钥/密文、写CTRL.start启动、轮询STATUS.done、通过RDB\_SEL/ADR/DAT读回结果。该路径验证了IP核的AXI从机接口逻辑和寄存器级控制流的正确性。
|
\textbf{CPU寄存器路径}通过AXI寄存器接口直接控制IP核:写入CONFIG配置、通过D[0..7]/Z[0..7]写入种子、通过PRE\_SEL/ADR/DAT序列逐字节预装载公钥/私钥/密文、写CTRL.start启动、轮询STATUS.done、通过RDB\_SEL/ADR/DAT读回结果。该路径验证了IP核的AXI从机接口逻辑和寄存器级控制流的正确性。
|
||||||
|
|
||||||
\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})和黄金向量一致性。
|
每种路径对每个安全等级执行100次迭代,记录自洽性(\texttt{ss\_enc == ss\_dec})和KAT标准答案一致性。
|
||||||
|
|
||||||
% ================================================================
|
% ================================================================
|
||||||
\section{实现结果与测试数据}
|
\section{实现结果与测试数据}
|
||||||
|
|
||||||
\subsection{FPGA资源利用}
|
\subsection{FPGA资源利用}
|
||||||
|
|
||||||
ML-KEM IP核在Xilinx Artix-7 \texttt{xc7a200tfbg676-1}上完成布局布线后的独立资源利用如表\ref{tab:mlkem_util}所示。
|
ML-KEM IP核在Xilinx Artix-7 \cite{artix7} \texttt{xc7a200tfbg676-1}上完成布局布线后的独立资源利用如表\ref{tab:mlkem_util}所示。数据来自Vivado \cite{vivado} 2019.2布局布线后报告。
|
||||||
|
|
||||||
\begin{table}[H]
|
\begin{table}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\caption{mlkem\_top布局布线后资源利用(25 MHz集成频率)}
|
\caption{mlkem\_top布局布线后资源利用}
|
||||||
\label{tab:mlkem_util}
|
\label{tab:mlkem_util}
|
||||||
\begin{tabular}{lccc}
|
\begin{tabular}{lccc}
|
||||||
\toprule
|
\toprule
|
||||||
\textbf{资源} & \textbf{已用} & \textbf{可用} & \textbf{利用率} \\
|
\textbf{资源} & \textbf{已用} & \textbf{可用} & \textbf{利用率} \\
|
||||||
\midrule
|
\midrule
|
||||||
Slice LUTs & 31,884 & 133,800 & 23.8\% \\
|
Slice LUTs & 21,697 & 133,800 & 16.2\% \\
|
||||||
Slice FFs & 24,736 & 267,600 & 9.2\% \\
|
Slice FFs & 15,826 & 267,600 & 5.9\% \\
|
||||||
Block RAM Tile & 5.5 & 365 & 1.5\% \\
|
Block RAM Tile & 9.0 & 365 & 2.5\% \\
|
||||||
|
~~RAMB36E1 & 2 & 365 & 0.5\% \\
|
||||||
|
~~RAMB18E1 & 14 & 730 & 1.9\% \\
|
||||||
DSP48E1 & 0 & 740 & 0.0\% \\
|
DSP48E1 & 0 & 740 & 0.0\% \\
|
||||||
\bottomrule
|
\bottomrule
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
\end{table}
|
\end{table}
|
||||||
|
|
||||||
DSP使用量为零体现了设计的主动约束——所有乘法(包括NTT蝶形中的Barrett模乘和\texttt{basecase\_mul}中的乘法)均强制映射至LUT和CARRY4逻辑,不消耗任何DSP48E1资源。该约束的动机是规避早期XSIM仿真中DSP48行为模型的不一致问题,代价是关键路径中的乘法延迟增加(见第\ref{sec:timing}节)。
|
DSP使用量为零体现了设计的主动约束——所有乘法均强制映射至LUT和CARRY4逻辑,不消耗任何DSP48E1资源。ntt\_core和poly\_mul\_sync的系数存储使用Block RAM(合计8个RAMB18E1),避免了大量LUTRAM的消耗,使ML-KEM在无DSP约束下仍将LUT利用率控制在16.2\%。
|
||||||
|
|
||||||
表\ref{tab:modules_util}给出布局布线后的子模块级资源分解。
|
表\ref{tab:modules_util}给出布局布线后的子模块级资源分解。
|
||||||
|
|
||||||
\begin{table}[H]
|
\begin{table}[htbp]
|
||||||
\centering
|
\centering
|
||||||
|
\small
|
||||||
\caption{mlkem\_top主要子模块资源利用}
|
\caption{mlkem\_top主要子模块资源利用}
|
||||||
\label{tab:modules_util}
|
\label{tab:modules_util}
|
||||||
\begin{tabular}{lcc}
|
\begin{tabular}{lcccr}
|
||||||
\toprule
|
\toprule
|
||||||
\textbf{子模块} & \textbf{LUT} & \textbf{FF} \\
|
\textbf{子模块} & \textbf{LUT} & \textbf{FF} & \textbf{BRAM} & \textbf{DSP} \\
|
||||||
\midrule
|
\midrule
|
||||||
ntt\_core (含蝶形流水线与Barrett) & 8,625 & 3,861 \\
|
keccak\_core (Keccak-f[1600]置换核) & 5,258 & 1,618 & 0 & 0 \\
|
||||||
keccak\_core (Keccak-f[1600]置换核) & 5,274 & 1,606 \\
|
sample\_cbd\_sync\_shared & 2,739 & 3,186 & 0 & 0 \\
|
||||||
poly\_mul\_sync (含basecase\_mul) & 3,881 & 6,743 \\
|
sample\_ntt\_sync\_shared & 2,109 & 1,669 & 0 & 0 \\
|
||||||
sample\_cbd\_sync\_shared & 2,741 & 3,186 \\
|
poly\_mul\_sync (含basecase\_mul) & 2,058 & 584 & 4 RAMB18 & 0 \\
|
||||||
sample\_ntt\_sync\_shared & 2,109 & 1,669 \\
|
sha3\_top\_shared (哈希族封装) & 1,955 & 2,378 & 0 & 0 \\
|
||||||
sha3\_top\_shared (哈希族封装) & 1,766 & 2,388 \\
|
ntt\_core (蝶形流水线+系数存储) & 1,900 & 1,062 & 4 RAMB18 & 0 \\
|
||||||
comp\_decomp\_sync & 467 & 323 \\
|
comp\_decomp\_sync & 620 & 319 & 0 & 0 \\
|
||||||
存储库及胶合逻辑 & 4,302 & 0 \\
|
系数存储BRAM(bank\_a/se/t) & 974 & 0 & 1 RAMB36 + 2 RAMB18 & 0 \\
|
||||||
其它(FSM/多路复用/地址生成/顶层连线)& 2,719 & 4,960 \\
|
字节BRAM(ek/dkp/ct/c\_in) & 2,600 & 0 & 4 RAMB18 & 0 \\
|
||||||
|
其它(FSM/多路复用/顶层连线) & 1,484 & 5,010 & 0 & 0 \\
|
||||||
\midrule
|
\midrule
|
||||||
\textbf{合计} & \textbf{31,884} & \textbf{24,736} \\
|
\textbf{合计} & \textbf{21,697} & \textbf{15,826} & \textbf{2 RAMB36 + 14 RAMB18} & \textbf{0} \\
|
||||||
\bottomrule
|
\bottomrule
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
\end{table}
|
\end{table}
|
||||||
|
|
||||||
NTT核是最大的单一逻辑单元(8,625 LUT),主要由256系数寄存器阵列和7级深流水Barrett蝶形单元贡献。Keccak核(5,274 LUT)的1600-bit状态寄存器和5路并行置换逻辑构成第二大开销。多项式乘法模块虽LUT适中(3,881),但FF数量最高(6,743),主要因其内部\texttt{basecase\_mul}的串行双Barrett乘积累加寄存器阵列。
|
Keccak核以5,258 LUT位居子模块面积首位,其1600-bit状态寄存器和$\theta/\rho/\pi/\chi/\iota$五步全组合置换逻辑的宽数据通路是面积消耗的主要来源——若采用非共享方案,三份独立实例的累计开销将超过16,000 LUT。ntt\_core的系数存储采用4个RAMB18E1 Block RAM实现256$\times$12-bit寄存器文件,将与此相关的LUT和FF开销压缩至接近零。poly\_mul\_sync同样使用4个RAMB18E1进行数据缓冲。合计14个RAMB18E1(含系数存储bank\_a/se/t和字节存储ek/dkp/ct/c\_in)用于全部系数和中间数据的片上存储,充分体现了BRAM在数据密集型计算通路中的面积优势。
|
||||||
|
|
||||||
\subsection{时序性能}\label{sec:timing}
|
\subsection{时序性能}\label{sec:timing}
|
||||||
|
|
||||||
表\ref{tab:timing}列出布局布线后的时序收敛情况。ML-KEM IP工作于25 MHz的独立时钟域(PLL CLKOUT2输出,周期40 ns)。
|
表\ref{tab:timing}列出布局布线后的时序收敛情况。ML-KEM IP通过CDC工作于独立的\texttt{mlkem\_clk}时钟域,与系统总线域(\texttt{sys\_clk},50 MHz)异步隔离。
|
||||||
|
|
||||||
\begin{table}[H]
|
\begin{table}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\caption{布局布线后时序收敛结果(25 MHz集成频率)}
|
\caption{布局布线后时序收敛结果}
|
||||||
\label{tab:timing}
|
\label{tab:timing}
|
||||||
\begin{tabular}{lccc}
|
\begin{tabular}{lccr}
|
||||||
\toprule
|
\toprule
|
||||||
\textbf{时钟域} & \textbf{Setup WNS} & \textbf{违例端点} & \textbf{最大可行频率} \\
|
\textbf{时钟域} & \textbf{周期} & \textbf{Setup WNS} & \textbf{违例端点} \\
|
||||||
\midrule
|
\midrule
|
||||||
mlkem\_clk (25 MHz) & +10.807 ns & 0 & $\approx$ 34.3 MHz \\
|
mlkem\_clk & 13 ns & +0.070 ns & 0 / 31,646 \\
|
||||||
|
sys\_clk & 20 ns & +0.125 ns & 0 / 22,307 \\
|
||||||
\bottomrule
|
\bottomrule
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
\end{table}
|
\end{table}
|
||||||
|
|
||||||
\texttt{mlkem\_clk}域的+10.807 ns正余量表明,在25 MHz下所有路径延迟远小于40 ns的时钟周期。最差路径位于\texttt{sha3\_mb\_en0}高扇出网络(驱动936个负载),路由延迟(28.345 ns)占路径总延迟(29.049 ns)的97.6\%,逻辑延迟仅0.704 ns(2级LUT)。
|
ML-KEM IP在13 ns的严格时序约束下通过收敛(WNS +0.070 ns)。关键路径位于\texttt{ntt\_core}内部蝶形单元的Barrett流水线数据通路。\texttt{sys\_clk}域(50 MHz)同样时序收敛。两个时钟域之间通过异步时钟组约束正确隔离,CDC跨域路径slack充裕($>+4.8$ ns)。
|
||||||
|
|
||||||
|
值得注意的是,当前的频率瓶颈主要来自SoC整体布局布线带来的拥塞效应——ML-KEM模块与CPU、DMA、matmul等模块共享同一FPGA器件,跨模块的长距离走线显著增加了路径延迟。将\texttt{mlkem\_top}单独进行OOC综合(脱离SoC约束)时,该模块可在约8.3 ns的路径延迟下稳定工作,对应频率约120 MHz。这表明ML-KEM IP自身的时序裕量充足,当前SoC集成环境下的频率上限并非模块设计本身的固有限制。
|
||||||
|
|
||||||
\subsection{功耗分析}
|
\subsection{功耗分析}
|
||||||
|
|
||||||
布局布线后功耗估计如表\ref{tab:power}所示。ML-KEM IP核的片上功耗约0.115 W(动态),占SoC总动态功耗(0.409 W)的28.1\%。
|
布局布线后功耗估计如表\ref{tab:power}所示。ML-KEM IP核的片上功耗约0.115 W(动态),占SoC总动态功耗(0.409 W)的28.1\%。
|
||||||
|
|
||||||
\begin{table}[H]
|
\begin{table}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\caption{ML-KEM IP功耗估计(布局布线后,典型工艺角)}
|
\caption{ML-KEM IP功耗估计(布局布线后,典型工艺角)}
|
||||||
\label{tab:power}
|
\label{tab:power}
|
||||||
@@ -435,7 +481,7 @@ mlkem\_clk (25 MHz) & +10.807 ns & 0 & $\approx$ 34.3 MHz \\
|
|||||||
\midrule
|
\midrule
|
||||||
Slice Logic & 0.046 & LUT翻转 + FF时钟功耗 \\
|
Slice Logic & 0.046 & LUT翻转 + FF时钟功耗 \\
|
||||||
Signals & 0.052 & 互联线翻转功耗 \\
|
Signals & 0.052 & 互联线翻转功耗 \\
|
||||||
Block RAM & 0.017 & 7个BRAM实例的读写功耗 \\
|
Block RAM & 0.017 & 14个RAMB18 + 2个RAMB36的读写功耗 \\
|
||||||
\midrule
|
\midrule
|
||||||
\textbf{ML-KEM合计} & \textbf{0.115} & 占SoC动态功耗28.1\% \\
|
\textbf{ML-KEM合计} & \textbf{0.115} & 占SoC动态功耗28.1\% \\
|
||||||
\bottomrule
|
\bottomrule
|
||||||
@@ -448,7 +494,7 @@ Block RAM & 0.017 & 7个BRAM实例的读写功耗 \\
|
|||||||
|
|
||||||
表\ref{tab:kat_results}汇总全部安全等级和操作的KAT验证结果。
|
表\ref{tab:kat_results}汇总全部安全等级和操作的KAT验证结果。
|
||||||
|
|
||||||
\begin{table}[H]
|
\begin{table}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\caption{KAT验证结果汇总}
|
\caption{KAT验证结果汇总}
|
||||||
\label{tab:kat_results}
|
\label{tab:kat_results}
|
||||||
@@ -470,13 +516,13 @@ Decaps隐式拒绝路径 & PASS & PASS & PASS & 100/级 & 100\% \\
|
|||||||
|
|
||||||
SoC集成诊断测试在ML-KEM-768条件下对三种数据路径各执行100次迭代,结果如表\ref{tab:diag}所示。
|
SoC集成诊断测试在ML-KEM-768条件下对三种数据路径各执行100次迭代,结果如表\ref{tab:diag}所示。
|
||||||
|
|
||||||
\begin{table}[H]
|
\begin{table}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\caption{系统级诊断测试结果(ML-KEM-768,100次迭代)}
|
\caption{系统级诊断测试结果(ML-KEM-768,100次迭代)}
|
||||||
\label{tab:diag}
|
\label{tab:diag}
|
||||||
\begin{tabular}{lccc}
|
\begin{tabular}{lccc}
|
||||||
\toprule
|
\toprule
|
||||||
\textbf{测试路径} & \textbf{失败次数} & \textbf{自洽性通过率} & \textbf{黄金向量通过率} \\
|
\textbf{测试路径} & \textbf{失败次数} & \textbf{自洽性通过率} & \textbf{KAT通过率} \\
|
||||||
\midrule
|
\midrule
|
||||||
SW(纯软件参考) & 0 & 100\% & 100\% \\
|
SW(纯软件参考) & 0 & 100\% & 100\% \\
|
||||||
CPU寄存器路径 & 0 & 100\% & 100\% \\
|
CPU寄存器路径 & 0 & 100\% & 100\% \\
|
||||||
@@ -489,7 +535,7 @@ DMA窗口路径 & 0 & 100\% & 100\% \\
|
|||||||
|
|
||||||
表\ref{tab:perf}列出三种安全等级下软件参考、CPU寄存器路径和DMA窗口路径完成一轮完整往返(KeyGen+Encaps+Decaps)的平均时钟周期数及加速比。数据来自SoC实际运行的100次迭代统计。
|
表\ref{tab:perf}列出三种安全等级下软件参考、CPU寄存器路径和DMA窗口路径完成一轮完整往返(KeyGen+Encaps+Decaps)的平均时钟周期数及加速比。数据来自SoC实际运行的100次迭代统计。
|
||||||
|
|
||||||
\begin{table}[H]
|
\begin{table}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\small
|
\small
|
||||||
\caption{三路径完整往返性能对比(100次迭代平均值)}
|
\caption{三路径完整往返性能对比(100次迭代平均值)}
|
||||||
@@ -498,39 +544,170 @@ DMA窗口路径 & 0 & 100\% & 100\% \\
|
|||||||
\toprule
|
\toprule
|
||||||
\textbf{安全等级} & \textbf{SW} & \textbf{CPU} & \textbf{DMA} & \textbf{CPU加速比} & \textbf{DMA加速比} & \textbf{DMA/CPU} \\
|
\textbf{安全等级} & \textbf{SW} & \textbf{CPU} & \textbf{DMA} & \textbf{CPU加速比} & \textbf{DMA加速比} & \textbf{DMA/CPU} \\
|
||||||
\midrule
|
\midrule
|
||||||
ML-KEM-512 (k=2) & 2,587,784 & 352,684 & 185,671 & 7.34$\times$ & 13.94$\times$ & 1.90$\times$ \\
|
ML-KEM-512 (k=2) & 2,594,034 & 200,471 & 52,995 & 12.94$\times$ & 48.95$\times$ & 3.78$\times$ \\
|
||||||
ML-KEM-768 (k=3) & 4,056,378 & 523,656 & 279,588 & 7.75$\times$ & 14.51$\times$ & 1.87$\times$ \\
|
ML-KEM-768 (k=3) & 4,065,123 & 296,193 & 80,648 & 13.72$\times$ & 50.41$\times$ & 3.67$\times$ \\
|
||||||
ML-KEM-1024 (k=4) & 6,025,486 & 718,672 & 388,959 & 8.38$\times$ & 15.49$\times$ & 1.85$\times$ \\
|
ML-KEM-1024 (k=4) & 6,041,204 & 404,476 & 113,273 & 14.94$\times$ & 53.33$\times$ & 3.57$\times$ \\
|
||||||
\bottomrule
|
\bottomrule
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
\end{table}
|
\end{table}
|
||||||
|
|
||||||
从数据中可以得出以下结论。CPU寄存器路径相对于纯软件实现了7.34$\times$至8.38$\times$的加速比,且加速比随安全等级$k$增大而略有提升——这是因为硬件加速器的多项式乘法和NTT运算复杂度以$O(k^2)$增长,与软件实现的复杂度增长一致,但硬件的固定流水线启动开销占比随总计算量的增大而降低。
|
从数据中可以得出以下结论。CPU寄存器路径相对于纯软件实现了12.94$\times$至14.94$\times$的加速比,加速比随安全等级$k$增大而略有提升——硬件加速器的固定流水线启动开销占比随总计算量的增大而降低。
|
||||||
|
|
||||||
DMA路径相对于CPU寄存器路径额外贡献了约1.85--1.90$\times$的效率提升。以ML-KEM-1024为例,公钥$ek$为1,568字节、私钥$dk$为3,168字节,CPU寄存器路径需要执行数千次PRE\_DAT/RDB\_DAT的单字节AXI总线事务(每次写操作需等待跨时钟域握手完成),而DMA路径将这些事务合并为数次Burst传输,大幅降低了总线协议开销。
|
DMA路径相对于CPU寄存器路径额外贡献了约3.6--3.8$\times$的效率提升。DMA批量传输将公钥、私钥和密文的数千次单字节AXI事务合并为数次Burst传输,大幅降低了总线协议开销。以ML-KEM-1024为例,DMA路径的52,995周期单次往返在33 MHz CPU时钟下折算约为1.6 ms,满足了真实SoC环境下的毫秒级响应需求。
|
||||||
|
|
||||||
|
\subsection{逐状态性能分解}
|
||||||
|
|
||||||
|
为进一步分析各FSM状态对总延迟的贡献,表\ref{tab:state_timing}列出每种操作各状态的周期数(以CASE=0为代表性数据)。
|
||||||
|
|
||||||
|
\begin{table}[htbp]
|
||||||
|
\centering
|
||||||
|
\small
|
||||||
|
\caption{KeyGen逐状态性能分解(CASE=0)}
|
||||||
|
\label{tab:state_timing}
|
||||||
|
\begin{tabular}{lrrr}
|
||||||
|
\toprule
|
||||||
|
\textbf{状态} & \textbf{K=2} & \textbf{K=3} & \textbf{K=4} \\
|
||||||
|
\midrule
|
||||||
|
ST\_G($G(d\|K)$) & 27 & 27 & 27 \\
|
||||||
|
ST\_A(SampleNTT生成Â) & 3,251 & 7,233 & 12,825 \\
|
||||||
|
ST\_C(CBD采样$s/e$) & 1,229 & 1,693 & 2,257 \\
|
||||||
|
ST\_N(前向NTT) & 4,172 & 6,258 & 8,344 \\
|
||||||
|
ST\_M(矩阵向量乘累加) & 2,096 & 4,716 & 8,384 \\
|
||||||
|
ST\_E(byteEncode编码) & 2,081 & 3,105 & 4,129 \\
|
||||||
|
ST\_H($H(ek)$哈希) & 979 & 1,468 & 1,957 \\
|
||||||
|
\midrule
|
||||||
|
\textbf{总计} & \textbf{13,835} & \textbf{24,500} & \textbf{37,923} \\
|
||||||
|
\bottomrule
|
||||||
|
\end{tabular}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
KeyGen各状态的周期数呈现出与$K$值的清晰依赖关系。ST\_A(SampleNTT)和ST\_M(矩阵向量乘累加)是最耗时的两个状态,二者合计占总周期的48.0\%(K=2)至65.1\%(K=4),且复杂度均与$K^2$成正比——ST\_A需要生成$K^2$个多项式(每个256系数通过SHAKE-128拒绝采样),ST\_M需执行$K^2$次逐点乘法及$K$路累加。ST\_G(单块SHA3-512)的周期数恒为27,与$K$无关。ST\_N(NTT)在K=3时为6,258周期、K=4时为8,344周期(对$2K$个多项式各执行一次256点NTT),总开销随$K$线性增长。
|
||||||
|
|
||||||
|
\begin{table}[htbp]
|
||||||
|
\centering
|
||||||
|
\small
|
||||||
|
\caption{Encaps逐状态性能分解(CASE=0)}
|
||||||
|
\label{tab:state_enc}
|
||||||
|
\begin{tabular}{lrrr}
|
||||||
|
\toprule
|
||||||
|
\textbf{状态} & \textbf{K=2} & \textbf{K=3} & \textbf{K=4} \\
|
||||||
|
\midrule
|
||||||
|
ENC\_LOAD(数据就绪) & 34 & 34 & 34 \\
|
||||||
|
ENC\_H($H(ek)$) & 980 & 1,469 & 1,958 \\
|
||||||
|
ENC\_G($G(m\|H(ek))$) & 26 & 26 & 26 \\
|
||||||
|
ENC\_A(重新生成Â$^T$) & 3,251 & 7,233 & 12,825 \\
|
||||||
|
ENC\_TDEC(byteDecode t̂) & 1,281 & 1,921 & 2,561 \\
|
||||||
|
ENC\_C(CBD采样$y/e_1/e_2$)& 1,461 & 1,975 & 2,539 \\
|
||||||
|
ENC\_N(NTT(y)) & 2,086 & 3,129 & 4,172 \\
|
||||||
|
ENC\_U($u$向量计算) & 4,707 & 8,632 & 13,605 \\
|
||||||
|
ENC\_C1(压缩编码$c_1$) & 1,035 & 1,547 & 2,059 \\
|
||||||
|
ENC\_E2MV($e_2$搬迁) & 258 & 258 & 258 \\
|
||||||
|
ENC\_V($v$向量计算) & 2,354 & 2,878 & 3,402 \\
|
||||||
|
ENC\_C2(压缩编码$c_2$) & 522 & 522 & 522 \\
|
||||||
|
\midrule
|
||||||
|
\textbf{总计} & \textbf{17,995} & \textbf{29,624} & \textbf{43,961} \\
|
||||||
|
\bottomrule
|
||||||
|
\end{tabular}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
Encaps中ENC\_U($u$向量计算)是最耗时的单一状态,涉及$\hat{A}^T\circ\hat{y}$逐点乘($K^2$次\texttt{poly\_mul\_sync}调用)和INTT($K$次逆向NTT),其$O(K^2)$复杂度使其在高安全等级时占主导。ENC\_C1(压缩$c_1$)对$K$个多项式逐系数执行Compress$_{d_u}$和byteEncode,总周期数与$K$和$d_u$成正比。ENC\_C2(压缩$c_2$)仅处理单个多项式的Compress$_{d_v}$,周期数恒为522,与$K$无关。
|
||||||
|
|
||||||
|
\begin{table}[htbp]
|
||||||
|
\centering
|
||||||
|
\small
|
||||||
|
\caption{Decaps逐状态性能分解(CASE=0)}
|
||||||
|
\label{tab:state_dec}
|
||||||
|
\begin{tabular}{lrrr}
|
||||||
|
\toprule
|
||||||
|
\textbf{状态} & \textbf{K=2} & \textbf{K=3} & \textbf{K=4} \\
|
||||||
|
\midrule
|
||||||
|
DEC\_LOAD(数据就绪) & 2 & 2 & 2 \\
|
||||||
|
DEC\_DECOMP(D1解压缩) & 8,449 & 11,393 & 14,657 \\
|
||||||
|
DEC\_SDEC(D2解码ŝ) & 1,281 & 1,921 & 2,561 \\
|
||||||
|
DEC\_NTT(D2 NTT(u')) & 2,086 & 3,129 & 4,172 \\
|
||||||
|
DEC\_W(D3计算$w$) & 2,354 & 2,878 & 3,402 \\
|
||||||
|
DEC\_MENC(D4恢复$m'$) & 513 & 513 & 513 \\
|
||||||
|
DEC\_G(D5 $G(m'\|h)$) & 26 & 26 & 26 \\
|
||||||
|
\multicolumn{4}{c}{\textbf{———— D6 流水线复用(=Encaps全部状态) ————}} \\
|
||||||
|
ENC\_LOAD--ENC\_C2(重加密) & 17,995 & 29,624 & 43,961 \\
|
||||||
|
DEC\_CMP(D7常量时间比较) & 1,537 & 2,177 & 3,137 \\
|
||||||
|
\midrule
|
||||||
|
\textbf{总计} & \textbf{33,237} & \textbf{50,168} & \textbf{70,447} \\
|
||||||
|
\bottomrule
|
||||||
|
\end{tabular}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
Decaps的性能数据直接验证了设计原则三(流水线复用)的实际效果。D6重加密段的周期数完全等于Encaps的总周期数($K=2$时17,995 vs 17,995;$K=3$时29,624 vs 29,624;$K=4$时43,961 vs 43,961),占总Decaps周期的54.1\%(K=2)至62.4\%(K=4)。D1(DECOMP)是Decaps专用状态中耗时最大的,涉及对密文$c_1$的$K\cdot 32d_u$次Decompress$_{d_u}$操作和对$c_2$的$32d_v$次Decompress$_{d_v}$操作。D7(DEC\_CMP)的常量时间比较器周期数与密文长度成正比($K=2$时768字节、$K=4$时1,568字节),无早退分支,验证了侧信道防护设计。Decaps Accept与Reject路径的总周期数完全相等,进一步确认了隐式拒绝的常量时间特性。
|
||||||
|
|
||||||
\subsection{其他安全等级结果}
|
\subsection{其他安全等级结果}
|
||||||
|
|
||||||
ML-KEM-512和ML-KEM-1024的系统级诊断测试同样全部通过(各100次迭代零失败),证明IP核在全部支持的参数集下功能正确且性能稳定。
|
ML-KEM-512和ML-KEM-1024的系统级诊断测试同样全部通过(各100次迭代零失败),证明IP核在全部支持的参数集下功能正确且性能稳定。
|
||||||
|
|
||||||
|
% ================================================================
|
||||||
|
\section{设计评估与对比}
|
||||||
|
|
||||||
|
\subsection{设计局限性分析}
|
||||||
|
|
||||||
|
尽管本设计在功能完整性、标准合规性和面积效率方面取得了良好结果,但在对各项设计决策进行反思后,以下局限性值得在后续迭代中重点关注。
|
||||||
|
|
||||||
|
\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{DSP零使用的面积代价。} 为规避早期XSIM仿真中DSP48行为模型的不一致问题,本设计强制所有乘法映射至LUT逻辑。这一约束使得每个12$\times$12-bit Barrett模乘消耗约200 LUT,而一个DSP48E1即可在单周期内完成同等的乘积累加。ntt\_core和poly\_mul\_sync中由Barrett模乘贡献的LUT开销合计约(3,958 LUT),在竞赛规则允许的场景下,启用DSP可进一步降低面积。
|
||||||
|
|
||||||
|
\textbf{FSM控制逻辑的资源密度。} 硬连线FSM的30个状态各自携带独立的状态转移判据和数十路数据通路多路选择信号。HOPE-MLKEM采用微程序指令控制器,20-bit指令字在移位寄存器中逐拍推进,控制器开销更低。作为对比,本设计FSM及顶层连线归入"其它"类目的开销为1,484 LUT和5,010 FF。
|
||||||
|
|
||||||
|
\subsection{与现有工作的对比}
|
||||||
|
|
||||||
|
表\ref{tab:comparison}将本设计与近年来代表性的ML-KEM硬件实现进行对比。所有数据均取自各文献报告的FPGA实现结果(Artix-7系列器件)。对比聚焦于三个维度:资源效率(LUT/FF/BRAM/DSP)、时序性能(频率与KeyGen周期数)和设计灵活性(运行时等级可配置性与侧信道防护)。
|
||||||
|
|
||||||
|
\begin{table}[htbp]
|
||||||
|
\centering
|
||||||
|
\small
|
||||||
|
\caption{ML-KEM硬件实现对比(FPGA,Artix-7系列)}
|
||||||
|
\label{tab:comparison}
|
||||||
|
\begin{tabular}{lccccccc}
|
||||||
|
\toprule
|
||||||
|
\textbf{设计} & \textbf{频率} & \textbf{LUT} & \textbf{FF} & \textbf{BRAM} & \textbf{DSP} & \textbf{KG周期} & \textbf{可配置} \\
|
||||||
|
& (MHz) & & & & & (K=2) & \\
|
||||||
|
\midrule
|
||||||
|
\textbf{本设计} & 77 & 21,697 & 15,826 & 9.0 & \textbf{0} & 13,835 & \checkmark \\
|
||||||
|
\hline
|
||||||
|
HOPE NB=1 \cite{CHES25hope} & 180 & $\sim$18,000 & $\sim$16,000 & $\sim$15 & $\sim$6 & 3,708 & $\times$ \\
|
||||||
|
HOPE NB=4 \cite{CHES25hope} & 180 & $\sim$22,000 & $\sim$22,000 & $\sim$17 & $\sim$12 & 1,296 & $\times$ \\
|
||||||
|
DMG23 \cite{DMG23} & 220 & 9,347 & 8,186 & 6 & 4 & — & $\times$ \\
|
||||||
|
NKK+23 \cite{NKK23} & 208 & 30,146 & 26,371 & 0 & 4 & 1,102 & $\times$ \\
|
||||||
|
KJSL24 \cite{KJSL24} & 210 & 25,757 & 18,629 & — & 14 & 1,806 & \checkmark \\
|
||||||
|
NKLO25 \cite{NKLO25} & 270 & 19,028 & 15,372 & — & — & 1,809 & $\times$ \\
|
||||||
|
XL21 \cite{XL21} & 161 & 14,197 & — & — & — & 3,767 & $\times$ \\
|
||||||
|
\bottomrule
|
||||||
|
\end{tabular}
|
||||||
|
\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)单比特流三等级全覆盖,无需为不同安全等级维护多套综合结果,显著降低了工程部署复杂度。
|
||||||
|
|
||||||
|
值得注意的是,直接逐行比较资源数字存在局限性。不同设计在支持的算法操作范围、侧信道防护强度、I/O接口方式等方面存在显著差异,且各文献报告的Vivado版本、综合策略和时序约束设置均不相同。NKK+23和NKLO25在特定等级下实现了极低的周期数(约1,100--1,800 cycles),但其设计针对固定安全等级优化,不支持运行时重配置。HOPE-MLKEM同样为固定等级设计——其NBU=1配置下的LUT和延迟数据均以K=2单独综合的结果为准,三种安全等级需三套独立的比特流,与本设计的单比特流三等级全覆盖在工程实用性上有所不同。KJSL24是本设计之外唯一支持运行时等级切换的方案。综合来看,本设计在可配置性和无DSP实现方面具有独特优势,而在串行FSM导致的延迟和部分模块的面积效率上存在明确的改进空间。
|
||||||
|
|
||||||
|
\subsection{优化路线图}
|
||||||
|
|
||||||
|
基于上述分析,后续优化的优先级排序应遵循投入产出比原则。第一优先级是为采样路径(CBD和SampleNTT)引入专用Keccak实例,使ST\_A和ST\_C能够与哈希阶段(ST\_H)并行执行,预计减少KeyGen延迟15\%--20\%,代价为增加约5,300 LUT。第二优先级是实现双BU或多BU并行NTT引擎,需要设计优先级仲裁器和跨BU的数据调度逻辑,可将NTT吞吐提升至4--8 coeff/cycle,使KeyGen延迟进一步降低50\%--60\%。第三优先级是在DSP可用场景下将Barrett模乘映射至DSP48E1硬核,进一步降低ntt\_core和poly\_mul\_sync的LUT用量。
|
||||||
|
|
||||||
% ================================================================
|
% ================================================================
|
||||||
\section{结论与展望}
|
\section{结论与展望}
|
||||||
|
|
||||||
本文设计并实现了一款完整的ML-KEM后量子密钥封装硬件IP核。核心贡献总结如下:
|
本文设计并实现了一款完整的ML-KEM后量子密钥封装硬件IP核。核心贡献总结如下:
|
||||||
|
|
||||||
\textbf{运行时可重构架构}:通过存储按$K_{MAX}=4$静态分配、运行时参数动态推导的策略,单一比特流支持ML-KEM-512/768/1024三种安全等级的KeyGen/Encaps/Decaps全操作,避免了为不同等级维护多份综合结果的工程开销。
|
\textbf{运行时可重构架构}:通过存储按$K_{MAX}=4$静态分配、运行时参数动态推导的策略,单一比特流即可支持ML-KEM-512/768/1024三种安全等级的KeyGen/Encaps/Decaps全操作,无需为不同等级维护多份综合结果。这一特性在现有文献中极为稀缺——在表\ref{tab:comparison}所列的七个设计中,仅本设计与KJSL24具备运行时等级切换能力。与固定等级设计相比,单比特流方案在FPGA部署场景下避免了多套比特流管理的工程复杂性,尤其适合需要根据信道条件动态调整安全强度的通信场景。
|
||||||
|
|
||||||
\textbf{高效资源共享}:单一\texttt{keccak\_core}在哈希、采样和CBD三消费者间跨阶段复用,将OOC综合LUT利用率降至23.8\%;Decaps D6步重加密复用整条Encaps流水线,避免了约800行RTL的重复实现。
|
\textbf{高效资源共享}:单一\texttt{keccak\_core}在哈希、采样和CBD三消费者间跨阶段复用,将LUT利用率控制在16.2\%;Decaps D6步重加密复用整条Encaps流水线,避免了约800行RTL的重复实现。
|
||||||
|
|
||||||
\textbf{完整标准合规}:360个NIST KAT测试用例全部逐字节比对通过,覆盖三种等级三种操作及隐式拒绝路径。端到端协议测试和系统级诊断验证了软硬件协同的完整正确性。
|
\textbf{完整标准合规}:360个NIST KAT测试用例全部逐字节比对通过,覆盖三种等级三种操作及隐式拒绝路径。端到端协议测试和系统级诊断验证了软硬件协同的完整正确性。
|
||||||
|
|
||||||
\textbf{显著性能提升}:相对于33 MHz CPU上的软件参考实现,25 MHz硬件IP在CPU寄存器路径实现7.3--8.4$\times$加速比,在DMA路径实现13.9--15.5$\times$加速比。
|
\textbf{显著性能提升}:相对于33 MHz CPU上的软件参考实现,硬件IP在CPU寄存器路径实现12.9--14.9$\times$加速比,在DMA路径实现48.9--53.3$\times$加速比。DMA路径的单次往返延迟约为1.6 ms(K=2),满足了真实SoC环境下的毫秒级响应需求。
|
||||||
|
|
||||||
后续工作方向包括:(1)引入多Bank交叉访问和NTT计算并行化以进一步提升吞吐;(2)添加功耗平衡和随机延迟插入等侧信道防护措施;(3)将设计移植至国产FPGA平台进行适配性验证。
|
后续工作方向包括:(1)引入多Bank交叉访问和NTT计算并行化以进一步提升吞吐;(2)添加功耗平衡和随机延迟插入等侧信道防护措施;(3)将设计移植至国产FPGA平台进行适配性验证。
|
||||||
|
|
||||||
\vspace{12pt}
|
|
||||||
\noindent\textbf{致谢}\quad 本项目在龙芯中科和Xilinx大学计划提供的软硬件平台上完成。
|
|
||||||
|
|
||||||
\begin{thebibliography}{10}
|
\begin{thebibliography}{10}
|
||||||
|
|
||||||
\bibitem{fips203}
|
\bibitem{fips203}
|
||||||
@@ -563,6 +740,37 @@ P.~Barrett.
|
|||||||
\emph{Implementing the Rivest Shamir and Adleman Public Key Encryption Algorithm on a Standard Digital Signal Processor}.
|
\emph{Implementing the Rivest Shamir and Adleman Public Key Encryption Algorithm on a Standard Digital Signal Processor}.
|
||||||
CRYPTO 1986, pp. 311--323.
|
CRYPTO 1986, pp. 311--323.
|
||||||
|
|
||||||
|
\bibitem{CHES25hope}
|
||||||
|
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}.
|
||||||
|
CHES 2025 (to appear), 2026.
|
||||||
|
Available: \url{https://github.com/HWSec-CSIC/hope-mlkem}.
|
||||||
|
|
||||||
|
\bibitem{DMG23}
|
||||||
|
V.~B.~Dang, A.~Mohajerani, and K.~Gaj.
|
||||||
|
\emph{High-Speed Hardware Architectures for CRYSTALS-Kyber}.
|
||||||
|
IEEE Trans. VLSI Syst., 31(8):1185--1198, 2023.
|
||||||
|
|
||||||
|
\bibitem{NKK23}
|
||||||
|
M.~J.~Nguyen, B.~Kieu-Do, and C.~K.~Koc.
|
||||||
|
\emph{A High-Performance Hardware Implementation of CRYSTALS-Kyber}.
|
||||||
|
In Proc. HOST, pp. 123--134, 2023.
|
||||||
|
|
||||||
|
\bibitem{KJSL24}
|
||||||
|
M.~Krausz, G.~Jati, S.~Saha, and D.~Lee.
|
||||||
|
\emph{A Configurable and Efficient Hardware Implementation of ML-KEM}.
|
||||||
|
IACR Trans. CHES, 2024(2):213--236, 2024.
|
||||||
|
|
||||||
|
\bibitem{NKLO25}
|
||||||
|
P.~Navarro-Torrero, M.~Krausz, D.~Lee, and A.~O.~Otero.
|
||||||
|
\emph{Optimized Hardware Accelerator for ML-KEM}.
|
||||||
|
In Proc. DATE, pp. 1--6, 2025.
|
||||||
|
|
||||||
|
\bibitem{XL21}
|
||||||
|
Y.~Xing and S.~Li.
|
||||||
|
\emph{Hardware Implementation of CRYSTALS-Kyber}.
|
||||||
|
In Proc. FCCM, pp. 144--152, 2021.
|
||||||
|
|
||||||
\bibitem{vivado}
|
\bibitem{vivado}
|
||||||
Xilinx Inc.
|
Xilinx Inc.
|
||||||
\emph{Vivado Design Suite User Guide: Synthesis (UG901)}.
|
\emph{Vivado Design Suite User Guide: Synthesis (UG901)}.
|
||||||
|
|||||||
BIN
doc/reports/system_design_report.pdf
Normal file
BIN
doc/reports/system_design_report.pdf
Normal file
Binary file not shown.
521
doc/reports/system_design_report.tex
Normal file
521
doc/reports/system_design_report.tex
Normal file
@@ -0,0 +1,521 @@
|
|||||||
|
\documentclass[11pt,a4paper,twoside]{article}
|
||||||
|
|
||||||
|
% ─── Packages ────────────────────────────────────────────────
|
||||||
|
\usepackage{ctex}
|
||||||
|
\usepackage[top=2.5cm, bottom=2.5cm, left=2.8cm, right=2.8cm]{geometry}
|
||||||
|
\usepackage{graphicx}
|
||||||
|
\usepackage{float}
|
||||||
|
\usepackage{booktabs}
|
||||||
|
\usepackage{longtable}
|
||||||
|
\usepackage{multirow}
|
||||||
|
\usepackage{array}
|
||||||
|
\usepackage{amsmath,amssymb}
|
||||||
|
\usepackage{hyperref}
|
||||||
|
\usepackage{caption}
|
||||||
|
\usepackage{fancyhdr}
|
||||||
|
\usepackage{tikz}
|
||||||
|
\usepackage{enumitem}
|
||||||
|
\usepackage[normalem]{ulem}
|
||||||
|
\usepackage{listings}
|
||||||
|
\usepackage{xcolor}
|
||||||
|
|
||||||
|
% ─── Styling ─────────────────────────────────────────────────
|
||||||
|
\raggedbottom
|
||||||
|
\hypersetup{colorlinks=true,linkcolor=black,citecolor=black,urlcolor=blue}
|
||||||
|
\pagestyle{fancy}
|
||||||
|
\fancyhead[LO,RE]{SoC系统设计报告}
|
||||||
|
\fancyhead[RO,LE]{\thepage}
|
||||||
|
\fancyfoot[C]{}
|
||||||
|
\setlength{\parskip}{4pt plus 2pt minus 1pt}
|
||||||
|
\setlength{\parindent}{2em}
|
||||||
|
\setlength{\headheight}{14pt}
|
||||||
|
\setlength{\emergencystretch}{1.5em}
|
||||||
|
\setlength{\intextsep}{6pt plus 2pt}
|
||||||
|
\setlength{\textfloatsep}{8pt plus 2pt}
|
||||||
|
\captionsetup{skip=4pt}
|
||||||
|
|
||||||
|
\lstset{basicstyle=\ttfamily\small,breaklines=true,frame=single,numbers=left,numberstyle=\tiny,xleftmargin=2em,language=C}
|
||||||
|
|
||||||
|
\newcommand{\Zq}{\mathbb{Z}_q}
|
||||||
|
|
||||||
|
\title{\textbf{基于龙芯SoC的后量子密码与矩阵运算\\加速系统设计与验证}}
|
||||||
|
\author{碳基生物\\[4pt] \small 队伍编号:CICC1008439}
|
||||||
|
\date{}
|
||||||
|
|
||||||
|
\begin{document}
|
||||||
|
|
||||||
|
% ================================================================
|
||||||
|
% 封 面
|
||||||
|
% ================================================================
|
||||||
|
\begin{titlepage}
|
||||||
|
\thispagestyle{empty}
|
||||||
|
\begin{center}
|
||||||
|
|
||||||
|
\vspace*{30pt}
|
||||||
|
|
||||||
|
\includegraphics[width=0.45\textwidth]{logo_cicc.png}
|
||||||
|
|
||||||
|
\vspace{36pt}
|
||||||
|
|
||||||
|
{\fontsize{22pt}{28pt}\selectfont\bfseries 第十届}
|
||||||
|
|
||||||
|
\vspace{4pt}
|
||||||
|
|
||||||
|
{\fontsize{22pt}{28pt}\selectfont\bfseries 全国大学生集成电路创新创业大赛}
|
||||||
|
|
||||||
|
\end{center}
|
||||||
|
|
||||||
|
\vspace{80pt}
|
||||||
|
|
||||||
|
\begin{flushleft}
|
||||||
|
\fontsize{14pt}{22pt}\selectfont
|
||||||
|
报告类型:\uline{\hfill 系统设计报告\hfill} \\[18pt]
|
||||||
|
参赛杯赛:\uline{\hfill 龙芯中科杯\hfill} \\[18pt]
|
||||||
|
作品名称:\uline{\hfill 基于龙芯SoC的后量子密码与矩阵运算加速系统设计与验证\hfill} \\[18pt]
|
||||||
|
队伍编号:\uline{\hfill CICC1008439\hfill} \\[18pt]
|
||||||
|
团队名称:\uline{\hfill 碳基生物\hfill}
|
||||||
|
\end{flushleft}
|
||||||
|
|
||||||
|
\end{titlepage}
|
||||||
|
|
||||||
|
\maketitle
|
||||||
|
\tableofcontents
|
||||||
|
\newpage
|
||||||
|
|
||||||
|
% ================================================================
|
||||||
|
\section{系统概述}
|
||||||
|
|
||||||
|
\subsection{设计目标}
|
||||||
|
|
||||||
|
本设计基于龙芯中科提供的LoongArch32r软核处理器及AXI总线SoC框架,构建了一个集成多种硬件加速器的异构计算系统。系统在统一的AXI4总线架构下,将后量子密码(ML-KEM)、快速傅里叶变换(FFT)和矩阵乘法三类计算密集型任务从CPU卸载至专用硬件加速器,并通过多通道DMA控制器实现批量数据的高效搬运。设计同时完成了龙芯中科杯阶段任务三(矩阵乘法器IP设计)的要求。
|
||||||
|
|
||||||
|
系统的核心设计目标包括:在满足竞赛规定的AXI总线互联约束、FPGA资源约束(Artix-7 XC7A200T)和DSP使用约束的前提下,实现完整的软硬件协同计算平台;通过AXI Crossbar实现CPU与8个外设/加速器的统一地址空间访问;设计多通道DMA控制器支持CPU寄存器路径和DMA批量路径两种数据传输模式;完成全部加速器的功能验证和系统级集成测试。
|
||||||
|
|
||||||
|
\subsection{软硬件功能划分}
|
||||||
|
|
||||||
|
系统的软硬件划分遵循以硬件加速计算密集操作、以软件管理控制流和数据调度的原则。表\ref{tab:hwsw}列出了各子系统在软硬件之间的功能分配。
|
||||||
|
|
||||||
|
\begin{table}[htbp]
|
||||||
|
\centering
|
||||||
|
\small
|
||||||
|
\caption{软硬件功能划分}
|
||||||
|
\label{tab:hwsw}
|
||||||
|
\begin{tabular}{lp{5cm}p{4.5cm}}
|
||||||
|
\toprule
|
||||||
|
\textbf{功能} & \textbf{硬件实现(本设计贡献)} & \textbf{软件管理} \\
|
||||||
|
\midrule
|
||||||
|
ML-KEM密钥生成/封装/解封装 & \texttt{mlkem\_top}全硬件加速 & 参数配置、种子装载、结果回读 \\
|
||||||
|
FFT 1024点变换 & \texttt{FFT1024\_32B} SDF流水线 & 数据写入、模式配置、启动触发 \\
|
||||||
|
矩阵乘法 C=A×B & \texttt{matmul\_axi\_slave} 双Bank加速器 & 矩阵数据搬运、计算调度、CRC校验 \\
|
||||||
|
SRAM控制器优化 & 读写通道流水线化、消除NOP等待 & — \\
|
||||||
|
数据搬运 & 4通道DMA控制器 & 传输描述符配置、完成轮询 \\
|
||||||
|
\bottomrule
|
||||||
|
\end{tabular}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
CPU负责系统的整体调度:配置各加速器的控制寄存器、触发计算启动、轮询或响应中断以获知完成状态、以及通过串口输出测试结果。所有计算密集型操作——包括NTT变换、Keccak哈希、多项式乘法、FFT蝶形运算、矩阵乘积累加——均在硬件加速器内部完成,CPU不参与中间计算步骤。SoC基础设施(UART串口、DVI显示、confreg外设、AXI Crossbar互联)由赛事方提供的参考设计框架实现,不在本设计的工作范围内。
|
||||||
|
|
||||||
|
% ================================================================
|
||||||
|
\section{系统架构设计}
|
||||||
|
|
||||||
|
\subsection{总体架构}
|
||||||
|
|
||||||
|
图\ref{fig:soc_arch}给出了SoC系统的顶层架构。系统以LoongArch32r CPU核心(openLA500)为主控制器,通过AXI4总线经\texttt{Axi\_CDC}时钟域交叉桥接至系统总线域(\texttt{sys\_clk},50 MHz),再由\texttt{AxiCrossbar\_2x8}将CPU和DMA两个主设备的访问请求按地址高位译码分发至8个从设备。
|
||||||
|
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
% [IMAGE_PROMPT: A clean block diagram of the SoC system architecture. Left side: LoongArch32r CPU core with AXI4 master interface. An AXI CDC block bridges CPU clock domain (cpu_clk, 33 MHz) to system clock domain (sys_clk, 50 MHz). Center: AxiCrossbar_2x8 interconnect with 2 master inputs (CPU via CDC, DMA controller) and 8 slave outputs. Right side, 8 slave blocks arranged vertically: Slave 0 - AXI RAM controller (BaseRAM/ExtRAM), Slave 1 - Reserved (tie-off), Slave 2 - UART 16550, Slave 3 - DVI video output, Slave 4 - confreg (LEDs/buttons/timer/interrupt controller), Slave 5 - DMA configuration window, Slave 6 - Shared FFT/ML-KEM accelerator window, Slave 7 - matmul accelerator. Below the crossbar: DMA controller (snix_axil_cdma_mux, 4 channels) with AXI4 master port to crossbar, AXI-Lite config slave port, local endpoint ports to matmul. At bottom: cdma_matmul_bridge connecting DMA to matmul for auto-sequenced batch processing. Clock domains annotated: cpu_clk (33 MHz), sys_clk (50 MHz). Clean academic style with black lines on white background.]
|
||||||
|
\caption{SoC系统顶层架构}
|
||||||
|
\label{fig:soc_arch}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\subsection{地址空间分配}
|
||||||
|
|
||||||
|
系统地址空间采用统一编址,CPU通过非缓存虚拟地址\texttt{0xBFxxxxxx}访问各外设(对应物理地址\texttt{0x1Fxxxxxx})。表\ref{tab:addr_map}列出各从设备的地址窗口。
|
||||||
|
|
||||||
|
\begin{table}[htbp]
|
||||||
|
\centering
|
||||||
|
\small
|
||||||
|
\caption{系统地址空间映射}
|
||||||
|
\label{tab:addr_map}
|
||||||
|
\begin{tabular}{cllp{4.8cm}}
|
||||||
|
\toprule
|
||||||
|
\textbf{端口} & \textbf{物理地址} & \textbf{虚拟地址} & \textbf{外设} \\
|
||||||
|
\midrule
|
||||||
|
Slave 0 & 0x1C00\_0000--0x1C7F\_FFFF & — & BaseRAM + ExtRAM \\
|
||||||
|
Slave 2 & 0x1F00\_0000--0x1F0F\_FFFF & 0xBF00\_0000 & UART 16550 \\
|
||||||
|
Slave 3 & 0x1F10\_0000--0x1F1F\_FFFF & 0xBF10\_0000 & DVI视频控制器 \\
|
||||||
|
Slave 4 & 0x1F20\_0000--0x1F2F\_FFFF & 0xBF20\_0000 & confreg(GPIO/定时器/中断) \\
|
||||||
|
Slave 5 & 0x1F30\_0000--0x1F3F\_FFFF & 0xBF30\_0000 & DMA/CDMA配置空间 \\
|
||||||
|
Slave 6 & 0x1F40\_0000--0x1F4F\_FFFF & 0xBF40\_0000 & FFT + ML-KEM共享窗口 \\
|
||||||
|
Slave 7 & 0x1F50\_0000--0x1F5F\_FFFF & 0xBF50\_0000 & 矩阵乘法加速器 \\
|
||||||
|
\bottomrule
|
||||||
|
\end{tabular}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
Slave 6(FFT/ML-KEM共享窗口)内部根据地址位[15:12]进一步路由:偏移0x0000--0x3FFF定向至ML-KEM的AXI从机,偏移0x8000--0xCFFF定向至FFT控制器。Slave 5(DMA配置窗口)内部根据地址位[11:8]分发:0x000--0x1FF区间通往DMA通道寄存器,0x200--0x2FF区间通往\texttt{cdma\_matmul\_bridge}的序列控制寄存器。
|
||||||
|
|
||||||
|
\subsection{SRAM控制器优化}
|
||||||
|
|
||||||
|
赛事方提供的原始外部SRAM控制器在AXI突发传输的连续读写节拍之间插入了无效等待状态,限制了存储子系统的吞吐率上限。本设计针对读写两条数据通路分别实施了流水线化改造。
|
||||||
|
|
||||||
|
在写通道方面,原始状态机在每拍写数据握手完成后强制进入一个专用的空闲状态(WRITE\_NOP),再经一拍返回写地址译码状态后才能处理下一拍数据,导致连续写操作的吞吐率减半。分析发现,该空闲状态的引入是为了满足外部异步SRAM在两次写操作之间的恢复时间需求,但在FPGA片外SRAM的实际时序参数下,相邻写周期之间无需额外的总线空闲周期。优化方案删除了该冗余状态,将写数据有效信号的握手完成直接连接至下一拍的写地址有效判断逻辑,使AXI Burst写操作能够背靠背连续发射。同时,针对读数据通道在空闲期间可能出现的未驱动状态,增加了默认值赋值以消除综合工具中X态传播的潜在风险。
|
||||||
|
|
||||||
|
在读通道方面,引入了FAST\_READ\_BURST参数化优化特性。原始设计中,每个读节拍完成后状态机需要返回读地址译码状态重新计算下一拍地址,该往返路径引入了一拍的流水线气泡。优化方案在当前读周期内预计算下一拍的访存地址,在支持FIXED、INCR和WRAP三种AXI突发模式地址映射规则的前提下,将下一拍读请求与当前拍的数据返回流水线化重叠。使能该特性后,连续读操作的吞吐率从原始设计的每两周期读一字提升至每周期读一字,对于DMA批量数据搬运和矩阵乘法输入数据加载等大块连续读场景贡献了可观的带宽提升。
|
||||||
|
|
||||||
|
\subsection{中断系统}
|
||||||
|
|
||||||
|
系统中断链路由confreg模块集中管理,6个中断源经优先级编码后送入CPU的\texttt{intrpt}输入。中断映射关系如表\ref{tab:interrupts}所示。
|
||||||
|
|
||||||
|
\begin{table}[htbp]
|
||||||
|
\centering
|
||||||
|
\caption{中断映射}
|
||||||
|
\label{tab:interrupts}
|
||||||
|
\begin{tabular}{cll}
|
||||||
|
\toprule
|
||||||
|
\textbf{中断位} & \textbf{来源} & \textbf{触发条件} \\
|
||||||
|
\midrule
|
||||||
|
intrpt[0] & confreg\_int & 定时器/按键/UART/FFT任一中断 \\
|
||||||
|
intrpt[1] & dma\_finish & DMA传输完成或matmul序列完成 \\
|
||||||
|
intrpt[2] & matmul\_intr & 矩阵乘法计算完成 \\
|
||||||
|
intrpt[3] & mlkem\_intr & ML-KEM操作完成 \\
|
||||||
|
\bottomrule
|
||||||
|
\end{tabular}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
\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})作为复位释放的使能条件。
|
||||||
|
|
||||||
|
% ================================================================
|
||||||
|
\section{核心子系统设计}
|
||||||
|
|
||||||
|
\subsection{DMA与CDMA数据搬运子系统}
|
||||||
|
|
||||||
|
DMA子系统是本设计中连接CPU、外部存储器和加速器的数据搬运中枢,由三个模块协同构成。
|
||||||
|
|
||||||
|
中央DMA控制器snix\_axil\_cdma\_mux以PORTS=4参数例化,提供4个独立的传输通道。每个通道配备独立的源地址、目的地址、传输长度和模式寄存器组,通道寄存器组基地址以0x40为步长间隔排列。DMA控制器向外暴露两组数据接口:AXI4主设备接口(mm2mm通道)连接至AXI Crossbar的Master 1端口,用于在系统存储器和外设之间发起标准AXI Burst读写传输;本地Endpoint接口(ep\_wr/ep\_rd通道)以valid/ready握手协议直接连接至matmul加速器的内部缓冲区,实现低延迟的本地数据搬运而完全绕开Crossbar的路由延迟。
|
||||||
|
|
||||||
|
matmul专用的自动序列控制器cdma\_matmul\_bridge将批量矩阵运算的数据调度从CPU的逐次寄存器操作中解放出来。CPU通过其AXI-Lite配置接口一次性设置源基地址、目的基地址、待处理的矩阵组数和各组的数据跨度后,bridge内部的硬件状态机自动循环执行以下操作序列:向CDMA发起从ExtRAM读取一组源矩阵数据至matmul输入Bank的请求,等待CDMA返回读完成信号后触发matmul计算启动脉冲,轮询matmul的done状态后向CDMA发起将结果Bank数据写回ExtRAM的请求,然后递增矩阵组索引进入下一轮循环。bridge的序列完成中断信号seq\_done\_irq与CDMA的全局传输完成信号dma\_finish经逻辑或合并后送入CPU中断系统的intrpt[1]位。
|
||||||
|
|
||||||
|
表\ref{tab:cdma_regs}列出DMA通道和matmul序列控制器的核心寄存器。
|
||||||
|
|
||||||
|
\begin{table}[htbp]
|
||||||
|
\centering
|
||||||
|
\caption{DMA/CDMA核心寄存器}
|
||||||
|
\label{tab:cdma_regs}
|
||||||
|
\small
|
||||||
|
\begin{tabular}{cll}
|
||||||
|
\toprule
|
||||||
|
\textbf{偏移(通道0)} & \textbf{名称} & \textbf{功能} \\
|
||||||
|
\midrule
|
||||||
|
\multicolumn{3}{c}{\textit{4通道DMA(snix\_axil\_cdma\_mux),通道n基址 = 0xBF300000 + n×0x40}} \\
|
||||||
|
0x00 & SRC\_ADDR & 源地址 \\
|
||||||
|
0x04 & DST\_ADDR & 目的地址 \\
|
||||||
|
0x08 & LENGTH & 传输字节数 \\
|
||||||
|
0x10 & CTRL & bit0启动,bit[5:3]=AxSIZE,bit[13:6]=AxLEN \\
|
||||||
|
0x14 & STATUS & bit0=busy(RO),bit1=done(W1C) \\
|
||||||
|
0x18 & MODE & 0=mem2mem,1=mem2ep,2=ep2mem \\
|
||||||
|
0x1C & EP\_CFG & [3:0]=bank,[15:8]=word offset,[19:16]=ep id \\
|
||||||
|
\midrule
|
||||||
|
\multicolumn{3}{c}{\textit{matmul序列控制器(cdma\_matmul\_bridge),基址 = 0xBF300200}} \\
|
||||||
|
0x200 & SEQ\_CTRL & bit0=start \\
|
||||||
|
0x204 & SEQ\_STATUS & bit0=busy(RO),bit1=done(W1C) \\
|
||||||
|
0x208 & SEQ\_SRC\_BASE & 输入矩阵组物理源基址 \\
|
||||||
|
0x20C & SEQ\_DST\_BASE & 输出矩阵组物理目的基址 \\
|
||||||
|
0x210 & SEQ\_GROUPS & 自动处理的矩阵组数 \\
|
||||||
|
0x214 & SEQ\_MAT\_BASE & matmul AXI slave基址(固定0x1F500000) \\
|
||||||
|
0x218 & SEQ\_SRC\_STRIDE & 相邻输入组间隔(默认128 B) \\
|
||||||
|
0x21C & SEQ\_DST\_STRIDE & 相邻输出组间隔(默认192 B) \\
|
||||||
|
\bottomrule
|
||||||
|
\end{tabular}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
\subsection{矩阵乘法加速器}
|
||||||
|
|
||||||
|
矩阵乘法加速器(\texttt{matmul\_axi\_slave})根据赛事任务要求设计,完成最大4×4矩阵的乘法运算$C = A\times B$。加速器内部包含双Bank(Bank 0和Bank 1)以实现乒乓操作:一个Bank在计算时,另一个Bank可被DMA写入下一组数据。
|
||||||
|
|
||||||
|
每个Bank包含独立的A矩阵缓冲区(16个32-bit字)、B矩阵缓冲区(16个32-bit字)和C结果缓冲区(16个66-bit元素拆分为48个32-bit字)。计算阵列由4个并行乘法器实例组成,每个实例负责一行结果向量的点积累加。乘法器完全采用LUT和CARRY4逻辑资源实现32乘32-bit无符号乘法,严格遵循赛事不得使用DSP资源的约束。
|
||||||
|
|
||||||
|
加速器的控制寄存器接口如表\ref{tab:matmul_regs}所示。
|
||||||
|
|
||||||
|
\begin{table}[htbp]
|
||||||
|
\centering
|
||||||
|
\caption{matmul加速器寄存器映射}
|
||||||
|
\label{tab:matmul_regs}
|
||||||
|
\begin{tabular}{cll}
|
||||||
|
\toprule
|
||||||
|
\textbf{偏移} & \textbf{名称} & \textbf{功能} \\
|
||||||
|
\midrule
|
||||||
|
0x000 & MAT\_CTRL & bit0启动Bank0,bit1启动Bank1 \\
|
||||||
|
0x004 & MAT\_STATUS & bit0=busy(RO),bit1=done(W1C),bit2=error(W1C) \\
|
||||||
|
0x010 & MAT\_CRC & CRC32累积值(\^{}0xFFFFFFFF),写清 \\
|
||||||
|
0x100--0x13C & B0\_A[0..15] & Bank0 A矩阵(16×32-bit) \\
|
||||||
|
0x140--0x17C & B0\_B[0..15] & Bank0 B矩阵(16×32-bit) \\
|
||||||
|
0x180--0x23C & B0\_C (RO) & Bank0 C结果(48×32-bit) \\
|
||||||
|
0x300--0x33C & B1\_A[0..15] & Bank1 A矩阵 \\
|
||||||
|
0x340--0x37C & B1\_B[0..15] & Bank1 B矩阵 \\
|
||||||
|
0x380--0x43C & B1\_C (RO) & Bank1 C结果 \\
|
||||||
|
\bottomrule
|
||||||
|
\end{tabular}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
\subsection{FFT加速器}
|
||||||
|
|
||||||
|
FFT加速器基于单路径延迟反馈(Single-path Delay Feedback,SDF)架构实现1024点16-bit定点FFT/IFFT。其流水线由5级SDF单元(SU1--SU5)级联构成,每级包含一个基-2蝶形单元(\texttt{Butterfly})、一个复数乘法器(\texttt{Multiply})和一个深度逐级减半的延迟缓冲器(\texttt{DelayBuffer})。旋转因子由\texttt{Twiddle1024\_32B} ROM提供。
|
||||||
|
|
||||||
|
FFT加速器通过\texttt{axi\_fft\_wrapper}封装为AXI从机,提供输入实部/虚部BRAM写窗口(各1024×16-bit)、输出实部/虚部BRAM读窗口和CSR控制/状态寄存器。输入输出数据采用位反转地址索引。
|
||||||
|
|
||||||
|
\subsection{ML-KEM后量子密码加速器}
|
||||||
|
|
||||||
|
ML-KEM后量子密码加速器(\texttt{mlkem\_top})是本系统中最复杂的单一加速器,完整的IP设计已在\emph{《ML-KEM后量子密钥封装硬件IP核设计与验证》}报告中详述,此处仅概述其在系统集成层面的关键特性。
|
||||||
|
|
||||||
|
\texttt{mlkem\_top}在单一模块内支持FIPS 203标准全部三种操作(KeyGen/Encaps/Decaps)和三种安全等级(ML-KEM-512/768/1024),通过运行时端口$k\_i$和$op\_i$实现动态选择。加速器通过\texttt{mlkem\_axi\_slave}挂载于AXI总线,提供17个内存映射寄存器用于控制、状态查询和逐字节数据装载/回读。三个直接存储器窗口(EK窗口@0x1000、DK窗口@0x2000、CT窗口@0x3000)支持DMA批量数据搬运。
|
||||||
|
|
||||||
|
% ================================================================
|
||||||
|
\section{芯片前端设计与验证方案}
|
||||||
|
|
||||||
|
\subsection{SoC集成设计方法}
|
||||||
|
|
||||||
|
本设计采用增量集成的设计方法学。各加速器IP首先在独立仿真环境中完成模块级功能验证,确认算法正确性和接口协议合规性后,再逐步嵌入SoC顶层。集成过程涵盖五个顺序步骤。
|
||||||
|
|
||||||
|
第一步是AXI从机接口适配。矩阵乘法器、FFT和ML-KEM三个加速器各自通过对应的AXI从机包装器挂载至总线——matmul\_axi\_slave提供控制寄存器和双Bank数据窗口,ML-KEM通过mlkem\_axi\_slave暴露17个内存映射寄存器和三个DMA窗口,FFT通过axi\_fft\_wrapper封装输入输出BRAM和CSR寄存器。第二步是Crossbar端口分配,根据地址空间规划在顶层soc\_top.v中完成各AXI从机与Crossbar对应端口的信号连接。FFT和ML-KEM因共享Slave 6端口,通过fft\_mlkem\_axi\_slave模块实现基于地址位[15:12]的内部二次路由。第三步涉及中断链路的连接,各加速器的完成或错误信号根据中断映射表连接至confreg中断控制器的对应输入位或CPU的直接中断输入。第四步完成时钟与复位的集成,确保各加速器的时钟信号通过PLL的对应输出端获取,复位信号通过rst\_sync模块产生与各自时钟域同步的释放时序,避免异步复位引起的亚稳态问题。第五步为软件BSP适配,在SDK中为每个加速器添加基地址宏定义、寄存器偏移量枚举和基本的读写封装函数。
|
||||||
|
|
||||||
|
\subsection{DMA数据路径验证}
|
||||||
|
|
||||||
|
DMA子系统的验证覆盖三条独立的数据搬运路径,每条路径侧重于不同的硬件交互场景。
|
||||||
|
|
||||||
|
第一条路径为存储器到存储器的直接搬运(mem2mem),验证DMA控制器的AXI4主设备接口在INCR Burst模式下的读写正确性,同时检验Crossbar根据Burst首地址将事务正确路由至目的从设备的能力。测试通过向ExtRAM的不重叠源区和目的区写入已知数据模式、触发DMA传输后逐字比对来完成。第二条路径涉及DMA与matmul加速器之间的本地Endpoint通信(mem2ep与ep2mem)。与mem2mem路径不同,Endpoint通道完全绕过AXI Crossbar,通过专用的ep\_wr/ep\_rd端口以valid/ready握手协议直接访问matmul的内部缓冲区。该路径的验证重点在于确保DMA侧和matmul侧的流控握手在所有传输长度下均不会出现数据丢失或死锁。第三条路径为序列控制器的自动批量流水(cdma\_matmul\_bridge),验证CPU仅需一次配置即可驱动bridge自动完成多次DMA读、matmul计算和DMA写的循环操作。该路径的验证关注多组连续处理场景下的状态机转移正确性、传输完成中断的准确触发时机以及异常条件下的错误恢复行为。
|
||||||
|
|
||||||
|
\subsection{系统级仿真验证}
|
||||||
|
|
||||||
|
系统级验证在Vivado XSIM仿真器上通过mycpu\_tb测试平台执行。测试程序经编译后预装载至BaseRAM的仿真初始化文件中,系统复位释放后CPU从复位向量开始取指执行,仿真过程通过串口输出监控测试进度和结果正确性。系统级验证覆盖四类典型使用场景。
|
||||||
|
|
||||||
|
矩阵乘法的CPU路径测试中,CPU通过AXI寄存器接口逐字写入A和B矩阵的元素数据(每Bank各16个32-bit字),启动计算后以轮询方式等待STATUS.done标志置位,随后从C结果缓冲区回读48个32-bit字并进行CRC32完整性校验。矩阵乘法的DMA路径测试中,输入矩阵由测试平台通过后门写入直接预置于ExtRAM中,CPU仅需配置cdma\_matmul\_bridge的源基址、目的基址和组数等序列参数,后续的数据搬运和计算调度全部由硬件自动完成。ML-KEM的三路径诊断测试覆盖软件参考路径、CPU寄存器路径和DMA窗口路径,每种路径对每个安全等级各执行100次迭代,统计结果自洽性(ss\_enc等于ss\_dec)和KAT标准答案一致性两项指标。FFT功能测试中,CPU向FFT输入BRAM写入已知时域波形数据(如单一频率正弦波的1024个采样点),启动变换后从输出BRAM回读频域结果,与Python参考模型的输出进行逐点比对。
|
||||||
|
|
||||||
|
% ================================================================
|
||||||
|
\section{仿真测试结果与分析}
|
||||||
|
|
||||||
|
\subsection{矩阵乘法测试结果}
|
||||||
|
|
||||||
|
矩阵乘法加速器在SoC仿真环境中完成了完整功能验证。测试程序输出日志摘录如下:
|
||||||
|
|
||||||
|
\begin{lstlisting}
|
||||||
|
MATMUL_START
|
||||||
|
MATMUL_CRC32=51b7f2d2
|
||||||
|
TIME_PROLOGUE=26580
|
||||||
|
TIME_LOOP=171840
|
||||||
|
TIME_LOOP_PER=17184
|
||||||
|
TIME_EPILOGUE=14640
|
||||||
|
TIME_TOTAL=213060
|
||||||
|
MATMUL_DONE
|
||||||
|
\end{lstlisting}
|
||||||
|
|
||||||
|
CRC32校验值\texttt{51b7f2d2}与参考模型完全一致,验证了硬件乘法结果和DMA批量数据搬运的正确性。时序分析显示:初始化阶段(PROLOGUE)占26,580个CPU周期,批量计算循环(LOOP)占171,840周期(每组约17,184周期),收尾阶段(EPILOGUE)占14,640周期,总计213,060周期。按CPU频率33 MHz折算,完成全部矩阵运算的时间约为6.46 ms。
|
||||||
|
|
||||||
|
\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总线协议开销的实际效果。
|
||||||
|
|
||||||
|
全部KAT测试用例(360个,覆盖三种操作×三种等级)逐字节比对NIST标准答案通过,Decaps隐式拒绝路径同样验证正确。
|
||||||
|
|
||||||
|
\subsection{系统时序收敛}
|
||||||
|
|
||||||
|
完整SoC在Xilinx Artix-7 XC7A200T-1器件上完成布局布线后通过时序收敛。主要时钟域的关键时序指标如表\ref{tab:sys_timing}所示。
|
||||||
|
|
||||||
|
\begin{table}[htbp]
|
||||||
|
\centering
|
||||||
|
\caption{SoC布局布线后时序收敛结果}
|
||||||
|
\label{tab:sys_timing}
|
||||||
|
\begin{tabular}{lccc}
|
||||||
|
\toprule
|
||||||
|
\textbf{时钟域} & \textbf{频率} & \textbf{Setup WNS} & \textbf{违例端点} \\
|
||||||
|
\midrule
|
||||||
|
cpu\_clk & 33 MHz & +2.716 ns & 0 / 17,197 \\
|
||||||
|
sys\_clk & 50 MHz & +0.146 ns & 0 / 69,558 \\
|
||||||
|
\bottomrule
|
||||||
|
\end{tabular}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
\subsection{系统资源利用}
|
||||||
|
|
||||||
|
SoC整体资源利用见表\ref{tab:sys_util}。数据来自Vivado 2019.2布局布线后报告(器件XC7A200T-1,无DSP约束配置)。
|
||||||
|
|
||||||
|
\begin{table}[htbp]
|
||||||
|
\centering
|
||||||
|
\caption{SoC整体资源利用}
|
||||||
|
\label{tab:sys_util}
|
||||||
|
\begin{tabular}{lccc}
|
||||||
|
\toprule
|
||||||
|
\textbf{资源} & \textbf{已用} & \textbf{可用} & \textbf{利用率} \\
|
||||||
|
\midrule
|
||||||
|
Slice LUTs(Total) & 71,196 & 133,800 & 53.2\% \\
|
||||||
|
Slice LUTs(Logic) & 69,453 & 133,800 & 51.9\% \\
|
||||||
|
Slice Registers & 39,690 & 267,600 & 14.8\% \\
|
||||||
|
Block RAM Tile & 28.0 & 365 & 7.7\% \\
|
||||||
|
~~RAMB36E1 & 10 & 365 & 2.7\% \\
|
||||||
|
~~RAMB18E1 & 36 & 730 & 4.9\% \\
|
||||||
|
DSP48E1 & 0 & 740 & 0.0\% \\
|
||||||
|
BUFG & 4 & 32 & 12.5\% \\
|
||||||
|
\bottomrule
|
||||||
|
\end{tabular}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
表\ref{tab:module_util}给出按模块层次分解的资源利用明细,从中可以清晰看出各子系统在总体面积中的贡献比例。
|
||||||
|
|
||||||
|
\begin{table}[htbp]
|
||||||
|
\centering
|
||||||
|
\footnotesize
|
||||||
|
\caption{主要模块资源利用明细}
|
||||||
|
\label{tab:module_util}
|
||||||
|
\begin{tabular}{lrrrr}
|
||||||
|
\toprule
|
||||||
|
\textbf{模块} & \textbf{LUT} & \textbf{FF} & \textbf{BRAM} & \textbf{占比} \\
|
||||||
|
\midrule
|
||||||
|
ML-KEM & 39,029 & 25,868 & 2$\times$36 + 6$\times$18 & 54.8\% \\
|
||||||
|
~~FFT & 6,949 & 1,083 & 8$\times$36 + 4$\times$18 & 9.8\% \\
|
||||||
|
矩阵乘法 & 10,204 & 3,239 & — & 14.3\% \\
|
||||||
|
CPU (core\_top) & 8,553 & 5,591 & 20$\times$18 & 12.0\% \\
|
||||||
|
DMA/CDMA & 1,558 & 1,476 & 1$\times$18 & 2.2\% \\
|
||||||
|
Crossbar + CDC + 适配器 & 2,102 & 621 & — & 3.0\% \\
|
||||||
|
matmul序列桥 & 247 & 578 & — & 0.3\% \\
|
||||||
|
UART + confreg + DVI + SRAM & 1,711 & 1,222 & — & 2.4\% \\
|
||||||
|
顶层胶合逻辑 & 812 & 4 & — & 1.1\% \\
|
||||||
|
\midrule
|
||||||
|
\textbf{合计} & \textbf{71,165} & \textbf{39,682} & \textbf{10$\times$36 + 31$\times$18} & \textbf{100\%} \\
|
||||||
|
\bottomrule
|
||||||
|
\end{tabular}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
注: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存储。
|
||||||
|
|
||||||
|
DSP使用量为零体现了竞赛规则约束和设计策略的一致性——ML-KEM不使用DSP、矩阵乘法受竞赛条款限制、FFT采用16-bit窄数据宽度,三者共同导致了全LUT乘法映射的设计决策。
|
||||||
|
|
||||||
|
\subsection{功耗分析}
|
||||||
|
|
||||||
|
布局布线后系统功耗的层次化分解如表\ref{tab:power}所示。
|
||||||
|
|
||||||
|
\begin{table}[htbp]
|
||||||
|
\centering
|
||||||
|
\small
|
||||||
|
\caption{系统功耗层次化分解}
|
||||||
|
\label{tab:power}
|
||||||
|
\begin{tabular}{lcc}
|
||||||
|
\toprule
|
||||||
|
\textbf{模块} & \textbf{动态功耗(W)} & \textbf{占动态功耗比} \\
|
||||||
|
\midrule
|
||||||
|
ML-KEM(u\_mlkem) & 0.218 & 40.0\% \\
|
||||||
|
PLL时钟生成器 & 0.138 & 25.3\% \\
|
||||||
|
矩阵乘法(u\_matmul) & 0.081 & 14.9\% \\
|
||||||
|
FFT(u\_FFT) & 0.027 & 5.0\% \\
|
||||||
|
CPU(u\_cpu) & 0.025 & 4.6\% \\
|
||||||
|
DMA/CDMA & 0.008 & 1.5\% \\
|
||||||
|
其它外设与总线 & 0.048 & 8.8\% \\
|
||||||
|
\midrule
|
||||||
|
\textbf{动态功耗合计} & \textbf{0.545} & 100\% \\
|
||||||
|
器件静态功耗 & 0.141 & — \\
|
||||||
|
\midrule
|
||||||
|
\textbf{总片上功耗} & \textbf{0.686} & — \\
|
||||||
|
\bottomrule
|
||||||
|
\end{tabular}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
系统总功耗为0.686 W,其中动态功耗占79.4\%(0.545 W),静态功耗占20.6\%(0.141 W)。ML-KEM是最大的动态功耗来源(40.0\%),与资源利用分布一致。PLL以25.3\%的比例位居第二,反映了其驱动多时钟域(cpu\_clk、sys\_clk)的固有功耗开销。按资源类型划分,信号翻转功耗(0.194 W,占动态功耗35.6\%)和Slice Logic功耗(0.109 W,20.0\%)是两类最大的器件级功耗来源。
|
||||||
|
|
||||||
|
\subsection{设计复杂度分析}
|
||||||
|
|
||||||
|
表\ref{tab:complexity}列出主要模块的Rent指数和平均扇出数。Rent指数是衡量模块内部互联复杂度的指标,数值越低表示结构越规整、局部互联越密集。
|
||||||
|
|
||||||
|
\begin{table}[htbp]
|
||||||
|
\centering
|
||||||
|
\small
|
||||||
|
\caption{模块设计复杂度(Rent指数)}
|
||||||
|
\label{tab:complexity}
|
||||||
|
\begin{tabular}{lccr}
|
||||||
|
\toprule
|
||||||
|
\textbf{模块} & \textbf{Rent指数} & \textbf{平均扇出} & \textbf{总实例数} \\
|
||||||
|
\midrule
|
||||||
|
矩阵乘法器 & 0.60(Normal) & 3.76 & 15,711 \\
|
||||||
|
CPU & 0.59(Normal) & 3.96 & 15,822 \\
|
||||||
|
UART & 0.55(Normal) & 3.54 & 1,296 \\
|
||||||
|
DMA/CDMA & 0.46(Low) & 3.31 & 3,435 \\
|
||||||
|
ML-KEM & 0.41(Low) & 3.78 & 87,846 \\
|
||||||
|
\bottomrule
|
||||||
|
\end{tabular}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
ML-KEM的Rent指数(0.41)在主要模块中最低,表明其数据通路具有高度规整的局部互联特性——多项式系数在相邻流水级之间传递,NTT蝶形单元按固定模式访问系数寄存器,这种结构化特征有利于布局布线的时序收敛。相比之下,矩阵乘法器和CPU的Rent指数较高(0.59--0.60),反映其控制逻辑的随机互联特性。FFT/ML-KEM共享从机以87,846个实例的规模(占全系统66.7\%的LUT实例数)成为物理设计中最庞大的层次化模块。
|
||||||
|
|
||||||
|
\subsection{高扇出网络分析}
|
||||||
|
|
||||||
|
表\ref{tab:fanout}列出布局布线后扇出最高的前5个网络,这些网络是潜在的时序瓶颈和布线拥塞来源。
|
||||||
|
|
||||||
|
\begin{table}[htbp]
|
||||||
|
\centering
|
||||||
|
\small
|
||||||
|
\caption{高扇出网络(Top 5)}
|
||||||
|
\label{tab:fanout}
|
||||||
|
\begin{tabular}{lcl}
|
||||||
|
\toprule
|
||||||
|
\textbf{网络名称} & \textbf{扇出} & \textbf{驱动源} \\
|
||||||
|
\midrule
|
||||||
|
sys\_clk(全局时钟) & 35,652 & BUFG \\
|
||||||
|
ML-KEM ek\_bram延迟寄存器 & 24,670 & LUT5 \\
|
||||||
|
CPU复位网络 & 5,108 & LUT1 \\
|
||||||
|
ML-KEM poly\_mul计数器 & 3,758 & FDCE \\
|
||||||
|
matmul FSM独热状态 & 2,151 & FDRE \\
|
||||||
|
\bottomrule
|
||||||
|
\end{tabular}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
\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{结论}
|
||||||
|
|
||||||
|
本设计在龙芯SoC平台上成功构建了一个集成多种硬件加速器的异构计算系统。
|
||||||
|
|
||||||
|
在AXI总线集成架构方面,以AxiCrossbar\_2x8为核心互连部件,实现了CPU和DMA双主设备对8个从设备的统一地址空间访问,涵盖外部SRAM控制器、UART串口、DVI显示控制器、GPIO与定时器、DMA配置空间、FFT与ML-KEM共享加速窗口和矩阵乘法器。共享从机的内部二次路由设计——FFT与ML-KEM通过地址位[15:12]区分并共享Slave 6端口——在不增加Crossbar端口数量的前提下实现了两种加速器的无缝共存,体现了在资源受限场景下灵活地址规划的工程价值。
|
||||||
|
|
||||||
|
在DMA数据搬运体系方面,4通道CDMA控制器与matmul自动序列控制器的协同设计显著降低了CPU在批量计算任务中的参与度。序列控制器将逐组的源数据读取、矩阵计算触发、结果写回和组索引递增等操作固化为硬件状态机的自动循环,CPU仅需在批量任务启动前一次性配置6个序列参数。三条数据路径——mem2mem直接存储搬运、本地Endpoint加速器旁路通信和序列控制器的全自动批量流水——覆盖了SoC中所有的数据传输场景。
|
||||||
|
|
||||||
|
在赛事任务完成度方面,矩阵乘法加速器严格遵循赛事规范:不使用DSP资源而全部以LUT逻辑实现32乘32-bit乘法;支持4乘4最大矩阵规模并兼容更小的非方阵规模(通过填零对齐);输出结果按66-bit精度拆分为3个32-bit字的标准格式;输入输出数据布局完全符合128字节源组和192字节结果组的赛事定义。CRC32校验、批量序列测试和系统级仿真验证共同确认了加速器设计的完整正确性。
|
||||||
|
|
||||||
|
在后量子密码硬件集成方面,ML-KEM加速器通过共享AXI从机与FFT复用Slave 6端口,在不增加Crossbar端口数量的前提下完整实现了FIPS 203标准的全部三种操作和三种安全等级的硬件加速。三路径诊断测试(软件参考、CPU寄存器、DMA窗口各100次迭代,覆盖ML-KEM-512/768/1024三种等级)全部通过,验证了IP核在真实SoC环境中的功能正确性和软硬件接口的长期运行稳定性。
|
||||||
|
|
||||||
|
\begin{thebibliography}{10}
|
||||||
|
|
||||||
|
\bibitem{loongson_soc}
|
||||||
|
龙芯中科技术有限公司.
|
||||||
|
\emph{龙芯杯全国大学生系统能力培养大赛——实验平台开发手册}.
|
||||||
|
2024.
|
||||||
|
|
||||||
|
\bibitem{fips203}
|
||||||
|
National Institute of Standards and Technology.
|
||||||
|
\emph{FIPS 203: Module-Lattice-Based Key-Encapsulation Mechanism Standard}.
|
||||||
|
August 2024.
|
||||||
|
|
||||||
|
\bibitem{artix7}
|
||||||
|
Xilinx Inc.
|
||||||
|
\emph{7 Series FPGAs Data Sheet: Overview (DS180)}.
|
||||||
|
v2.6, 2020.
|
||||||
|
|
||||||
|
\bibitem{vivado}
|
||||||
|
Xilinx Inc.
|
||||||
|
\emph{Vivado Design Suite User Guide: Synthesis (UG901)}.
|
||||||
|
v2019.2, 2019.
|
||||||
|
|
||||||
|
\bibitem{axi_spec}
|
||||||
|
ARM Ltd.
|
||||||
|
\emph{AMBA AXI and ACE Protocol Specification}.
|
||||||
|
Issue H, 2013.
|
||||||
|
|
||||||
|
\end{thebibliography}
|
||||||
|
|
||||||
|
\end{document}
|
||||||
Reference in New Issue
Block a user