doc: update ML-KEM IP design report with latest timing and test data

This commit is contained in:
2026-07-11 10:10:18 +08:00
parent 4857016b42
commit 1d7e974c28
5 changed files with 798 additions and 69 deletions

View File

@@ -0,0 +1,521 @@
\documentclass[11pt,a4paper,twoside]{article}
% ─── Packages ────────────────────────────────────────────────
\usepackage{ctex}
\usepackage[top=2.5cm, bottom=2.5cm, left=2.8cm, right=2.8cm]{geometry}
\usepackage{graphicx}
\usepackage{float}
\usepackage{booktabs}
\usepackage{longtable}
\usepackage{multirow}
\usepackage{array}
\usepackage{amsmath,amssymb}
\usepackage{hyperref}
\usepackage{caption}
\usepackage{fancyhdr}
\usepackage{tikz}
\usepackage{enumitem}
\usepackage[normalem]{ulem}
\usepackage{listings}
\usepackage{xcolor}
% ─── Styling ─────────────────────────────────────────────────
\raggedbottom
\hypersetup{colorlinks=true,linkcolor=black,citecolor=black,urlcolor=blue}
\pagestyle{fancy}
\fancyhead[LO,RE]{SoC系统设计报告}
\fancyhead[RO,LE]{\thepage}
\fancyfoot[C]{}
\setlength{\parskip}{4pt plus 2pt minus 1pt}
\setlength{\parindent}{2em}
\setlength{\headheight}{14pt}
\setlength{\emergencystretch}{1.5em}
\setlength{\intextsep}{6pt plus 2pt}
\setlength{\textfloatsep}{8pt plus 2pt}
\captionsetup{skip=4pt}
\lstset{basicstyle=\ttfamily\small,breaklines=true,frame=single,numbers=left,numberstyle=\tiny,xleftmargin=2em,language=C}
\newcommand{\Zq}{\mathbb{Z}_q}
\title{\textbf{基于龙芯SoC的后量子密码与矩阵运算\\加速系统设计与验证}}
\author{碳基生物\\[4pt] \small 队伍编号:CICC1008439}
\date{}
\begin{document}
% ================================================================
% 封 面
% ================================================================
\begin{titlepage}
\thispagestyle{empty}
\begin{center}
\vspace*{30pt}
\includegraphics[width=0.45\textwidth]{logo_cicc.png}
\vspace{36pt}
{\fontsize{22pt}{28pt}\selectfont\bfseries 第十届}
\vspace{4pt}
{\fontsize{22pt}{28pt}\selectfont\bfseries 全国大学生集成电路创新创业大赛}
\end{center}
\vspace{80pt}
\begin{flushleft}
\fontsize{14pt}{22pt}\selectfont
报告类型:\uline{\hfill 系统设计报告\hfill} \\[18pt]
参赛杯赛:\uline{\hfill 龙芯中科杯\hfill} \\[18pt]
作品名称:\uline{\hfill 基于龙芯SoC的后量子密码与矩阵运算加速系统设计与验证\hfill} \\[18pt]
队伍编号:\uline{\hfill CICC1008439\hfill} \\[18pt]
团队名称:\uline{\hfill 碳基生物\hfill}
\end{flushleft}
\end{titlepage}
\maketitle
\tableofcontents
\newpage
% ================================================================
\section{系统概述}
\subsection{设计目标}
本设计基于龙芯中科提供的LoongArch32r软核处理器及AXI总线SoC框架,构建了一个集成多种硬件加速器的异构计算系统。系统在统一的AXI4总线架构下,将后量子密码(ML-KEM)、快速傅里叶变换(FFT)和矩阵乘法三类计算密集型任务从CPU卸载至专用硬件加速器,并通过多通道DMA控制器实现批量数据的高效搬运。设计同时完成了龙芯中科杯阶段任务三(矩阵乘法器IP设计)的要求。
系统的核心设计目标包括:在满足竞赛规定的AXI总线互联约束、FPGA资源约束(Artix-7 XC7A200T)和DSP使用约束的前提下,实现完整的软硬件协同计算平台;通过AXI Crossbar实现CPU与8个外设/加速器的统一地址空间访问;设计多通道DMA控制器支持CPU寄存器路径和DMA批量路径两种数据传输模式;完成全部加速器的功能验证和系统级集成测试。
\subsection{软硬件功能划分}
系统的软硬件划分遵循以硬件加速计算密集操作、以软件管理控制流和数据调度的原则。表\ref{tab:hwsw}列出了各子系统在软硬件之间的功能分配。
\begin{table}[htbp]
\centering
\small
\caption{软硬件功能划分}
\label{tab:hwsw}
\begin{tabular}{lp{5cm}p{4.5cm}}
\toprule
\textbf{功能} & \textbf{硬件实现(本设计贡献)} & \textbf{软件管理} \\
\midrule
ML-KEM密钥生成/封装/解封装 & \texttt{mlkem\_top}全硬件加速 & 参数配置、种子装载、结果回读 \\
FFT 1024点变换 & \texttt{FFT1024\_32B} SDF流水线 & 数据写入、模式配置、启动触发 \\
矩阵乘法 C=A×B & \texttt{matmul\_axi\_slave} 双Bank加速器 & 矩阵数据搬运、计算调度、CRC校验 \\
SRAM控制器优化 & 读写通道流水线化、消除NOP等待 & — \\
数据搬运 & 4通道DMA控制器 & 传输描述符配置、完成轮询 \\
\bottomrule
\end{tabular}
\end{table}
CPU负责系统的整体调度:配置各加速器的控制寄存器、触发计算启动、轮询或响应中断以获知完成状态、以及通过串口输出测试结果。所有计算密集型操作——包括NTT变换、Keccak哈希、多项式乘法、FFT蝶形运算、矩阵乘积累加——均在硬件加速器内部完成,CPU不参与中间计算步骤。SoC基础设施(UART串口、DVI显示、confreg外设、AXI Crossbar互联)由赛事方提供的参考设计框架实现,不在本设计的工作范围内。
% ================================================================
\section{系统架构设计}
\subsection{总体架构}
图\ref{fig:soc_arch}给出了SoC系统的顶层架构。系统以LoongArch32r CPU核心(openLA500)为主控制器,通过AXI4总线经\texttt{Axi\_CDC}时钟域交叉桥接至系统总线域(\texttt{sys\_clk},50 MHz),再由\texttt{AxiCrossbar\_2x8}将CPU和DMA两个主设备的访问请求按地址高位译码分发至8个从设备。
\begin{figure}[htbp]
\centering
% [IMAGE_PROMPT: A clean block diagram of the SoC system architecture. Left side: LoongArch32r CPU core with AXI4 master interface. An AXI CDC block bridges CPU clock domain (cpu_clk, 33 MHz) to system clock domain (sys_clk, 50 MHz). Center: AxiCrossbar_2x8 interconnect with 2 master inputs (CPU via CDC, DMA controller) and 8 slave outputs. Right side, 8 slave blocks arranged vertically: Slave 0 - AXI RAM controller (BaseRAM/ExtRAM), Slave 1 - Reserved (tie-off), Slave 2 - UART 16550, Slave 3 - DVI video output, Slave 4 - confreg (LEDs/buttons/timer/interrupt controller), Slave 5 - DMA configuration window, Slave 6 - Shared FFT/ML-KEM accelerator window, Slave 7 - matmul accelerator. Below the crossbar: DMA controller (snix_axil_cdma_mux, 4 channels) with AXI4 master port to crossbar, AXI-Lite config slave port, local endpoint ports to matmul. At bottom: cdma_matmul_bridge connecting DMA to matmul for auto-sequenced batch processing. Clock domains annotated: cpu_clk (33 MHz), sys_clk (50 MHz). Clean academic style with black lines on white background.]
\caption{SoC系统顶层架构}
\label{fig:soc_arch}
\end{figure}
\subsection{地址空间分配}
系统地址空间采用统一编址,CPU通过非缓存虚拟地址\texttt{0xBFxxxxxx}访问各外设(对应物理地址\texttt{0x1Fxxxxxx})。表\ref{tab:addr_map}列出各从设备的地址窗口。
\begin{table}[htbp]
\centering
\small
\caption{系统地址空间映射}
\label{tab:addr_map}
\begin{tabular}{cllp{4.8cm}}
\toprule
\textbf{端口} & \textbf{物理地址} & \textbf{虚拟地址} & \textbf{外设} \\
\midrule
Slave 0 & 0x1C00\_0000--0x1C7F\_FFFF & — & BaseRAM + ExtRAM \\
Slave 2 & 0x1F00\_0000--0x1F0F\_FFFF & 0xBF00\_0000 & UART 16550 \\
Slave 3 & 0x1F10\_0000--0x1F1F\_FFFF & 0xBF10\_0000 & DVI视频控制器 \\
Slave 4 & 0x1F20\_0000--0x1F2F\_FFFF & 0xBF20\_0000 & confreg(GPIO/定时器/中断) \\
Slave 5 & 0x1F30\_0000--0x1F3F\_FFFF & 0xBF30\_0000 & DMA/CDMA配置空间 \\
Slave 6 & 0x1F40\_0000--0x1F4F\_FFFF & 0xBF40\_0000 & FFT + ML-KEM共享窗口 \\
Slave 7 & 0x1F50\_0000--0x1F5F\_FFFF & 0xBF50\_0000 & 矩阵乘法加速器 \\
\bottomrule
\end{tabular}
\end{table}
Slave 6(FFT/ML-KEM共享窗口)内部根据地址位[15:12]进一步路由:偏移0x0000--0x3FFF定向至ML-KEM的AXI从机,偏移0x8000--0xCFFF定向至FFT控制器。Slave 5(DMA配置窗口)内部根据地址位[11:8]分发:0x000--0x1FF区间通往DMA通道寄存器,0x200--0x2FF区间通往\texttt{cdma\_matmul\_bridge}的序列控制寄存器。
\subsection{SRAM控制器优化}
赛事方提供的原始外部SRAM控制器在AXI突发传输的连续读写节拍之间插入了无效等待状态,限制了存储子系统的吞吐率上限。本设计针对读写两条数据通路分别实施了流水线化改造。
在写通道方面,原始状态机在每拍写数据握手完成后强制进入一个专用的空闲状态(WRITE\_NOP),再经一拍返回写地址译码状态后才能处理下一拍数据,导致连续写操作的吞吐率减半。分析发现,该空闲状态的引入是为了满足外部异步SRAM在两次写操作之间的恢复时间需求,但在FPGA片外SRAM的实际时序参数下,相邻写周期之间无需额外的总线空闲周期。优化方案删除了该冗余状态,将写数据有效信号的握手完成直接连接至下一拍的写地址有效判断逻辑,使AXI Burst写操作能够背靠背连续发射。同时,针对读数据通道在空闲期间可能出现的未驱动状态,增加了默认值赋值以消除综合工具中X态传播的潜在风险。
在读通道方面,引入了FAST\_READ\_BURST参数化优化特性。原始设计中,每个读节拍完成后状态机需要返回读地址译码状态重新计算下一拍地址,该往返路径引入了一拍的流水线气泡。优化方案在当前读周期内预计算下一拍的访存地址,在支持FIXED、INCR和WRAP三种AXI突发模式地址映射规则的前提下,将下一拍读请求与当前拍的数据返回流水线化重叠。使能该特性后,连续读操作的吞吐率从原始设计的每两周期读一字提升至每周期读一字,对于DMA批量数据搬运和矩阵乘法输入数据加载等大块连续读场景贡献了可观的带宽提升。
\subsection{中断系统}
系统中断链路由confreg模块集中管理,6个中断源经优先级编码后送入CPU的\texttt{intrpt}输入。中断映射关系如表\ref{tab:interrupts}所示。
\begin{table}[htbp]
\centering
\caption{中断映射}
\label{tab:interrupts}
\begin{tabular}{cll}
\toprule
\textbf{中断位} & \textbf{来源} & \textbf{触发条件} \\
\midrule
intrpt[0] & confreg\_int & 定时器/按键/UART/FFT任一中断 \\
intrpt[1] & dma\_finish & DMA传输完成或matmul序列完成 \\
intrpt[2] & matmul\_intr & 矩阵乘法计算完成 \\
intrpt[3] & mlkem\_intr & ML-KEM操作完成 \\
\bottomrule
\end{tabular}
\end{table}
\subsection{时钟与复位架构}
系统采用单一外部晶振(50 MHz)经PLL生成三个时钟域:\texttt{cpu\_clk}(约33 MHz)驱动CPU核心,\texttt{sys\_clk}(50 MHz)驱动AXI总线和全部外设/加速器,\texttt{mlkem\_clk}(25 MHz)曾用于ML-KEM独立时钟域,当前设计中ML-KEM已合并至\texttt{sys\_clk}直接运行。各时钟域通过\texttt{rst\_sync}模块生成同步释放的复位信号,PLL锁定信号(\texttt{pll\_locked})作为复位释放的使能条件。
% ================================================================
\section{核心子系统设计}
\subsection{DMA与CDMA数据搬运子系统}
DMA子系统是本设计中连接CPU、外部存储器和加速器的数据搬运中枢,由三个模块协同构成。
中央DMA控制器snix\_axil\_cdma\_mux以PORTS=4参数例化,提供4个独立的传输通道。每个通道配备独立的源地址、目的地址、传输长度和模式寄存器组,通道寄存器组基地址以0x40为步长间隔排列。DMA控制器向外暴露两组数据接口:AXI4主设备接口(mm2mm通道)连接至AXI Crossbar的Master 1端口,用于在系统存储器和外设之间发起标准AXI Burst读写传输;本地Endpoint接口(ep\_wr/ep\_rd通道)以valid/ready握手协议直接连接至matmul加速器的内部缓冲区,实现低延迟的本地数据搬运而完全绕开Crossbar的路由延迟。
matmul专用的自动序列控制器cdma\_matmul\_bridge将批量矩阵运算的数据调度从CPU的逐次寄存器操作中解放出来。CPU通过其AXI-Lite配置接口一次性设置源基地址、目的基地址、待处理的矩阵组数和各组的数据跨度后,bridge内部的硬件状态机自动循环执行以下操作序列:向CDMA发起从ExtRAM读取一组源矩阵数据至matmul输入Bank的请求,等待CDMA返回读完成信号后触发matmul计算启动脉冲,轮询matmul的done状态后向CDMA发起将结果Bank数据写回ExtRAM的请求,然后递增矩阵组索引进入下一轮循环。bridge的序列完成中断信号seq\_done\_irq与CDMA的全局传输完成信号dma\_finish经逻辑或合并后送入CPU中断系统的intrpt[1]位。
表\ref{tab:cdma_regs}列出DMA通道和matmul序列控制器的核心寄存器。
\begin{table}[htbp]
\centering
\caption{DMA/CDMA核心寄存器}
\label{tab:cdma_regs}
\small
\begin{tabular}{cll}
\toprule
\textbf{偏移(通道0)} & \textbf{名称} & \textbf{功能} \\
\midrule
\multicolumn{3}{c}{\textit{4通道DMA(snix\_axil\_cdma\_mux),通道n基址 = 0xBF300000 + n×0x40}} \\
0x00 & SRC\_ADDR & 源地址 \\
0x04 & DST\_ADDR & 目的地址 \\
0x08 & LENGTH & 传输字节数 \\
0x10 & CTRL & bit0启动,bit[5:3]=AxSIZE,bit[13:6]=AxLEN \\
0x14 & STATUS & bit0=busy(RO),bit1=done(W1C) \\
0x18 & MODE & 0=mem2mem,1=mem2ep,2=ep2mem \\
0x1C & EP\_CFG & [3:0]=bank,[15:8]=word offset,[19:16]=ep id \\
\midrule
\multicolumn{3}{c}{\textit{matmul序列控制器(cdma\_matmul\_bridge),基址 = 0xBF300200}} \\
0x200 & SEQ\_CTRL & bit0=start \\
0x204 & SEQ\_STATUS & bit0=busy(RO),bit1=done(W1C) \\
0x208 & SEQ\_SRC\_BASE & 输入矩阵组物理源基址 \\
0x20C & SEQ\_DST\_BASE & 输出矩阵组物理目的基址 \\
0x210 & SEQ\_GROUPS & 自动处理的矩阵组数 \\
0x214 & SEQ\_MAT\_BASE & matmul AXI slave基址(固定0x1F500000) \\
0x218 & SEQ\_SRC\_STRIDE & 相邻输入组间隔(默认128 B) \\
0x21C & SEQ\_DST\_STRIDE & 相邻输出组间隔(默认192 B) \\
\bottomrule
\end{tabular}
\end{table}
\subsection{矩阵乘法加速器}
矩阵乘法加速器(\texttt{matmul\_axi\_slave})根据赛事任务要求设计,完成最大4×4矩阵的乘法运算$C = A\times B$。加速器内部包含双Bank(Bank 0和Bank 1)以实现乒乓操作:一个Bank在计算时,另一个Bank可被DMA写入下一组数据。
每个Bank包含独立的A矩阵缓冲区(16个32-bit字)、B矩阵缓冲区(16个32-bit字)和C结果缓冲区(16个66-bit元素拆分为48个32-bit字)。计算阵列由4个并行乘法器实例组成,每个实例负责一行结果向量的点积累加。乘法器完全采用LUT和CARRY4逻辑资源实现32乘32-bit无符号乘法,严格遵循赛事不得使用DSP资源的约束。
加速器的控制寄存器接口如表\ref{tab:matmul_regs}所示。
\begin{table}[htbp]
\centering
\caption{matmul加速器寄存器映射}
\label{tab:matmul_regs}
\begin{tabular}{cll}
\toprule
\textbf{偏移} & \textbf{名称} & \textbf{功能} \\
\midrule
0x000 & MAT\_CTRL & bit0启动Bank0,bit1启动Bank1 \\
0x004 & MAT\_STATUS & bit0=busy(RO),bit1=done(W1C),bit2=error(W1C) \\
0x010 & MAT\_CRC & CRC32累积值(\^{}0xFFFFFFFF),写清 \\
0x100--0x13C & B0\_A[0..15] & Bank0 A矩阵(16×32-bit) \\
0x140--0x17C & B0\_B[0..15] & Bank0 B矩阵(16×32-bit) \\
0x180--0x23C & B0\_C (RO) & Bank0 C结果(48×32-bit) \\
0x300--0x33C & B1\_A[0..15] & Bank1 A矩阵 \\
0x340--0x37C & B1\_B[0..15] & Bank1 B矩阵 \\
0x380--0x43C & B1\_C (RO) & Bank1 C结果 \\
\bottomrule
\end{tabular}
\end{table}
\subsection{FFT加速器}
FFT加速器基于单路径延迟反馈(Single-path Delay Feedback,SDF)架构实现1024点16-bit定点FFT/IFFT。其流水线由5级SDF单元(SU1--SU5)级联构成,每级包含一个基-2蝶形单元(\texttt{Butterfly})、一个复数乘法器(\texttt{Multiply})和一个深度逐级减半的延迟缓冲器(\texttt{DelayBuffer})。旋转因子由\texttt{Twiddle1024\_32B} ROM提供。
FFT加速器通过\texttt{axi\_fft\_wrapper}封装为AXI从机,提供输入实部/虚部BRAM写窗口(各1024×16-bit)、输出实部/虚部BRAM读窗口和CSR控制/状态寄存器。输入输出数据采用位反转地址索引。
\subsection{ML-KEM后量子密码加速器}
ML-KEM后量子密码加速器(\texttt{mlkem\_top})是本系统中最复杂的单一加速器,完整的IP设计已在\emph{《ML-KEM后量子密钥封装硬件IP核设计与验证》}报告中详述,此处仅概述其在系统集成层面的关键特性。
\texttt{mlkem\_top}在单一模块内支持FIPS 203标准全部三种操作(KeyGen/Encaps/Decaps)和三种安全等级(ML-KEM-512/768/1024),通过运行时端口$k\_i$和$op\_i$实现动态选择。加速器通过\texttt{mlkem\_axi\_slave}挂载于AXI总线,提供17个内存映射寄存器用于控制、状态查询和逐字节数据装载/回读。三个直接存储器窗口(EK窗口@0x1000、DK窗口@0x2000、CT窗口@0x3000)支持DMA批量数据搬运。
% ================================================================
\section{芯片前端设计与验证方案}
\subsection{SoC集成设计方法}
本设计采用增量集成的设计方法学。各加速器IP首先在独立仿真环境中完成模块级功能验证,确认算法正确性和接口协议合规性后,再逐步嵌入SoC顶层。集成过程涵盖五个顺序步骤。
第一步是AXI从机接口适配。矩阵乘法器、FFT和ML-KEM三个加速器各自通过对应的AXI从机包装器挂载至总线——matmul\_axi\_slave提供控制寄存器和双Bank数据窗口,ML-KEM通过mlkem\_axi\_slave暴露17个内存映射寄存器和三个DMA窗口,FFT通过axi\_fft\_wrapper封装输入输出BRAM和CSR寄存器。第二步是Crossbar端口分配,根据地址空间规划在顶层soc\_top.v中完成各AXI从机与Crossbar对应端口的信号连接。FFT和ML-KEM因共享Slave 6端口,通过fft\_mlkem\_axi\_slave模块实现基于地址位[15:12]的内部二次路由。第三步涉及中断链路的连接,各加速器的完成或错误信号根据中断映射表连接至confreg中断控制器的对应输入位或CPU的直接中断输入。第四步完成时钟与复位的集成,确保各加速器的时钟信号通过PLL的对应输出端获取,复位信号通过rst\_sync模块产生与各自时钟域同步的释放时序,避免异步复位引起的亚稳态问题。第五步为软件BSP适配,在SDK中为每个加速器添加基地址宏定义、寄存器偏移量枚举和基本的读写封装函数。
\subsection{DMA数据路径验证}
DMA子系统的验证覆盖三条独立的数据搬运路径,每条路径侧重于不同的硬件交互场景。
第一条路径为存储器到存储器的直接搬运(mem2mem),验证DMA控制器的AXI4主设备接口在INCR Burst模式下的读写正确性,同时检验Crossbar根据Burst首地址将事务正确路由至目的从设备的能力。测试通过向ExtRAM的不重叠源区和目的区写入已知数据模式、触发DMA传输后逐字比对来完成。第二条路径涉及DMA与matmul加速器之间的本地Endpoint通信(mem2ep与ep2mem)。与mem2mem路径不同,Endpoint通道完全绕过AXI Crossbar,通过专用的ep\_wr/ep\_rd端口以valid/ready握手协议直接访问matmul的内部缓冲区。该路径的验证重点在于确保DMA侧和matmul侧的流控握手在所有传输长度下均不会出现数据丢失或死锁。第三条路径为序列控制器的自动批量流水(cdma\_matmul\_bridge),验证CPU仅需一次配置即可驱动bridge自动完成多次DMA读、matmul计算和DMA写的循环操作。该路径的验证关注多组连续处理场景下的状态机转移正确性、传输完成中断的准确触发时机以及异常条件下的错误恢复行为。
\subsection{系统级仿真验证}
系统级验证在Vivado XSIM仿真器上通过mycpu\_tb测试平台执行。测试程序经编译后预装载至BaseRAM的仿真初始化文件中,系统复位释放后CPU从复位向量开始取指执行,仿真过程通过串口输出监控测试进度和结果正确性。系统级验证覆盖四类典型使用场景。
矩阵乘法的CPU路径测试中,CPU通过AXI寄存器接口逐字写入A和B矩阵的元素数据(每Bank各16个32-bit字),启动计算后以轮询方式等待STATUS.done标志置位,随后从C结果缓冲区回读48个32-bit字并进行CRC32完整性校验。矩阵乘法的DMA路径测试中,输入矩阵由测试平台通过后门写入直接预置于ExtRAM中,CPU仅需配置cdma\_matmul\_bridge的源基址、目的基址和组数等序列参数,后续的数据搬运和计算调度全部由硬件自动完成。ML-KEM的三路径诊断测试覆盖软件参考路径、CPU寄存器路径和DMA窗口路径,每种路径对每个安全等级各执行100次迭代,统计结果自洽性(ss\_enc等于ss\_dec)和KAT标准答案一致性两项指标。FFT功能测试中,CPU向FFT输入BRAM写入已知时域波形数据(如单一频率正弦波的1024个采样点),启动变换后从输出BRAM回读频域结果,与Python参考模型的输出进行逐点比对。
% ================================================================
\section{仿真测试结果与分析}
\subsection{矩阵乘法测试结果}
矩阵乘法加速器在SoC仿真环境中完成了完整功能验证。测试程序输出日志摘录如下:
\begin{lstlisting}
MATMUL_START
MATMUL_CRC32=51b7f2d2
TIME_PROLOGUE=26580
TIME_LOOP=171840
TIME_LOOP_PER=17184
TIME_EPILOGUE=14640
TIME_TOTAL=213060
MATMUL_DONE
\end{lstlisting}
CRC32校验值\texttt{51b7f2d2}与参考模型完全一致,验证了硬件乘法结果和DMA批量数据搬运的正确性。时序分析显示:初始化阶段(PROLOGUE)占26,580个CPU周期,批量计算循环(LOOP)占171,840周期(每组约17,184周期),收尾阶段(EPILOGUE)占14,640周期,总计213,060周期。按CPU频率33 MHz折算,完成全部矩阵运算的时间约为6.46 ms。
\subsection{ML-KEM系统级测试结果}
ML-KEM加速器在SoC集成环境中完成了三路径(SW/CPU/DMA)各100次迭代的系统级诊断测试,详细结果已在前述IP设计报告中给出。此处汇总关键性能指标:在50 MHz ML-KEM时钟下,KeyGen操作延迟为11,140周期(K=2)至32,524周期(K=4),Encaps为26,368至56,524周期,Decaps为41,444至80,756周期。DMA路径相对于CPU寄存器路径的额外加速比为1.85--1.90×,验证了批量数据传输对于减少AXI总线协议开销的实际效果。
全部KAT测试用例(360个,覆盖三种操作×三种等级)逐字节比对NIST标准答案通过,Decaps隐式拒绝路径同样验证正确。
\subsection{系统时序收敛}
完整SoC在Xilinx Artix-7 XC7A200T-1器件上完成布局布线后通过时序收敛。主要时钟域的关键时序指标如表\ref{tab:sys_timing}所示。
\begin{table}[htbp]
\centering
\caption{SoC布局布线后时序收敛结果}
\label{tab:sys_timing}
\begin{tabular}{lccc}
\toprule
\textbf{时钟域} & \textbf{频率} & \textbf{Setup WNS} & \textbf{违例端点} \\
\midrule
cpu\_clk & 33 MHz & +2.716 ns & 0 / 17,197 \\
sys\_clk & 50 MHz & +0.146 ns & 0 / 69,558 \\
\bottomrule
\end{tabular}
\end{table}
\subsection{系统资源利用}
SoC整体资源利用见表\ref{tab:sys_util}。数据来自Vivado 2019.2布局布线后报告(器件XC7A200T-1,无DSP约束配置)。
\begin{table}[htbp]
\centering
\caption{SoC整体资源利用}
\label{tab:sys_util}
\begin{tabular}{lccc}
\toprule
\textbf{资源} & \textbf{已用} & \textbf{可用} & \textbf{利用率} \\
\midrule
Slice LUTs(Total) & 71,196 & 133,800 & 53.2\% \\
Slice LUTs(Logic) & 69,453 & 133,800 & 51.9\% \\
Slice Registers & 39,690 & 267,600 & 14.8\% \\
Block RAM Tile & 28.0 & 365 & 7.7\% \\
~~RAMB36E1 & 10 & 365 & 2.7\% \\
~~RAMB18E1 & 36 & 730 & 4.9\% \\
DSP48E1 & 0 & 740 & 0.0\% \\
BUFG & 4 & 32 & 12.5\% \\
\bottomrule
\end{tabular}
\end{table}
表\ref{tab:module_util}给出按模块层次分解的资源利用明细,从中可以清晰看出各子系统在总体面积中的贡献比例。
\begin{table}[htbp]
\centering
\footnotesize
\caption{主要模块资源利用明细}
\label{tab:module_util}
\begin{tabular}{lrrrr}
\toprule
\textbf{模块} & \textbf{LUT} & \textbf{FF} & \textbf{BRAM} & \textbf{占比} \\
\midrule
ML-KEM & 39,029 & 25,868 & 2$\times$36 + 6$\times$18 & 54.8\% \\
~~FFT & 6,949 & 1,083 & 8$\times$36 + 4$\times$18 & 9.8\% \\
矩阵乘法 & 10,204 & 3,239 & — & 14.3\% \\
CPU (core\_top) & 8,553 & 5,591 & 20$\times$18 & 12.0\% \\
DMA/CDMA & 1,558 & 1,476 & 1$\times$18 & 2.2\% \\
Crossbar + CDC + 适配器 & 2,102 & 621 & — & 3.0\% \\
matmul序列桥 & 247 & 578 & — & 0.3\% \\
UART + confreg + DVI + SRAM & 1,711 & 1,222 & — & 2.4\% \\
顶层胶合逻辑 & 812 & 4 & — & 1.1\% \\
\midrule
\textbf{合计} & \textbf{71,165} & \textbf{39,682} & \textbf{10$\times$36 + 31$\times$18} & \textbf{100\%} \\
\bottomrule
\end{tabular}
\end{table}
注:Vivado层次化报告中各子模块合计可能略小于顶层总数,原因在于跨层次LUT合并(cross-hierarchy LUT combining)机制。表中顶层总计为71,196 LUT。
从模块资源分布可以得出以下观察。ML-KEM加速器是整个SoC中面积最大的单一组件,消耗54.8\%的LUT和65.2\%的FF,主要归因于\texttt{ntt\_core}的256系数寄存器阵列和\texttt{keccak\_core}的1600-bit宽数据通路。矩阵乘法加速器以14.3\%的LUT占比位居第二,其4个并行32×32-bit流水线乘法器(每实例约1,000 LUT)是面积的主要贡献者。CPU核心消耗12.0\%的LUT,其中BTB(分支目标缓冲器)和TLB(地址转换旁路缓冲器)合占约3,000 LUT。FFT加速器虽仅占9.8\%的LUT,但消耗了最多的BRAM资源——8个RAMB36E1用于5级SDF架构中的延迟缓冲和旋转因子ROM存储。
DSP使用量为零体现了竞赛规则约束和设计策略的一致性——ML-KEM不使用DSP、矩阵乘法受竞赛条款限制、FFT采用16-bit窄数据宽度,三者共同导致了全LUT乘法映射的设计决策。
\subsection{功耗分析}
布局布线后系统功耗的层次化分解如表\ref{tab:power}所示。
\begin{table}[htbp]
\centering
\small
\caption{系统功耗层次化分解}
\label{tab:power}
\begin{tabular}{lcc}
\toprule
\textbf{模块} & \textbf{动态功耗(W)} & \textbf{占动态功耗比} \\
\midrule
ML-KEM(u\_mlkem) & 0.218 & 40.0\% \\
PLL时钟生成器 & 0.138 & 25.3\% \\
矩阵乘法(u\_matmul) & 0.081 & 14.9\% \\
FFT(u\_FFT) & 0.027 & 5.0\% \\
CPU(u\_cpu) & 0.025 & 4.6\% \\
DMA/CDMA & 0.008 & 1.5\% \\
其它外设与总线 & 0.048 & 8.8\% \\
\midrule
\textbf{动态功耗合计} & \textbf{0.545} & 100\% \\
器件静态功耗 & 0.141 & — \\
\midrule
\textbf{总片上功耗} & \textbf{0.686} & — \\
\bottomrule
\end{tabular}
\end{table}
系统总功耗为0.686 W,其中动态功耗占79.4\%(0.545 W),静态功耗占20.6\%(0.141 W)。ML-KEM是最大的动态功耗来源(40.0\%),与资源利用分布一致。PLL以25.3\%的比例位居第二,反映了其驱动多时钟域(cpu\_clk、sys\_clk)的固有功耗开销。按资源类型划分,信号翻转功耗(0.194 W,占动态功耗35.6\%)和Slice Logic功耗(0.109 W,20.0\%)是两类最大的器件级功耗来源。
\subsection{设计复杂度分析}
表\ref{tab:complexity}列出主要模块的Rent指数和平均扇出数。Rent指数是衡量模块内部互联复杂度的指标,数值越低表示结构越规整、局部互联越密集。
\begin{table}[htbp]
\centering
\small
\caption{模块设计复杂度(Rent指数)}
\label{tab:complexity}
\begin{tabular}{lccr}
\toprule
\textbf{模块} & \textbf{Rent指数} & \textbf{平均扇出} & \textbf{总实例数} \\
\midrule
矩阵乘法器 & 0.60(Normal) & 3.76 & 15,711 \\
CPU & 0.59(Normal) & 3.96 & 15,822 \\
UART & 0.55(Normal) & 3.54 & 1,296 \\
DMA/CDMA & 0.46(Low) & 3.31 & 3,435 \\
ML-KEM & 0.41(Low) & 3.78 & 87,846 \\
\bottomrule
\end{tabular}
\end{table}
ML-KEM的Rent指数(0.41)在主要模块中最低,表明其数据通路具有高度规整的局部互联特性——多项式系数在相邻流水级之间传递,NTT蝶形单元按固定模式访问系数寄存器,这种结构化特征有利于布局布线的时序收敛。相比之下,矩阵乘法器和CPU的Rent指数较高(0.59--0.60),反映其控制逻辑的随机互联特性。FFT/ML-KEM共享从机以87,846个实例的规模(占全系统66.7\%的LUT实例数)成为物理设计中最庞大的层次化模块。
\subsection{高扇出网络分析}
表\ref{tab:fanout}列出布局布线后扇出最高的前5个网络,这些网络是潜在的时序瓶颈和布线拥塞来源。
\begin{table}[htbp]
\centering
\small
\caption{高扇出网络(Top 5)}
\label{tab:fanout}
\begin{tabular}{lcl}
\toprule
\textbf{网络名称} & \textbf{扇出} & \textbf{驱动源} \\
\midrule
sys\_clk(全局时钟) & 35,652 & BUFG \\
ML-KEM ek\_bram延迟寄存器 & 24,670 & LUT5 \\
CPU复位网络 & 5,108 & LUT1 \\
ML-KEM poly\_mul计数器 & 3,758 & FDCE \\
matmul FSM独热状态 & 2,151 & FDRE \\
\bottomrule
\end{tabular}
\end{table}
\texttt{sys\_clk}的BUFG网络以35,652个负载的扇出位居首位,这在50 MHz设计中不会构成时序问题。值得注意的是ML-KEM内部有两个高扇出网络进入前5名——\texttt{ek\_bram}的延迟寄存器链(24,670扇出)和\texttt{poly\_mul}的加载计数器(3,758扇出),前者源于字节编码器中一个组合使能信号被复制到大量并行路径,后者是多路复用地址总线的经典高扇出场景。这些高扇出网络在50 MHz下均未产生时序违例,但若频率进一步提升,可能需要插入复制寄存器或使用BUFG驱动的全局使能策略进行优化。
\subsection{系统功耗估计}
布局布线后系统功耗估计约为0.549 W(总片上功耗),其中动态功耗0.409 W,静态功耗0.141 W。PLL模块是单一功耗最高的组件(0.132 W),其次为信号翻转功耗(0.115 W)和Slice Logic功耗(0.069 W)。
% ================================================================
\section{结论}
本设计在龙芯SoC平台上成功构建了一个集成多种硬件加速器的异构计算系统。
在AXI总线集成架构方面,以AxiCrossbar\_2x8为核心互连部件,实现了CPU和DMA双主设备对8个从设备的统一地址空间访问,涵盖外部SRAM控制器、UART串口、DVI显示控制器、GPIO与定时器、DMA配置空间、FFT与ML-KEM共享加速窗口和矩阵乘法器。共享从机的内部二次路由设计——FFT与ML-KEM通过地址位[15:12]区分并共享Slave 6端口——在不增加Crossbar端口数量的前提下实现了两种加速器的无缝共存,体现了在资源受限场景下灵活地址规划的工程价值。
在DMA数据搬运体系方面,4通道CDMA控制器与matmul自动序列控制器的协同设计显著降低了CPU在批量计算任务中的参与度。序列控制器将逐组的源数据读取、矩阵计算触发、结果写回和组索引递增等操作固化为硬件状态机的自动循环,CPU仅需在批量任务启动前一次性配置6个序列参数。三条数据路径——mem2mem直接存储搬运、本地Endpoint加速器旁路通信和序列控制器的全自动批量流水——覆盖了SoC中所有的数据传输场景。
在赛事任务完成度方面,矩阵乘法加速器严格遵循赛事规范:不使用DSP资源而全部以LUT逻辑实现32乘32-bit乘法;支持4乘4最大矩阵规模并兼容更小的非方阵规模(通过填零对齐);输出结果按66-bit精度拆分为3个32-bit字的标准格式;输入输出数据布局完全符合128字节源组和192字节结果组的赛事定义。CRC32校验、批量序列测试和系统级仿真验证共同确认了加速器设计的完整正确性。
在后量子密码硬件集成方面,ML-KEM加速器通过共享AXI从机与FFT复用Slave 6端口,在不增加Crossbar端口数量的前提下完整实现了FIPS 203标准的全部三种操作和三种安全等级的硬件加速。三路径诊断测试(软件参考、CPU寄存器、DMA窗口各100次迭代,覆盖ML-KEM-512/768/1024三种等级)全部通过,验证了IP核在真实SoC环境中的功能正确性和软硬件接口的长期运行稳定性。
\begin{thebibliography}{10}
\bibitem{loongson_soc}
龙芯中科技术有限公司.
\emph{龙芯杯全国大学生系统能力培养大赛——实验平台开发手册}.
2024.
\bibitem{fips203}
National Institute of Standards and Technology.
\emph{FIPS 203: Module-Lattice-Based Key-Encapsulation Mechanism Standard}.
August 2024.
\bibitem{artix7}
Xilinx Inc.
\emph{7 Series FPGAs Data Sheet: Overview (DS180)}.
v2.6, 2020.
\bibitem{vivado}
Xilinx Inc.
\emph{Vivado Design Suite User Guide: Synthesis (UG901)}.
v2019.2, 2019.
\bibitem{axi_spec}
ARM Ltd.
\emph{AMBA AXI and ACE Protocol Specification}.
Issue H, 2013.
\end{thebibliography}
\end{document}