描述
- 指定数据流流水打拍(通过
set_directive_dataflow
命令实现)的默认行为。 - 允许您指定默认通道存储器类型和深度。
语法
config_dataflow [OPTIONS]
选项
-
-default_channel [fifo | pingpong]
- 默认情况下,在使用数据流流水打拍时,以
pingpong
方式配置的 RAM 存储器用于缓冲函数或循环之间的数据。使用串流数据时(即数据始终连续读写),FIFO 存储器更高效且可选作为默认存储器类型。提示: 使用 set_directive_stream 命令将阵列设置为串流以执行 FIFO 访问。 -
-disable_fifo_sizing_opt
- 禁用导致增大资源使用量的 FIFO 大小调整最优化,这样可改善性能并减少死锁。
-
-fifo_depth <integer>
- 指定 FIFO 的默认深度。默认深度为 2。
使用乒乓c存储器时,该选项无效。如果不指定该选项,默认深度为 2,或者如果这是转换为 FIFO 的阵列,则默认大小为原始阵列的大小。在某些情况下,这可能过于保守,导致 FIFO 过大。当您确认 FIFO 过大时,可使用该选项。
警告:请谨慎使用该选项。FIFO 深度不足可能导致死锁。 -
-override_user_fifo_depth <value>
-
针对每个
hls::stream
使用指定深度,覆盖任何用户设置。注释: 这可用于检查是否因设计中 FIFO 深度不足而导致出现死锁。只需将其设置为超大值(例如,仿真结束时协同仿真打印的最大深度),如果存在死锁,那么您就可以使用协同仿真的 FIFO 深度剖析选项和 GUI 来找到最小的深度,以保障性能并避免死锁。 -
-scalar_fifo_depth <integer>
- 针对标量传输 FIFO 请指定最小值。
通过标量传输,编译器会将标量从 C/C++ 语言代码转换为 FIFO。可通过
-start_fifo_depth
设置这些 FIFO 的最小大小。如果不提供该选项,则使用-fifo_depth
的值。 -
-start_fifo_depth <integer>
- 指定起始传输 FIFO 的最小深度。
仅当生产者与使用者间通道为 FIFO 时,该选项才有效。该选项使用的默认值与
-fifo_depth
选项同为 2。此 FIFO 有时可能导致死锁,在此情况下您可使用该选项来增加 FIFO 的深度。 -
-strict_mode [off | warning | error]
- 为数据流规范形式相关的消息设置严重性。
-
-strict_stable_sync[=true|false]
- 强制对
ap_done
的稳定端口进行同步。
-
-task_level_fifo_depth <integer>
- 指定任务级别 FIFO 的深度。
通过
ap_ctrl_chain
来同步 FIFO。写操作是生产者的ap_done
,读操作则是使用者的ap_ready
。同步方面与 PIPO 相似,访问方面则与 FIFO 相似。
示例
将默认通道从乒乓存储器更改为 FIFO:
config_dataflow -default_channel fifo
将默认通道从乒乓存储器更改为深度为 6 的 FIFO:
config_dataflow -default_channel fifo -fifo_depth 6
警告:
如果设计实现需要包含超过 6 个元素的 FIFO,此设置会导致设计的 RTL 验证失败。请谨慎使用该选项,因为它属于用户覆盖选项。
要找到死锁原因,请尝试显著增大所有 FIFO 深度,尤其是 C/RTL 协同仿真报告的 FIFO。如果当“N”值较大时死锁消失,则问题是由于 FIFO 深度不足导致的。您可按如下方式进行测试:
config_dataflow -fifo_depth N -start_fifo_depth N -scalar_fifo_depth N -task_level_fifo_depth N