DATAFLOW 和 DEPENDENCE 的验证 - 2023.2 简体中文

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

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 简体中文

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

如果 DATAFLOW 指令用于对任务进行流水打拍,那么它会在任务间插入通道以改善任务间的数据流。通常,通道是以使用 STREAM 指令或 syn.dataflow.fifo_depth 配置命令指定的 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!
/////////////////////////////////////////////////////////////

“Dataflow Viewer”(数据流查看器)将显示以红色显示的死锁中所涉及的任意进程。它还将显示哪些通道已满(红色)、哪些通道已空(白色)。在此情况下,请复查任务间通道的实现,确保所有 FIFO 大小足够保存所生成的数据。

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

提示: cosim.disable_deadlock_detection=true 配置命令会禁用这些检查。