一、系统仿真报告
////////////////////////////////////////////////////////////////////////////////////
// Inter-Transaction Progress: Completed Transaction / Total Transaction
// Intra-Transaction Progress: Measured Latency / Latency Estimation * 100%
//
// RTL Simulation : "Inter-Transaction Progress" ["Intra-Transaction Progress"] @ "Simulation Time"
////////////////////////////////////////////////////////////////////////////////////
// RTL Simulation : 0 / 1 [0.00%] @ "113000"
// RTL Simulation : 0 / 1 [14.35%] @ "50000123000"
// RTL Simulation : 0 / 1 [28.70%] @ "100000128000"
// RTL Simulation : 0 / 1 [43.05%] @ "150000133000"
// RTL Simulation : 0 / 1 [57.40%] @ "200000138000"
// RTL Simulation : 0 / 1 [71.75%] @ "250000143000"
// RTL Simulation : 0 / 1 [86.10%] @ "300000148000"
// RTL Simulation : 0 / 1 [100.45%] @ "350000153000"
// RTL Simulation : 0 / 1 [114.80%] @ "400000158000"
Finished C/RTL cosimulation.
二、分析
Inter-Transaction Progress:任务间进度。
0 / 1 表示一共要执行 1 次完整的事务(顶层函数调用),但目前 已完成的事务数为 0,直到仿真时间 400 ms 仍未完成。
Intra-Transaction Progress:任务内部进度。
计算公式是 实测延迟 / HLS 估计延迟 × 100%。 从 0% 一路增加到 114.80%,说明 实测延迟已经超过 HLS 综合时的估计延迟,而且还在继续增长。 正常情况下,仿真会在进度接近 100% 时完成一次事务,0/1 会变为 1/1,然后结束。但这里完全没有。
现象总结:顶层函数被调用后,一直没有返回,仿真时间已经运行到 400 ms(400,000,158,000 ps),但一次事务都没完成。这是典型的 RTL 仿真死锁 / 无限等待。
三、仿真时间长度
从早上9点到下午2:30一直在进行协同仿真设计。