在理想情况下,将满足所有时序要求,并且占有面积最小的综合后的设计视为是完全优化的。
1 设计空间探索
分析设计速度和面积,并以最小的面积取得最快的逻辑过程被称为设计空间探索。在HLD固定的情况下,通过综合和优化以最小化面积和满足目标时序要求是设计者的责任。
如图所示,从DC90版本开始,先前的编译流程发生了改变,时序由于面积。这种性能可产生更好的时序结果,但对面积有一些影响。在以前的版本中面积最小化是自动处理的,而现在的版本则需要设计人员明确指定面积约束。
虽然延迟优先于面积,但给DC提供实际的约束是极其重要的。约束与面积之间的关系如下图所示,它强调了加紧约束时面积会显著的增加。
一个变换关系如下图所示,它描述了约束和通过设计的延迟之间的关系。由图可以看出,加紧约束则逻辑的实际延迟就会减少;而放松约束,则通过设计的延迟就会增加。左侧线的水平部分表示约束是如此的紧,以致进一步加紧约束并不会减少延迟。类似地,右侧线的水平部分表示完全放松约束,不会进一步增加延迟。
2 总的负松弛
在DC98版本之前,DC会基于“最差负松弛”(或WNS)优化逻辑。WNS定义为一个信号从起点到终点穿过某一路径的时序违例(或负松弛)。在编译过程中,违例减少模块总的违例,DC会一个个地减少WNS。因为这个原因,组合路径和指定时序关键段的临界范围被认为是必要的。
DC98不仅使延迟优先于面积,而且还以“总的负松弛”(TNS)为目标而不是WNS。如下图,这种情况下,WNS为-5ns,从RegA到RegB。TNS是所有每个终点的WNS的综合,并且在这种情况下等于-8ns,也就是到RegA的WNS加上到RegB的WNS。
使用这一方法有一些优点,其中主要是该方法比以前的方法产生更少的时序违例。另一个优点是,当使用自底向上的编译方法时,子模块的关键路径在顶层不会看做是关键的,减少整个设计的TNS能最小化这个影响。提供给时序驱动布图工具的违例路径的数目越少,能使得综合和布图间的迭代次数也越少。
虽然优先于WNS减少TNS可产生更少的时序违例,但它确实会对总面积产生影响。为了使面积优先于TNS,可用如下的命令:
dc_shell > set_max_area 0 -ignore_tns
3 编译策略
Synopsys建议采用如下的编译策略,它完全依赖于你的设计是如何组织和定义的,用户自己为设计选择合适的编译策略。
——自顶向下层次化编译方法;
——时间预算编译方法;
——Compile-characterize-write-script-recompile(CCWSR)方法;
——设计预算方法。
这些编译策略就不一一介绍了,只介绍自顶向上层次化编译方法,这是一种只需要顶层约束的编译策略。
使用自顶向上编译策略,读取整个设计来编译。基于设计规范,只在顶层应用约束和属性。优点是只需要顶层约束,由于在整个设计上优化而得到更佳的结果;缺点是需要长的编译时间,对子模块的增量改变需要完全地重新综合,如果设计包含多个时钟或生成的时钟,就不能很好地执行。
在进行优化之前,需要解析设计中子模块的多个实例。由于DC直到设计中存在的多个实例被解析后才允许编译,所以这是必须的一。
4 编译设计
compile命令进行设计或模块的编译。这一命令将HDL代码映射到指定的目标库的门。DC为这一命令提供了许多选项以完全控制设计的映射优化。
命令语法及常用的选项如下所述:
在默认的情况下,compile使用-map_effort medium,对大多数设计而言,它通常能得出理想的结果。只有当编译达不到目标时,才使用-map_effort high,这个选项使DC尽最大努力围绕关键路径进行逻辑的重新构造和重新映射来满足指定的约束,通常需要很长的编译时间。
由于-incremental_mapping选项只用在门级,因此它只用在初次编译之后(也就是说,设计已映射到工艺库中的门),这是一个非常有用和常用的选项,它通常用于改善逻辑的时序和修正DRC。在增量编译时,DC进行各种映射优化以改善时序。虽然Synopsys声称,在设计约束方面,设计结果不会变糟,且
可在增量编译时使用-only_design_rule选项,这避免了DC进行映射优化并只专注于修正DRC。
-no_design选项不常使用,如名称表示,它指示DC避免修正DRC。当不想为最初的几次编译浪费时间修正DRC违例时,可使用这一选项。
取得布图后时序收敛,有时有必要调整逻辑大小以修正时序违例。-in_place选项提供调整门大小的能力。
-scan选项使用DC的测试准备编译特性,使用这一特性使得DC在综合时考虑到扫描触发器的时序。这个过程产生时序正确的,优化的扫描插入逻辑。