对于 C 和 C++ 设计,仅支持单一时钟。对设计中的所有函数将应用同一个时钟。
创建 HLS 组件时,会以纳秒 (ns) 或 MHz 为单位来指定时钟周期,或者可在 HLS 配置文件中的“General”(常规)类别下更改此时钟周期,如下所示。
默认时钟周期为 10 ns。HLS 组件还使用时钟不确定性概念来提供用户定义的时序裕度,用于在设计内调度进程。您可在指定时钟的同时,采用同样方法来定义设计的时钟不确定性。默认时钟不确定性如不指定,则为时钟周期的 27%。
platform=
而不是 part=
,那么您还必须使用 freqhz=
代替 clock=
。这是因为,平台以 freqhz
形式指定时钟,您只能使用相同形式来将其覆盖。该工具通过为 HLS 组件使用时钟频率和器件信息,即可消除设计中的操作时序。但它无从知晓最终组件布局和信号线布线,因为这些操作是由输出 RTL 的逻辑综合来执行的。因此,该工具只能估算延迟。
为计算用于综合的时钟周期,该工具会从时钟周期减去时钟不确定性,如下图所示。
这样可为用户提供指定裕度以确保下游进程(例如,逻辑综合与布局布线)具有足够的时序裕度来完成其操作。如果器件资源主要供 HLS 组件使用,那么单元的布局和用于连接各单元的信号线布线可能过于紧密,导致设计延迟超出预期的时序延迟。面对此类情况,通过增加时钟不确定性可避免 HLS 所创建的设计在每个时钟周期内封装过多逻辑,并在布局布线选项不太理想的情况下使 RTL 综合仍能满足时序。
Vitis Unified IDE 和 v++
命令会尝试满足所有约束:时序、吞吐量和时延。但如果无法满足约束,那么该工具仍会生成 RTL 设计。如果无法满足时钟周期推断的时序约束,该工具会发出 SCHED-644
消息(如下所示)并以可实现的最佳性能来创建设计。
@W [SCHED-644] Max operation delay (<operation_name> 2.39ns) exceeds the effective
cycle time
综合完成后,针对层级内每个函数都会生成一份设计报告,并可在解决方案报告文件夹中查看。整个设计的最差情况时序将在各函数报告中报告为最差情况。无需复查层级中的每份报告。
如果时序违例过于严格而无法进一步最优化,且下游进程无法对其加以更正,请先复查指定精确的时延和指定精确的实现核的技巧,然后再考虑是否采用更快的目标技术。