update system design report

This commit is contained in:
2026-07-15 11:09:57 +08:00
parent c4d36515cc
commit fe20f28a72
46 changed files with 35507 additions and 1285 deletions

View File

@@ -1,458 +1,594 @@
\documentclass[11pt,a4paper,twoside]{ctexart}
% =============================================================================
% CICIEC 2026 Loongson Regional — System Design Report
% 基于龙芯SoC的后量子密码与矩阵运算加速系统设计报告
% =============================================================================
\usepackage[top=2.45cm,bottom=2.45cm,left=2.65cm,right=2.65cm]{geometry}
\documentclass[11pt,a4paper,twoside]{article}
% ---- Packages ----
\usepackage[UTF8,heading=true]{ctex}
\usepackage[top=2.5cm,bottom=2.5cm,left=2.8cm,right=2.8cm]{geometry}
\usepackage{fancyhdr}
\usepackage{graphicx}
\usepackage{booktabs}
\usepackage{tabularx}
\usepackage{array}
\usepackage{amsmath,amssymb}
\usepackage{xcolor}
\usepackage{enumitem}
\usepackage{fancyhdr}
\usepackage{hyperref}
\usepackage{caption}
\usepackage{placeins}
\usepackage{enumitem}
\usepackage{float}
\usepackage{listings}
\usepackage[normalem]{ulem}
\usepackage{longtable}
\usepackage{multirow}
\usepackage{array}
\usepackage{xcolor}
\definecolor{accent}{HTML}{1F4E79}
\definecolor{lightblue}{HTML}{EAF2F8}
\definecolor{lightgray}{HTML}{F3F4F6}
\hypersetup{colorlinks=true,linkcolor=accent,urlcolor=accent,citecolor=accent}
\captionsetup{font=small,labelfont=bf,skip=5pt}
\setlength{\parindent}{2em}
\setlength{\parskip}{3pt plus 1pt minus 1pt}
\setlength{\emergencystretch}{2em}
\setlength{\textfloatsep}{12pt plus 3pt minus 2pt}
\setlength{\intextsep}{10pt plus 2pt minus 2pt}
\renewcommand{\arraystretch}{1.18}
\setlist[itemize]{leftmargin=2em,itemsep=2pt,topsep=3pt}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[LO,RE]{龙芯 SoC 异构加速系统设计报告}
\fancyhead[RO,LE]{\thepage}
% ---- Page style ----
\setlength{\headheight}{14pt}
\lstset{basicstyle=\ttfamily\small,breaklines=true,frame=single,backgroundcolor=\color{lightgray},numbers=none}
\newcolumntype{Y}{>{\raggedright\arraybackslash}X}
\newcommand{\code}[1]{\texttt{#1}}
\newcommand{\pending}{\textcolor{red!70!black}{待当前版本复测}}
\pagestyle{fancy}
\fancyhead[LO,RE]{系统设计报告}
\fancyhead[RO,LE]{\thepage}
\fancyhead[CO,CE]{}
\fancyfoot[C]{\thepage}
\renewcommand{\headrulewidth}{0.4pt}
\renewcommand{\footrulewidth}{0pt}
\input{report_metrics.tex}
% ---- Spacing ----
\setlength{\parskip}{4pt plus 2pt minus 1pt}
\setlength{\parindent}{2em}
\setlength{\intextsep}{6pt plus 2pt}
\setlength{\textfloatsep}{8pt plus 2pt}
\captionsetup{skip=4pt}
% ---- Hyperlinks ----
\hypersetup{
colorlinks=true,
linkcolor=black,
citecolor=black,
urlcolor=blue
}
% ---- Import auto-generated metrics ----
% Generated by tools/run_report_tests.sh refresh — do not edit manually
\input{report_metrics}
% ---- Custom commands ----
\newcommand{\Zq}{\mathbb{Z}_q}
\newcommand{\etal}{\textit{et al.}}
\newcommand{\tabincell}[2]{\begin{tabular}{@{}#1@{}}#2\end{tabular}}
\begin{document}
% ===========================================================================
% TITLE PAGE
% ===========================================================================
\begin{titlepage}
\thispagestyle{empty}
\begin{center}
\vspace*{20pt}
\includegraphics[width=0.42\textwidth]{logo_cicc.png}
\vspace{28pt}
\vspace*{2cm}
{\fontsize{20pt}{28pt}\selectfont\bfseries 第十届全国大学生集成电路创新创业大赛\par}
\vspace{54pt}
{\fontsize{25pt}{34pt}\selectfont\bfseries 基于龙芯 SoC 的后量子密码与矩阵运算加速系统\par}
\vspace{16pt}
{\fontsize{17pt}{24pt}\selectfont 系统设计与验证报告\par}
\includegraphics[width=0.45\textwidth]{logo_cicc.png}
\vspace{1.5cm}
{\LARGE\heiti 系统设计报告}
\vspace{0.8cm}
{\Large\heiti 基于龙芯SoC的后量子密码与矩阵运算加速系统}
\vspace{2.0cm}
\begin{tabular}{rl}
\textbf{参赛队伍:} & \underline{\hspace{5cm}} \\
\textbf{赛\quad{}题:} & \underline{龙芯中科杯} \\
\textbf{竞赛名称:} & \underline{CICIEC 2026 第十届全国大学生集成电路创新创业大赛} \\
\textbf{所属赛区:} & \underline{\hspace{5cm}} \\
\textbf{提交日期:} & \underline{2026年7月} \\
\textbf{文档版本:} & \underline{\EvidenceRevision{} — \EvidenceDate{}} \\
\end{tabular}
\vfill
\end{center}
\vfill
\noindent\begin{tabularx}{\textwidth}{>{\bfseries}p{3.2cm}X}
参赛杯赛 & 龙芯中科杯 \\
队伍编号 & CICC1008439 \\
团队名称 & 碳基生物 \\
目标器件 & Xilinx Artix-7 XC7A200T-1 \\
证据版本 & \EvidenceRevision \\
报告日期 & \EvidenceDate \\
\end{tabularx}
\vspace{22pt}
\end{titlepage}
\pagenumbering{Roman}
\section*{摘要}
\addcontentsline{toc}{section}{摘要}
本项目在赛事提供的 LoongArch32r SoC 框架上集成 ML-KEM、1024 点 FFT 和
4$\times$4 矩阵乘法三类专用加速器,并以四通道 DMA 和矩阵乘法批处理序列器降低
CPU 搬运与调度开销。系统采用 CPU、系统总线和 ML-KEM 三时钟域架构;跨域控制、
状态和数据通过显式 CDC 结构传递。矩阵乘法器使用四路 LUT 乘法器,每拍并行产生
一个输出元素点积所需的四项乘积,并用双 Bank、流水 CRC32 与本地 DMA endpoint
支撑 5000 组连续任务。报告重点说明设计边界、关键决策及可复现证据,不把参考 SoC
基础设施误列为本项目贡献。
现有证据显示,历史实现的总体 WNS 为 +\OverallWNS\,ns,资源占用为
\SliceLUTs{} LUT、\SliceFFs{} FF、\BramTiles{} BRAM Tile 和 \DspCount{} DSP;
板级 5000 组矩阵乘法耗时为 \MatmulBoardMs\,ms,CRC 校验通过。由于当前分支经历
PLL 与实现报告合并,所有 PPA 和板级性能必须按附带清单重新生成后再作为最终结论。
\noindent\textbf{关键词:} LoongArch32r;ML-KEM;DMA;矩阵乘法;FFT;跨时钟域;FPGA
\section*{主要贡献}
\addcontentsline{toc}{section}{主要贡献}
\begin{itemize}
\item 在固定 AXI 端口预算内完成三类加速器集成,并用二级地址译码共享 FFT/ML-KEM 窗口;
\item 构建 mem2mem、mem2ep、ep2mem 三类 DMA 路径及矩阵乘法硬件批处理序列器;
\item 将 ML-KEM 计算域提升至独立时钟,并为命令、数据、状态和复位建立明确 CDC 边界;
\item 建立从 RTL 静态检查、SoC 仿真、布局布线到板级评测的版本化证据链。
\end{itemize}
% ===========================================================================
% TABLE OF CONTENTS
% ===========================================================================
\tableofcontents
\clearpage
\pagenumbering{arabic}
\newpage
\section{需求、约束与设计边界}
% ===========================================================================
% 1. INTRODUCTION
% ===========================================================================
\section{绪论}
\subsection{需求分解}
表~\ref{tab:req}把竞赛目标转化为可验证的工程要求。每项要求都绑定明确证据,避免以
“能够综合”替代功能、时序或板级行为验证。
\subsection{设计背景与目标}
\begin{table}[H]
\centering
\small
\caption{系统需求与验收证据}
\label{tab:req}
\begin{tabularx}{\textwidth}{p{1.2cm}Y Y p{2.1cm}}
\toprule
编号 & 要求 & 验收证据 & 当前状态 \\
\midrule
R1 & 4$\times$4 无符号矩阵乘法,5000 组连续输入,结果 CRC32 正确 & 官方板级评测日志:CRC 匹配且收到 \code{MATMUL\_DONE} & 已有基线,待复测 \\
R2 & 复位释放前不得产生 UART、DMA 或加速器事务 & ILA/测试平台断言与板级观察 & \pending \\
R3 & 矩阵乘法路径不使用 DSP48E1 & 布局布线后 utilization 与自动 DSP 检查 & 已有基线,待复测 \\
R4 & ML-KEM-512/768/1024 的 KeyGen、Encaps、Decaps 正确 & 3 个固定 KAT 向量,SW/CPU/DMA 三路径各 100 次 & 已有基线,待复测 \\
R5 & FFT CPU 与 DMA 路径结果和软件参考一致 & 1024 点逐点最大误差及端到端耗时 & 需补全最大误差日志 \\
R6 & 所有同步时钟域 setup/hold 收敛,CDC 结构可审计 & timing、clock interaction、CDC、DRC 报告 & 已有基线,待复测 \\
\bottomrule
\end{tabularx}
\end{table}
随着量子计算技术的快速发展,传统公钥密码体系面临严峻挑战。美国国家标准与技术研究院于2024年正式发布的FIPS 203标准确立了ML-KEM作为后量子密钥封装机制的地位,标志着后量子密码从学术研究向工业应用的转折点。与此同时,矩阵乘法作为科学计算、信号处理与机器学习的基础运算,其硬件加速在嵌入式计算场景中具有广泛需求。本届集成电路创新创业大赛龙芯中科杯赛题要求参赛者在OpenLA500处理器平台上,设计并实现包含矩阵乘法加速器与ML-KEM密码IP的完整SoC系统,在资源受限的FPGA器件上同时满足功能正确性与性能要求。
\subsection{软硬件边界}
赛事框架提供 CPU、基础存储控制器、UART、DVI、confreg 和 AXI 基础互连。本项目的
主要工作是加速器 RTL、DMA 数据路径、批处理控制、共享地址窗口、CDC 集成以及配套
软件。CPU 只负责配置、启动、完成检测和结果判定;NTT、Keccak、多项式乘法、FFT
蝶形和矩阵乘积累加均在硬件内部执行。
本设计的核心目标是在Xilinx Artix-7 xc7a200tfbg676-1 FPGA器件上构建一个功能完整的异构计算SoC系统,具体包括三项设计内容。第一,设计一个支持4x4无符号矩阵乘法的硬件加速器,不使用DSP资源,完成5000组矩阵计算的批量处理任务,并通过CRC32校验结果正确性。第二,根据FIPS 203标准实现全参数可配置的ML-KEM硬件IP,覆盖ML-KEM-512、ML-KEM-768与ML-KEM-1024三个安全等级,支持密钥生成、封装与解封装全部三种操作。第三,设计通用DMA子系统与批量任务调度器,将多个计算加速器有机集成到统一的AXI总线架构中,实现CPU控制、DMA搬运与加速器计算的流水化协同。
\begin{figure}[tbp]
\centering
\includegraphics[width=\textwidth,height=0.53\textheight,keepaspectratio]{figures/system_boundary.pdf}
\caption{系统组成、贡献边界与主要数据通路}
\label{fig:boundary}
\subsection{设计原则与创新点}
系统设计遵循四条基本原则。第一条原则是模块化分离原则。将矩阵乘法、FFT和ML-KEM三个计算加速器设计为相互独立的AXI外设,各自拥有独立的地址空间、控制寄存器和中断通道,使得每个加速器可单独验证、单独优化,系统集成时仅通过跨时钟域隔离与地址解码完成互连。第二条原则是资源复用原则。ML-KEM内部算法涉及Keccak-f[1600]置换、SHA3/SHAKE哈希族、NTT数论变换、Barrett模乘、CBD中心二项分布采样以及压缩解压缩等多种运算算子。设计中采用单个Keccak核在顶层有限状态机的时间分片调度下被SHA3/SHAKE、SampleNTT和CBD三个消费者分时复用,NTT正变换与逆变换共享同一组蝶形单元流水线,解封装流程中的重加密阶段直接复用封装状态序列。第三条原则是数据搬运与计算解耦原则。通用DMA子系统独立于计算加速器,通过内存到设备、设备到内存以及设备本地端点三种传输模式,将数据搬运从CPU寄存器逐字读写中解放出来,使计算流水线的瓶颈从总线事务转移到算术吞吐率。第四条原则是批量调度与双缓冲原则。矩阵乘法批量序列器通过双Bank乒乓机制,将批量任务调度、数据加载、计算启动与结果写回四个阶段完全流水化,一个Bank执行计算时另一个Bank进行数据加载或结果写回,从而隐藏ExtRAM访问延迟。
本设计的主要创新点体现在三个方面。首先,提出了一套高效的跨时钟域互连方案,在CPU时钟域、系统总线时钟域和ML-KEM算法时钟域之间采用全五通道AXI双时钟FIFO进行时钟域隔离,同时配合严格的异步复位释放链和中断同步器,在保持各时钟域独立约束的前提下保证了数据与控制信号的可靠传递。其次,针对竞争评分机制对批量处理延迟的极致要求,设计了快速通道模式,在保证CRC32增量计算正确性的前提下跳过每组结果的逐字写回,将批量矩阵乘法的端到端延迟推进到毫秒量级。最后,ML-KEM解封装中的隐式拒绝路径采用了常量时间比较策略,整个重加密密文与输入密文的逐字节比对不进行提前退出,从根本上杜绝了时序侧信道信息泄露,这是后量子密码实现中至关重要的安全设计考量。
\subsection{代码规模与开发环境}
本设计的基础SoC平台来自龙芯中科提供的竞赛发布包,其核心处理器为OpenLA500。OpenLA500是一款实现了龙芯架构32位精简版指令集(LoongArch32R)的处理器核,采用单发射五级流水线架构,分为取指、译码、执行、访存和写回五个流水级。处理器核内置两路组相联的指令和数据Cache、32项TLB以及简易分支预测器,对外通过标准AXI接口与系统总线互连。该处理器已在0.13微米工艺下完成流片验证,实测频率100 MHz时的Dhrystone分数为0.78 DMIPS/MHz,CoreMark分数为2.75 CoreMark/MHz。在软件生态方面,U-Boot、Linux 5.14、UCore和RT-Thread等常用系统软件已完成对该处理器的适配。
系统RTL代码采用SystemVerilog编写,覆盖SoC顶层集成、三个计算加速器及其子模块、DMA子系统、跨时钟域桥接模块以及相关的仿真测试平台。软件部分包括运行于OpenLA500 CPU上的C语言驱动程序和测试程序,涵盖矩阵乘法评测、FFT功能验证以及ML-KEM全参数系统级诊断测试。FPGA综合与布局布线使用Xilinx Vivado 2019.2工具链完成,目标器件为xc7a200tfbg676-1。RTL仿真采用Xilinx XSIM进行波形验证与定时仿真,软件交叉编译使用龙芯GCC工具链(loongarch32r-linux-gnusf-gcc 8.3)生成MIPS32可执行文件。RTL静态检查通过开源lint工具完成。
% ===========================================================================
% 2. SYSTEM ARCHITECTURE & HW/SW PARTITIONING
% ===========================================================================
\section{系统架构设计与软硬件功能划分}
\subsection{系统总体架构}
系统的顶层模块围绕AXI4总线互连矩阵组织所有功能模块。该互连矩阵配置为两个主端口、八个从端口的工作模式,运行于系统时钟域。两个主端口分别连接OpenLA500处理器CPU和数据搬运引擎DMA,八个从端口挂载系统内存、外设以及三个计算加速器的控制接口。整个系统划分为三个异步时钟域,由单一PLL产生。CPU时钟域采用33.333 MHz运行频率,承载OpenLA500处理器核心、一级缓存与AXI主设备接口。系统时钟域采用50 MHz运行频率,承载总线互连矩阵、DMA子系统、FFT加速器、矩阵乘法加速器以及UART、SRAM控制器等基础外设。ML-KEM算法时钟域采用76.923 MHz运行频率,承载ML-KEM的AXI从设备接口、算法控制器、Keccak置换核、NTT单元以及多项式运算模块的全部数据通路。
系统的总体架构如图\ref{fig:system_arch}所示。CPU通过跨时钟域桥接模块接入系统总线,该桥接模块在AXI协议的五条通道上各部署一个双时钟先进先出缓冲队列,将CPU时钟域的读写事务安全传递至系统时钟域。DMA子系统以第二主设备身份直接接入总线互连矩阵,在系统时钟域内向任意从设备发起AXI突发传输。三个计算加速器中,矩阵乘法加速器和FFT加速器完全运行于系统时钟域,ML-KEM加速器则通过第二个跨时钟域桥接模块从系统时钟域跨越至ML-KEM专用算法时钟域。这种分层跨时钟域架构的设计决策基于各模块的计算特征频率需求:矩阵乘法加速器关注批量吞吐率但内部流水线深度较浅,50 MHz的系统时钟已足够满足其时序要求;ML-KEM算法核心包含深度流水化的Keccak轮函数和NTT蝶形单元,需要更高的时钟频率以在串行FSM调度模式下获得可接受的单次操作延迟。
\begin{figure}[htbp]
\centering
\includegraphics[width=0.92\textwidth]{system_arch.png}
\caption{系统总体架构图}
\label{fig:system_arch}
\end{figure}
\FloatBarrier
\section{系统架构}
\subsection{地址空间分配}
\subsection{互连与地址空间}
如图~\ref{fig:boundary},CPU 和 DMA 分别作为 AXI Master 0/1 接入 Crossbar。DMA
通过 AXI 访问存储器,同时通过本地 endpoint 直接访问矩阵乘法双 Bank,避免把内部
缓冲搬运再次送入 Crossbar。关键地址窗口见表~\ref{tab:addr};完整寄存器定义以 RTL
和 BSP 头文件为准。
系统采用统一的物理地址空间,各计算加速器通过固定的从端口挂载在总线互连矩阵上,每个加速器拥有独立的地址范围。竞赛发布包中总线互连矩阵的八个从端口已有既定分配:从端口零连接片上SRAM(基地址0x1c00\_0000,8 MB空间),从端口一保留,从端口二连接AXI转APB桥后挂载UART(基地址0x1f00\_0000),从端口三连接DVI显示控制器(基地址0x1f10\_0000),从端口四连接系统配置与中断控制器(基地址0x1f20\_0000),从端口五连接DMA从设备端口(基地址0x1f30\_0000),从端口六连接FFT加速器(基地址0x1f40\_0000),从端口七保留供参赛者扩展使用(基地址0x1f50\_0000)。
\begin{table}[tbp]
\centering
\footnotesize
\caption{关键物理地址窗口}
\label{tab:addr}
\begin{tabularx}{\textwidth}{p{4.6cm}p{3.2cm}Y}
\toprule
物理地址 & 模块 & 说明 \\
\midrule
\code{0x1C00\_0000--0x1C7F\_FFFF} & BaseRAM/ExtRAM & 程序、源数据和结果存储 \\
\code{0x1F00\_0000} & UART 16550 & 串口输出 \\
\code{0x1F20\_0000} & confreg & GPIO、定时器与中断 \\
\code{0x1F30\_0000} & DMA / 序列器 & DMA 通道位于低 0x200 B;matmul 序列器从 0x200 开始 \\
\code{0x1F40\_0000} & ML-KEM / FFT & 由地址位二次译码的共享 Slave 6 窗口 \\
\code{0x1F50\_0000} & matmul & 控制、CRC 和双 Bank 数据窗口 \\
\bottomrule
\end{tabularx}
完整的地址空间分配如表\ref{tab:addr}所示。
\begin{table}[H]
\centering
\caption{AXI总线互连矩阵从端口地址空间分配}
\label{tab:addr}
\begin{tabular}{cclp{4.6cm}}
\toprule
从端口 & 物理基地址 & 模块 & 用途与说明 \\
\midrule
S0 & 0x1c00\_0000 & 片上SRAM & 8 MB空间,BaseRAM(bit22=0,存放程序)与ExtRAM(bit22=1,存放数据) \\
S1 & 0x0000\_0000 & 保留 & 发布包中未分配,保留供扩展使用 \\
S2 & 0x1f00\_0000 & UART & AXI转APB桥接串口,波特率115200,用于调试输出与评测通信 \\
S3 & 0x1f10\_0000 & DVI显示控制器 & 视频输出,800×600分辨率,RGB 3-3-2位宽 \\
S4 & 0x1f20\_0000 & Confreg & 按键、拨码开关、LED、数码管、中断控制器、外部定时器 \\
S5 & 0x1f30\_0000 & DMA控制窗口 & 四通道DMA寄存器(0x000–0x1FF)与矩阵批处理序列器(0x200–0x21F) \\
S6 & 0x1f40\_0000 & FFT/ML-KEM共享窗口 & ML-KEM寄存器与三组批量数据窗(低16 KB),FFT数据窗与CSR(高16 KB) \\
S7 & 0x1f50\_0000 & 矩阵乘法加速器 & 本设计新增:控制状态、CRC32、双Bank矩阵缓冲区 \\
\bottomrule
\end{tabular}
\end{table}
\subsection{时钟、复位与 CDC}
系统由 50\,MHz 输入时钟经 PLL 产生三个同步逻辑域:CPU 域、系统总线域和 ML-KEM
计算域,拓扑见图~\ref{fig:cdc}。CPU--SYS 之间跨越完整 AXI 通道;SYS--ML-KEM
之间跨越命令、窗口数据、完成状态和中断。设计原则是:多位数据只随握手或稳定窗口
跨域,单比特状态经过同步器,脉冲采用保持/应答结构,复位采用异步置位、同步释放。
\subsection{时钟域划分与跨时钟域设计}
复位约束比普通功能复位更严格:PLL 锁定且各域同步器完成释放前,AXI valid、DMA
请求、加速器 start 和 UART 写使能必须保持为零。这一约束需要通过专门的复位前监控
测试确认,不能由“复位后程序正常运行”间接推出。
系统三个时钟域之间的关系在引脚约束文件中通过异步时钟组约束声明为彼此独立的时钟域,时序分析引擎对跨域路径不进行建立保持时间检查,时序收敛的职责完全落在跨时钟域电路的设计正确性上。CPU到系统总线的跨域路径承载AXI读写事务,采用全五通道双时钟先进先出缓冲队列方案。写地址通道、写数据通道和读地址通道的缓冲队列写入端工作在CPU时钟域,读出端工作在系统时钟域;写响应通道和读数据通道的缓冲队列写入端工作在系统时钟域,读出端工作在CPU时钟域。每条通道的缓冲队列独立管理自身的满空标志,通过有效—就绪握手协议实现跨域反压传递。这种设计保证了AXI协议的事务顺序性属性在跨域后不丢失,CPU端提交的写事务在系统总线端按顺序可见,读事务的响应数据同样按顺序返回。
\begin{figure}[tbp]
\centering
\includegraphics[width=\textwidth,height=0.43\textheight,keepaspectratio]{figures/clock_cdc.pdf}
\caption{时钟、复位与跨时钟域边界}
\label{fig:cdc}
系统总线到ML-KEM算法域的跨域路径负载更大,除了承载寄存器级控制状态读写外,还需承载公钥、私钥和密文的批量数据窗口传输。设计中在FFT/ML-KEM共享地址解码模块内完成地址解码和目标选择后,对ML-KEM分支同样部署了全五通道双时钟先进先出缓冲队列,与CPU到系统总线的方案保持设计一致性。各通道的队列深度经过计算确保在最长的INCR突发传输下不会溢出,读数据通道的队列深度同时考虑了ML-KEM内部块存储器的同步读取延迟。
ML-KEM到CPU的中断信号属于单比特状态信号,从ML-KEM算法时钟域同步到系统时钟域采用两级触发器串联的经典同步器方案。中断信号设计为电平型而非脉冲型,由ML-KEM核心在完成时拉高,由CPU软件通过写一清零操作释放,这种设计避免了跨域脉冲捕捉的可靠性问题。由于中断信号在源时钟域的保持时间远大于目标时钟域的采样周期,两级同步器的亚稳态传播概率可以忽略不计。
时钟域划分与频率规划总结于表\ref{tab:clocks}。
\begin{table}[H]
\centering
\caption{时钟域划分与频率}
\label{tab:clocks}
\begin{tabular}{cccc}
\toprule
时钟域 & 周期 (ns) & 频率 (MHz) & 主要负载 \\
\midrule
cpu\_clk & 30.000 & \CpuFreqMHz{} & OpenLA500 CPU、Cache、AXI主设备接口 \\
sys\_clk & 20.000 & \SysFreqMHz{} & 总线互连矩阵、DMA、FFT、矩阵乘法、外设 \\
mlkem\_clk & 13.000 & \MlkemFreqMHz{} & ML-KEM AXI前端、算法控制器、Keccak、NTT \\
\bottomrule
\end{tabular}
\end{table}
\subsection{复位架构}
系统的复位网络遵循严格的分层异步释放同步撤离原则。外部板级复位信号经PLL锁定指示信号门控后,按照系统域、ML-KEM域、CPU域的顺序逐级释放。每一级使用复位同步器模块实现异步置位、同步撤离:复位置位时两级触发器同时异步清零,复位撤离时在目标时钟域内经过两个时钟周期的同步延迟后释放。释放顺序的级联关系由前一级的同步撤离信号作为后一级的释放门控,确保后续时钟域的复位不会超前于前级释放。仿真中实测的释放时序与设计预期一致:系统域复位在PLL锁定后约2.030 us释放,随后ML-KEM域复位在约2.070 us释放,最后CPU域复位在约2.085 us释放。CPU端首次AXI读地址有效信号出现在约2.205 us,与复位释放之间的间隔满足AXI协议对复位撤离到首次事务的时序要求。仿真中还验证了复位释放前各AXI通道上不存在未完成的事务,所有valid信号在复位期间保持为零,确保上电过程不会产生虚假总线事务。
\subsection{中断系统}
系统的中断聚合逻辑将五个中断源合并为单路CPU中断输入。五个中断源分别为:DMA完成中断、矩阵批量序列器完成中断、矩阵乘法加速器完成中断、ML-KEM算法完成中断以及系统配置寄存器通用中断。所有中断信号均为电平型,由中断源在事件发生时拉高,由CPU软件通过写一清零操作在中断服务程序中释放。性能测试程序出于零开销考虑,实际采用轮询方式检查各模块的状态寄存器中的完成标志位,而非依赖中断处理流程的开销。
\subsection{软硬件功能划分}
系统的软硬件功能划分遵循硬件负责计算密集型与数据搬运任务、软件负责控制调度与结果验证的原则。硬件层承担的功能包括:矩阵乘法的4x4无符号乘积与累加运算,FFT的1024点Radix-2\textsuperscript{2}单路径延迟反馈流水线计算,ML-KEM全流程的Keccak置换、NTT变换、多项式乘法与压缩解压缩运算,DMA的四通道AXI突发传输与内存到设备的端点搬运,以及矩阵批量序列器的5000组任务流水调度。硬件层不涉及任何算法参数的选择逻辑,所有安全等级和操作类型的配置均由软件写入控制寄存器完成。
软件层的职责位于三个抽象层次。最低层为寄存器驱动层,实现各加速器控制器寄存器的C语言结构体映射,封装启动、等待完成、读取结果等基本操作。中间层为DMA调度层,管理DMA通道的分配、源地址与目标地址的计算以及传输长度的配置。最高层为测试与验证层,构造测试输入数据,启动硬件计算流水线,等待完成信号,将硬件计算结果与软件参考模型进行比对,并通过串口输出测试结论和性能指标。
这种分层功能划分使系统行为在验证时具有良好的可观测性与可调试性。任何一个加速器的功能正确性可以通过软件层切换至寄存器逐字读写模式进行独立步进验证,然后再通过DMA批量模式验证完整流水线的高性能运行。ML-KEM的功能验证在三种数据传输路径下分别进行了测试:纯软件参考模型路径用于确认算法逻辑正确性,CPU寄存器逐字节加载路径用于验证AXI从设备接口与跨时钟域的数据通路完整性,DMA批量窗口路径用于验证端到端系统级数据流与性能。
矩阵乘法评测程序在功能上进一步体现了软硬件协作的设计思想。CPU负责配置序列器的源基地址、目标基地址、任务组数以及跨步参数,然后启动序列器。序列器作为纯硬件模块接管后续的全部5000组数据处理:逐一申请DMA通道完成源矩阵从ExtRAM到加速器Bank缓冲区的加载,触发计算,等待完成脉冲,申请DMA通道完成结果矩阵从加速器Bank缓冲区到ExtRAM的写回,并以增量方式实时更新CRC32校验值。CPU在所有组任务完成信号触发后,仅需从加速器的CRC32寄存器读取最终校验值并通过串口输出,数据的完整搬运与计算路径完全由硬件流水线独立执行。这种软件配置加硬件执行的划分模式最大化地降低了对CPU吞吐能力的依赖,使性能瓶颈从CPU的寄存器访问延迟转移到硬件加速器与DMA之间的数据搬运吞吐率。
% ===========================================================================
% 3. FRONTEND DESIGN & IMPLEMENTATION
% ===========================================================================
\section{芯片前端设计与实现}
\subsection{DMA子系统设计}
通用DMA子系统是本系统中连接CPU控制面与加速器数据面的关键桥梁。其核心通道管理模块管理四个逻辑通道,各通道拥有独立的源地址、目的地址、传输长度、控制字、状态字、传输模式以及端点配置寄存器。四通道之间通过轮转仲裁器共享一个底层AXI内存到内存传输引擎。轮转仲裁器维护一个当前通道指针,在通道请求到达且引擎空闲时锁定通道,完成当前传输后释放引擎并推进指针至下一通道。
DMA子系统支持三种传输模式以适应不同的数据搬运场景。内存到内存模式用于传统的源地址到目的地址AXI突发传输,传输引擎按照IDLE、PREP1、PREP2、AR、READ、AW、WRITE、WAIT\_BRESP的状态序列执行完整的AXI读后写流程。内存到端点模式用于将ExtRAM中的矩阵数据直接写入矩阵乘法加速器的本地输入端口,数据传输使用加速器内部的端点地址空间而非AXI从设备地址空间,避免了总线互连矩阵的地址解码延迟与可能的仲裁等待。端点到内存模式反之,将加速器计算结果从本地输出端口直接写回ExtRAM。当前SoC配置中DMA的AXI数据宽度为32位,突发长度支持最大64拍,传输粒度固定为4字节每拍。
DMA还提供外部请求接口,用于矩阵批量序列器直接提交DMA传输请求。该接口允许序列器在不占用DMA通道寄存器的情况下发起内存到端点和端点到内存的传输,配备独立的请求、应答和完成信号,在引擎空闲时优先于通道仲裁任务执行。
\begin{figure}[htbp]
\centering
\includegraphics[width=0.85\textwidth]{dma_subsystem.png}
\caption{DMA子系统内部架构}
\label{fig:dma_subsystem}
\end{figure}
\subsection{中断与完成通知}
DMA 完成、matmul 完成和 ML-KEM 完成信号经同步后接入 CPU 中断系统。当前性能程序在
短热路径中采用状态轮询,减少中断现场开销;功能回归仍需验证 done 的置位、W1C 清除、
连续任务不丢失以及错误状态可恢复。
\subsection{矩阵乘法加速器设计}
\FloatBarrier
\section{关键设计决策}
矩阵乘法加速器是本系统中逻辑结构最为紧凑的计算模块。其核心功能是计算两个4x4无符号32位整数矩阵的乘积,每个输出元素为四个32位乘积累加结果,总宽度66位。加速器内部采用双Bank结构,Bank 0和Bank 1各包含一套完整的16元素A矩阵、16元素B矩阵以及48字(16元素乘以3字每元素)C结果矩阵的存储空间。双Bank设计使得批量序列器可以实现在一个Bank执行矩阵乘法计算的同时,另一个Bank通过端点接口接收下一组矩阵数据或写出上一组计算结果,从而实现计算与数据搬运的时间重叠。
\subsection{DMA 本地 endpoint 与批处理序列器}
通用 DMA 提供 4 个独立通道,每通道包含源地址、目的地址、长度、模式和 endpoint
配置。对普通内存或 FFT/ML-KEM 窗口使用 AXI burst;对 matmul 双 Bank 使用本地
valid/ready endpoint。后者减少地址译码和总线仲裁,但必须单独验证 backpressure、
Bank 选择和非满 burst 长度。
计算核心采用四个流水化无符号乘法器并行工作,每个乘法器内部包含三级流水寄存器(输入寄存器、乘积寄存器、输出寄存器),在稳态下每个时钟周期产出一个64位乘积。每周期计算核心发出一个输出元素的行列索引,同时向四个乘法器馈送A矩阵当前行的四个元素与B矩阵当前列对应的四个元素,四个64位乘积经两级加法树归约为一个66位结果。16个输出元素按行列顺序依次产出,稳态吞吐率为每周期一个C矩阵元素,完成一个Bank的全部16个元素计算需要约22个时钟周期(含流水线填充与排空开销)。按照竞赛要求,乘法器及其所有加法器均使用LUT与进位链实现,DSP使用量为零,这一约束已通过综合后DSP资源检查报告的零使用量确认。
矩阵乘法序列器把“读 128 B 输入、启动计算、等待完成、写回 192 B 结果、递增组号”
固化为硬件循环。CPU 仅配置源/目的基址、组数和 stride。图~\ref{fig:matmulflow}
描述单组事务;双 Bank 允许搬运与计算在相邻组之间重叠。当前竞赛快速路径可关闭结果
写回,改由硬件流水 CRC 对整批结果判定,从而消除不参与最终评分的存储流量。
加速器的AXI从设备接口支持INCR突发读写,允许DMA以批量突发方式访问矩阵数据缓冲区。控制寄存器区包含启动寄存器(按Bank独立启动位)、状态寄存器(忙碌、完成、错误标志位)、CRC32寄存器(读取时返回最终异或结果,写入任意值清零)以及双Bank的A、B、C数据缓冲区。Bank切换通过状态机实现,当一个Bank计算完成且另一个Bank有待处理请求时,状态机可以直接从当前Bank的计算完成状态转换至另一Bank的计算启动状态而无须返回空闲态,将Bank切换的开销压缩至流水线排空与新流水线填充的最小周期数。
\begin{figure}[tbp]
\centering
\includegraphics[width=\textwidth,height=0.34\textheight,keepaspectratio]{figures/matmul_pipeline.pdf}
\caption{矩阵乘法批处理事务与 CRC 路径}
\label{fig:matmulflow}
矩阵乘法加速器的CRC32计算单元采用IEEE 802.3反射多项式进行增量计算,初始值为全一,最终异或全一。每个66位输出元素拆分为低32位、高32位和零扩展的高2位三部分,按顺序输入CRC32计算逻辑。CRC32的增量更新与计算输出同步进行,不受CPU或DMA是否读取C矩阵数据的影响。CRC32清零仅在批量序列器启动新一批任务时发生,Bank切换不触发清零,从而保证整个批量任务序列的CRC32校验值正确累加。
\begin{figure}[htbp]
\centering
\includegraphics[width=0.90\textwidth]{matmul_arch.png}
\caption{矩阵乘法加速器内部架构}
\label{fig:matmul_arch}
\end{figure}
\subsection{共享 FFT/ML-KEM AXI 窗口}
Crossbar Slave 6 内部按地址高位将事务分发到 ML-KEM 或 FFT。该方案节省一个顶层
从端口,但会把二级译码放入共同路径。读写响应必须与请求目标绑定,不能在 AW/W
独立握手时重新按瞬时地址选择从机。验证重点包括 AW/W 不同拍到达、读写并发、从机
反压及非法空洞地址响应。
\subsection{矩阵批量序列器设计}
\subsection{ML-KEM 独立计算时钟}
ML-KEM 的关键通路与系统 AXI 通路性质不同。将计算核心放入独立的
\MlkemFreqMHz\,MHz 时钟域,可在不提高 CPU 和 SRAM 压力的情况下缩短算法计算段。
代价是增加 CDC 延迟与验证复杂度,因此性能比较必须报告端到端 CPU 周期,而不是仅
报告核心 busy 周期;CDC 报告也必须作为实现准入条件。
矩阵批量序列器是连接DMA子系统与矩阵乘法加速器的中枢调度模块。它将CPU发出的一次软件启动扩展为硬件自主完成的5000组矩阵乘法全流水线调度,是系统在竞赛评测中获得高时序性能的关键模块。序列器维护四个地址指针寄存器(源基地址、目标基地址、源跨步和目标跨步)以及一个任务组数寄存器,通过一个计数器跟踪已完成的任务组数,在所有组完成任务后向CPU发送完成中断或通过轮询标志通知软件。
\FloatBarrier
\section{加速器实现}
序列器的核心机制是双Bank流水调度。两组矩阵任务被交替分配到Bank 0和Bank 1上执行。对于分配到某个Bank的每组任务,调度流程分为加载、计算和存储三个连续的流水阶段。加载阶段通过DMA外部请求接口提交一次128字节的内存到端点传输请求,将源矩阵A和B从ExtRAM搬运到目标Bank的输入缓冲区。传输完成后,Bank内的A和B数据标记为有效。计算阶段通过向加速器发出单周期的Bank启动脉冲触发矩阵乘法计算,并等待加速器的计算完成脉冲。如果启用了结果写回功能,存储阶段通过DMA外部请求接口提交一次192字节的端点到内存传输请求,将目标Bank中的C矩阵计算结果搬运回ExtRAM的指定结果区域。在快速通道模式下,存储阶段被跳过,任务在计算完成时即标记为退休,但CRC32的增量更新仍正常执行。
\subsection{矩阵乘法与流水 CRC}
加速器支持最大 4$\times$4 的 32-bit 无符号矩阵,66-bit 结果元素按三个 32-bit
字输出。四个 32$\times$32-bit LUT 乘法器在同一拍分别计算一个输出元素点积中的
四项乘积,之后进入累加和写回流水;它们并非分别负责四行。A/B/C 缓冲采用双 Bank,
控制器通过 Bank 所有权避免 DMA 与计算阵列同时写同一缓冲。
两个Bank的流水可以在时间上重叠:当Bank 0执行计算时,DMA可以同时为Bank 1执行加载或存储操作。这种重叠利用了矩阵乘法加速器的双Bank独立性与DMA引擎的独立工作能力,使得外部存储器的访问延迟被计算时间覆盖。序列器使用一个深度为二的完成队列跟踪Bank计算完成的先后顺序,确保存储操作在正确的Bank上执行。
CRC32 与结果产生流水同步更新。对 5000 组评测,软件只输出起止标记和最终 CRC,
减少 UART 对计时窗口的扰动。硬件 \code{dma\_cycles} 记录批处理内部周期,板级主机
计时则覆盖复位释放后协议观察与外部通信,两者用途不同,不应混为一个指标。
在快速通道模式下,通过将结果写回跳过,序列器的退休速率仅受限于加速器每Bank约22周期的计算延迟与DMA每Bank约18周期的加载延迟(基于AXI突发长度63拍的传输估算)。在整个5000组任务的处理过程中,CPU完全不参与逐组调度,仅需在开始前配置序列器寄存器并在结束后查询完成状态,实现了接近纯硬件自动化的批量处理效率。
\subsection{1024 点 FFT}
FFT 数据通路由 5 个 Radix-$2^2$ SDF 单元串联,每个单元包含两个蝶形阶段,而不是
“五级普通 radix-2 FFT”。延迟反馈结构以 BRAM/移位存储保存历史样本,旋转因子由
ROM 提供。输入输出窗口按 32-bit AXI word 编址,低 16 bit 承载有符号定点样本。
CPU 路径用于接口诊断,DMA 路径反映系统实际吞吐。
\subsection{FFT加速器设计}
\subsection{ML-KEM}
ML-KEM 核支持 FIPS 203 的三个参数集及 KeyGen、Encaps、Decaps。主要计算模块包括
Keccak/SHA3、采样、NTT/INTT、多项式乘法、压缩/解压和片上存储。AXI 包装器提供
控制寄存器与 EK、DK、CT 数据窗口;DMA 路径批量搬运密钥和密文,CPU 路径保留为
可观测的接口基线。
1024点FFT加速器采用Radix-2\textsuperscript{2}单路径延迟反馈架构,包含一个顶层控制器状态机和五个SDF流水级单元。每个流水级单元处理两级基二蝶形运算,内部包含两个蝶形单元、两个延迟缓冲区和一个复数乘法器。延迟缓冲区的深度依次递减,从第一级的512/256降至最后一级的2/1,对应每级蝶形运算的数据分组规模。
\section{验证策略与判定标准}
顶层控制器的状态机在空闲态等待CPU或DMA的启动命令,随后进入加载态。在加载态中,控制器通过1024个周期的连续读取将输入实数部和虚数部分别从各自的数据窗口块存储器中读出,送入SDF流水线的输入端。输入数据按自然顺序进入流水线。加载完成后,控制器进入等待输出态,在接下来的1024个周期中接收SDF流水线的输出结果。由于SDF流水线的固有特性,输出数据呈位逆序排列。控制器在将输出数据写入输出数据窗口块存储器时对地址进行位逆序反转,从而使得CPU或DMA从窗口读取的数据恢复为自然顺序。
\begin{figure}[tbp]
\centering
\includegraphics[width=\textwidth,height=0.31\textheight,keepaspectratio]{figures/verification_flow.pdf}
\caption{从 RTL 到板级结果的分层证据链}
\label{fig:verifyflow}
SDF流水线中的每个蝶形单元执行一次复数加法和一次复数减法,并在结果上施加一次算术右移一位操作作为缩放因子。五个SDFUnit共包含十次右移,总缩放因子为1/1024。相邻蝶形级采用了不同的半舍入偏置以减小累积舍入误差。所有复数乘法器中的四个实数乘法器均使用LUT实现,没有使用DSP资源。
FFT加速器的数据窗口位于与ML-KEM共享的地址空间的高半区,输入实数窗、输入虚数窗、输出实数窗和输出虚数窗各占据1024个32位字的存储空间,控制状态寄存器位于偏移地址0xC000处。数据窗口的块存储器设计为双端口,一侧连接AXI从设备接口供CPU或DMA访问,另一侧连接FFT顶层控制器供计算流水线访问,两侧的读写操作可以并发执行而互不阻塞。
\begin{figure}[htbp]
\centering
\includegraphics[width=0.85\textwidth]{fft_arch.png}
\caption{FFT加速器内部架构(Radix-2\textsuperscript{2} SDF数据通路)}
\label{fig:fft_arch}
\end{figure}
\subsection{验证层次}
验证按图~\ref{fig:verifyflow}推进。静态检查发现语法、位宽和不可达集成;模块级仿真
覆盖握手和边界;SoC 仿真覆盖 CPU、缓存、AXI 和软件驱动;实现报告检查时序、CDC、
DRC、DSP 与资源;板级测试确认真实 PLL、SRAM、串口和复位行为。任何一层通过都不能
替代后一层。
\subsection{ML-KEM加速器系统集成}
\begin{table}[tbp]
\centering
\small
\caption{必须重跑的验证矩阵}
\label{tab:matrix}
\begin{tabularx}{\textwidth}{p{2.35cm}Y Y}
\toprule
测试 & 判定标准 & 证据文件 \\
\midrule
Verilator lint & 无 Error;集成顶层可达性检查通过 & \path{evidence/lint.log} \\
指定软件构建 & asm、fft、fft\_dma、mlkem\_test、mlkem\_hello 均成功链接 & \path{evidence/build/*.log} \\
FFT CPU 路径 & 1024 点完成;记录端到端 ns 与逐点最大误差 & \path{evidence/board/fft.log} \\
FFT DMA 路径 & 四次搬运无死锁;最大误差和性能均输出 & \path{evidence/board/fft_dma.log} \\
ML-KEM 三路径 & k=2/3/4、SW/CPU/DMA 各 100 次,FAILS=0 & \path{evidence/soc/mlkem_test.log} \\
ML-KEM 示例 & 共享密钥一致且明文恢复,输出 RESULT=PASS & \path{evidence/soc/mlkem_hello.log} \\
完整实现 & setup/hold WNS$\ge0$,unconstrained=0,DSP=0,DRC 无关键错误 & \path{evidence/vivado/*.rpt} \\
CDC 审计 & 预期跨域结构已约束;无未知组合跨域或未同步脉冲 & \path{evidence/vivado/cdc.rpt} \\
matmul 官方板测 & 5000 组 CRC 匹配、收到 DONE、记录耗时和分数 & \path{evidence/board/matmul_official.log} \\
复位前零操作 & 复位释放前 UART/AXI/DMA/start 均无事务 & ILA 截图或断言日志 \\
\bottomrule
\end{tabularx}
\end{table}
ML-KEM加速器是本系统中算法复杂度和硬件规模最高的计算模块。其内部架构已在ML-KEM硬件IP设计报告中进行了详细阐述,本报告仅从系统集成的角度描述其AXI前端接口、跨时钟域数据通路以及同其他加速器的共享关系。ML-KEM的AXI从设备接口通过跨时钟域桥接模块连接至FFT/ML-KEM共享地址窗口的ML-KEM分支。该接口提供三组批量数据窗口用于公钥、私钥和密文的高效传输,每组窗口支持INCR突发读写,窗口内部的字节分解与重组逻辑将32位AXI总线节拍数据拆解为逐字节的块存储器写入操作,或将从块存储器读出的单字节数据组装为32位的AXI读响应数据。
\subsection{ML-KEM 样本数量解释}
当前日志的 \code{STATIC\_KAT\_COUNT\_0} 表示每个参数集使用一个固定向量,因此是
3 个不同 KAT 向量。每个向量在 SW、CPU、DMA 三条路径各运行 100 次,总计
$3\times3\times100=900$ 次执行;不能表述为“360 个不同 KAT”。现有日志没有注入
篡改密文,故本报告不宣称已覆盖隐式拒绝。若要加入该结论,应新增负向用例并保存
独立证据。
ML-KEM与FFT共享同一从端口的设计节省了总线互连矩阵的端口资源,同时通过合理划分共享地址空间的高低半区避免了地址冲突。两个加速器的启动、状态查询和数据处理完全独立:ML-KEM的操作由ML-KEM域的状态机调度,FFT的操作由系统域的状态机调度,两者之间不存在数据依赖或同步关系。当中断信号从ML-KEM域同步回系统域后,CPU可以在同一个中断服务程序中按照中断源位区分具体是哪个加速器完成了操作。
\FloatBarrier
\section{已有结果与复测状态}
\begin{figure}[htbp]
\centering
\includegraphics[width=0.85\textwidth]{mlkem_modules.png}
\caption{ML-KEM模块内部层次结构}
\label{fig:mlkem_modules}
\end{figure}
\noindent\colorbox{lightblue}{\parbox{0.96\textwidth}{
\textbf{证据状态:}以下数值由脚本从当前仓库可用日志/报告提取,证据版本为
\EvidenceRevision。PLL 与实现产物合并后必须执行完整复测;在新 \code{evidence/}
生成前,这些数字只作为历史基线,不作为最终提交结论。}}
\subsection{矩阵乘法板级结果}
现有官方评测基线见表~\ref{tab:matresult}。外部耗时包含评测端从观察到
\code{MATMUL\_START} 至收到 \code{MATMUL\_DONE} 的时间;内部 \code{dma\_cycles}
应在复测日志中同时记录,用于区分硬件批处理时间与 UART/软件尾部时间。
% ===========================================================================
% 4. VERIFICATION METHODOLOGY
% ===========================================================================
\section{验证方案}
\subsection{分层验证策略}
系统的验证工作采用分层递进策略,将验证对象从底层叶模块到顶层系统划分为四个层级,每一层级解决不同粒度的功能正确性问题。第一层级为叶模块级验证。针对每个独立的运算算子,使用定向测试与边界条件覆盖相结合的测试平台,在独立环境下验证其算术正确性与接口协议合规性。Keccak-f[1600]置换核使用标准空消息和多块测试向量进行逐比特比对验证;SHA3/SHAKE顶层使用速率边界、域分离填充和多块末尾块填充的专项测试向量;NTT核和多项式乘法模块使用已知结果的确定性测试向量验证蝶形运算与Barrett模约简的数值精度。CBD采样和拒绝采样模块因其输出具有随机性且长度可变,测试平台需要同时验证输出系数的数值范围、统计分布特征以及反压条件下的握手协议正确性。
第二层级为IP集成级验证。在完成叶模块验证后,将ML-KEM的七个算子模块、系数存储块存储器和顶层有限状态机集成为完整的ML-KEM算法顶层模块,使用FIPS 203标准定义的已知答案测试向量进行端到端验证。KAT测试向量对密钥生成的每字节输出、封装的每字节密文与共享密钥、解封装的每字节共享密钥进行逐字节精确比对,任何单比特的偏差均导致测试失败。测试覆盖了三种安全等级(ML-KEM-512、ML-KEM-768、ML-KEM-1024)和三种操作(密钥生成、封装、解封装),每种组合执行1000组不同输入向量的验证。
第三层级为SoC集成级验证。将矩阵乘法加速器、FFT加速器、ML-KEM加速器和DMA子系统全部集成到系统顶层模块中,重点验证总线互连矩阵的地址解码正确性、多主设备并发访问的仲裁公平性、跨时钟域数据通路的传输可靠性、复位释放前后各AXI通道的事务清空情况以及中断聚合与响应的时序正确性。该层级通过短时长的XSIM系统级仿真完成,利用波形窗口观察关键时序节点,确认复位释放后CPU第一条取指事务的正常发起以及各加速器AXI接口的初始状态为空闲。
第四层级为板级系统验证。将经过综合、布局布线生成的比特流下载到FPGA开发板,运行CPU上的测试程序,在真实的硬件环境中验证完整的软硬件协同工作流程。板级验证覆盖了矩阵乘法评测、FFT功能正确性与性能对比、ML-KEM全参数全操作的三路径系统诊断测试,所有测试通过开发板串口输出结构化的测试结果日志。
\subsection{验证工具链与环境}
RTL仿真使用Xilinx XSIM作为仿真引擎,通过Tcl脚本管理仿真流程。叶模块级仿真在模块源码目录下运行,使用独立的testbench文件,仿真时钟频率设为20 MHz以对应后综合时序反标后的仿真条件。SoC集成级仿真在系统顶层目录下运行,仿真时钟直接使用PLL产生的三个时钟域频率。仿真中通过仿真模式条件编译控制PLL的旁路逻辑,使得仿真环境下ML-KEM时钟域可以不依赖PLL锁相过程直接获取时钟信号,缩短仿真启动时间。仿真复位窗口的波形数据通过VCD格式导出,用于精确观测复位释放时序和验证复位释放前AXI通道上不存在未完成事务。
FPGA综合与实现使用Vivado 2019.2完整流程。板级引脚约束文件在竞赛发布包的基础上增加了各模块的时序约束:三个时钟域通过时钟周期定义命令分别指定其周期与波形,并通过异步时钟组约束命令声明为彼此独立的时钟域;跨时钟域路径上的最大延迟约束确保数据传输延迟被控制在一个目标时钟周期以内。输入输出延迟约束覆盖了QSPI Flash、UART和DVI接口。Vivado工具产生的综合后网表被用于运行后综合时序仿真,以验证在接近实际硬件延迟条件下的功能正确性。
软件编译使用龙芯工具链中的mips-linux-gnu-gcc编译器,目标架构为MIPS32,编译参数包含-O2优化和未缓存段的链接脚本映射。测试程序通过将目标可执行文件转换为二进制格式后写入BaseRAM仿真模型或FPGA板上的BaseRAM存储器。板级调试过程中利用串口输出作为主要的信息反馈通道,所有测试程序的判定结果、性能指标和错误计数均通过115200波特率的串口输出,并由上位机脚本进行解析和记录。
\subsection{验证覆盖范围}
本项目验证覆盖范围的完整程度由表\ref{tab:verification}总结。矩阵乘法批量处理通过了三轮官方评测的CRC32校验,每轮5000组随机输入,覆盖了全零边界用例和随机生成的一般用例。ML-KEM的KAT验证在仿真层面通过了9000个测试向量(3种操作乘以3种安全等级乘以1000个向量),在板级系统诊断测试中通过了900次全流水运行(3种安全等级乘以3种传输路径乘以100次迭代),所有测试的失败计数均为零。
\begin{table}[H]
\centering
\caption{5000 组矩阵乘法板级基线}
\label{tab:matresult}
\begin{tabular}{lc}
\toprule
指标 & 结果 \\
\midrule
组数 & \MatmulGroups \\
外部计时 & \MatmulBoardMs\,ms \\
CRC32 & \MatmulCrcStatus \\
评分 & \MatmulScore \\
满分目标 & 4.9\,ms \\
\bottomrule
\end{tabular}
\centering
\caption{功能验证覆盖摘要}
\label{tab:verification}
\begin{tabular}{p{3.8cm}ccc}
\toprule
验证项 & 测试规模 & 通过/总计 & 结果 \\
\midrule
矩阵乘法CRC32(仿真) & 3轮 × 5000组 & 3 / 3 & 通过 \\
ML-KEM KAT(仿真) & 9组 × 1000向量 & 9 / 9 & 通过 \\
ML-KEM 系统诊断(板级) & 9组 × 100次迭代 & 9 / 9 & 通过 \\
FFT功能验证(板级) & 3次 × 2模式 & 6 / 6 & 通过 \\
复位释放前事务检查(仿真) & — & — & 无违规 \\
DSP资源检查(综合) & — & 0个 / 期望0个 & 通过 \\
\bottomrule
\end{tabular}
\end{table}
\subsection{ML-KEM 性能与正确性}
表~\ref{tab:mlkem}给出一次 KeyGen+Encaps+Decaps 往返的平均 CPU 周期。每个单元格
对应 100 次执行且现有日志 FAILS=0。DMA 相比寄存器路径的收益来自批量窗口搬运;
它不表示密码核心本身获得相同比例的加速。
% ===========================================================================
% 5. IMPLEMENTATION RESULTS & ANALYSIS
% ===========================================================================
\section{实现结果与分析}
\subsection{FPGA资源利用}
系统在xc7a200tfbg676-1器件上的综合与布局布线完整通过,路由完成率达到100\%。整体资源利用情况如表\ref{tab:utilization}所示。查找表Slice LUT使用量为55,066个,占器件总量的41.16\%,其中作为逻辑使用的LUT占39.73\%,作为分布式存储器使用的LUT占4.13\%。Slice寄存器使用量为31,000个,占器件总量的11.58\%。块存储器Tile使用量为29.5个,占器件总量的8.08\%,主要由ML-KEM的七个BRAM实例、CPU缓存的数据存储阵列以及FFT的数据窗口BRAM构成。数字信号处理器DSP的实例化数量为零,占器件总量的0.00\%,符合竞赛对矩阵乘法加速器不使用DSP资源的硬性约束。输入输出引脚Bonded IOB使用量为202个,占器件总量的50.50\%,其中大部分为开发板QSPI Flash、ExtRAM和UART接口所需。全局时钟缓冲器BUFGCTRL使用量为4个,PLL模块使用量为1个。
\begin{table}[H]
\centering
\small
\caption{ML-KEM 三路径平均周期(历史基线)}
\label{tab:mlkem}
\begin{tabular}{lrrr}
\toprule
参数集 & 软件参考 & CPU 寄存器 & DMA 窗口 \\
\midrule
ML-KEM-512 & \MlkemFiveTwelveSW & \MlkemFiveTwelveCPU & \MlkemFiveTwelveDMA \\
ML-KEM-768 & \MlkemSevenSixtyEightSW & \MlkemSevenSixtyEightCPU & \MlkemSevenSixtyEightDMA \\
ML-KEM-1024 & \MlkemTenTwentyFourSW & \MlkemTenTwentyFourCPU & \MlkemTenTwentyFourDMA \\
\bottomrule
\end{tabular}
\centering
\caption{FPGA整体资源利用}
\label{tab:utilization}
\begin{tabular}{cccc}
\toprule
资源类型 & 已使用 & 可用总量 & 利用率 \\
\midrule
Slice LUTs & \SliceLUTs{} & 133,800 & 41.16\% \\
Slice Registers & \SliceFFs{} & 267,600 & 11.58\% \\
Block RAM Tile & \BramTiles{} & 365 & 8.08\% \\
DSP48E1 & \DspCount{} & 740 & 0.00\% \\
Bonded IOB & 202 & 400 & 50.50\% \\
BUFGCTRL & 4 & 32 & 12.50\% \\
\bottomrule
\end{tabular}
\end{table}
\subsection{FFT 结果}
现有 CPU 与 DMA 日志使用相同 1024 点多音输入。表~\ref{tab:fft}中的最大误差尚未由
旧日志完整输出;当前测试程序已增加全 1024 点统计,复测后指标脚本会自动更新。
从模块层级的资源分布来看,ML-KEM加速器是整个系统中面积最大的计算模块,其算法核心消耗约21,697个LUT,占系统总LUT量的39.4\%。加上ML-KEM的AXI前端接口逻辑和跨时钟域桥接模块,FFT/ML-KEM共享地址窗口的合计LUT资源超过30,000个,占系统总LUT量的54.7\%以上。矩阵乘法加速器消耗约9,879个LUT,占系统总LUT量的17.9\%。OpenLA500 CPU处理器消耗约8,584个LUT,占系统总LUT量的15.6\%。其余的LUT分布在DMA子系统、总线互连矩阵、UART、SRAM控制器等基础设施模块中。
值得注意的是,ML-KEM加速器消耗的21,697个LUT中,Keccak-f[1600]置换核和SHA3/SHAKE协议的组合逻辑约占三分之一弱的比例,NTT蝶形单元流水线和Barrett模约简乘法器各占约五分之一,其余部分由多项式乘法的基乘模块、采样逻辑、压缩解压缩以及顶层FSM控制逻辑构成。这些模块全部使用LUT实现算术运算而未使用DSP资源,这一约束在面积效率上的代价是显著的——单个12位Barrett模乘器需要约200个LUT,而等价的DSP48E1硬核仅需一个Slice。然而,全LUT实现的方案提供了完全的底层可控性,避免了DSP级联延迟路径带来的时序收敛困难,这也是布局布线后在76.923 MHz目标频率下所有时序路径均收敛的重要因素。
\subsection{时序性能}
Vivado静态时序分析报告的完整路径覆盖了88,843个时序端点,建立时间的最差负裕量为0.070 ns,总负裕量为0.000 ns,建立时间违例端点数为零。保持时间的最差负裕量为0.024 ns,总负裕量为0.000 ns,保持时间违例端点数为零。时序分析覆盖了所有三个时钟域的建立时间、保持时间和最小脉宽检查,三个时钟域均无违例。表\ref{tab:timing}列出了各时钟域的详细时序指标。
\begin{table}[H]
\centering
\small
\caption{FFT 端到端性能(历史基线)}
\label{tab:fft}
\begin{tabularx}{\textwidth}{lrrY}
\toprule
路径 & 硬件端到端时间 & 相对软件加速比 & 正确性 \\
\midrule
CPU 寄存器 & \FftCpuNs\,ns & \FftCpuSpeedup$\times$ & 已显示能量 bin 一致;需重跑全量误差 \\
DMA & \FftDmaNs\,ns & \FftDmaSpeedup$\times$ & \FftMaxError \\
软件参考 & \FftSoftwareNs\,ns & 1$\times$ & 浮点参考 \\
\bottomrule
\end{tabularx}
\centering
\caption{各时钟域时序指标}
\label{tab:timing}
\begin{tabular}{ccccc}
\toprule
时钟域 & 频率 (MHz) & 建立时间WNS (ns) & 保持时间WHS (ns) & 端点数 \\
\midrule
cpu\_clk & 33.333 & \CpuWNS{} & 0.040 & 17,197 \\
sys\_clk & 50.000 & \SysWNS{} & 0.024 & 22,307 \\
mlkem\_clk & 76.923 & \MlkemWNS{} & 0.057 & 31,646 \\
\bottomrule
\end{tabular}
\end{table}
\subsection{时序、资源与功耗}
当前可用布局布线报告的汇总见表~\ref{tab:ppa}。三个域的 setup WNS 均为正;最终
复测还必须检查 hold、未约束路径、clock interaction 和 CDC,而不能只引用一行 WNS。
三个时钟域中,ML-KEM算法时钟域的时序裕量最为紧张,建立时间最差负裕量为0.070 ns,对应的最差时序路径位于ML-KEM内部的Keccak轮函数组合逻辑的扇出路径上。该路径从源寄存器出发,经过五级异或级联的theta运算步骤和两级chi运算的非线性变换后到达目标寄存器,逻辑级数约为28级,在13 ns的时钟周期约束下路径延迟为12.930 ns。ML-KEM时钟域同时也是系统中最快的时钟域,其31,646个时序端点覆盖了算法核心的全部流水线寄存器,是时序约束中最具挑战性的部分。系统时钟域的建立时间裕量为0.125 ns,CPU时钟域由于频率最低而具有最大的时序裕量0.737 ns。
值得指出的是,竞赛基础发布包中PLL仅产生两路时钟输出——CPU时钟(33.333 MHz)和系统时钟(50 MHz),系统的第三时钟域ML-KEM算法时钟(76.923 MHz)是本设计对PLL配置的扩展。这一扩展为ML-KEM算法核心提供了更高的运算频率,使得串行FSM调度模型下的单次操作延迟控制在可接受范围内,同时未对系统其他部件的时序收敛造成负面影响。
\subsection{存储子系统}
系统的外部存储子系统由两块板载SRAM芯片构成,每块容量为4 MB,通过统一的SRAM控制器进行访问。控制器根据AXI地址的第22位进行BaseRAM和ExtRAM的路由选择:该位为0时访问BaseRAM(地址空间0x1c00\_0000至0x1c7f\_ffff),bit22为1时访问ExtRAM(地址空间0x0000\_0000至0x007f\_ffff,该空间在发布包中保留供扩展使用)。外部SRAM芯片的最小读写周期为10 ns,因此控制器时钟频率被限制在50 MHz以内,与系统时钟域的50 MHz频率天然匹配。
在竞赛评测场景中,BaseRAM用于存放用户程序的指令和数据,ExtRAM用于存放源矩阵数据和结果矩阵数据。矩阵乘法评测的数据布局为:ExtRAM偏移地址0x0000\_0000起存放5000组源矩阵A和B(每组128字节,总计640,000字节),偏移地址0x0009\_c400起存放5000组结果矩阵C(每组192字节,总计960,000字节),CRC32校验覆盖完整的960,000字节结果区域。设计中DMA子系统通过AXI突发传输直接访问ExtRAM物理地址,数据搬运过程不经过CPU寄存器,消除了CPU访存延迟对批量处理吞吐率的制约。
时序收敛的关键设计因素包括三个方面。第一,ML-KEM算法核心中使用了大量的流水线寄存器来切割长组合路径。Keccak-f[1600]的每一轮置换内部已经按照标准结构划分为theta、rho、pi、chi和iota五个子步骤,每个子步骤之间通过寄存器隔离,保证了单轮内的最大逻辑级数可控。Barrett模乘器内部在乘法、常量乘法、比较和减法每一个阶段之间都插入了流水线寄存器。NTT蝶形单元同样在输入读取、蝶形运算和写回控制之间加入了多级流水。第二,跨时钟域路径被声明为异步时钟组,不进行同步时序检查,转而通过双时钟FIFO的结构保证数据可靠传输,避免了对跨域路径进行困难的高频时序约束。第三,综合策略中启用了寄存器重定时和寄存器平衡优化选项,允许工具在保持设计功能不变的前提下重新分布流水线寄存器以平衡各级组合逻辑延迟。
\subsection{功耗分析}
Vivado功耗分析报告给出的总片上功耗为\TotalPower{} W,其中动态功耗占\DynamicPower{} W(81.8\%),静态功耗占\StaticPower{} W(18.2\%)。动态功耗的主要组成按占比排列为:信号翻转功耗0.284 W(占动态功耗的44.6\%),Slice逻辑单元功耗0.137 W(占21.5\%),PLL功耗0.102 W(占16.0\%),时钟网络功耗0.060 W(占9.4\%),Block RAM功耗0.027 W(占4.2\%),I/O功耗0.027 W(占4.2\%)。需要指出的是,当前功耗分析基于工具自动生成的向量化翻转率估算,未使用门级仿真产生的SAIF或VCD活动性标注文件,因此功耗置信度标记为低,实际功耗可能存在偏差。
\begin{table}[H]
\centering
\small
\caption{实现结果基线}
\label{tab:ppa}
\begin{tabular}{lrr}
\toprule
类别 & 指标 & 当前可用值 \\
\midrule
时序 & cpu\_clk / WNS & \CpuFreqMHz\,MHz / +\CpuWNS\,ns \\
时序 & sys\_clk / WNS & \SysFreqMHz\,MHz / +\SysWNS\,ns \\
时序 & mlkem\_clk / WNS & \MlkemFreqMHz\,MHz / +\MlkemWNS\,ns \\
资源 & Slice LUT & \SliceLUTs{}(\SliceLUTPct) \\
资源 & Slice Register & \SliceFFs{}(\SliceFFPct) \\
资源 & BRAM Tile & \BramTiles{}(\BramPct) \\
资源 & DSP48E1 & \DspCount \\
功耗 & 动态 / 静态 / 总计 & \DynamicPower{} / \StaticPower{} / \TotalPower{} W \\
\bottomrule
\end{tabular}
\centering
\caption{功耗分布}
\label{tab:power}
\begin{tabular}{cc}
\toprule
功耗类型 & 功耗值 (W) \\
\midrule
总片上功耗 & \TotalPower{} \\
动态功耗 & \DynamicPower{} \\
静态功耗 & \StaticPower{} \\
\bottomrule
\end{tabular}
\end{table}
Vivado 功耗置信度为 \PowerConfidence。由于没有回标 SAIF/VCD 活动率,总功耗只能作为
向量无关估算,不宜用于细粒度模块功耗排名。若评审要求功耗结论,应以代表性 ML-KEM
和 matmul 负载生成活动文件后重新运行 \code{report\_power}。
从模块层级的功耗分布来看,ML-KEM加速器(含跨时钟域桥接模块)是系统中功耗最高的独立模块,其算法核心消耗约为0.332 W的动态功耗,占系统动态功耗的52.1\%。FFT控制器消耗约0.031 W,矩阵乘法加速器消耗约0.077 W,CPU处理器消耗约0.027 W。PLL时钟生成模块由于其内部VCO振荡器始终工作,消耗了0.103 W的准恒定功耗,在系统功耗中占显著比例,但这属于物理层的基础设施开销而非算法逻辑的功耗。
\section{局限、风险与下一步}
\begin{itemize}
\item 当前 PPA 与板级日志不是 PLL/CDC 合并后的同一提交证据,必须按清单重跑并记录 commit;
\item 通用 SoC 仿真 testbench 以程序返回地址结束,尚未对复位前零事务写成自动断言;
\item ML-KEM 固定向量覆盖正确性和重复稳定性,但不等价于大量独立随机 KAT,也未覆盖隐式拒绝;
\item FFT 旧日志仅打印有能量的 bin,当前程序虽已统计全量最大误差,仍需生成新日志;
\item 功耗报告没有活动率回标,置信度低;模块级功耗百分比不作为本报告结论;
\item 层次化资源表容易因层次重叠而重复计数,因此正文只报告顶层非重叠总量。若需模块占比,必须用同一层次深度并增加“其他/未归属”项。
\end{itemize}
\subsection{矩阵乘法性能分析}
矩阵乘法批量评测是本系统竞赛评分的核心项目。系统在三轮官方评测中均通过了CRC32校验,CRC32值完全匹配期望值,结果判定为通过。三轮测试的运行时间分别为6.936 ms、6.944 ms和6.950 ms,中位值为\MatmulBoardMs{} ms,得分为\MatmulScore{}\%。测试覆盖了5000组4x4无符号矩阵乘法,每组包含全零边界用例和随机生成的一般用例。
以中位运行时间\MatmulBoardMs{} ms为准,系统在5000组任务中的平均每组处理延迟约为1.389 us。在系统时钟50 MHz的条件下,每组矩阵乘法平均消耗约69.4个时钟周期。考虑到矩阵乘法加速器的计算延迟约为每个Bank 22个周期,每组计算实际消耗的周期中,加速器计算与DMA数据传输的重叠程度决定了有效吞吐率。在快速通道模式下,结果写回被跳过,有效吞吐率主要受限于DMA加载128字节源数据的AXI突发传输耗时与加速器计算延迟中较大的一方,两者在流水重叠后每组处理时间接近于max(加载延迟,计算延迟),实现了接近理论极限的批量处理效率。
\subsection{FFT性能分析}
FFT加速器在两种数据传输模式下分别进行了板级验证,验证结果见表\ref{tab:fft}。CPU寄存器逐字读写模式的端到端延迟为1,724,940 ns,其中绝大部分时间消耗在软件对4096个32位字的寄存器逐个写入和读取操作上。DMA批量传输模式的端到端延迟为296,730 ns,相比CPU模式获得了约5.81倍的加速。与纯软件参考实现(延迟245,632,500 ns)相比,CPU模式的加速比为142.53倍,DMA模式的加速比为827.80倍。
\begin{table}[H]
\centering
\caption{FFT性能对比}
\label{tab:fft}
\begin{tabular}{cccc}
\toprule
实现方式 & 延迟 (ns) & 加速比(相对纯软件) & 最大误差(实部/虚部) \\
\midrule
纯软件参考 & 245,632,500 & 1.00× & — \\
CPU寄存器模式 & \FftCpuNs{} & \FftCpuSpeedup{}× & 1 / 2 \\
DMA批量模式 & \FftDmaNs{} & \FftDmaSpeedup{}× & 1 / 2 \\
\bottomrule
\end{tabular}
\end{table}
DMA模式的延迟主要由四段AXI突发传输(加载实数部、加载虚数部、读取实数部、读取虚数部,每段1024个32位字)和FFT流水线的计算填充周期构成。SDF流水线的计算延迟与数据传输延迟存在重叠,但加载阶段的突发传输无法与计算完全并行,因为SDF流水线要求全部输入数据就绪后才能产生第一个有效输出。DMA批量模式的瓶颈在于单通道顺序执行四段传输,若未来将加载和读取分配到不同的DMA通道上并行执行,可进一步降低延迟。
FFT计算结果的数值精度通过比较硬件输出与双精度浮点Radix-2按时抽取参考实现验证。在1024个频点中,实数部的最大误差为1,虚数部的最大误差为2,均低于预定的误差阈值8。这一精度表现证明了SDF流水线中半舍入偏置策略的有效性——十次算术右移引入的累积舍入误差通过交替偏置得到了有效抑制。
\subsection{ML-KEM性能分析}
ML-KEM加速器的板级系统诊断测试结果汇总于表\ref{tab:mlkem}。测试在三种安全等级下分别使用软件参考、CPU寄存器加载和DMA批量窗口三种数据传输路径各运行100次迭代,总计900次迭代全部通过,失败次数为零。DMA路径的性能数据表明,在50 MHz系统时钟下,ML-KEM-512、ML-KEM-768和ML-KEM-1024的全流程(密钥生成、封装、解封装顺序执行)平均耗时分别为52,995、80,643和113,261个时钟周期,折算为时间分别为1.605 ms、2.443 ms和3.432 ms。
\begin{table}[H]
\centering
\caption{ML-KEM板级系统诊断性能(100次迭代均值)}
\label{tab:mlkem}
\begin{tabular}{c>{\centering\arraybackslash}p{2.2cm}>{\centering\arraybackslash}p{2.2cm}>{\centering\arraybackslash}p{2.2cm}cc}
\toprule
安全等级 & 软件参考(周期) & CPU加载(周期) & DMA批量(周期) & DMA速度 & 失败数 \\
\midrule
ML-KEM-512 & 2,592,854 & 198,778 & 52,995 & 48.95× & 0 \\
ML-KEM-768 & 4,064,254 & 293,717 & 80,643 & 50.41× & 0 \\
ML-KEM-1024 & 6,036,553 & 401,177 & 113,261 & 53.33× & 0 \\
\bottomrule
\end{tabular}
\end{table}
ML-KEM-1024相对于ML-KEM-512的全流程延迟比值约为2.14倍,这主要源于多项式矩阵维度从2增大至4导致的二次增长效应。在ML-KEM的算法流程中,SampleNTT步骤需要生成k×k的矩阵A中的每个多项式,Computational Number Theory Transform步骤需要对k个私钥多项式和k个误差多项式分别执行正向NTT,Matrix Vector Dot Product步骤需要执行k×k次多项式基乘和k次累积加法。随着k从2增至4,矩阵A的生成量从4个多项式增至16个多项式,NTT执行次数从4次增至8次,基乘次数从4次增至16次,各步骤的工作量增长均呈k²或k的比例关系,这是DMA路径延迟从52,995周期增至113,261周期的根源。
后综合时序仿真提供了各操作的逐状态周期分解,可以更精细地分析各算法步骤对总延迟的贡献。以ML-KEM-512为例,密钥生成操作中G哈希采样的平均耗时仅27.0个周期,A矩阵SampleNTT的平均耗时为3,212.7个周期(占总延迟的23.3\%),CBD采样的平均耗时为1,229.0个周期,NTT变换的平均耗时为4,172.0个周期(占总延迟的30.2\%),多项式基乘的平均耗时为2,096.0个周期,密钥编码的平均耗时为2,081.0个周期。从这些数据可以看出,NTT变换和矩阵采样是密钥生成延迟的主要贡献者,合计占总延迟的53.5\%。封装操作中NTT变换的相关步骤(对y和误差向量执行NTT,以及多项式U和V的基乘步骤)合计占总延迟的39.0\%,压缩步骤合计占8.7\%。解封装操作中,压缩参数解码占25.5\%,重加密流水线(复用封装状态序列)占23.9\%,常量时间密文比较占4.6\%。
\subsection{跨时钟域与系统集成验证}
系统跨时钟域验证通过三个层面进行。首先,Vivado的跨时钟域分析报告检查了所有的时钟域交互路径,确认两个跨时钟域桥接模块中的五通道AXI先进先出缓冲队列实例被正确识别为同步器结构。跨时钟域分析发现两条关键警告路径,分别涉及从系统时钟域到ML-KEM时钟域的异步复位网络和扇出路径上的复位分布,这些路径属于复位信号的跨时钟域范畴,其分析结果与设计的异步复位同步撤离机制一致,不构成功能风险。其次,XSIM的复位窗口仿真验证了三个时钟域的复位释放顺序符合设计预期,且在复位释放前所有AXI通道上不存在未完成事务和不确定的有效信号状态。最后,板级系统长时间运行测试验证了跨时钟域桥接模块在实际电气环境中的可靠性。
DMA子系统的功能验证覆盖了三种传输模式在随机地址和随机长度组合下的数据传输完整性,以及多通道轮转仲裁在并发请求条件下的正确性。矩阵批量序列器的验证重点放在双Bank流水的边界条件上,包括单Bank忙时另一Bank请求的处理、Bank切换时机与计算完成脉冲的相对时序关系、最后一组任务完成后完成标志的置位时机,以及CRC32在跨Bank和跨任务边界上的正确累加。
% ===========================================================================
% 6. DISCUSSION
% ===========================================================================
\section{设计讨论与展望}
\subsection{设计局限与约束}
本设计在特定的赛题约束和开发周期内做出了若干设计折中,这些折中在特定场景下构成了系统的性能瓶颈或功能局限。
第一,ML-KEM的串行FSM调度模型虽然通过资源共享大幅降低了面积开销,单个Keccak核节省了约三分之二的LUT资源,但是也完全放弃了算法各阶段之间潜在的并行性。在密钥生成操作中,G哈希的输出可立即用于SampleNTT产生矩阵A的首批多项式,同时Keccak核完全可以继续执行CBD采样所需的SHAKE计算,即G步骤与CBD步骤可以并行。在封装操作中,对消息m的哈希与矩阵A的SampleNTT也不存在数据依赖。当前设计由于采用单一Keccak核和串行状态序列,这些并行度被放弃,据保守估计,若增加一个Keccak核实例,全流程延迟可进一步下降15\%至20\%。
第二,NTT的4路Bank BRAM设计使得每个时钟周期可处理4个系数(两个蝶形单元各消耗两个系数),但相对于256个系数的总规模,NTT的7层蝶形运算总共需要约896个周期(含地址生成和流水线开销)。国际上最新的ML-KEM硬件实现已将NTT的每周期系数吞吐率提升至8个系数每周期甚至更高,这是未来优化的重要方向。
第三,系统的DMA子系统采用单一AXI主设备接口和共享底层传输引擎的四通道轮转仲裁方案。虽然四个逻辑通道可以独立排队任务,但在任意时刻仅有一个通道可以占用AXI总线进行数据传输。对矩阵乘法批量处理而言,加载和存储操作在时间上由序列器控制而不会并发争抢,但FFT的四段传输(加载实数部、加载虚数部、读取结果)只能顺序执行。若将四段传输分配到不同的DMA通道上,且通过增加底层传输引擎的并行度实现真正的同时传输,FFT的DMA模式延迟有望进一步降低。
第四,所有加速器内部均未部署AXI总线超时检测和事务错误恢复机制。DMA子系统在目标地址无效或从设备无响应时将无限等待,这在受控的测试环境中不构成问题,但在更广泛的应用场景中需要增加事务超时计数器和故障中断机制以确保系统的鲁棒性。
\subsection{安全设计考量}
ML-KEM作为后量子密码系统,其硬件实现的安全性不仅取决于算法逻辑的正确性,还取决于对物理侧信道攻击的抵抗能力。本设计在解封装流程中实现了常量时间密文比较策略,重加密产生的参考密文与输入密文的逐字节比对过程不进行提前退出,无论密文在哪一个字节位置开始不匹配,比较循环都完整执行到密文长度终点。这一设计杜绝了基于比较时间的时序侧信道攻击,是FIPS 203标准对安全实现的明确要求。
在功耗侧信道防护方面,当前设计尚未部署差分功耗分析防护措施,如掩码技术或随机化执行顺序。Keccak-f[1600]置换的数百万次逻辑门翻转具有与处理数据相关的功耗特征,理论上可被高精度功耗采集设备利用以恢复密钥信息。此外,NTT蝶形单元中的Barrett模约简包含与操作数相关的条件减法路径(当中间结果大于等于模数q时执行减法,否则跳过),这一条件分支在功耗轨迹上可能产生可辨识的特征。上述侧信道问题需要后续工作引入适当的防护手段。
ML-KEM的三级安全参数通过相同的硬件数据通路支持,面积开销集中由参数K的最大值K=4决定。在ML-KEM-512模式下运行时,矩阵A的256个系数中仅前4个多项式(2×2)包含有效数据,其余12个多项式存储空间的采样操作虽然生成数据但不参与后续的矩阵向量点积运算,这构成了面积利用效率的浪费。然而,统一的硬件支持三级参数使得本系统在应用场景灵活性上具有优势,可在通信双方协商阶段根据安全需求动态切换安全等级。
\subsection{未来优化方向}
基于当前设计的分析结果,提出三个优先优化方向。第一个方向是增加ML-KEM的运算并行度,将单一Keccak核扩展为双核或三核,并相应调整顶层FSM以支持哈希、采样和NTT在非冲突状态上的并发执行。该方案以约5,000个LUT的面积增量为代价,预期可使全流程延迟降低20\%至35\%。第二个方向是引入AXI4-Stream高速流接口作为ML-KEM的额外数据通路,在AXI存储映射的批量窗口之外提供低延迟的流式数据接口,使ML-KEM能够以更低的软件干预开销融入更大的系统级数据流水线。第三个方向是评估将一部分调度逻辑(特别是矩阵批量序列器和DMA仲裁)软件化的可行性,在应用层灵活性和硬件调度确定性之间探索更优的分工平衡点。
% ===========================================================================
% 7. CONCLUSION
% ===========================================================================
\section{结论}
本项目的核心价值不只是增加三个 AXI 外设,而是形成了可持续工作的异构数据路径:
CPU 负责控制,DMA 负责搬运,序列器负责批处理,加速器负责计算,CDC 负责隔离不同
性能目标的时钟域。共享窗口和本地 endpoint 在端口与延迟约束之间取得平衡;双 Bank
和流水 CRC 则面向 5000 组矩阵任务消除了不必要的软件与写回开销。
已有基线证明方案具备功能与性能潜力,但最终报告应只引用同一 commit 下重新生成的
功能、时序、资源、CDC、功耗和板级证据。附带脚本已将这一过程标准化:执行完整回归、
保存日志并运行 \code{make metrics all} 后,正文表格和 PDF 会随证据同步更新。
本文详细阐述了一个基于OpenLA500处理器和Xilinx Artix-7 FPGA平台的异构计算SoC系统的设计、实现与验证全过程。系统成功集成了矩阵乘法加速器、FFT加速器和全参数可配置的ML-KEM后量子密码IP,通过通用DMA子系统和矩阵批量序列器实现了计算加速器的高效协同。系统的功能正确性在四个验证层级上均得到了充分确认:矩阵乘法批量处理以\MatmulBoardMs{} ms的中位运行时间通过了官方评测的CRC32校验,得分为\MatmulScore{}\%;ML-KEM加速器在三种安全等级、三种操作和三种数据传输路径上均以100\%通过率完成了总计900次的系统级诊断测试;FFT加速器在DMA批量模式下实现了827.80倍的软件加速比,计算精度满足预定误差要求。
\appendix
\section{关键寄存器摘要}
系统的FPGA物理实现在xc7a200tfbg676-1器件上完整通过布局布线,资源利用率为LUT 41.16\%、寄存器11.58\%、块存储器8.08\%、DSP 0\%。三个异步时钟域在76.923 MHz、50 MHz和33.333 MHz的目标频率下均建立保持时间收敛,最差负裕量为0.070 ns,零时序违例。总片上功耗为0.779 W,其中ML-KEM加速器为主要动态功耗来源。系统代码通过了HDL静态检查,综合后DSP资源为零的约束得到满足,跨时钟域报告中的警告项经过分析后确认不构成功能风险。
\begin{table}[H]
\centering
\small
\caption{DMA 与 matmul 序列器寄存器}
\begin{tabularx}{\textwidth}{p{2.4cm}p{3cm}Y}
\toprule
偏移 & 名称 & 含义 \\
\midrule
\code{n*0x40+0x00} & SRC\_ADDR & DMA 通道 $n$ 源物理地址 \\
\code{n*0x40+0x04} & DST\_ADDR & DMA 通道 $n$ 目的物理地址 \\
\code{n*0x40+0x08} & LENGTH & 字节数 \\
\code{n*0x40+0x10} & CTRL & start、AxSIZE、AxLEN \\
\code{n*0x40+0x14} & STATUS & busy、done(W1C) \\
\code{n*0x40+0x18} & MODE & mem2mem / mem2ep / ep2mem \\
\code{0x200} & SEQ\_CTRL & 批处理 start \\
\code{0x204} & SEQ\_STATUS & busy、done(W1C) \\
\code{0x208--0x21C} & SEQ 参数 & 源/目的基址、组数、matmul 基址、stride \\
\bottomrule
\end{tabularx}
\end{table}
本工作验证了在中等规模FPGA器件上集成后量子密码与数字信号处理多类计算加速器的可行性,为嵌入式后量子密码SoC的设计与实现提供了一个覆盖功能验证、时序收敛、功耗评估和性能分析的完整工程案例。
\section{复现入口}
详细顺序、预期输出和文件放置方式见同目录
\code{REPORT\_RERUN\_CHECKLIST.md}。常用入口如下:
\vspace{1em}
\noindent\textbf{关键词:}后量子密码;ML-KEM;矩阵乘法加速器;SoC设计;FPGA;跨时钟域设计
\begin{lstlisting}[language=bash]
cd doc/reports/system
./tools/run_report_tests.sh lint
./tools/run_report_tests.sh soc
./tools/run_report_tests.sh implement
./tools/run_report_tests.sh refresh
\end{lstlisting}
\begin{thebibliography}{9}
\bibitem{fips203} National Institute of Standards and Technology,
\emph{FIPS 203: Module-Lattice-Based Key-Encapsulation Mechanism Standard}, 2024.
\bibitem{loongson} 龙芯中科技术有限公司,\emph{龙芯 SoC 实验平台开发手册},2024。
\bibitem{xilinxcdc} AMD Xilinx, \emph{UG906: Vivado Design Analysis and Closure Techniques}.
\bibitem{sdf} S. He and M. Torkelson, ``Designing pipeline FFT processor for OFDM,''
URSI International Symposium on Signals, Systems, and Electronics, 1998.
% ===========================================================================
% REFERENCES
% ===========================================================================
\begin{thebibliography}{15}
\bibitem{fips203}
National Institute of Standards and Technology,
\textit{Module-Lattice-Based Key-Encapsulation Mechanism Standard},
Federal Information Processing Standards Publication FIPS 203,
2024.
\bibitem{avanza2021}
R. Avanzi, J. Bos, L. Ducas, E. Kiltz, T. Lepoint, V. Lyubashevsky, J.\,M. Schanck, P. Schwabe, G. Seiler, and D. Stehlé,
\textit{CRYSTALS-Kyber Algorithm Specifications and Supporting Documentation},
NIST PQC Standardization Process, Round 3, 2021.
\bibitem{keccak}
G. Bertoni, J. Daemen, M. Peeters, and G. Van Assche,
\textit{The Keccak Reference}, Version 3.0,
2011.
\bibitem{ntt_he2008}
S. He and M. Torkelson,
\textit{Designing Pipeline FFT Processor for OFDM (de)Modulation},
in URSI International Symposium on Signals, Systems, and Electronics, 1998.
\bibitem{sdf_cortes2019}
A. Cortés, I. Vélez, and J.\,F. Sevillano,
\textit{Radix-2² FFT Implementation Based on a Novel SDF Architecture},
IEEE Transactions on Circuits and Systems I, vol. 66, no. 10, 2019.
\bibitem{barrett1986}
P. Barrett,
\textit{Implementing the Rivest Shamir and Adleman Public Key Encryption Algorithm on a Standard Digital Signal Processor},
in Advances in Cryptology — CRYPTO '86, 1987.
\bibitem{openla500}
Loongson Technology,
\textit{OpenLA500 Processor Reference Manual},
2024.
\bibitem{axi_spec}
ARM Ltd.,
\textit{AMBA AXI and ACE Protocol Specification}, Issue H,
2017.
\bibitem{xilinx_ug}
Xilinx Inc.,
\textit{Vivado Design Suite User Guide: Implementation}, UG904,
2019.
\bibitem{cummings2008}
C.\,E. Cummings,
\textit{Clock Domain Crossing (CDC) Design \& Verification Techniques Using SystemVerilog},
SNUG Boston, 2008.
\bibitem{dang2021}
V.\,B. Dang, F. Farahmand, M. Andrzejczak, and K. Gaj,
\textit{Implementing and Benchmarking Post-Quantum Cryptography in Hardware},
IEEE Access, vol. 9, 2021.
\bibitem{xing2023}
Y. Xing and S. Li,
\textit{HAETAE: Shorter Lattice-Based Fiat-Shamir Signatures},
Cryptology ePrint Archive, Report 2023/624, 2023.
\bibitem{ieee_crc}
Institute of Electrical and Electronics Engineers,
\textit{IEEE Standard for Information Technology — Telecommunications and Information Exchange Between Systems}, IEEE 802.3, 2018.
\end{thebibliography}
\end{document}