eetop.cn DC教程

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 13

DC 综合教程

一、 综合的基本概念:

1.1 综合概述

通常所说的综合是指逻辑综合。逻辑综合就是使用综合工具将较高层次的 RTL 级描述转换为基


于目标工艺库和特定约束条件的门级网表的过程。

准备HDL文件
1.2 综合流程

综合包括转译(Translation)、映射(Mapping)、优化(Optimization)三个过程。 指定库文件
转译是指把电路的 HDL 描述转化为与工艺无关的功能块组成的逻辑电路的
过程。这个过程不包含任何重组和优化,也与制造工艺没有任何直接联系。
映射是把转译后得到的电路结构用特定目标工艺库中的单元来实现。这时得 读取设计
到的电路包含了具体的制造工艺参数。
优化则是综合工具根据设计者施加的时序和面积等约束条件对电路进行改
进的过程。综合工具根据设定的参数,采用一定的算法来使设计尽量满足设计要
定义设计环境
求。
这三个步骤是对综合过程的整体概述,而实际上综合包含很多的设置和操
作。基本的综合流程如右图所示。
设定设计约束
(1) 准备 HDL 文件。RTL 级的 HDL 描述。
(2) 指定库文件。为综合工具指定库文件,这些库文件主要包括目标库、
链接库和符号库等。在综合过程中,综合工具会自动从指定的库文
件中调用相关的单元和参数。 选择编译策略
(3) 读取设计。将设计文件中的设计读入计算机内存。一般综合工具既
可以读取 RTL 级的设计,也可以读取门级网表。
(4) 定义设计环境。在这一步中,要为综合工具指定设计的工作环境、 优化设计
负载、驱动和扇出等方面的参数。这些设置会直接影响综合的结果。
(5) 设定设计约束。综合工具一般都通过设计规则和优化约束来控制综
合过程。设计规则是设计必须满足的制造规范,一般由厂家工艺库
分析和解决
设计问题
提供。优化约束则主要是设计的时序和面积指标。设计约束设定会
受到编译策略的影响。
(6) 选择编译策略。选择优化层次设计时使用哪种编译策略。基本的编 保存结果
译策略有自顶向下(Top‐Down)的综合策略和自底向上(Bottom‐Up)
的综合策略两种,两者各有优缺点,要根据设计的实际情况来选择。
(7) 优化设计。这个过程是综合工具根据设定的约束和编译指令自动执行的。如果设计者设
定的约束或使用的编译方式不同,综合工具采用的优化方法和综合的最后结果也不同。
(8) 分析和解决设计问题。综合工具都具有强大的报告和分析功能。设计者可以通过工具产
生的报告来分析和解决设计问题,并改善综合结果。
(9) 保存结果。产生供后端设计使用的网表文件。
1.3 DC 的主要功能

(1) 使用用户指定的门阵列或者标准单元库产生速度快、面积小的 ASIC 设计。


(2) 把设计从一种工艺转换为另一种工艺。
(3) 在不同的负载、温度和电压条件下对时序、面积和功耗等设计指标作折中处理。
(4) 综合和优化有限状态机(FSM)。
(5) 支持网表输入,支持用来与第三方工具交互的网表或原理图输出。
(6) 自动创建和划分层次原理图。

二、文件准备

设计文件:RTL 级的代码文件。
工艺库文件:是指将 RTL 级的 HDL 描述映射到门级时所需的标准单元综合库。它是由芯片制造
商(Foundry)提供的,包含了物理信息的单元模型。通常芯片制造商提供的基本电路单元有:与非,
或非,非门等基本的逻辑单元;还有选择器,与或非,或与非等较复杂的组合逻辑,以及锁存器 (LATCH)
和触发器(DFF)等时序逻辑单元。DC 用到的工艺库是.db 或者是.lib 格式的,其中.lib 格式的文件是
可读的,通过此文件可以了解库的详细信息,比如说工作电压,操作温度,工艺偏差等等。.db 格式
的库是二进制的,不可读。Smic 0.13um 工艺库在服务器目
录”/net/sunb2a/export/home/rram/techlib/smic/smic013/sclib/aci/sc‐x/synopsys/”下可以找到,一般使
用 fast_1v32c0.db 和 slow_1v08c125.db 两个库文件。
脚本文件:DC 综合一般采用运行脚本的方式,把每一步操作对应的命令写在一个文件中,通过
source 这个文件就可以批量执行其中的命令。脚本中主要包括了
Setup 文件:该文件名为.synopsys_dc.setup,文件中一般包含初始化参数变量,设计工艺库名称
及路径等相关内容。(后面会具体讲该文件中的内容)

