综合步骤收到设计的
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_DSP48/SHREG_EXTRACT
°
FULL_CASE/PARALLEL_CASE(
仅限
Verilog RTL)
注释:
同一属性还可被设置为
XDC
文件的特性。使用基于
XDC
的约束便于仅在特定情况且不改变
RTL
的前提下影
响综合结果。
•
物理约束被忽略 (
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
。只要约
束针对实现进行了更新和验证,这通常不会有问题。如果需要,还可以使用
DONT_TOUCH
约束保存任意对象,以便
在综合与实现阶段均可应用约束。
一旦综合完成后,赛灵思建议您检查时序和使用报告,以验证网表质量满足应用要求并可用于实现阶段。
创建实现约束
实现约束必须准确反应最终应用的要求。物理约束 (例如
I/O
位置和
I/O
标准)决定于电路板设计,包括电路板走线
延迟,以及源自总体系统要求的散热管理要求。在进入实现步骤之前,赛灵思强烈建议您对所有约束的正确性和准确
性进行验证。错误约束可能会降低实现的
QoR
以及对于时序验收质量的信心。
多数情况下,在综合与实现阶段可以使用相同的约束。但是,由于设计对象在综合阶段可能消失或发生名称变化,因
此必须核实所有综合约束可在实现网表中正确使用。如果不是这样,您必须创建一个附加
XDC
文件,用以存储仅在实
现阶段有效的约束。
将块级约束读入顶层设计
当开发多团队工程时,为方便起见应为顶层设计的每个主要块创建独立的约束文件。这些块在最终整合为一个或多个
顶层设计之前通常需要单独开发和验证。
块级约束在开发时必须独立于顶层约束,且必须尽可能多地具备通用性,以便能够用于不同环境。此外,它们必须不
影响任何块边界之外的逻辑。
当实现子块时,期望使全时序网络包括在时序分析中以确保精确的偏差和时钟域交汇分析。这可能需要一个包含时钟
组件和附加约束文件的
HDL
包装器来复制顶级时钟约束。它仅用于子模块的时序验证。