DATAFLOW 和 DEPENDENCE 的验证 - 2021.2 Chinese

Vitis 高层次综合用户指南 (UG1399)

Document ID
UG1399
Release Date
2021-12-15
Version
2021.2 Chinese

C/RTL 协同仿真会自动验证 DATAFLOW 和 DEPENDENCE 指令的各方面。

如果 DATAFLOW 指令用于对任务进行流水打拍,那么它会在任务间插入通道以改善任务间的数据流。通常,通道是以使用 STREAM 指令或 config_dataflow 命令指定的 FIFO 和 FIFO 深度来实现的。如果 FIFO 深度太小,RTL 仿真可能停滞。例如,如果指定的 FIFO 深度为 2,但在使用者任务读取任意数据值之前,生产者任务写入 3 个值,那么 FIFO 会阻止生产者操作。在某些情况下,这可能导致整个设计停滞,如 协同仿真死锁查看器 中所述。

在此情况下,C/RTL 协同仿真会发出如下消息,以表明当前 DATAFLOW 区域中的通道导致 RTL 仿真停滞。


//////////////////////////////////////////////////////////////////////////////
// ERROR!!! DEADLOCK DETECTED at 1292000 ns! SIMULATION WILL BE STOPPED! //
//////////////////////////////////////////////////////////////////////////////
/////////////////////////
// Dependence cycle 1:
// (1): Process: hls_fft_1kxburst.fft_rank_rad2_nr_man_9_U0
//      Channel: hls_fft_1kxburst.stage_chan_in1_0_V_s_U, FULL
//      Channel: hls_fft_1kxburst.stage_chan_in1_1_V_s_U, FULL
//      Channel: hls_fft_1kxburst.stage_chan_in1_0_V_1_U, FULL
//      Channel: hls_fft_1kxburst.stage_chan_in1_1_V_1_U, FULL
// (2): Process: hls_fft_1kxburst.fft_rank_rad2_nr_man_6_U0
//      Channel: hls_fft_1kxburst.stage_chan_in1_2_V_s_U, EMPTY
//      Channel: hls_fft_1kxburst.stage_chan_in1_2_V_1_U, EMPTY
/////////////////////////////////
// Total 1 cycles detected!
/////////////////////////////////////////////////////////////

如果从 Vitis HLS IDE 尝试执行协同仿真,并且仿真导致死锁,那么 Vitis HLS IDE 将自动启动“Dataflow Viewer”(数据流查看器),并显示死锁中所涉及的进程(以红色显示)。它还将显示哪些通道已满(红色)、哪些通道已空(白色)。在此情况下,请复查任务间通道的实现,确保所有 FIFO 大小足够保存所生成的数据。

RTL 测试激励文件也可采用类似方式来配置,以自动检查使用 DEPENDENCE 指令指定的假性依赖关系的有效性。协同仿真期间会显示警告消息,表明依赖关系并非假性依赖关系,并且必须移除对应方向以实现功能有效的设计。

提示: cosim_design 命令的 -disable_deadlock_detection 选项可禁用这些检查。