
第五章 综合的约束与优化.docx
30页第五章 综合的约束与优化综合的一个很重要的概念就是:单纯的映射是远远不够的,更重要的是设计的整体优 化一方面设计工程师为综合规定必要的约束,例如对面积、速度、功耗的要求等,从而 使优化有所依据;另一方面选择合适的综合器是优化程度的决定性因素 同一个设计使用 不同的综合器所得到的优化结果可以相差3〜5倍第一节 综合约束5-1-1 概述综合约束是对可测量的电路特性所定义的设计目标,比如面积、速度和电容等如果 没有这些约束, Design Compiler 工具将不能有效地对你的设计进行最优化在对设计进行优化时, Design Compiler 支持两种类型的约束:• 设计规则约束 Design rule constraints )• 最优化约束( Optimization constraints )设计规则约束是固有的,在工艺库里定义;这些约束条件是为了保证设计 的功能正确性,适用于使用工艺库的每一个设计;可以使这些约束比最优化约束更为严格最优化约束是外在的,由设计者自己定义;最优化约束描述设计指标,在整个dc_shell 工作期间应用于当前设计;它们必须接近于现实情况Design Compiler 试图同时满足设计规则约束和最优化约束,但设计规则约束必须首 先被满足。
设计者可以以命令行形式交互式的指定约束或者在一个约束文件里指令约束图5.1显示了主要的设计规则约束和最优化约束,以及如何用 dc_shell界面命令来设置这些约束图5.1 Major Design Compiler Constraints第二节 设置设计规则约束这一节将讨论最常用的设计规则约束:• 转换时间( Transition time)• 扇出负载( Fanout load)• 电容( Capacitance )Design Compiler 给设计对象赋予属性来表示这些设计规则约束表 5.1列出了每 个设计规则约束对应的属性名表5.1 设计规则属性Design Rule ConstraintAttribute NameTransition timemax transitionFanout loadmax fanoutCapacitancemax_capacitance min capacitanceCell degradationcell degradationConnection classconnection class设计规则约束是工艺库里指定属性,你也可以明确地、随意地指定这些约束。
如果工艺库里定义了这些属性,在进行设计编译和生成约束报告时,Design Compiler暗中将它 们应用于使用那个库的任何设计你不能移走工艺库里定义的设计规则约束, 因为它们是 工艺的特定要求,但你可以使它们更为严格来适应你的设计 如果内在的和外在的设计规 则约束同时应用于一个设计或一条线,更为严格的值拥有优先权5-2-1 设置转换时间约束线的转换时间约束是对它的驱动管脚改变逻辑值的时序要求 转换时间是以工艺库数据为基础对于非线性延迟模型(NLDM),输出转换时间是输入转换和输出负载的函数通过对一个单元的每一个输出管脚赋予 max_transition属性,Design Compiler和 Library Compiler模拟转换时间约束在最优化过程中,Design Compiler试图使每一条 线的转换时间都小于max_transition属性值命令set_max_transition用来改变工艺库 里指定的最大转换时间约束通过对指定的对象设置 max_transition 属性,这条命令给 设计中所有线或与确定端口相连的线设置了最大转换时间比如,对设计adder中的所有线设置最大转换时间3.2,输入:dc_shell> set_max_transition 3.2 find(design,adder)利用remove_attribute 命令来取消set_max_transition 命令,比如,输入: dc_shell> remove_attribute find(design,adder)\max_transition5-2-2 设置扇出负载约束线的最大扇出负载是指这条线所能驱动的最大数目的负载。
通过赋予每一个输入管脚fanout_load属性和一个单元的每一个输出管脚max_fanout 属性,Design Compiler 和Library Compiler 模拟扇出限制扇出负载值不表示电容;它表示对整个扇出负载的数字上的贡献强加于一个输入管 脚的扇出负载不必是1.0库的开发者可以指定更高的扇出负载值来模仿内在的单元负载 效果将有那个管脚驱动的所有输入的fanout_load值相加,Design Compiler计算一个驱 动管脚的扇出为确定这个管脚是否满足最大扇出负载约束,Design Compiler将计算的 扇出负载值和管脚的max_fanout值相比较图5.2显示了一个小电路其中管脚X驱动两个负载,管脚A和管脚B如果管脚A的 fanout_load值为1.0,管脚B的fanout_load为2.0,那管脚X的整个扇出负载为3.0如果 管脚X有一个大于3.0的最大扇出,比如说16.0,那管脚X符合扇出约束图5.2 扇出约束实例在最优化时,Design Compiler试图满足每一个驱动管脚的扇出负载限制如果一个 管脚违反了扇出负载限制,Design Compiler会尽力改正这个问题(比如通过改变这个元 件的驱动能力)。
工艺库可能对整个库指定默认的扇出约束,或对库描述的一个单独的单元里特定的管 脚指定扇出约束为确定你的工艺库是否为扇出计算而模拟, 你可以对单元的输入管脚搜 索fanout_load 属性: dc_shell> get_attribute find(pin, my_lib/*/*) fanout_load用set_max_fanout命令对设计或输入管脚设置比工艺库里指定的更为保守的扇出约 束(用set_fanout_load命令对输出端口设置预期的扇出负载值)set_max_fanout命令通 过对指定对象设置max_fanout属性对设计中的所有线或指定的输入端口设置最大扇出负 载比如,要对设计adder中的所有线设置max_fanout为16,输入: dc_shell> set_max_fanout 16 find(design, adder)如果你用set_max_fanout命令和存在库的max_fanout属性,Design Compiler会尽力 满足更小的扇出限制用remove_attribute命令来取消set_max_fanout命令,比如,输入: dc_shell> remove_attribute find(design,adder) max_fanout5-2-3 设置电容约束转换时间约束并没有提供一个直接的方式来控制线的真实电容。
如果你想要直接控制 电容,利用set_max_capacitance命令来设置最大电容约束这个约束是完全独立的,因 此除了转换时间约束外,你还可以使用它通过给一个单元的输出端口或管脚赋予 max_capacitance属性,Design Compiler和 Library Compiler模拟电容约束把线电容和管脚电容相加,Design Compiler来计算输 出线的电容为确定线是否满足电容约束,Design Compiler把计算出的电容值与输出管 脚的max_capacitance值相比较比如,对设计adder中的所有线设置最大电容为3,输入:dc_shell> set_max_capacitance 3 find(design,adder)用remove_attribute 命令来取消 set_max_capacitance 命令,如,输入:dc_shell> remove_attribute find(design,adder)\max_capacitance你也可以用set_min_capacitance命令对输入端口或管脚设置最小电容第三节 设置最优化约束这一节中将讨论最常用的指定的最优化约束:•时序约束(Timing constraints )•面积约束(Area constraints)Design Compiler也支持功耗约束。
图5.3解释了定义最优化约束的一些常用的命令图5.3 Commands Used to Define the Optimization Constraints for Sequential Blocks5-3-1 设置时序约束时序约束指定了设计所要求的性能为设置时序约束1. 定义时钟2. 定义与时钟相关的I/O的时序要求3. 指定组合路径延迟要求4. 指定时序异常表5.2列出了设置时序约束的命令表5.2 设置时序约束的命令CommandDescriptioncreate clockDefines the period and waveform for the clock.set_clock_latency set_propagated_clock set clock uncertaintyDefines the clock delay.set_input_delayDefines the timing requirements for input ports relative to the clock period.set_output_delayDefines the timing requirements for output ports relative to the clock period.set_max_delayDefines maximum delay for combinational paths. (This is a timing exception command.)set_min_delayDefines minimumdelay for a combinational paths. (This is a timing exception command.)set_false_pathSpecifies false paths.(This is a timing exception command.)set_multicycle_pathSpecifies multicycle paths.(This is a timing exception command.)下面的部分将详细介绍三个步骤。
5-3-1-1 定义一个时钟对于一个同步设计,时钟周期是最重要的约束,因为它对设计中所有寄存器到寄存器 的路径加以约束1. 定义时钟的周期和波形利用create_clock来定义时钟的周期(-period选项)和波形(-waveform选项)如 果你没有指定时钟的波形,Design Compiler使用50%的占空循环比如,对端口 clk指定25兆赫和50%的占空循环,输入:dc_shell> create_clock clk -period 40 当你的设计包含多时钟时,密切注意这些时钟共同的基本周期 共同的基本周期是所 有时钟周期最小的共同的倍数比如,如果你有 10,15,20的时钟周期,那共同的基本周 期就为60定义你的时钟以使这个共同的基本周期是每一个时钟周期的最小的整数倍数。
