无法满足最优化指令 - 2023.2 简体中文

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

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

应用最优化指令时,HLS 编译器会将详述进程的信息输出至控制台(和 log 日志文件)。在以下示例中,PIPELINE 指令已应用于 C 语言函数且 II=1(启动时间间隔为 1),但综合未能满足此目标。


INFO: [SCHED 11] Starting scheduling ...
INFO: [SCHED 61] Pipelining function 'array_RAM'.
WARNING: [SCHED 63] Unable to schedule the whole 2 cycles 'load' operation 
('d_i_load', array_RAM.c:98) on array 'd_i' within the first cycle (II = 1).
WARNING: [SCHED 63] Please consider increasing the target initiation interval of the 
pipeline.
WARNING: [SCHED 69] Unable to schedule 'load' operation ('idx_load_2', 
array_RAM.c:98) on array 'idx' due to limited memory ports.
INFO: [SCHED 61] Pipelining result: Target II: 1, Final II: 4, Depth: 6.
INFO: [SCHED 11] Finished scheduling.

重要: 如果 HLS 工具未能满足最优化指令,它会自动放宽最优化目标,并尝试以更低的性能目标来创建设计。如果无法放宽目标,它将停止并报错。

通过尝试创建满足较低最优化目标的设计,本工具可提供 3 种重要信息:

  • 使用当前 C 语言代码和最优化指令可达成的目标性能。
  • 无法满足更高性能目标的原因列表。
  • 可供分析的设计,以提供更多见解并帮助了解失败原因。

在以上 SCHED-69 消息中,所提供的无法达成目标 II 的原因是由于端口受限。设计必须访问块 RAM,块 RAM 最多只有 2 个端口。

此类失败发生后,下一步是分析问题。在此示例中,即分析代码第 52 行和/或使用Analysis(分析)透视图来判定瓶颈以及是否可降低需要 2 个以上端口的要求,或者判定如何增加端口的数量。

设计完成最优化并达成期望的性能后,可验证 RTL,并将综合结果封装为 IP。