综合将提取设计的 RTL 描述,并使用时序驱动的算法将其变换为经最优化的技术所映射的网表。结果质量受 RTL 代码质量和提供的约束的影响。在编译流程的这个阶段,信号线延迟建模采用近似法,无法反映布局约束或复杂影响(例如拥塞)。建模的主要目的是通过真实且简单的约束获取满足时序约束要求或者接近满足要求的网表。
综合引擎接受所有 XDC 命令,但其中只有部分命令真正有效:
- 与建立/恢复分析有关的时序约束会影响 QoR:
-
create_clock
/create_generated_clock
-
set_input_delay
/set_output_delay
-
set_clock_groups
/set_false_path
/set_max_delay
/set_multicycle_path
-
- 与保持和移除分析有关的时序约束在综合步骤中被忽略:
-
set_min_delay / set_false_path -hold
/set_multicycle_path -hold
-
- RTL 属性会强制采纳映射和最优化算法所制定出的决策。以下提供一些示例:
- DONT_TOUCH / KEEP / KEEP_HIERARCHY / MARK_DEBUG
- MAX_FANOUT
- RAM_STYLE / ROM_STYLE / USE_DSP / SHREG_EXTRACT
- FULL_CASE / PARALLEL_CASE(仅限 Verilog RTL)
注释: 在 XDC 文件中还可将同样的属性设置为特性。在不改变 RTL 的前提下,仅在某些情况下才能使用基于 XDC 的约束影响综合结果。 - 忽略物理约束(LOC、BEL、Pblock)
综合约束使用的名称必须来自细化的网表(最好是端口和时序单元)。某些 RTL 信号会在细化过程中消失,并且无法为其赋予 XDC 约束。此外,由于细化后执行的各种最优化,信号线或逻辑单元将合并到各种技术原语(例如,LUT 或 DSP 块)中。要了解详细设计对象的名称,单击 Flow Navigator 中的Open Elaborated Design,然后浏览您感兴趣的层级。
部分寄存器被吸收到 RAM 块中,部分层级可能消失,以便允许实现跨边界最优化。
所有经细化的网表对象或层级均可通过使用 DONT_TOUCH、KEEP、KEEP_HIERARCHY 或 MARK_DEBUG 约束来保留,但存在时序或面积 QoR 劣化的风险。
最后,某些约束可能存在冲突而不被综合所认可。例如,如果在跨多个层级的网表上设置 MAX_FANOUT 属性,并且使用 DONT_TOUCH 保留部分层级,那么将限制或完全阻止扇出最优化。
重要: 与实现阶段不同,综合可能会将用于定义时序约束的 RTL 网表对象优化掉以便实现更好的面积 QoR。一般这不会导致问题,前提是对约束进行更新和确认以满足实现要求。但如果需要,仍可使用 KEEP 约束来保留任何对象以便在综合和实现期间应用约束。
完成综合后,AMD 建议您复查时序和使用报告,以确认网表质量满足应用要求并且可用于实现。