DC学习-第七章

本章详细介绍了Design Compiler中的设计规则约束和优化约束,包括最大过渡时间、最大散出、最大电容等,阐述了如何设置和管理这些约束以优化设计,以及约束的优先级和冲突解决策略。此外,还讲解了如何使用不同命令来定义和报告约束,以及在层次化设计中如何传播约束。
摘要由CSDN通过智能技术生成

7定义设计约束
约束是一种声明,这种声明用可量化的电路特性来定义你的设计目标,这些特性包括时序,面积和电容。没有约束,Design Compiler工具就无法有效的优化你的设计。

在本章中,你会学到以下东西:
 Design Compiler约束类型
 设计规则约束
 优化约束
 管理约束优先级
 报告约束
 层次化设计中传递约束
Design Compiler约束类型
当Design Compiler优化你的设计时,它会使用到两种约束:
设计规则约束
这种约束是隐形约束;technology library定义了这些约束。这些约束对于一个设计能正常的工作是必须存在的,而且她们会应用到所有使用其库的设计中。你可以让这些约束比优化约束更严格。
优化约束
这种约束是显示约束;你必须定义它们。优化约束应用于当前运行的dc_shell会话的设计中并且表示了设计的目标。这些必须是和现实情况一样。
Design Compiler会尝试同时去满足这两种约束,但是设计规则约束的优先级更高。
Design Compiler计算两个成本函数:一个是设计规则约束,另一个是优化约束。在门级约束中,如果设计发生了改变,Design Compiler会报告每个成本函数的值。
你可以在命令行交互式的指定约束或者在约束文件中指定约束。
图7-1 显示了主要的Design Compiler规则约束和优化约束和设置约束的dc_shell接口命令。
图7-1 主要的Design Compiler约束

注意:
如果你使用Synopsys的功耗编译工具,max_dynamic_power和max_leakage_power是优化约束。为了使用这些约束,你需要一个功耗优化的license和支持功耗的库特性。
设计规则约束
设计规则约束反映了你的设计必须遵守的工艺规范限制,这样设计才能如预期的工作。设计规则约束设计的线网但是它和technology库的单元的引脚是相关的。绝大部分technology库指定了默认的设计规则。Design Compiler不能违反设计规则约束,即使违反了优化约束也不能违反设计约束。你可以设置更严格的设计规则,单万万不可使用更放松的设计规则。
设计规则约束包含了
 最大过渡时间
 最大散出
 最大及最小电容
 单元解构
你无法移除technology库设置的max_transitiong,max_fanout,max_capacitance和min_capacitance属性,因为这些事technology的必须属性,但是你可以为这些属性设置更严苛的值。如果为一个设计或者端口既有隐形的也有明确地值,那么更严格的那一个值会被使用。你可以移除你设置的值。
设计规则成本函数
Design Compiler帮助你修正设计规则违例。如果有多个违例,Design Compiler会优先修复优先级最高的违例。如果可能,它会评估并选择可以减少其他设计规则的违例的替代方案。Design Compiler使用和延时违例类似的方法。
图7-2显示了设计规则的成本函数方程
图7-2 设计规则成本方程

在编译报告中,设计规则成本部分报告了一个设计的设计规则约束的成本函数。
最大过渡时间
最大过渡时间是一个设计规则约束。一根连线的最大过渡时间是其驱动引脚改变逻辑值所需的最长时间。许多technology库包含了一个引脚的最大过渡时间的限制,该限制为使用该库的设计创建了隐含的过渡时间限制。
Design Compiler尝试让每个线的过渡时间少于max_transition的值,例如,通过在驱动门电路的输出时插入buffer。max_transitiong值是随着单元的操作频率变化的。
使用set_max_transitiong命令可以修改或者增加technology库的隐含的过渡时间值。
如果定义了库的max_transition和设计的max_transition的属性,Design Compiler会尝试去达到更小(更严格)的值。
如果你的设计使用多个technology库并且每个库都有一个不同的默认max_transition值,Design Compiler会对整个设计使用其中最小的max_transition值。
定义最大过渡时间
set_max_transition命令为时钟组,端口,或者设计的max_transition属性设置指定的值。在编译过程中,Design Compiler试图保证线网的过渡时间小于该指定值。
例子
设置一个加法器最大过渡时间为3.2,输入下面的命令:

使用remove_attribute命令可以撤销set_max_transition命令。输入下面命令:

更多详细的命令信息,请参考man page。
指定基于时钟的最大过渡时间
max_transition的值是随着一个单元的操作频率变化的。一个单元的操作频率就是其寄存器驱动一些列逻辑的最高时钟频率(时钟频率是使用creat_clock命令来定义的)。
对于一个有多个时钟域的设计,你可以使用set_max_transition命令来为指定的时钟组的引脚设置max_transition属性。
Design Compiler遵守以下规则来决定max_transition的值:
 当为一个设计或者端口和一个时钟组设置max_transition属性,其中最严格的约束会被使用到。
 如果多个时钟启动相同的路径,会使用最严格的约束。
 如果在technology库中指定了max_transition属性,工具会自动去尝试在编译期间来满足这些约束。
例如,下面的命令为所有属于Clk时钟组的pins设置max_transition的值为5:

最大散出
最大散出是一个设计规则约束。绝大部分technology库为驱动pins设置散出约束,为使用该库的设计中的每个驱动pin创建一个隐含的散出约束。
你可以为整个库设置一个更保守的输出约束或者为单个单元的库描述指定的pins定义散出约束。
如果已经有一个库散出约束并且你又指定了一个max_fanout的属性,Design Compiler会尝试去满足其中的更小(或者更严格)的值。
Design Compiler通过将fanout_load属性和每一个输入pin相关联和将max_fanout属性和单元上每一个输出(驱动)pin相关联来为散出限制建模。图7-3显示了这些散出属性。
图7-3 散出负载和最大散出属性

为了评估一个驱动引脚的散出(譬如图7-3的X),Design Compiler会计算所有由X驱动的输入端的fanout_load属性的和,并将该数目和存储于驱动引脚X的max_fanout属性的数目对比。
 如果散出负载的和不大于max_fanout值,由X驱动的线就是可用的。
 如果由X驱动的线是不可用的,Design Compiler可能会通过选择更高驱动力的部件来试图让该线有效。
最大散出计算示例
图7-4 显示了如何计算最大散出
图7-4 最大散出的计算

你可以通过如下的方式来为每个驱动pin和输入端口设置最大散出:

Design Compiler通过对比指定的max_fanout属性的值和散出负载,来检查最大散出约束是否满足驱动pin Z的要求。
在上图所示的情况下,设计时满足约束的。

驱动单元(U3)的散出负载没有必要设成1.0。库开发者可以指定一个更高的散出负载(例如,2.0)来为内部单元散出效果建模。
你也可以为一个输出端口(OUT1)设置散出负载来为外部散出效果建模。
散出负载是一个无量纲数,而不是电容。它代表着对总有效散出的数值上的贡献。
定义最大散出
set_max_fanout命令为列出的输入端口设置最大允许散出负载。set_max_fanout命令为列出的对象设置max_fanout属性。
使用remove_attribute命令可以撤销为一个输入端口或者设计设置的最大散出值。例如,

更多信息,请参考man page。
为输出端口定义期望的散出
set_fanout_load命令为列出的输出端口设置期望的散出负载值。
Design Compiler将散出值添加到所有其他的负载中,这些负载是驱动port_list中端口的pin的负载,并且试图使所有的负载总和少于pin的最大散出负载。
使用remove_att

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值