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. 下一步
- 排查两个 case 的时间差异及 RTL 未知值错误。
- 补充 nrPDSCH 完整结果缓冲区的验证。
- 继续运行其他有配套 2.0 L1 程序的用例。
- 保存对比报告,明确每个 case 已验证和未验证的范围。
关键词
5g_lite · L1 接口适配 · 静态参数 / 动态输入
RTL / gem5 · 计时边界 · Tile 分配 · UART 建模 · 输出验证