doc: update system design report with figures, tables, and test results

This commit is contained in:
2026-07-13 05:26:09 +08:00
parent 6d4239ea7f
commit 7b990966e0
6 changed files with 131 additions and 33 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

BIN
doc/reports/fft_arch.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

BIN
doc/reports/matmul_arch.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

View File

@@ -104,10 +104,11 @@
\toprule
\textbf{功能} & \textbf{硬件实现(本设计贡献)} & \textbf{软件管理} \\
\midrule
ML-KEM密钥生成/封装/解封装 & \texttt{mlkem\_top}全硬件加速 & 参数配置、种子装载、结果回读 \\
FFT 1024点变换 & FFT SDF流水线 & 数据写入、模式配置、启动触发 \\
矩阵乘法 C=A×B & \texttt{matmul\_axi\_slave} 双Bank加速器 & 矩阵数据搬运、计算调度、CRC校验 \\
数据搬运 & 4通道DMA控制器 & 传输描述符配置、完成轮询 \\
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}
@@ -121,9 +122,9 @@ CPU负责系统的整体调度:配置各加速器的控制寄存器、触发
图\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]
\begin{figure}[H]
\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.]
\includegraphics[width=0.92\textwidth]{system_arch.png}
\caption{SoC系统顶层架构}
\label{fig:soc_arch}
\end{figure}
@@ -154,14 +155,6 @@ Slave 7 & 0x1F50\_0000--0x1F5F\_FFFF & 0xBF50\_0000 & 矩阵乘法加速器 \\
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}所示。
@@ -184,7 +177,7 @@ intrpt[3] & mlkem\_intr & ML-KEM操作完成 \\
\subsection{时钟与复位架构}
系统采用单一外部晶振(50 MHz)经PLL生成两个时钟域:\texttt{cpu\_clk}(约33 MHz)驱动CPU核心,\texttt{sys\_clk}(50 MHz)驱动AXI总线、全部外设和加速器。ML-KEM、矩阵乘法器、FFT和DMA控制器均在\texttt{sys\_clk}域内运行,无需跨时钟域同步。各时钟域通过\texttt{rst\_sync}模块生成同步释放的复位信号,PLL锁定信号(\texttt{pll\_locked})作为复位释放的使能条件。
系统采用单一外部晶振(50 MHz)经PLL生成三个时钟域:\texttt{cpu\_clk}(约33 MHz)驱动CPU核心,\texttt{sys\_clk}(50 MHz)驱动AXI总线、DMA控制器和matmul/FFT等外设,\texttt{mlkem\_clk}(约77 MHz)通过PLL独立生成,专用于ML-KEM加速器的高吞吐计算通路。ML-KEM的AXI从机接口(\texttt{mlkem\_axi\_slave})内部通过\texttt{Axi\_CDC}模块实现\texttt{sys\_clk}与\texttt{mlkem\_clk}之间的跨时钟域同步,将CPU的寄存器读写请求安全传递至高速计算域;ML-KEM的中断信号同样经过跨域同步后送入CPU中断系统。三个时钟域通过\texttt{set\_clock\_groups -asynchronous}约束正确隔离,各域通过\texttt{rst\_sync}模块生成同步释放的复位信号,PLL锁定信号作为复位释放的使能条件。
% ================================================================
\section{核心子系统设计}
@@ -197,6 +190,15 @@ DMA子系统是本设计中连接CPU、外部存储器和加速器的数据搬
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]位。
\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]
@@ -236,6 +238,15 @@ matmul专用的自动序列控制器cdma\_matmul\_bridge将批量矩阵运算的
每个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]
@@ -265,12 +276,28 @@ FFT加速器基于单路径延迟反馈(Single-path Delay Feedback,SDF)架
FFT加速器通过\texttt{axi\_fft\_wrapper}封装为AXI从机,提供输入实部/虚部BRAM写窗口(各1024×16-bit)、输出实部/虚部BRAM读窗口和CSR控制/状态寄存器。输入输出数据采用位反转地址索引。
\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后量子密码加速器(\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批量数据搬运。
\begin{figure}[H]
\centering
\includegraphics[width=0.92\textwidth]{mlkem_modules.png}
\caption{ML-KEM加速器内部模块层次结构}
\label{fig:mlkem_sys}
\end{figure}
% ================================================================
\section{芯片前端设计与验证方案}
@@ -297,30 +324,75 @@ DMA子系统的验证覆盖三条独立的数据搬运路径,每条路径侧
\subsection{矩阵乘法测试结果}
矩阵乘法加速器在SoC仿真环境中完成了完整功能验证。测试程序输出日志摘录如下:
矩阵乘法加速器在SoC仿真环境中完成了完整功能验证,CRC32校验值与参考模型完全一致。表\ref{tab:matmul_results}列出批量矩阵运算的时序分解。
\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。
\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次迭代的系统级诊断测试,详细结果已在前述IP设计报告中给出。此处汇总关键性能指标:KeyGen操作延迟为13,835周期(K=2)至37,923周期(K=4),Encaps为17,995至43,961周期,Decaps为33,237至70,447周期。DMA路径相对于CPU寄存器路径的额外加速比为3.6--3.8×,验证了批量数据传输相对于逐字节AXI寄存器的显著效率优势。
ML-KEM加速器在SoC集成环境中完成了软件参考(SW)、CPU寄存器路径和DMA窗口路径各100次迭代的系统级诊断测试。表\ref{tab:mlkem_soc_results}列出三种安全等级下各路径完成一轮完整往返(KeyGen+Encaps+Decaps)的平均CPU周期数、耗时和加速比。
全部KAT测试用例(360个,覆盖三种操作×三种等级)逐字节比对NIST标准答案通过,Decaps隐式拒绝路径同样验证正确。
\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}所示。
完整SoC在Xilinx Artix-7 XC7A200T-1器件上完成布局布线,三个时钟域均通过时序收敛。主要时序指标如表\ref{tab:sys_timing}所示。
\begin{table}[htbp]
\centering
@@ -330,8 +402,9 @@ ML-KEM加速器在SoC集成环境中完成了三路径(SW/CPU/DMA)各100次
\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 \\
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}
@@ -471,6 +544,31 @@ matmul FSM独热状态 & 2,151 & FDRE \\
\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{验证结果汇总}
表\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{结论}