6.4 KiB
系统报告复测清单
本清单用于为 system_design_report.tex 生成同一提交、可追溯的证据。不要把旧的
fpga/vivado_reports_nodsp/ 与新板级日志混合后宣称为同一版本结果。
0. 固化版本与环境
在仓库根目录执行并保存输出:
git status --short
git rev-parse HEAD
vivado -version | head -n 3
verilator --version
建议先提交当前 RTL/约束/软件变更。若工作树不干净,最终报告的证据版本无法唯一复现。
1. 必跑:RTL 静态检查
cd doc/reports/system
./tools/run_report_tests.sh lint
通过标准:命令退出码为 0,evidence/lint.log 中无 %Error。此项只证明静态可分析,
不证明 AXI、CDC 或算法功能正确。
2. 必跑:SoC 功能回归
仅编译指定软件、不运行仿真:
cd doc/reports/system
./tools/run_report_tests.sh build
需要同时运行 SoC 仿真时:
cd doc/reports/system
./tools/run_report_tests.sh soc
软件集合固定为 asm、fft、fft_dma、mlkem_test 和 mlkem_hello。asm
需要官方 ExtRAM 测试数据和专用 matmul 流程,因此 soc 只编译它,不用通用
tb_top 仿真;其余四项编译后依次运行 SoC 仿真。每次构建都会覆盖
sdk/axi_ram.mif,因此不要并行执行这些用例。构建日志位于 evidence/build/。
脚本会设置 CCACHE_DISABLE=1,避免 Vivado 2019.2 在编译 XSIM 自动生成的 C 文件时
因 ccache 目录不可写而只报告不透明的 XSIM 43-3409。
同时会将 /lib64 加入 XSIM 子进程库路径,避免旧版 Vivado clang 混用不匹配的
libncurses.so.5 与 libtinfo.so.5。
逐项检查:
| 日志 | 必须出现 | 不得出现 |
|---|---|---|
evidence/build/{asm,fft,fft_dma,mlkem_test,mlkem_hello}.log |
编译、链接和 objcopy 成功 | Error |
evidence/soc/fft.log |
Hardware/Software FFT Time;更新后的程序应输出 Max Abs Error |
仿真超时、X/Z 扩散 |
evidence/soc/fft_dma.log |
Hardware/Software FFT Time、Max Abs Error |
DMA 死锁、仿真超时 |
evidence/soc/mlkem_test.log |
MLKEM_RESULT=PASS、MLKEM_DONE |
任一 FAILS 非 0 |
evidence/soc/mlkem_hello.log |
MLKEM_HELLO_RESULT=PASS、MLKEM_HELLO_DONE |
RESULT=FAIL |
ML-KEM 的正确计数是 3 个固定 KAT 向量、900 次执行,不是 360 个不同 KAT。若要在 报告中声称覆盖隐式拒绝,必须另外增加“篡改 ciphertext 后共享密钥不等且流程按规范 完成”的负向测试;当前脚本不提供该证据。
3. 必跑:重新布局布线与实现取证
完整实现耗时较长,单独执行:
cd doc/reports/system
./tools/run_report_tests.sh implement
该命令先从 synth_1 开始强制重跑,重新综合/布局布线并生成 bitstream,随后生成以下文件:
evidence/vivado/timing_summary_full.rptevidence/vivado/utilization.rptevidence/vivado/utilization_hierarchical.rptevidence/vivado/power.rptevidence/vivado/clock_interaction.rptevidence/vivado/cdc.rptevidence/vivado/drc.rptevidence/vivado/methodology.rptevidence/vivado/route_status.rptevidence/vivado/dsp_check.log
通过标准:
- Setup WNS 和 Hold WNS 均不小于 0;
- failing endpoints 为 0,unconstrained paths 为 0;
- CPU、SYS、ML-KEM 三个预期时钟均存在且频率正确;
dsp_check.log显示 DSP used 为 0;- route status 为 fully routed;
- DRC/methodology 无 Critical Warning 被忽略;
- CDC 报告中的跨域均能对应到设计文档里的握手、同步器或异步 FIFO。
report_cdc退出码为 0 不等于 CDC 自动通过,仍需人工查看不安全类别和时钟约束。
功耗报告若仍显示 Confidence Level: Low,报告中只能称为 vectorless estimate。需要
正式功耗结论时,应对代表性 ML-KEM 和 matmul 负载回标 SAIF/VCD,再重新运行
report_power;这不是当前满分评测的前置条件。
4. 必跑:官方 5000 组 matmul 板级评测
使用最终 bitstream 和最终 user-sample.bin,保持:
MATMUL_GROUP_NUM=5000
MATMUL_FAST_START=1
MATMUL_WRITEBACK_RESULTS=0
运行官方评测工具,将完整控制台输出保存为:
doc/reports/system/evidence/board/matmul_official.log
必须保留这些行:随机种子、Expected CRC32、MATMUL_START、MATMUL_DONE、Elapsed
time、Reported/Expected CRC32、Score percent。通过标准为 CRC 匹配、22 s 内收到
DONE。性能目标是小于等于 4.9 ms;同时记录硬件 DMA_CYCLES,用于区分内部批处理
周期与串口/软件尾部开销。
至少连续运行 5 个不同随机种子。报告主表填写中位数,附录写 min/median/max;不要只 选择最好一次。
5. 必跑:复位前零操作
竞赛约束要求复位前无任何操作。至少覆盖以下信号:UART 写使能、AXI AW/AR/W valid、 DMA request、matmul start、ML-KEM start。观察窗口从上电开始到每个时钟域同步复位释放。
推荐二选一:
- 在 Vivado 仿真 testbench 中加入断言,任一信号在 reset 有效时拉高即
$fatal; - 板上 ILA 同时采集外部 reset、PLL locked、各域 resetn 和上述事务信号。
保存断言日志或 ILA 截图,并在文件名中包含提交短哈希。仅观察“串口没有字符”不足以 证明 DMA 和 AXI 没有操作。
6. 建议补跑:matmul 仿真与稳健性
- 组数:1、2、3、5000,覆盖 Bank 翻转和最后一组;
- DMA endpoint:对 valid/ready 随机插入 backpressure;
- 边界数据:全 0、全
0xffffffff、单位矩阵、随机矩阵; - 控制:done W1C 后立即启动下一批,检查 CRC 清零与 group counter;
- XSIM 与 Verilator 都运行。两者结果不一致时按 RTL 竞态/未初始化问题处理,不能只保留 通过的仿真器结果。
7. 回填指标并生成 PDF
所有日志就位后执行:
cd doc/reports/system
./tools/run_report_tests.sh refresh
该命令会:
- 从
evidence/提取 PPA、ML-KEM、FFT 和 matmul 指标; - 更新
report_metrics.tex; - 从
figures/*.dot生成 PDF 矢量图; - 用 XeLaTeX 多轮编译报告并检查未解析引用。
最终人工检查:目录非空、没有“图??/表??”、所有图中文字可读、报告中的 commit 与 bitstream/日志一致、所有“待复测”结论已经按真实证据更新。