三、目录组织结构

做综合时各文件的存放目录没有严格的规定,但为了便于管理和查看,一般会分类放在不同的
目录下,下面是一个目录组织结构的范例:

四、操作步骤

Step1:启动 DC
首先进入 deller 服务器,打开一个 Terminal,输入命令:
source cshrc_eda
然后按照前面讲的目录结构建立文件夹,把所需要的文件放入相应的文件夹,进入工作目录 run,
这时在 terminal 中输入命令:
design_vision&
启动 DC 的图形界面,如果输入命令 dc_shell,可以启动 DC 的命令行界面。这里我们选择进入
图形界面。
——注:业界的人士比较青睐命令行界面,因为其所耗的资源少,并且将所用的命令写成综合脚本的形式,便于查
阅。但笔者更喜欢图形界面,因为看起来比较亲切,并且图形界面下也可以输入命令。
我们进入 DC 的图形界面如下所示:

此处可键入命令

Step2:执行 setup 文件
在 DC 窗口最下方的 design_vision>中可以输入命令,在此处输入
source ./.synopsys_dc.setup
回车
./代表当前目录
Step3:执行脚本文件
依次输入:
source ../script/pbist.def
回车
source ../script/pbist.read
回车
source ../script/pbist.run
回车
综合结束,在 report 和 export 文件夹中已经有了所需要的输出文件
Step4:查看综合后的电路图(可选)
下图所示为综合结束后的界面,红色虚线所示列出了整个设计的层次结构

如下图所示,右键单击某一个 hierarchy,选择 Schematic View


便得到了该 hierarchy 对应的综合电路图,如下图所示,通过电路图可以查看综合结果是否和自
己预期的电路符合。
五、setup 文件详解

.synopsys_dc.setup 文件中内容如下

以上语句中的 search_path, target_path, link_path, symbol_library,


veriogout_show_unconnected_pins 都是 DC 中已经定义的变量,我们只需通过 set 语句为其赋值,下
面详细介绍每一个变量。

搜索路径(search_path)

该变量给出了 DC 环境下读入的文件(包括库文件和设计文件)的搜寻路径。当读入没有给出路
径的文件时,DC 则按照 search_path 给出的路径搜索该文件。
如果 search_path 表示多个路径,用 list 将所有路径组合成一个集合。

目标工艺库(target_library)

是指将 RTL 级的 HDL 描述到门级时所需的标准单元综合库,它是由芯片制造商(Foundry)提供


的,包含了物理信息的单元模型。通常芯片制造商提供的基本电路单元有:与非,或非,非门等基
本的逻辑单元;还有选择器,与或非,或与非等较复杂的组合逻辑,以及锁存器 (LATCH)和触发器
(DFF)等时序逻辑单元。

链接库(link_library)

链接库可以是同 target_library 一样的单元库,或者是已综合到门级的底层模块设计,其作用如


下:在由下而上的综合过程中,上一层的设计调用底层已综合模块时,将从 link_library 中寻找并链
接起来。在这里,我们将链接库和目标工艺库设为同一个库。

符号库(symbol_library)

DC 在创建电路图时,用于标识器件,单元的符号库。

六、脚本文件详解

6.1 pbist.def

该文件定义了三个路径 SRC, REPORT, EXPORT 和一个信号的命名规则 BORG,这些名称不是 DC 预


