doc: reorganize reports into mlkem_ip/ and system/ directories

This commit is contained in:
2026-07-13 06:48:50 +08:00
parent 7b990966e0
commit 82f3c3d700
16 changed files with 15 additions and 17 deletions

View File

@@ -0,0 +1,612 @@
\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}全硬件加速 + DMA批量数据搬运 & 参数与种子配置、操作触发、结果校验 \\
FFT 1024点变换 & FFT SDF流水线 & 波形数据写入、模式配置、启动触发 \\
矩阵乘法 C=A×B & \texttt{matmul\_axi\_slave} 双Bank加速器 & 矩阵布局配置、计算触发、CRC校验 \\
matmul批量调度 & \texttt{cdma\_matmul\_bridge}硬件序列控制器 & 源/目的基址与组数一次性配置 \\
DMA数据搬运 & 4通道DMA控制器(mem2mem/mem2ep/ep2mem) & 传输描述符配置、完成轮询 \\
\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核心为主控制器,通过AXI4总线经时钟域交叉桥接模块至系统总线域(50 MHz),再由AXI交叉开关将CPU和DMA两个主设备的访问请求按地址高位译码分发至8个从设备。
\begin{figure}[H]
\centering
\includegraphics[width=0.92\textwidth]{system_arch.png}
\caption{SoC系统顶层架构}
\label{fig:soc_arch}
\end{figure}
\subsection{地址空间分配}
系统地址空间采用统一编址,CPU通过非缓存虚拟地址段(0xBFxxxxxx)访问各外设,对应物理地址段为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区间通往matmul序列控制器的配置寄存器。
\subsection{中断系统}
系统中断链路由外设配置与中断控制模块集中管理,6个中断源经优先级编码后送入CPU。中断映射关系如表\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生成三个时钟域。CPU核心运行于约33 MHz(cpu\_clk),AXI总线、DMA控制器以及matmul和FFT等外设统一运行于50 MHz(sys\_clk)。ML-KEM加速器通过PLL独立获取约77 MHz的高频时钟(mlkem\_clk),专用于其高吞吐计算通路。ML-KEM的AXI从机接口内部通过跨时钟域桥接模块实现系统总线与高速计算域之间的同步,将CPU的寄存器读写请求安全传递至高频时钟域,中断信号同样经过跨域同步后送入CPU中断系统。三个时钟域之间通过异步时钟组约束正确隔离,各域配备独立的复位同步器,以PLL锁定信号作为复位释放的使能条件。
% ================================================================
\section{核心子系统设计}
\subsection{DMA与CDMA数据搬运子系统}
DMA子系统是本设计中连接CPU、外部存储器和加速器的数据搬运中枢,由中央DMA控制器、matmul自动序列控制器和AXI-Lite地址分流逻辑三个模块协同构成。
中央DMA控制器(snix\_axil\_cdma\_mux)以4通道配置例化,每通道配备独立的源地址、目的地址、传输长度和模式寄存器组,寄存器组基地址以0x40为步长间隔排列。控制器向外暴露两组数据接口:AXI4主设备接口连接至Crossbar的Master 1端口,用于在系统存储器和外设之间发起标准AXI Burst读写传输;本地Endpoint接口以valid/ready握手协议直接连接至matmul加速器的内部缓冲区,实现低延迟的本地数据搬运,该通道完全绕开Crossbar的路由延迟。
matmul自动序列控制器(cdma\_matmul\_bridge)使批量矩阵运算的数据调度脱离了CPU的逐次寄存器操作。CPU通过其AXI-Lite配置接口一次性设置源基地址、目的基地址、待处理的矩阵组数和各组的数据跨度后,控制器内部的硬件状态机自动循环执行以下操作序列:向DMA发起从ExtRAM读取一组源矩阵数据至matmul输入Bank的请求;等待DMA返回读完成信号后触发matmul计算启动脉冲;轮询matmul的完成状态后向DMA发起将结果Bank数据写回ExtRAM的请求;递增矩阵组索引后进入下一轮循环。控制器的序列完成中断信号与DMA的全局传输完成信号经逻辑或合并后送入CPU中断系统。
\begin{figure}[H]
\centering
\IfFileExists{dma_subsystem.png}
{\includegraphics[width=0.92\textwidth]{dma_subsystem.png}}
{\fbox{\parbox[c][3cm][c]{0.8\textwidth}{\centering\itshape DMA/CDMA子系统架构图(待插入 \texttt{dma\_subsystem.png})}}}
\caption{DMA/CDMA数据搬运子系统架构}
\label{fig:dma_sys}
\end{figure}
表\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{矩阵乘法加速器}
矩阵乘法加速器根据赛事任务要求设计,完成最大4阶矩阵乘法运算$C = A\times B$。加速器内部包含双Bank结构以实现流水化操作:一个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资源的约束。
\begin{figure}[H]
\centering
\IfFileExists{matmul_arch.png}
{\includegraphics[width=0.92\textwidth]{matmul_arch.png}}
{\fbox{\parbox[c][3cm][c]{0.8\textwidth}{\centering\itshape 矩阵乘法加速器架构图(待插入 \texttt{matmul\_arch.png})}}}
\caption{矩阵乘法加速器架构}
\label{fig:matmul_sys}
\end{figure}
加速器的控制寄存器接口如表\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单元级联构成,每级包含一个基-2蝶形单元、一个复数乘法器和一个深度逐级减半的延迟缓冲器。旋转因子由片上ROM提供。加速器通过AXI从机封装接口挂载于总线,提供输入实部和虚部的BRAM写窗口(各1024个16-bit字)、输出BRAM读窗口以及控制和状态寄存器。输入输出数据通过位反转地址索引实现算法要求的序映射。
\begin{figure}[H]
\centering
\IfFileExists{fft_arch.png}
{\includegraphics[width=0.92\textwidth]{fft_arch.png}}
{\fbox{\parbox[c][3cm][c]{0.8\textwidth}{\centering\itshape FFT加速器架构图(待插入 \texttt{fft\_arch.png})}}}
\caption{FFT加速器SDF流水线架构}
\label{fig:fft_sys}
\end{figure}
\subsection{ML-KEM后量子密码加速器}
ML-KEM后量子密码加速器是本系统中最复杂的单一加速器,完整的IP设计已在\emph{《ML-KEM后量子密钥封装硬件IP核设计与验证》}报告中详述,此处仅概述其在系统集成层面的关键特性。
该加速器核心在单一模块内支持FIPS 203标准全部三种操作和三种安全等级,通过运行时端口实现动态选择。加速器通过AXI从机接口挂载于总线,提供内存映射寄存器用于控制、状态查询和逐字节数据装载与回读。三个直接存储器窗口(EK、DK、CT)支持DMA批量数据搬运。
\begin{figure}[H]
\centering
\includegraphics[width=0.92\textwidth]{mlkem_modules.png}
\caption{ML-KEM加速器内部模块层次结构}
\label{fig:mlkem_sys}
\end{figure}
% ================================================================
\section{芯片前端设计与验证方案}
\subsection{SoC集成设计方法}
本设计采用增量集成的设计方法学。各加速器IP首先在独立仿真环境中完成模块级功能验证,确认算法正确性和接口协议合规性后,再逐步嵌入SoC顶层。集成过程涵盖五个顺序步骤。
第一步是AXI从机接口适配。三个加速器各自通过对应的AXI从机包装器挂载至总线——矩阵乘法器提供控制寄存器和双Bank数据窗口,ML-KEM通过从机接口暴露内存映射寄存器和DMA窗口,FFT通过封装接口提供输入输出BRAM和状态寄存器。第二步是交叉开关端口分配,根据地址空间规划在顶层集成文件中完成各AXI从机与交叉开关对应端口的信号连接。FFT和ML-KEM因共享同一从机端口,通过内部地址译码逻辑实现基于地址位的二次路由。第三步涉及中断链路的连接,各加速器的完成或错误信号根据中断映射表连接至中断控制器的对应输入位或CPU的直接中断输入。第四步完成时钟与复位的集成,确保各加速器的时钟信号通过PLL的对应输出端获取,复位信号通过复位同步器产生与各自时钟域同步的释放时序,避免异步复位引起的亚稳态问题。第五步为软件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仿真环境中完成了完整功能验证,CRC32校验值与参考模型完全一致。表\ref{tab:matmul_results}列出批量矩阵运算的时序分解。
\begin{table}[htbp]
\centering
\caption{矩阵乘法测试结果}
\label{tab:matmul_results}
\begin{tabular}{lcc}
\toprule
\textbf{阶段} & \textbf{CPU周期} & \textbf{说明} \\
\midrule
初始化 (PROLOGUE) & 26,580 & 程序启动与运行环境初始化 \\
批量计算循环 (LOOP) & 171,840 & 10组矩阵的DMA搬运+计算+写回 \\
~~每组平均 & 17,184 & 含DMA读、matmul计算、DMA写 \\
收尾 (EPILOGUE) & 14,640 & 结果校验与串口输出 \\
\midrule
\textbf{总计} & \textbf{213,060} & 约6.46 ms(@33 MHz CPU) \\
\bottomrule
\end{tabular}
\end{table}
\subsection{ML-KEM系统级测试结果}
ML-KEM加速器在SoC集成环境中完成了软件参考(SW)、CPU寄存器路径和DMA窗口路径各100次迭代的系统级诊断测试。表\ref{tab:mlkem_soc_results}列出三种安全等级下各路径完成一轮完整往返(KeyGen+Encaps+Decaps)的平均CPU周期数、耗时和加速比。
\begin{table}[htbp]
\centering
\small
\caption{ML-KEM系统级测试结果(100次迭代均值)}
\label{tab:mlkem_soc_results}
\begin{tabular}{lrrrrr}
\toprule
\textbf{安全等级} & \textbf{SW (cycles)} & \textbf{CPU (cycles)} & \textbf{DMA (cycles)} & \textbf{CPU加速比} & \textbf{DMA加速比} \\
\midrule
ML-KEM-512 & 2,594,034 & 200,471 & 52,995 & 12.94$\times$ & 48.95$\times$ \\
ML-KEM-768 & 4,065,123 & 296,193 & 80,648 & 13.72$\times$ & 50.41$\times$ \\
ML-KEM-1024 & 6,041,204 & 404,476 & 113,273 & 14.94$\times$ & 53.33$\times$ \\
\midrule
\textbf{全部} & \textbf{PASS} & \textbf{PASS} & \textbf{PASS} & — & — \\
\bottomrule
\end{tabular}
\end{table}
DMA路径相对于纯软件实现取得了最高53.33$\times$的加速比,相对于CPU寄存器路径额外贡献了约3.6--3.8$\times$的效率提升。全部360个KAT测试用例逐字节比对NIST标准答案通过,Decaps隐式拒绝路径同样验证正确。
\subsection{FFT测试结果}
FFT加速器在SoC环境中完成了CPU寄存器路径和DMA路径两种模式的功能与性能测试。测试使用单一频率正弦波作为输入(1024点采样),硬件输出与软件参考FFT的逐bin比对结果验证了变换的正确性。表\ref{tab:fft_results}列出两种数据路径的性能对比。
\begin{table}[htbp]
\centering
\caption{FFT加速器测试结果}
\label{tab:fft_results}
\begin{tabular}{lccc}
\toprule
\textbf{测试模式} & \textbf{耗时 (ms)} & \textbf{加速比} & \textbf{最大误差} \\
\midrule
CPU寄存器路径 & 1.724 & 142.55$\times$ & 1 (Re) / 2 (Im) \\
DMA路径 & 0.293 & 838.32$\times$ & 1 (Re) / 2 (Im) \\
\midrule
软件参考 (33 MHz CPU) & 245.6 & — & — \\
\bottomrule
\end{tabular}
\end{table}
CPU寄存器路径中,CPU逐字通过AXI寄存器写入1024个实部和虚部样本,启动FFT后轮询完成状态,再逐字回读输出结果,总耗时约1.72 ms(硬件计算+寄存器I/O),加速比为143×。DMA路径中,输入和输出数据全部通过DMA的mem2ep和ep2mem通道批量搬运,绕过了逐字AXI寄存器访问的开销,总耗时降至0.29 ms,加速比达到838×。两种路径的硬件输出与软件参考FFT的最大偏差仅为1(实部)和2(虚部),验证了16-bit定点FFT硬件实现的高精度。
\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 & +0.737 ns & 0 / 17,197 \\
mlkem\_clk & 77 MHz & +0.070 ns & 0 / 31,646 \\
sys\_clk & 50 MHz & +0.125 ns & 0 / 22,307 \\
\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 & 21,697 & 15,826 & 2$\times$36 + 14$\times$18 & 30.5\% \\
~~FFT & 6,949 & 1,083 & 8$\times$36 + 4$\times$18 & 9.8\% \\
矩阵乘法 & 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加速器消耗30.5\%的LUT,其ntt\_core采用双蝶形加4路Banked BRAM架构,poly\_mul\_sync的系数和中间数据缓冲亦通过BRAM实现,有效控制了LUT开销。矩阵乘法加速器以14.3\%的LUT占比位居第二,其4个并行32×32-bit流水线乘法器(每实例约1,000 LUT)是面积的主要贡献者。CPU核心消耗12.0\%的LUT,其中BTB(分支目标缓冲器)和TLB(地址转换旁路缓冲器)合占约3,000 LUT。FFT加速器虽仅占9.8\%的LUT,但消耗了最多的BRAM资源——8个RAMB36E1用于5级SDF架构中的延迟缓冲和旋转因子ROM存储。
DSP使用量为零体现了竞赛规则约束和设计策略的一致性——ML-KEM不使用DSP、矩阵乘法受竞赛条款限制、FFT采用16-bit窄数据宽度,三者共同导致了全LUT乘法映射的设计决策。
\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}
全局时钟网络(sys\_clk,BUFG驱动)以35,652个负载位居首位,在当前50 MHz工作频率下不构成时序问题。ML-KEM内部有两个高扇出网络进入前5名:系数存储BRAM的延迟寄存器链(24,670扇出)源于字节编码器中一个组合使能信号被复制到大量并行路径;多项式乘法模块的加载计数器(3,758扇出)属于多路复用地址总线的经典高扇出场景。这些网络在当前工作条件下均未产生时序违例。
\subsection{验证结果汇总}
表\ref{tab:verify_summary}给出系统级验证的覆盖范围和结果汇总。
\begin{table}[htbp]
\centering
\small
\caption{系统级验证结果汇总}
\label{tab:verify_summary}
\begin{tabular}{lcccl}
\toprule
\textbf{验证项} & \textbf{测试路径} & \textbf{迭代次数} & \textbf{通过率} & \textbf{关键指标} \\
\midrule
矩阵乘法 & CPU寄存器路径 & — & 100\% & CRC32校验正确 \\
矩阵乘法 & DMA序列控制器 & 10组 & 100\% & 总计213,060周期 \\
ML-KEM & SW/CPU/DMA三路径 & 100/级 & 100\% & KAT逐字节比对 \\
FFT & CPU寄存器路径 & 1次 & 100\% & max error ≤2, 143×加速比 \\
FFT & DMA路径 & 1次 & 100\% & max error ≤2, 838×加速比 \\
DMA & mem2mem & 多次 & 100\% & 数据逐字比对 \\
DMA & mem2ep/ep2mem & 多次 & 100\% & matmul Buffer读写正确 \\
DMA & 序列桥批量流水 & 10组 & 100\% & 全自动循环完成 \\
\bottomrule
\end{tabular}
\end{table}
% ================================================================
\section{结论}
本设计在龙芯SoC平台上成功构建了一个集成多种硬件加速器的异构计算系统。
在AXI总线集成架构方面,以AXI交叉开关为核心互连部件,实现了CPU和DMA双主设备对8个从设备的统一地址空间访问,涵盖外部SRAM控制器、UART串口、DVI显示控制器、GPIO与定时器、DMA配置空间、FFT与ML-KEM共享加速窗口和矩阵乘法器。共享从机的内部二次路由设计——FFT与ML-KEM通过地址高位区分并共享同一端口——在不增加交叉开关端口数量的前提下实现了两种加速器的无缝共存,体现了在资源受限场景下灵活地址规划的工程价值。
在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}