← 所有笔记
学习

venus学习 10/15

运行四个测试用例,统计 RTL 与 gem5 runtime

1. 今日内容

在 LDPC 复现的基础上,尝试运行四个测试用例,统计 RTL 与 gem5 的执行时间,观察任务分配并核对返回数据。

LDPC 多任务实验另行记录,本篇只整理四个 case 的复现。

2. 复现流程

flowchart TB
    A["选择算法 C / BAS"] --> B["找到配套的 2p0sim L1 分支"]
    B --> C["DSL + LLVM 编译"]
    C --> D["BIN / JSON"]
    D --> E["适配并编译 L1 工程"]
    E --> F["SVH → RTL 仿真"]
    E --> G["manifest → gem5 仿真"]
    F --> H["比较输出、runtime 和 Tile 分配"]
    G --> H
  • 算法源码:VEMU/5g_lite/tasks/。
  • 配套 L1 程序:scheduler 仓库中的 2p0sim-* 分支。
  • 实验放在独立目录,保留源码、编译产物和日志。

3. 四个 case 的运行结果

统一配置:1 Cluster × 4 Tiles,每个 Tile 为 16 lanes × 128 rows。

计时范围:最早任务开始执行 → 最晚任务执行完成,不包含初始加载和末尾返回 DMA。

用例 Task 数 RTL runtime gem5 runtime RTL 使用 Tile 编号 gem5 使用 Tile 编号
nrPDSCHDag2_hw_2p0 9 1820.124 μs 1836.524 μs 0、1、2 0、1、2
Simpledagfire_test 4 454.576 μs 18.688 μs 0、1 0、1
Complexdagfire_test 63 610.100 μs 351.916 μs 0、1、2、3 0、1
Complexpointerdagfire 63 406.676 μs 382.816 μs 0、1、2 0、1、2

注:Complexdagfire 为修正动态输入后的结果。任务完成不等于完整功能和时序验证全部通过。

4. nrPDSCH DAG2 遇到的问题

当前算法源码与师兄的 L1 工程接口不完全一致,需要适配。

问题 通俗理解 处理
DAG 名称不一致 L1 调用的名字与新产物不同 改为调用 dag1
输入方式不同 当前数据已嵌入 BIN,不需要再现场传入 动态输入数由 4 改为 0
转换脚本拒绝零输入 脚本没考虑静态输入的情况 允许零动态输入
混有旧 BIN/JSON 编译可能把旧用例也打包进去 将旧产物移到备份目录
gem5 找不到 manifest 缺少运行所需的任务描述文件 补生成后重新运行
默认仿真时限不足 原上限 1 ms,小于本次约 1.8 ms 的执行时间 将上限设为 10 ms

主要修改实验副本中的两个文件:

  • l1/src/main.c:适配 DAG 名称、动态输入数量,初始化七个输出 FIFO。
  • l1/dags/read_dag_json.py:允许零动态输入。

本次没有手动修改 nrPDSCH 算法 C/BAS 的计算逻辑。

5. 输出验证与时间差异

nrPDSCH DAG2

  • 九个任务全部完成。
  • gem5 相对 RTL 的执行时间偏差约 +0.90%。
  • 七项声明返回数据一致。
  • h_real、h_imag 各 7488 字节,已完整比较。
  • demod、pdsch_llr 返回的是缓冲区偏移量,完整解调、解扰数组尚未比较。
  • 尚未完成独立算法 golden 验证。
返回偏移量一致
      ↓
只能确认两边给出的数据位置一致
      ↓
还需读取对应缓冲区,比较完整结果

Simpledagfire 与 Complexdagfire

两者包含 UART 打印和等待发送完成的逻辑,而当前 gem5 没有等价的 UART 时序模型。

flowchart LR
    A["任务中的 UART 操作"] --> B["RTL:包含发送等待"]
    A --> C["gem5:缺少等价 UART 时序"]
    B --> D["整体耗时不能直接评价计算模型精度"]
    C --> D

UART 建模差异是已发现的问题,但尚不能认定它解释了全部时间差异。

此外,RTL 日志仍有未知值相关断言错误。STRICT_TEST_PASS 只表示测试平台检查项通过,不代表日志没有其他错误。

6. 今天理解的内容

  • BIN + JSON 不代表动态输入一定为零:输入也可以由 L1 在运行时提供。
  • 任务数不等于使用 Tile 数:依赖关系、资源状态和调度过程都会影响任务分配。
  • runtime 是模拟硬件的执行时间,不是电脑跑仿真花费的时间。
  • 偏移量一致不等于完整结果一致。
  • 比较性能要统一程序、数据、配置、计时边界与建模范围。

7. 下一步

  1. 排查两个 case 的时间差异及 RTL 未知值错误。
  2. 补充 nrPDSCH 完整结果缓冲区的验证。
  3. 继续运行其他有配套 2.0 L1 程序的用例。
  4. 保存对比报告,明确每个 case 已验证和未验证的范围。

关键词

5g_lite · L1 接口适配 · 静态参数 / 动态输入
RTL / gem5 · 计时边界 · Tile 分配 · UART 建模 · 输出验证