定义的,而是用于自己定义的,是类似于宏定义。当在其它语句中引用这些宏定义时,需要在前面
加符号$。下面所示为该文件的内容
前三条语句定义的是路径,不再解释。最后一条语句尤其注意:如果 RTL 级代码中信号的命名
有大写字母,综合后的门级电路网表中相应的信号名称也会是大写,将这样的网表导入 Astro 做布局
布线后得到的版图文件再导入 Calibre 中做 LVS 会有问题。所以需要在综合的阶段将信号中的大写字
母全部改为小写。define_name_rules 即定义了这样一个规则,将信号名称中的大写字母都用对应的
小写字母代替,后面会使用该规则。

6.2 pbist.read

该文件为读取原始的设计文件,内容如下

analyze 语句读入设计文件,‐format 选项的值为 verilog(源代码用 verilog 编写)或 vhdl(源代


码用 vhdl 编写),elaborate 语句建立一个 design,design 的名字为设计文件中 module 的名字。一般
最后读入顶层模块所在的文件,这样执行完所有的语句后,current_design 就是顶层模块对应的
design,这也是后面综合的对象。
6.3 pbist.run

6.3.1 设定设计环境

在 DC 对设计进行综合和优化前,需要定义设计环境。设计环境是指设计在正常工作时的温度、
电压、驱动、负载等一系列外部属性。它主要包括三个方面:工作条件(Operation Conditions)、线
负载模型(Wire Load Model)和系统接口特性(System Interface Characteristics)。
1、 指定工作条件
工作条件包括芯片的工作温度、工作电压、工艺误差和 RC 树模型。这几个因素的变化对电路的
性能有很大影响。DC 在进行综合和时序分析时将综合考虑这些因素的最坏和最好情况。
大多数工艺库中都预先定义了一套工作条件参数。如果在设定工作条件之前想了解工艺库总定
义的工作条件概况,可以用 report_lib 命令来查看。例如,我们要查看 slow_1v08c125.db,可输入如
下命令:
read_file slow_1v08c125.db
report_lib slow_1v08c125
得到库文件报告如下所示
****************************************
Report : library
Library: slow_1v08c125
Version: D‐2010.03‐SP2
Date : Thu Sep 16 12:23:05 2010
****************************************
……
Operating Conditions:

Operating Condition Name : slow_1v08c125


Library : slow_1v08c125
Process : 1.00
Temperature : 125.00
Voltage : 1.08
Interconnect Model : balanced_tree
一般说来,电压越低,操作温度越高,工艺偏差系数越大,产品速度越慢,反之,速度越快。
当电压,温度和工艺偏差有波动的时候,乘以系数 K 因子来模拟这种影响计算延时。Interconnect
Model 定义了环境的互连模型,通过定义这个值选取适当的公式来计算互连线的延迟。
有些工艺库会包含几种工作条件下的工艺参数,通常有 max, type, min 三种类型,代表操作环境
为最坏(worst),典型(type),最好(best)三种情况。从上面的库文件报告可以看出,该库文件只包含了
一种操作条件,即 slow_1v08c125。一般在产生 setup timing report 时,DC 使用最坏情况下的操作条
件,在产生 hold timing report 时,使用最好情况下的操作条件,如果在这两种情况下都可以满足时
序要求,则在典型情况下也可以满足时序要求。
设置操作条件使用 set_operating_conditions 命令,如果一个库中就包含了最好和最差的操作条
件,设置方式如下:
set_operating_conditions –library name_of_lib –min bestcase –max worstcase -analysis_type bc_wc
name_of_lib 代表库文件的名字,bestcase 代表最好情况的操作条件名,worstcase 代表最坏情况
的操作条件名。-analysis_type bc_wc 用于告诉 DC 在分析 setup violations 时只采用最差情况下的操
作条件,在分析 hold violations 时只采用最好情况下的操作条件。
如果不同的操作条件包含在不同的库中,设置方式有所不同,如下所示:
set_min_library slow_1v08c125.db -min_version fast_1v32c0.db
set_operating_conditions -min fast_1v32c0 -max slow_1v08c125 -analysis_type bc_wc
set_min_library 命令会在两个库之间建立 minimum/maximum 关系,该命令的使用方式如下所示:
set_min_library max_library ‐min_version min_library
max_library 用于进行最大延时分析,min_library 用于最小延时分析。不要在这个命令中包含库
的路径,库的路径通过 search_path 设定。
2、 线负载模型
在实际电路中,导线都具有一定的电阻和电容,使得信号在导线上传播时均有一定的延时。在
深亚微米设计中,导线互连延时对信号造成的影响是不容忽略的。线负载模型可以用来估算电路中
导线长度和扇出数对导线电阻、电容和面积的影响。DC 会利用这些物理信息来计算导线的延时和电
路的速度。线负载模型是由芯片制造商根据其工艺的统计信息建立的,模型包括单位长度导线的面
积,电容和电阻系数,以及用来估计导线长度的“扇出—长度”表。
在没有采用线延时反标的情况下,DC 都会使用线负载模型来估计导线长度和延时。通常,DC
会根据如下三个因素来决定当前设计的线负载模型选择:(1)用户指定;(2)根据设计的面积自动
选择; (3)工艺库中的缺省模型。这三个因素中(1)的优先级最高, (3)的优先级最低。如果三个
条件均不存在,DC 在综合时就不会使用线负载模型,这样我们就会得到理想情况下的时序信息。
要 查 看 工 艺 库 中 已 经 定 义 的 线 负 载 模 型 可 使 用 report_lib 命 令 , 如 下 图 为 工 艺 库
slow_1v08c125.lib 中定义的线负载模型,这个库不支持基于面积的线负载模型自动选择,需要我们
使用 set_wire_load_model 命令手动设置。
Wire Loading Model:

