AI 引擎用户可能会遇到仿真器挂起。常见原因是对于所请求的 graph 迭代次数,输入数据不足;串流数据的生成和耗用之间存在不匹配;与串流、级联串流或异步窗口之间存在周期依赖性,或者阻塞协议调用(获取异步窗口、读/写串流)顺序错误。
您可在 x86simulator
上使用 --stop-on-deadlock
选项以检测此类死锁。该选项会启用 x86simulator
以自动检测各类死锁、停止仿真并打印消息,声明由于检测到死锁而提前终止仿真。以 --stop-on-deadlock
选项调用 x86simulator
后,x86simulator
会检测死锁并生成死锁诊断报告。
此外,在 x86simulator_output/simulator_state_post_analysis.dot
中会生成 graph。此 .dot
文件会对 graph 中有关模块框图的描述进行解码,在此模块框图中会以红色高亮显示死锁中所涉及的代理。要将此文件转换为 .png
文件,必须使用 dot
程序,如下所示。
dot -Tpng x86simulator_output/simulator_state_post_analysis.dot > simulator_state_post_analysis.png
重要: x86 仿真中不含死锁并不意味着 SystemC 仿真中也没有死锁。X86 仿真并不会对时序和资源约束进行建模,因而可能导致死锁的因素更少。另一方面,如果 x86 仿真发生死锁,SystemC 仿真也会发生死锁,因此先修复 x86 仿真中的死锁再继续 SystemC 仿真是很有益的。
注释: 软件仿真或者含外部测试激励文件的用例不支持
--stop-on-deadlock
选项。在
vitis_analyzer
中可直观显示死锁的文本描述:图 1. Vitis 分析器的Deadlock Analysis视图