This repository has been archived on 2026-08-21. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
ciciec2026/doc/reports/system/system_design_report.tex
2026-07-15 18:22:17 +08:00

768 lines
77 KiB
TeX
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
% =============================================================================
% CICIEC 2026 Loongson Regional — System Design Report
% 基于龙芯SoC的后量子密码与矩阵运算加速系统设计报告
% =============================================================================
\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{amsmath,amssymb}
\usepackage{hyperref}
\usepackage{caption}
\usepackage{enumitem}
\usepackage{float}
\usepackage{longtable}
\usepackage{multirow}
\usepackage{array}
\usepackage{xcolor}
\usepackage[normalem]{ulem}
% ---- Page style ----
\setlength{\headheight}{14pt}
\pagestyle{fancy}
\fancyhead[LO,RE]{系统设计报告}
\fancyhead[RO,LE]{\thepage}
\fancyhead[CO,CE]{}
\fancyfoot[C]{\thepage}
\renewcommand{\headrulewidth}{0.4pt}
\renewcommand{\footrulewidth}{0pt}
% ---- 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*{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 基于LoongArch SoC 的后量子密码与矩阵运算加速系统\hfill} \\[18pt]
队伍编号:\uline{\hfill CICC1008439\hfill} \\[18pt]
团队名称:\uline{\hfill 碳基生物\hfill}
\end{flushleft}
\end{titlepage}
% ===========================================================================
% TABLE OF CONTENTS
% ===========================================================================
\tableofcontents
\newpage
% ===========================================================================
% CORE HIGHLIGHTS PREVIEW
% ===========================================================================
\section*{作品核心亮点预览}
\addcontentsline{toc}{section}{作品核心亮点预览}
\begin{center}
{\large\heiti 基于OpenLA500的多加速器异构SoC与全参数ML-KEM硬件实现}
\end{center}
\noindent
\colorbox{blue!7}{%
\parbox{\dimexpr\textwidth-2\fboxsep\relax}{%
本作品面向龙芯中科杯矩阵运算与后量子密码任务,在赛事基础SoC之上完成DMA、矩阵乘法、FFT、ML-KEM、跨时钟域互连和批量调度等硬件扩展,并对外部SRAM控制器进行连续突发优化。系统以CPU负责配置与验证、硬件负责搬运与计算为基本分工,实现从算法IP到板级应用的完整数据通路。
}%
}
\begin{center}
\includegraphics[width=0.70\textwidth]{system_arch.png}
{\small 系统总体架构:CPU控制面、DMA数据面与三个计算加速器通过AXI互连协同工作}
\end{center}
\noindent
\begin{minipage}[t]{0.48\textwidth}
{\color{blue!70!black}\heiti 硬件自主的数据搬运与调度}
\small 四通道DMA支持内存到内存、内存到端点和端点到内存传输。矩阵批量序列器将CPU的一次启动扩展为5000组任务的硬件自主执行,双Bank机制重叠ExtRAM加载与乘加计算。
\end{minipage}
\hfill
\begin{minipage}[t]{0.48\textwidth}
{\color{blue!70!black}\heiti Matmul批量流水与在线校验}
\small 4个无符号乘法器配合两级加法树产生66位结果,稳态每周期发射一个矩阵元素。CRC结果FIFO解耦乘加与递归CRC32,快速通道跳过结果写回并在CRC完全排空后置位完成标志。
\end{minipage}
\vspace{0.6em}
\noindent
\begin{minipage}[t]{0.48\textwidth}
{\color{blue!70!black}\heiti 单比特流全参数ML-KEM}
\small 单一硬件实例运行时支持ML-KEM-512、768和1024,以及KeyGen、Encaps和Decaps三种操作。Keccak核跨哈希与采样阶段复用,Decaps重加密复用Encaps数据通路,并实现常量时间隐式拒绝。
\end{minipage}
\hfill
\begin{minipage}[t]{0.48\textwidth}
{\color{blue!70!black}\heiti 存储与多时钟域协同优化}
\small SRAM控制器通过读地址预驱动、读数据寄存和连续写握手,将突发内部吞吐提高至每周期一个32位数据拍。CPU、系统与ML-KEM三个异步时钟域通过全五通道AXI双时钟FIFO安全连接。
\end{minipage}
\vfill
\noindent
\colorbox{gray!12}{%
\parbox{\dimexpr\textwidth-2\fboxsep\relax}{%
\small\textbf{自主设计边界:}OpenLA500处理器、板级SRAM器件及基础外设来自赛事平台;DMA扩展、矩阵乘法与批量序列器、FFT、ML-KEM、跨时钟域桥接以及SRAM控制器的突发流水化改造由本项目完成。
}%
}
\newpage
\section*{关键指标与验证结论}
\begin{center}
\setlength{\tabcolsep}{4pt}
\renewcommand{\arraystretch}{1.25}
\begin{tabular}{>{\centering\arraybackslash}p{0.23\textwidth}>{\centering\arraybackslash}p{0.23\textwidth}>{\centering\arraybackslash}p{0.23\textwidth}>{\centering\arraybackslash}p{0.23\textwidth}}
{\Large\heiti \MatmulFinalMs{} ms} &
{\Large\heiti \FftDmaSpeedup{}$\times$} &
{\Large\heiti 48.95--53.33$\times$} &
{\Large\heiti 0 DSP} \\
Matmul 5000组最终时间 &
FFT DMA相对软件加速 &
ML-KEM DMA相对软件加速 &
全系统DSP使用量 \\
\end{tabular}
\end{center}
\vspace{0.5em}
\noindent{\large\heiti 核心性能结果}
\begin{center}
\small
\setlength{\tabcolsep}{5pt}
\renewcommand{\arraystretch}{1.28}
\begin{tabular}{p{2.4cm}p{7.0cm}p{4.7cm}}
\toprule
项目 & 实测结果 & 结论 \\
\midrule
矩阵乘法 & 最终评测完成5000组计算;运行时间\MatmulFinalMs{} ms & CRC32匹配,得分\MatmulFinalScore{} \\
FFT & DMA模式延迟\FftDmaNs{} ns;实部/虚部最大误差为1/2 & 相对软件加速\FftDmaSpeedup{}$\times$ \\
ML-KEM & 三等级完整往返为52,995/80,643/113,261个CPU周期 & DMA相对软件加速48.95--53.33$\times$ \\
SRAM接口 & 50 MHz、32位,连续突发每周期一个数据拍 & 理论单向带宽200 MB/s \\
\bottomrule
\end{tabular}
\end{center}
\noindent{\large\heiti FPGA实现质量}
\begin{center}
\small
\setlength{\tabcolsep}{5pt}
\renewcommand{\arraystretch}{1.25}
\begin{tabular}{p{3.0cm}p{5.3cm}p{5.8cm}}
\toprule
维度 & 结果 & 工程含义 \\
\midrule
资源 & 55,066 LUT,31,000 FF,29.5 BRAM Tile,0 DSP & LUT 41.16\%,BRAM 8.08\%,保留进一步扩展空间 \\
时钟与时序 & 33.333/50.000/76.923 MHz;88,843个端点零违例 & CPU、系统总线和ML-KEM算法域独立收敛 \\
标准验证 & 9000个主路径KAT与300个隐式拒绝向量通过 & 覆盖三等级、三操作及Decaps拒绝路径 \\
板级验证 & ML-KEM 900次运行零失败;FFT 6次通过;Matmul最终评测满分 & 验证CPU、DMA、CDC、SRAM和加速器端到端协同 \\
\bottomrule
\end{tabular}
\end{center}
\vfill
\noindent
\colorbox{green!8}{%
\parbox{\dimexpr\textwidth-2\fboxsep\relax}{%
\textbf{总体结论:}系统在xc7a200tfbg676-1 FPGA上完成布局布线,以零DSP实现矩阵运算、FFT和全参数ML-KEM硬件加速;功能正确性、跨时钟域可靠性和板级端到端性能均得到验证。
}%
}
\vspace{0.6em}
\begin{flushright}
\small 数据基线:\EvidenceRevision{},\EvidenceDate{}
\end{flushright}
\newpage
% ===========================================================================
% 1. INTRODUCTION
% ===========================================================================
\section{绪论}
\subsection{设计背景与目标}
随着量子计算技术的快速发展,传统公钥密码体系面临严峻挑战。美国国家标准与技术研究院于2024年正式发布的FIPS 203标准确立了ML-KEM作为后量子密钥封装机制的地位,标志着后量子密码从学术研究向工业应用的转折点。与此同时,矩阵乘法作为科学计算、信号处理与机器学习的基础运算,其硬件加速在嵌入式计算场景中具有广泛需求。本届集成电路创新创业大赛龙芯中科杯赛题要求参赛者在OpenLA500处理器平台上,设计并实现包含矩阵乘法加速器与ML-KEM密码IP的完整SoC系统,在资源受限的FPGA器件上同时满足功能正确性与性能要求。
本设计的核心目标是在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搬运与加速器计算的流水化协同。第四,在赛事基础SoC提供的外部SRAM控制器上优化AXI突发读写时序,使BaseRAM和ExtRAM能够在连续传输期间以每个系统时钟周期一个32位数据拍的速率工作,降低程序取指与加速器批量搬运共享存储器时的接口开销。
\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访问延迟。第五条原则是存储接口节拍匹配原则。外部异步SRAM控制器在满足地址建立与数据保持时间的前提下,将AXI地址、SRAM访问和AXI响应组织为连续流水,使32位AXI数据拍与50 MHz系统时钟逐拍对应,避免控制状态机在突发数据拍之间引入结构性空闲周期。
本设计的主要创新点体现在四个方面。首先,提出了一套高效的跨时钟域互连方案,在CPU时钟域、系统总线时钟域和ML-KEM算法时钟域之间采用全五通道AXI双时钟FIFO进行时钟域隔离,同时配合严格的异步复位释放链和中断同步器,在保持各时钟域独立约束的前提下保证了数据与控制信号的可靠传递。其次,对赛事基础平台的外部SRAM控制器进行突发访问流水化改造,通过读地址预驱动、读数据寄存、连续写握手和跨突发无空闲衔接,提高了CPU与DMA共享存储器的有效带宽。再次,针对竞争评分机制对批量处理延迟的极致要求,设计了快速通道模式,在保证CRC32增量计算正确性的前提下跳过每组结果的逐字写回,将批量矩阵乘法的端到端延迟推进到毫秒量级。最后,ML-KEM解封装中的隐式拒绝路径采用了常量时间比较策略,整个重加密密文与输入密文的逐字节比对不进行提前退出,从根本上杜绝了时序侧信道信息泄露,这是后量子密码实现中至关重要的安全设计考量。
\subsection{代码规模与开发环境}
本设计的基础SoC平台来自龙芯中科提供的竞赛发布包,其核心处理器为OpenLA500。OpenLA500是一款实现了龙芯架构32位精简版指令集(LoongArch32R)的处理器核,采用单发射五级流水线架构,分为取指、译码、执行、访存和写回五个流水级。处理器核内置两路组相联的指令和数据Cache、32项TLB以及简易分支预测器,对外通过标准AXI接口与系统总线互连。
系统RTL代码采用Verilog与SystemVerilog编写,覆盖SoC顶层集成、三个计算加速器及其子模块、DMA子系统、跨时钟域桥接模块、外部SRAM控制器优化以及相关的仿真测试平台。软件部分包括运行于OpenLA500 CPU上的C语言驱动程序和测试程序,涵盖矩阵乘法评测、FFT功能验证以及ML-KEM全参数系统级诊断测试。FPGA综合与布局布线使用Xilinx Vivado 2019.2工具链完成,目标器件为xc7a200tfbg676-1。RTL功能仿真采用Xilinx XSIM进行结果比对与波形验证,软件交叉编译使用龙芯GCC工具链(loongarch32r-linux-gnusf-gcc 8.3)生成LoongArch32R裸机可执行文件。
% ===========================================================================
% 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}
\subsection{地址空间分配}
系统采用统一的物理地址空间,各计算加速器通过固定的从端口挂载在总线互连矩阵上,每个加速器拥有独立的地址范围。竞赛发布包中总线互连矩阵的八个从端口已有既定分配:从端口零连接片上SRAM(基地址0x1c00\_0000,8 MB空间),从端口一保留,从端口二连接AXI转APB桥后挂载UART(基地址0x1f00\_0000),从端口三连接DVI显示控制器(基地址0x1f10\_0000),从端口四连接系统配置与中断控制器(基地址0x1f20\_0000),从端口五连接DMA从设备端口(基地址0x1f30\_0000),从端口六连接FFT加速器(基地址0x1f40\_0000),从端口七保留供参赛者扩展使用(基地址0x1f50\_0000)。
完整的地址空间分配如表\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{时钟域划分与跨时钟域设计}
系统三个时钟域之间的关系在引脚约束文件中通过异步时钟组约束声明为彼此独立的时钟域,时序分析引擎对跨域路径不进行建立保持时间检查,时序收敛的职责完全落在跨时钟域电路的设计正确性上。CPU到系统总线的跨域路径承载AXI读写事务,采用全五通道双时钟先进先出缓冲队列方案。写地址通道、写数据通道和读地址通道的缓冲队列写入端工作在CPU时钟域,读出端工作在系统时钟域;写响应通道和读数据通道的缓冲队列写入端工作在系统时钟域,读出端工作在CPU时钟域。每条通道的缓冲队列独立管理自身的满空标志,通过有效—就绪握手协议实现跨域反压传递。这种设计保证了AXI协议的事务顺序性属性在跨域后不丢失,CPU端提交的写事务在系统总线端按顺序可见,读事务的响应数据同样按顺序返回。
系统总线到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;官方评测采用的快速通道模式跳过该写回阶段,但矩阵核心仍按照每个66位结果元素的标准字节序增量更新CRC32。CPU在全部任务完成后读取CRC32寄存器并通过串口输出。因而,当前评测路径由源数据搬运、硬件计算和片上CRC32累加组成,ExtRAM结果区在快速通道模式下不会被更新。这种软件配置加硬件执行的划分模式最大化地降低了对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{外部SRAM控制器优化}
\label{sec:sram_controller}
系统沿用赛事基础SoC提供的AXI到异步SRAM适配器,并针对连续突发访问重新设计其关键状态转换与数据保持路径。优化对象不是SRAM器件本身,而是AXI读写通道与BaseRAM、ExtRAM物理接口之间的控制逻辑。控制器仍保持32位数据宽度并支持FIXED、INCR和WRAP三类AXI突发,所有访问均在50 MHz系统时钟域内完成。
原始读通道在相邻数据拍之间交替进入数据响应状态和地址准备状态,即使AXI主设备始终保持\texttt{RREADY},每个数据拍后仍会产生一个固定空闲周期。优化后的快速读模式在返回当前\texttt{R}通道数据时预先驱动下一拍SRAM地址,并在当前数据完成握手的时钟沿将下一拍数据锁存到读数据寄存器。该寄存器将异步SRAM数据总线与AXI\texttt{RVALID/RREADY}握手解耦:当主设备施加反压时,\texttt{RDATA}和\texttt{RVALID}保持稳定;当主设备连续接收时,突发内部可实现每周期返回一个32位数据拍。最后一个\texttt{R}数据拍完成时,控制器还能够直接接受下一条\texttt{AR}请求并启动其地址阶段,消除了相邻读突发之间必须返回空闲状态的间隔。
写通道的优化移除了连续写数据拍之间的\texttt{WRITE\_NOP}状态。当\texttt{WVALID}连续有效时,控制器保持\texttt{WREADY}并在每个系统时钟周期更新地址、字节使能与写数据,从而由隔拍写入改为逐拍写入。地址生成逻辑使用当前地址、固定字长增量和突发边界掩码统一处理三类突发;计数器扩展为9位,以正确表达AXI4最长256拍突发的完成条件。
BaseRAM与ExtRAM的选择位由地址位22决定。优化后该选择不再直接依赖组合地址输出,而是在接收\texttt{AR}或\texttt{AW}时锁存为独立的Bank状态,并随整个事务保持不变,避免流水地址切换期间片选和读数据多路选择发生瞬态变化。在无AXI反压的理想条件下,连续读写的接口峰值带宽由原先约每两周期一个32位数据拍提高至每周期一个数据拍;在50 MHz系统时钟下,对应的理论单向带宽为200 MB/s。该数值是接口节拍上限,实际端到端性能仍受到总线仲裁、突发启动、DMA调度和计算模块反压的共同影响。
\subsection{矩阵乘法加速器设计}
矩阵乘法加速器是本系统中逻辑结构最为紧凑的计算模块。其核心功能是计算两个4x4无符号32位整数矩阵的乘积,每个输出元素为四个32位乘积累加结果,总宽度66位。加速器内部采用双Bank结构,Bank 0和Bank 1各包含一套完整的16元素A矩阵、16元素B矩阵以及48字(16元素乘以3字每元素)C结果矩阵的存储空间。双Bank设计使得批量序列器可以实现在一个Bank执行矩阵乘法计算的同时,另一个Bank通过端点接口接收下一组矩阵数据或写出上一组计算结果,从而实现计算与数据搬运的时间重叠。
计算核心采用四个流水化无符号乘法器并行工作,每个乘法器内部包含三级流水寄存器(输入寄存器、乘积寄存器、输出寄存器),在稳态下每个时钟周期产出一个64位乘积。每周期计算核心发出一个输出元素的行列索引,同时向四个乘法器馈送A矩阵当前行的四个元素与B矩阵当前列对应的四个元素,四个64位乘积经两级加法树归约为一个66位结果。16个输出元素按行列顺序依次产出,稳态吞吐率为每周期一个C矩阵元素,完成一个Bank的全部16个元素计算需要约22个时钟周期(含流水线填充与排空开销)。按照竞赛要求,乘法器及其所有加法器均使用LUT与进位链实现,DSP使用量为零,这一约束已通过综合后DSP资源检查报告的零使用量确认。
加速器的AXI从设备接口支持INCR突发读写,允许DMA以批量突发方式访问矩阵数据缓冲区。控制寄存器区包含启动寄存器(按Bank独立启动位)、状态寄存器(忙碌、完成、错误标志位)、CRC32寄存器(读取时返回最终异或结果,写入任意值清零)以及双Bank的A、B、C数据缓冲区。Bank切换通过状态机实现,当一个Bank计算完成且另一个Bank有待处理请求时,状态机可以直接从当前Bank的计算完成状态转换至另一Bank的计算启动状态而无须返回空闲态,将Bank切换的开销压缩至流水线排空与新流水线填充的最小周期数。
矩阵乘法加速器的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{矩阵批量序列器设计}
矩阵批量序列器是连接DMA子系统与矩阵乘法加速器的中枢调度模块。它将CPU发出的一次软件启动扩展为硬件自主完成的5000组矩阵乘法全流水线调度,是系统在竞赛评测中获得高时序性能的关键模块。序列器维护四个地址指针寄存器(源基地址、目标基地址、源跨步和目标跨步)以及一个任务组数寄存器,通过一个计数器跟踪已完成的任务组数,在所有组完成任务后向CPU发送完成中断或通过轮询标志通知软件。
序列器的核心机制是双Bank流水调度。两组矩阵任务被交替分配到Bank 0和Bank 1上执行。对于分配到某个Bank的每组任务,调度流程分为加载、计算和存储三个连续的流水阶段。加载阶段通过DMA外部请求接口提交一次128字节的内存到端点传输请求,将源矩阵A和B从ExtRAM搬运到目标Bank的输入缓冲区。传输完成后,Bank内的A和B数据标记为有效。计算阶段通过向加速器发出单周期的Bank启动脉冲触发矩阵乘法计算,并等待加速器的计算完成脉冲。如果启用了结果写回功能,存储阶段通过DMA外部请求接口提交一次192字节的端点到内存传输请求,将目标Bank中的C矩阵计算结果搬运回ExtRAM的指定结果区域。在快速通道模式下,存储阶段被跳过,任务在计算完成时即标记为退休,但CRC32的增量更新仍正常执行。
两个Bank的流水可以在时间上重叠:当Bank 0执行计算时,DMA可以同时为Bank 1执行加载或存储操作。这种重叠利用了矩阵乘法加速器的双Bank独立性与DMA引擎的独立工作能力,使得外部存储器的访问延迟被计算时间覆盖。序列器使用一个深度为二的完成队列跟踪Bank计算完成的先后顺序,确保存储操作在正确的Bank上执行。
图\ref{fig:matmul_gantt}以快速通道的前四组任务和末尾收尾阶段为例,给出了当前实现的数据流甘特图。图中阶段宽度用于表达先后依赖和流水重叠关系,不代表严格的周期比例。CDMA读侧仍使用单一AXI读数据通道,硬件能够保留一个活动突发和一个预取请求,以减少相邻突发之间的地址握手空隙,但两组读数据仍按请求顺序返回。双Bank的作用是在共享读通道装载下一组A/B矩阵时,让单一乘加流水线处理已经就绪的另一Bank,而不是复制两套DMA或乘加数据通路。
每个66位C元素在写入对应Bank结果缓冲区的同时进入CRC结果FIFO。递归CRC32数据通路将一个元素表示成两个6字节更新步骤,因此消费速率低于乘加流水线的峰值发射速率;FIFO吸收短期速率差,在占用量接近阈值时对新结果发射施加反压。快速通道在矩阵计算完成时退休该组任务,不发起192字节结果写回,但批量序列器只有在最后一组退休且CRC FIFO与递归更新状态均为空闲后才置位最终完成标志。
\begin{figure}[htbp]
\centering
\includegraphics[width=0.98\textwidth]{matmul_dataflow_gantt.png}
\caption{Matmul快速通道数据流甘特图}
\label{fig:matmul_gantt}
\end{figure}
在快速通道模式下,结果写回不再占用数据通路。稳态吞吐率由128字节源数据读取、单一乘加流水线以及递归CRC32消费速率共同决定:源数据读取包含32个32位数据拍,乘加流水线在无反压时可连续发射16个结果元素,而CRC32以每个元素两个更新周期的速率消费FIFO数据。当CRC积压达到阈值时,CRC结果FIFO会暂停新的乘加发射,因此不能将批量吞吐率简单等同于单个Bank的计算延迟。在整个5000组任务的处理过程中,CPU不参与逐组调度,仅需在开始前配置序列器寄存器并在结束后查询完成状态,实现了硬件自主的批量处理流程。
\subsection{FFT加速器设计}
1024点FFT加速器采用Radix-2\textsuperscript{2}单路径延迟反馈架构,包含一个顶层控制器状态机和五个SDF流水级单元。每个流水级单元处理两级基二蝶形运算,内部包含两个蝶形单元、两个延迟缓冲区和一个复数乘法器。延迟缓冲区的深度依次递减,从第一级的512/256降至最后一级的2/1,对应每级蝶形运算的数据分组规模。
顶层控制器的状态机在空闲态等待CPU或DMA的启动命令,随后进入加载态。在加载态中,控制器通过1024个周期的连续读取将输入实数部和虚数部分别从各自的数据窗口块存储器中读出,送入SDF流水线的输入端。输入数据按自然顺序进入流水线。加载完成后,控制器进入等待输出态,在接下来的1024个周期中接收SDF流水线的输出结果。由于SDF流水线的固有特性,输出数据呈位逆序排列。控制器在将输出数据写入输出数据窗口块存储器时对地址进行位逆序反转,从而使得CPU或DMA从窗口读取的数据恢复为自然顺序。
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{ML-KEM加速器系统集成}
ML-KEM加速器是本系统中算法复杂度和硬件规模最高的计算模块。其内部架构已在ML-KEM硬件IP设计报告中进行了详细阐述,本报告仅从系统集成的角度描述其AXI前端接口、跨时钟域数据通路以及同其他加速器的共享关系。ML-KEM的AXI从设备接口通过跨时钟域桥接模块连接至FFT/ML-KEM共享地址窗口的ML-KEM分支。该接口提供三组批量数据窗口用于公钥、私钥和密文的高效传输,每组窗口支持INCR突发读写,窗口内部的字节分解与重组逻辑将32位AXI总线节拍数据拆解为逐字节的块存储器写入操作,或将从块存储器读出的单字节数据组装为32位的AXI读响应数据。
ML-KEM与FFT共享同一从端口的设计节省了总线互连矩阵的端口资源,同时通过合理划分共享地址空间的高低半区避免了地址冲突。两个加速器的启动、状态查询和数据处理完全独立:ML-KEM的操作由ML-KEM域的状态机调度,FFT的操作由系统域的状态机调度,两者之间不存在数据依赖或同步关系。当中断信号从ML-KEM域同步回系统域后,CPU可以在同一个中断服务程序中按照中断源位区分具体是哪个加速器完成了操作。
\begin{figure}[htbp]
\centering
\includegraphics[width=0.85\textwidth]{mlkem_modules.png}
\caption{ML-KEM模块内部层次结构}
\label{fig:mlkem_modules}
\end{figure}
% ===========================================================================
% 4. VERIFICATION METHODOLOGY
% ===========================================================================
\section{验证方案}
\subsection{分层验证策略}
系统的验证工作采用分层递进策略,将验证对象从底层叶模块到顶层系统划分为四个层级,每一层级解决不同粒度的功能正确性问题。
第一层级为叶模块级验证,覆盖全部自研硬件模块中的独立运算单元和控制单元。对于ML-KEM算法子系统,Keccak-f[1600]置换核使用标准空消息和多块测试向量进行逐比特比对验证;SHA3/SHAKE顶层使用速率边界、域分离填充和多块末尾块填充的专项测试向量;NTT核和多项式乘法模块使用已知结果的确定性测试向量,验证蝶形运算与Barrett模约简的数值精度;CBD采样和拒绝采样模块因其输出具有随机性且长度可变,测试平台同时验证输出系数的数值范围、统计分布特征以及反压条件下的握手协议正确性。对于FFT加速器,叶模块级验证覆盖了蝶形运算单元、复数乘法器、延迟缓冲区和旋转因子只读存储器,重点验证蝶形运算中的算术右移舍入策略在各级联条件下的累积误差是否处于可控范围内,以及复数乘法器在四种乘积组合下的符号正确性。对于矩阵乘法加速器,叶模块级验证覆盖了流水化乘法器的三级流水寄存器行为、乘积结果的64位宽度正确性以及加法树归约路径的进位链完整性;CRC32计算单元使用标准IEEE 802.3已知答案测试向量独立验证其增量更新逻辑。对于DMA子系统,叶模块级验证覆盖了同步先进先出缓冲队列在满空边界条件下的读写行为、轮转仲裁器在多通道并发请求时的公平性以及AXI突发传输引擎在不同传输长度和地址对齐条件下的时序正确性。
第二层级为IP集成级验证。ML-KEM方面,将七个算子模块、系数存储块存储器和顶层有限状态机集成为完整的算法顶层模块,使用FIPS 203标准定义的已知答案测试向量进行端到端验证,对密钥生成、封装和解封装的每字节输出进行逐字节精确比对,任何单比特的偏差均导致测试失败,测试覆盖了三种安全等级和三种操作的各1000组不同输入向量。FFT方面,将SDF流水线五级单元与控制状态机集成为完整的1024点FFT加速器,使用多组已知频率成分的合成信号作为输入,验证输出频谱的幅度正确性和位逆序到自然顺序的地址转换正确性,并以双精度浮点软件参考模型为基准,在1024个频点上逐一比较实数部和虚数部的误差。矩阵乘法方面,将双Bank数据缓冲区、四乘法器计算核心、CRC32增量更新逻辑和AXI从设备接口集成为完整的矩阵乘法加速器,使用多组已知乘积的确定性矩阵作为输入,覆盖全零边界用例、单位矩阵、满秩随机矩阵和不同矩阵维度组合,验证输出元素的66位结果与各维度的按字拆分格式的正确性。DMA方面,将四通道寄存器组、轮转仲裁器、内存到内存传输引擎和端点状态机集成为完整的DMA子系统,分别验证三种传输模式在随机地址与随机长度下的数据搬运完整性,以及端点模式中Bank编号与字偏移的地址计算正确性。
第三层级为SoC集成级验证。将矩阵乘法加速器、FFT加速器、ML-KEM加速器和DMA子系统全部集成到系统顶层模块中,重点验证总线互连矩阵的地址解码正确性、多主设备并发访问的仲裁公平性、跨时钟域数据通路的传输可靠性、复位释放前后各AXI通道的事务清空情况以及中断聚合与响应的时序正确性。该层级通过短时长的XSIM系统级仿真完成,利用波形窗口观察关键时序节点,确认复位释放后CPU第一条取指事务的正常发起以及各加速器AXI接口的初始状态为空闲。该过程同时检查了CPU经SRAM控制器访问BaseRAM的取指通路。
第四层级为板级系统验证。将经过综合、布局布线生成的比特流下载到FPGA开发板,运行CPU上的测试程序,在真实的硬件环境中验证完整的软硬件协同工作流程。板级验证覆盖了矩阵乘法评测、FFT功能正确性与性能对比、ML-KEM全参数全操作的三路径系统诊断测试,所有测试通过开发板串口输出结构化的测试结果日志。这些测试均依赖BaseRAM执行程序并通过ExtRAM或加速器窗口搬运批量数据,因而也对优化后SRAM控制器的连续读写、Bank选择和长时间运行稳定性形成了端到端覆盖。
\subsection{验证工具链与环境}
RTL仿真使用Xilinx XSIM作为仿真引擎,通过Tcl脚本管理仿真流程。叶模块级仿真在模块源码目录下运行,使用独立的testbench文件;ML-KEM顶层KAT仿真的测试时钟为20 MHz,周期统计据此换算为仿真时间。SoC集成级仿真在系统顶层目录下运行,使用仿真时钟模型产生各时钟域信号。仿真中通过条件编译旁路真实PLL锁相过程,以缩短仿真启动时间。复位窗口的波形数据通过VCD格式导出,用于观测复位释放时序和验证复位释放前AXI通道上不存在未完成事务。上述测试属于RTL功能仿真,不包含门级延迟或SDF反标。
FPGA综合与实现使用Vivado 2019.2完整流程。时序约束为CPU、系统总线和ML-KEM三个生成时钟分别定义周期与波形,并将三者声明为异步时钟组;跨域功能正确性由AXI双时钟FIFO、单比特同步器和复位同步器的结构保证,而不是由跨域最大延迟约束保证。当前输入输出延迟约束覆盖BaseRAM和ExtRAM的数据、地址与控制信号,尚未对QSPI Flash、UART、DVI等全部板级接口建立完整的外部时序模型,因此Vivado方法学报告仍包含缺失输入输出延迟的警告。本文的静态时序结论仅适用于已约束的内部同步路径与SRAM接口,不将未完整约束的外部接口计入时序收敛结论。
软件编译使用龙芯LoongArch32R交叉工具链中的loongarch32r-linux-gnusf-gcc 8.3编译器,目标指令集为LoongArch32R。各测试程序由其Makefile分别选择-O2或-O3优化,并采用静态裸机链接、无标准启动文件和未缓存地址映射。生成的二进制文件写入BaseRAM仿真模型或开发板BaseRAM。板级调试过程中利用串口输出作为主要的信息反馈通道,所有测试程序的判定结果、性能指标和错误计数均通过115200波特率的串口输出,并由上位机脚本进行解析和记录。
\subsection{验证覆盖范围}
本项目验证覆盖范围的完整程度由表\ref{tab:verification}总结。矩阵乘法批量处理通过了三轮官方板级评测的CRC32校验,每轮使用独立随机种子生成5000组输入。ML-KEM算法子系统的已知答案测试在仿真层面通过了9000个主路径测试向量(三种操作乘以三种安全等级乘以1000个向量),并通过了300个Decaps隐式拒绝路径向量(三种安全等级各100个向量);在板级系统诊断测试中通过了900次全流水运行(三种安全等级乘以三种传输路径乘以100次迭代),所有测试的失败计数均为零。FFT加速器在板级上通过了两类数据传输模式(CPU逐字读写和DMA批量传输)各三次重复运行的功能正确性和数值精度验证,1024个频点的实数部与虚数部最大误差均低于预定阈值。DMA子系统在板级系统诊断测试中作为ML-KEM和FFT的数据搬运通路被间接验证了三种传输模式的完整性,同时其四通道轮转调度和端点传输的正确性通过矩阵批量序列器的5000组流水任务得到了充分覆盖。上述板级负载均运行在优化后的SRAM控制器之上,覆盖CPU从BaseRAM持续取指以及DMA从ExtRAM执行长突发读取的实际使用场景。
\begin{table}[H]
\centering
\setlength{\tabcolsep}{5pt}
\caption{功能验证覆盖摘要}
\label{tab:verification}
\begin{tabular}{p{4.5cm}ccc}
\toprule
验证项 & 测试规模 & 通过/总计 & 结果 \\
\midrule
矩阵乘法叶模块(乘法器、CRC32) & 确定性向量 & — & 通过 \\
FFT叶模块(蝶形单元、复数乘法器) & 定向测试 & — & 通过 \\
DMA叶模块(FIFO、仲裁器、引擎) & 定向测试 & — & 通过 \\
ML-KEM叶模块(Keccak、NTT、采样等) & 标准测试向量 & — & 通过 \\
\midrule
矩阵乘法IP集成(仿真) & 多组确定矩阵 & — & 通过 \\
FFT IP集成(仿真) & 合成测试信号 & — & 通过 \\
DMA IP集成(仿真) & 随机地址/长度 & — & 通过 \\
ML-KEM KAT(仿真) & 9组 × 1000向量 & 9 / 9 & 通过 \\
ML-KEM隐式拒绝(仿真) & 3组 × 100向量 & 3 / 3 & 通过 \\
\midrule
矩阵乘法CRC32(官方板级评测) & 3轮 × 5000组 & 3 / 3 & 通过 \\
FFT功能验证(板级) & 3次 × 2模式 & 6 / 6 & 通过 \\
ML-KEM 系统诊断(板级) & 9组 × 100次迭代 & 9 / 9 & 通过 \\
DMA搬运完整性(板级,间接覆盖) & 5000组流水任务 & — & 通过 \\
SRAM连续突发读写(板级,间接覆盖) & Matmul、FFT、ML-KEM负载 & — & 通过 \\
\midrule
复位释放前事务检查(仿真) & — & — & 无违规 \\
DSP资源检查(综合后) & — & 0个 / 期望0个 & 通过 \\
时序收敛(布局布线后) & 88,843个端点 & — & 零违例 \\
\bottomrule
\end{tabular}
\end{table}
% ===========================================================================
% 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
\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}
从模块层级的资源分布来看,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
\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}
三个时钟域中,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总线为两块存储器分配连续的8 MB物理窗口,控制器根据AXI地址的第22位进行BaseRAM和ExtRAM的路由选择:bit22为0时访问BaseRAM,对应0x1c00\_0000至0x1c3f\_ffff;bit22为1时访问ExtRAM,对应0x1c40\_0000至0x1c7f\_ffff。两块SRAM内部均使用地址位[21:2]形成20位字地址。外部SRAM芯片的最小读写周期为10 ns,因此控制器时钟频率被限制在50 MHz以内,与系统时钟域的50 MHz频率天然匹配。
控制器采用第\ref{sec:sram_controller}节所述的连续突发优化。读方向通过地址阶段与数据响应阶段重叠,在当前数据拍被AXI主设备接收的同时准备下一拍SRAM数据;写方向则在\texttt{WVALID/WREADY}持续握手时逐周期推进写地址。由于系统时钟周期为20 ns,每一拍仍为异步SRAM保留了一个完整时钟周期的地址建立和数据稳定窗口。读数据寄存器负责在AXI反压期间保持响应不变,事务级Bank寄存器负责保证BaseRAM与ExtRAM片选在整个突发期间稳定。该实现兼顾了外部器件时序要求和AXI连续传输吞吐率。
在竞赛评测场景中,BaseRAM用于存放用户程序的指令和数据,ExtRAM用于存放源矩阵数据。标准数据布局在ExtRAM偏移0x0000\_0000处存放5000组源矩阵A和B(每组128字节,总计640,000字节),并为偏移0x0009\_c400处的5000组结果矩阵C保留960,000字节空间。标准写回模式会填充该结果区;当前官方评测使用快速通道模式,跳过结果写回,矩阵核心直接按照与该960,000字节结果序列相同的字节顺序累计CRC32。因此评测校验覆盖的是全部计算结果的逻辑字节序列,而不是快速模式下ExtRAM结果区的实际内容。DMA读取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
\caption{功耗分布}
\label{tab:power}
\begin{tabular}{cc}
\toprule
功耗类型 & 功耗值 (W) \\
\midrule
总片上功耗 & \TotalPower{} \\
动态功耗 & \DynamicPower{} \\
静态功耗 & \StaticPower{} \\
\bottomrule
\end{tabular}
\end{table}
从模块层级的功耗分布来看,ML-KEM加速器(含跨时钟域桥接模块)是系统中功耗最高的独立模块,其算法核心消耗约为0.332 W的动态功耗,占系统动态功耗的52.1\%。FFT控制器消耗约0.031 W,矩阵乘法加速器消耗约0.077 W,CPU处理器消耗约0.027 W。PLL时钟生成模块由于其内部VCO振荡器始终工作,消耗了0.103 W的准恒定功耗,在系统功耗中占显著比例,但这属于物理层的基础设施开销而非算法逻辑的功耗。
\subsection{矩阵乘法性能分析}
矩阵乘法批量评测是本系统竞赛评分的核心项目。在阶段验证中,系统以三个独立随机种子完成三轮官方评测,运行时间分别为6.936 ms、6.944 ms和6.950 ms,CRC32均完全匹配。随后通过减少软件启动开销、优化批量调度以及进一步压缩SRAM突发数据通路的空闲周期,最终评测在随机种子\MatmulFinalSeed{}下完成5000组4x4无符号矩阵乘法,期望值与上报值均为CRC32 \MatmulFinalCRC{},运行时间为\MatmulFinalMs{} ms,得分为\MatmulFinalScore{}。
以最终运行时间\MatmulFinalMs{} ms为准,系统在5000组任务中的平均每组处理延迟约为0.982353 us。在系统时钟50 MHz的条件下,每组矩阵乘法平均消耗约49.12个时钟周期。每组源数据由一次32拍、32位AXI读突发从ExtRAM装载;SRAM控制器的连续读优化消除了突发内部原有的逐拍空闲周期,并允许相邻读突发在条件满足时直接衔接,从而降低了批量任务中占主导地位的源数据搬运开销。在快速通道模式下,结果写回被跳过,但稳态吞吐率仍由SRAM与CDMA读通道、约22周期的乘加计算以及递归CRC32消费速率共同决定。双Bank流水负责重叠源数据装载与计算,CRC结果FIFO吸收乘加输出和CRC消费之间的短期速率差,因此实测49.12周期每组是完整数据通路协同后的结果,不能仅由单个计算核的22周期延迟推导。相较阶段验证的中位值,最终时间降低约29.27\%,表明本项目的性能收益主要来自启动、搬运、调度、计算和校验全链路的协同优化,而非单独缩短乘加核心延迟。
\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次迭代全部通过,失败次数为零。表中的周期数由OpenLA500的CPU周期计数器采集,计数频率为33 MHz;它们不是50 MHz系统总线周期,也不是76.923 MHz的ML-KEM算法周期。DMA路径中,ML-KEM-512、ML-KEM-768和ML-KEM-1024的全流程(密钥生成、封装、解封装顺序执行)平均耗时分别为52,995、80,643和113,261个CPU周期,按测试程序使用的33 MHz换算后分别为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顶层RTL功能仿真提供了各操作的逐状态周期分解,可以更精细地分析各算法步骤对总延迟的贡献。以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{结论}
本文详细阐述了一个基于OpenLA500处理器和Xilinx Artix-7 FPGA平台的异构计算SoC系统的设计、实现与验证全过程。系统成功集成了矩阵乘法加速器、FFT加速器和全参数可配置的ML-KEM后量子密码IP,通过通用DMA子系统和矩阵批量序列器实现了计算加速器的高效协同,并通过外部SRAM控制器的连续突发流水化提高了共享存储器的数据供给能力。系统的功能正确性在四个验证层级上均得到了充分确认:矩阵乘法批量处理以\MatmulFinalMs{} ms完成5000组官方评测,CRC32与期望值一致并获得\MatmulFinalScore{};ML-KEM加速器在三种安全等级、三种操作和三种数据传输路径上均以100\%通过率完成了总计900次的系统级诊断测试;FFT加速器在DMA批量模式下实现了827.80倍的软件加速比,计算精度满足预定误差要求。上述板级测试同时对优化后SRAM控制器的BaseRAM取指、ExtRAM长突发访问和Bank选择形成了系统级覆盖。
系统的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资源为零的约束得到满足,跨时钟域报告中的警告项经过分析后确认不构成功能风险。
本工作验证了在中等规模FPGA器件上集成后量子密码与数字信号处理多类计算加速器的可行性,为嵌入式后量子密码SoC的设计与实现提供了一个覆盖功能验证、时序收敛、功耗评估和性能分析的完整工程案例。
\vspace{1em}
\noindent\textbf{关键词:}后量子密码;ML-KEM;矩阵乘法加速器;SoC设计;FPGA;跨时钟域设计
% ===========================================================================
% 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}