Name : smic13_wl10
Location : slow_1v08c125
Resistance : 8.5e‐08 ——单位长度电阻
Capacitance : 0.00015 ——单位长度电容
Area : 0.7 ——单位长度面积
Slope : 66.667 斜率(长度/扇出)
Fanout Length Points Average Cap Std Deviation
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
1 66.67

Name : smic13_wl20
Location : slow_1v08c125
Resistance : 8.5e‐08
Capacitance : 0.00015
Area : 0.7
Slope : 133.334
Fanout Length Points Average Cap Std Deviation
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
1 133.33

Name : smic13_wl30
Location : slow_1v08c125
Resistance : 8.5e‐08
Capacitance : 0.00015
Area : 0.7
Slope : 200.001
Fanout Length Points Average Cap Std Deviation
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
1 200.00

Name : smic13_wl40
Location : slow_1v08c125
Resistance : 8.5e‐08
Capacitance : 0.00015
Area : 0.7
Slope : 266.668
Fanout Length Points Average Cap Std Deviation
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
1 266.67

Name : smic13_wl50
Location : slow_1v08c125
Resistance : 8.5e‐08
Capacitance : 0.00015
Area : 0.7
Slope : 333.335
Fanout Length Points Average Cap Std Deviation
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
1 333.33
在层次化设计中,DC 用顶层(Top)、包围(Enclosed)和分段(Segmented)三种模式来确定跨
越层次边界导线的线负载模型。三种模式线负载模型选择示意图如下所示:

在顶层模式中,DC 会将顶层模块及其所有子模块的线负载模型全部设置为相同,在设计需要扁
平化(Flatten)时可以考虑采用此模式。包围模式是指 DC 会选择包含导线的最小设计的线负载模型
作为导线的线负载模型。如果该最小设置没有指定线负载模型,则 DC 会向更高一层追溯,直到找到
为止。在同一设计中的单元放置在一段连续区域时,包围模式比顶层模式更精确一些。选择分段模
式时,DC 会将跨越层次边界的导线按所在区域分为数段,为每段选择相应的线负载模型。设置线负
载模式使用命令 set_wire_load_mode。
3、 系统接口特性
电路与外部系统的接口特性包括以下几个方面: (1)输入端口的驱动特性;(2)输入和输出端
口的负载;(3)输出端口的扇出负载。
设定输入端口的驱动:在 DC 中,驱动能力用驱动电阻值表示,阻值越小驱动能力就越强。如果
输入端口采用缺省驱动设置为 0,则表示有无限大的驱动能力。DC 中有 set_drive 和 set_driving_cell
两条命令来设定端口的驱动。若对同一端口多次使用这两条命令,则后面的设定将覆盖前面的设定。
在知道端口的驱动元件时,可以用 set_driving_cell 为该端口设定驱动。set_drive 命令则是直接设定
端口的驱动电阻值。在顶层设计中,由于输入端口没有实际的库元件驱动,应使用 set_drive 命令。
设定输入和输出端口负载:在缺省情况下,DC 假定输入输出端口的容性负载为 0。可以用 set_load
命令设定输入、输出端口的容性负载值。利用这个设置值,DC 可以为输出端口选择适当大小的驱动
能力,也可以用来计算输入端口的延时。
设定输出端口的扇出负载:在 DC 中可以用 set_fanout_load 命令设定输出端口的扇出负载,它
描述了输出端口外部的扇出负载总和。扇出负载不同于负载,它是一个无量纲的数值。负载则是指
电容值的大小。DC 会尽量保证输出端口的扇出负载数加上设计内部与该端口相连的负载数的综合小
于最大扇出数。

6.3.2 设计规则约束

设计规则是由芯片制造商提供的关于工艺的一套规则,反映了该工艺对设计的要求。要使设计
能够被正确、完整的制造出来,设计工程师就必须遵循制造商的设计规则。设计规则通常已包含在
工艺库中,一般不需要另外定义。如果需要更严格的设计规则约束,可以自己手工定义。DC 支持下
面几种设计规则约束:(1)转换时间(Transition Time);(2)扇出负载(Fanout Load);(3)电容
(Capacitance);(4)单元退化(Cell Degradation);(5)互连类(Connection Class)。
在一般的设计中,需要人工调整的设计规则约束主要是最大转换时间(max_transition)和最大
扇出负载(max_fanout),其他的约束一般采用库中的缺省值就可以了。下面详细说明 max_transition
和 max_fanout 的含义和设定方法。
(1) 设定 max_transition。连线的转换时间是其驱动引脚的逻辑电平变化所需要的时间。DC 计算
转换时间的方法是用驱动引脚的驱动强度乘以它驱动的连线上的所有容性负载的综合。设定
最大转换时间的命令时 set_max_transition。设定的对象可以是端口,也可以是整个设计。这
个值一般设为周期的 10%,在综合的时候对于负载过大的信号 DC 会通过插入 buffer 降低该
信号的负载。
(2) 设定 max_fanout。从前面我们已经了解到,连线的扇出负载并不是一个电容值,而是指它所
驱动的所有输入引脚的扇出负载的总和。一个输入引脚的扇出负载在一般情况下为 1,但工
艺库的开发人员也可能为输入引脚指定更高的扇出负载值,以模拟内部单元的扇出效应。设
定 max_fanout 使用 set_max_fanout 命令。max_fanout 经验值一般设为 20,即一个门的输出
端最多驱动 20 个输入引脚(如果每个引脚的扇出负载为 1 的话)。

6.3.3 设计优化约束

设计优化约束一般包含时序约束和面积约束两个方面的内容,它描述了设计的目标。DC 在进行
综合时会根据这些约束来优化设计。由于这些约束的设置直接决定了综合结果的好坏,因此工程师
们必须实际灵活地设置这些约束。
1. 时序约束
时序约束(Timing Constraints)也称性能约束,主要包括时钟定义,组合路径延时和输入输出延
时等几个方面。
(1) 定义时钟。首先要定义一个时钟源,即时钟的周期,引脚和名称,常用到的命令为:
create_clock ‐period 5 ‐name sys_clk [get_ports sys_clk]
如果设计中有内部产生的时钟,如时钟分频器或者倍频器,定义时钟时要用到命令:
create_generated_clock。
定义了时钟以后,要对时钟设置dont_touch属性,禁止往时钟上加入缓冲。相应的命令是:
set_dont_touch_network [get_clocks sys_clk]
一般在DC综合阶段不插入时钟树,而是将时钟网络当作理想的。因此还应设置时钟输入端口的驱
动能力为无限大,使用如下命令:
set_drive 0 [get_clocks sys_clk]
到后面布局布线的时候会专门有一步时钟树综合,到那时会在时钟信号上插入buffer,从而提高
时钟信号的驱动能力。
与时钟网络类似,复位信号也需要特殊的设定。reset信号一般采用“异步复位,同步置位”
的方式,即先将reset信号经过触发器同步,然后将同步信号作为后面触发器的异步复位信号,
电路如下图所示:

对reset信号,约束如下所示:
set_dont_touch_network [get_ports reset]
set_dont_touch_network [get_pins ‐hierarchical reset_int]
set_drive 0 [get_ports reset]
set_ideal_network [get_nets ‐hierarchical reset_int] ‐no_propagate
(2) 输入输出端口的时序设定。首先看下图。图中设计DESIGN是需要综合的电路,FF1和FF2是两
个正沿触发的触发器,C1、C2、C3是组合逻辑电路。我们知道在实际电路中信号经过组合逻
辑和时序逻辑单元时都会存在延时。在工艺库中,一般已经定义了这些延时,包括触发器的
数据传递延时TDF、触发器的建立时间TSETUP和其它各种门延时等。对于图中的触发器FF1要满
足建立时间条件就必须有TC1+TDIN<TCLK‐TSETUP,这里TC1是C1块的延时,TDIN是信号在DESIGN外
的传播延时。在缺省情况下,DC会认为输入端的信号会在零时刻到达,而实际上TDIN是存在
的。因此,为了更准确地设置FF1的建立时间条件,就应该进行输入延时的设定。同样,对
于输出而言,由于DC并不知道DOUT驱动的下一单元的相关时序信息,也应为其设置一个输
出延时。
设置输入端口延时的命令是set_input_delay,设置输出延时的命令是set_output_delay。
一般情况下,若不知道外部电路对输入延时的要求,可设输入延时为整个时钟周期的40%。
而且在同步设计中,输出一般应由寄存器输出,在这种情况下,设计可不加输出延时约束。
如果有组合逻辑的输出端口,则在相应的端口应设置输出延时,这时应首先估计信号输出后
到下一个寄存器有多长时间的延时,用时钟周期减去这个时间就是留给图中C2的延时,可以
将输出延时设为这个值。
(3) 时序例外。
对于reset信号和跨越时钟域的信号,一般要将其设置为伪路径,DC不对其进行时序约束和检
查,命令如下所示:
set_false_path ‐from [get_ports reset]
set_false_path ‐from [get_clocks shift_clk] ‐to [get_clocks sys_clk]
set_false_path ‐from [get_clocks sys_clk] ‐to [get_clocks shift_clk]
2. 面积约束
进行面积约束一般使用如下命令:
set_max_area 0
DC会在满足时序要求的前提下,尽量减小电路面积。

七、 分析综合报告

综合结束后,在 report 文件夹中会有生成的综合报告,其中最重要的是关于时序的报告。其中


timing_setup.rpt 报告的是各路径的 setup time 的情况,timing_hold.rpt 报告的是各路径的 hold time
的情况,所有的 timing 上的 violation 都会在 con_violations.rpt 中报告。
在 DC 之后,hold time 的 violation 可以暂时忽略,并且这种 violation 也不会影响在 modelsim 中的后
仿。在后面 Astro 布局布线阶段会重新插入 buffer 来解决这些 hold time 的 violation。
Setup time 的 violation 一定要解决,这种 violation 会直接导致后仿通不过。产生这种 violation 一般
会有两种原因:1)clock uncertainty 设置过大,一般这个参数设为周期的 10%就可以了。2)路径过
长,如果出现这种问题就只能修改原来的设计,以使路径变短。这要求我们在写 RTL 级代码的时候
要清楚我们设计的电路大致是什么样的,一条路径大概会经过多少 gate,避免过长的路径出现。一
般要求一条路径不要超过 20 个 gate。
另外用于时钟同步的触发器上的时序 violation 可以忽略,因为这种触发器允许出现亚稳态。

八、结论

以上概述了 DC 的基本使用方法。当设计的电路更复杂,例如采用了多个时钟域、门控时钟等技术时,
还需要更高级的约束命令,这些命令可在遇到具体问题时再做探讨。最后强调一点,DC 自带的帮助
文档包含大量信息,是最好的教程,一定要予以重视。

You might also like