config_dataflow - 2021.2 Chinese

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

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

描述

  • 指定数据流流水打拍(通过 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