本节和下一节将讨论设计环境及其约束的过程,描述了各种广为使用的DC命令和其他可用于综合复杂ASIC设计的约束。请注意介绍的是最常用的选项,建议参考DC使用手册以查询特定命令的所有可用选项的列表或在dc_shell中通过man指令查询。
为了从DC得到最佳结果,设计人员应通过描述设计环境、目标和设计规则来系统地约束其设计。约束可包括时序和/或面积信息,通常由设计规范给出。DC运用这些约束条件进行综合并且试图优化设计达到最终目标。
设计环境
假设设计已经完成了划分、编码和仿真,下一步就是要描述设计环境,这一步需要为设计定义工艺参数、I/O端口属性和线载模型。下图说明了用于描述设计环境的基本DC命令。
set_min_library是DC98版本引进的一个新命令,该命令允许用户同时指定最坏情况和最佳情况的库。
set_min_library <max library filename> -min_version <min library filenames>
上一命令可用于修正保持时间违例或用于合理优化。
set_operating_conditions描述了设计的工艺、电压及温度条件。Synopsys库包含这些条件的描述,通常描述为WORST、TYPICAL和BEST情况。WORST情况工作条件通常用于布图前综合阶段,因此以最大建立时间优化设计。BEST情况通常用于修正保持时间违例。
set_operating_conditions <name of operating conditions>
有可能用WORST和BEST情况同时进行优化设计。如下所示,在上述命令中使用-min和-max选项进行优化。这对修正设计保持时间违例十分有用。
set_operating_conditions -min BEST -max WORST
set_wire_load_mode命令用来为DC提供估计的线载信息,反过来DC使用线载信息把连线延迟建模为负载的函数。通常Synopsys工艺库中列出了许多线载模型,每个模型代表一个特定大小的模块。
set_wire_load_mode -name <wire-load model>
set_wire_load_mode定义了三种同建模连线负载相关的模式,分别为top、enclosed和segmented。
top模式定义层次中的所有连线将继承和顶层模块同样的线载模型。exclosed指定所有连线(属于子模块的)将继承完全包含该子模块的模块线载模型。例如设计者综合完全被模块A包含的子模块B和C,则子模块B和C会继承为模块A定义的线载模型。segmented用于跨越层次边界的连线。在上例中,子模块B和C继承特定于他们的线载模型,而子模块B和C间的连线(在模块A)会继承为模块A指定的线载模型。
set_wire_load_mode <top | enclosed | segmented>
set_drive和set_drving_cell用于模块的输入端口。set_drive命令用于指定输入端口的驱动强度,主要用于模块建模或芯片端口外驱动电阻。0值表示最高驱动强度且通常用于时钟端口。set_driving_cell用于对输入端口驱动单元的驱动电阻进行建模,这一命令将驱动单元的名称作为其参数并将驱动单元的所有设计约束应用于模块的输入端口。
set_load将工艺库中定义的单位上的容性负载设置到设计的指定连线或端口。它主要用于在布图前综合过程中设置模块输出端口的容性负载和往连线上反标注布图后提取的电容信息。
设计规则或DRC由set_max_transition、set_max_fanout和set_max_capacitance命令组成。这些规则通常在工艺库中设置并且由工艺参数决定。DRC命令可用于输入端口、输出端口或current_design,此外,也可以使用这些命令修改参数:
set_max_transition
set_max_capacitance
set_max_fanout
参考文献: