Professional Documents
Culture Documents
eetop.cn DC教程
eetop.cn DC教程
eetop.cn DC教程
一、 综合的基本概念:
1.1 综合概述
准备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 的主要功能
二、文件准备
设计文件: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:查看综合后的电路图(可选)
下图所示为综合结束后的界面,红色虚线所示列出了整个设计的层次结构
.synopsys_dc.setup 文件中内容如下
搜索路径(search_path)
该变量给出了 DC 环境下读入的文件(包括库文件和设计文件)的搜寻路径。当读入没有给出路
径的文件时,DC 则按照 search_path 给出的路径搜索该文件。
如果 search_path 表示多个路径,用 list 将所有路径组合成一个集合。
目标工艺库(target_library)
链接库(link_library)
符号库(symbol_library)
DC 在创建电路图时,用于标识器件,单元的符号库。
六、脚本文件详解
6.1 pbist.def
6.2 pbist.read
该文件为读取原始的设计文件,内容如下
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:
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会在满足时序要求的前提下,尽量减小电路面积。
七、 分析综合报告
八、结论
以上概述了 DC 的基本使用方法。当设计的电路更复杂,例如采用了多个时钟域、门控时钟等技术时,
还需要更高级的约束命令,这些命令可在遇到具体问题时再做探讨。最后强调一点,DC 自带的帮助
文档包含大量信息,是最好的教程,一定要予以重视。