DC使用全书(Design_Compiler)

更新时间:2024-05-21 03:07:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

DC学习----第一章 基本概念

作者:未知 时间:2010-08-15 15:02:50 来自:网络转载 1.1 启动文件

启动文件用来指定综合工具所需要的一些初始化信息。DC使用名为“.synopsys_dc.setup”的启动文件,启动时,DC会以下述顺序搜索并装载相应目录下的启动文件: 1)、DC的安装目录; 2)、用户的home目录; 3)、当前启动目录。

注意:后装载的启动文件中的设置将覆盖先装载的启动文件中的相同设置。

下面是一个DC启动文件的实例,它包含了几乎所有重要的设置,下文将结合该实例解释启动文件中各项设置的具体含义。 例1-1(一个DC启动文件):

search_path= search_path + {“.”, synopsys_root + “/dw/sim_ver” }

search_path=

search_path

+

{ “~/risc32/synthesis/libraries” } target_library={ tcb773stc.db } synthetic_library={dw_foundation.sldb}

link_library = { “*”, dw_foundation.sldb, tcb773stc.db } symbol_library = { tcb773s.sdb }

synlib_wait_for_design_license =

{\ alias rt “report_timing” designer= XXXXX

company= “ASIC Lab, Fudan Univ.” search_path指定了综合工具的搜索路径。

target_library为综合的目标库,它一般是由生产线提供的工艺相关的库。

synthetic_library是综合库,它包含了一些可综合的与工艺无关的IP。dw_foundation.sldb是Synopsys提供的名为Design Ware的综合库,它包含了基本的算术运算逻辑、控制逻辑、可综合存储器等IP,在综合是调用这些IP有助于提高电路性能和减少综合时间。 link_library是链接库,它是DC在解释综合后网表时用来参考的库。一般情况下,它和目标库相同;当使用综合库时,需要将该综合库加入链接库列表中。

symbol_library为指定的符号库。

synlib_wait_for_design_license

DesignWare-Foudation的许可(license)。

alias语句与UNIX相似,它定义了命令的简称。

最后的designer和company项则表明了设计者和所在公司。 另外,在启动文件中用符号 “/*” 和 “*/” 进行注释。 1.2 设计实体

在DC中,总共有8种设计实体:

? 设计(Design):一种能完成一定逻辑功能的电路。设计中可以包含下一层的子设计。

单元(Cell):设计中包含的子设计的实例。?

? 参考(Reference):单元的参考对象,即单元是参考的实例。 端口(Port):设计的基本输入输出口。? ? 管脚(Pin):单元的输入输出口。 连线(Net):端口间及管脚间的互连信号。? ? 时钟(Clock):作为时钟信号源的管脚或端口。 库(Library):直接与工艺相关的一组单元的集合。? 1.3 寻找设计实体

在DC中使用find命令寻找设计实体,其语法为: find <实体类型> <名称列表> -hierarchy

? <实体类型>:上节所述的8种类型

? <名称列表>:用来匹配的关键词,其中可带 “*” 统配符 ? -hierarchy:指令DC搜索所有设计层次 例1-2(find命令的使用): find (cell, *U*) find (net, “*”)

find (design, {A_*, B_*} -hierarchy)

另外,使用all_inputs()和all_outputs()可以得到设计所有的输入端口和输出端口。 1.4 编译器指示语句

有时,可以利用HDL描述中的一些特定的注释语句来控制综合工具的工作,从而弥补仿真环境和综合环境之间的差异,这些注释语句称为编译器指示语句(Compiler Directives)。 1.4.1 Verilog编译器指示语句 1) translate_off/ translate_on

这组语句用来指示DC停止翻译 “//synopsys translate_off”之后的Verilog描述,直至出现 “//synopsys translate_on”。当Verilog代码钟含有供仿真用的不可综合语句时,这项功能能使代码方便地在仿真工具与综合工具之间移植。

例1-3(translate_off/ translate_on指示语句的使用): //synopsys translate_off /*仅供仿真用语句 ?? */

//synopsys translate_on /*可综合语句 ??

*/

2) parallel_case/ full_case

DC可能使用带优先级的结构来综合Verilog的case语句,为避免这种情况,可以使用“//synopsys parallel_case”指示DC将case语句综合为并行的多路选择器结构。

例 1-4(parallel_case指示语句的使用): always @ (state) begin

case (state) //synopsys parallel_case 2’b00: new_state = 2’b01; 2’b01: new_state = 2’b10; 2’b10: new_state = 2’b00; default: new_state = 2’b00; endcase end

另外,Verilog允许case语句不覆盖所有可能情况,当这样的代码由DC综合时将产生锁存器。为避免这种情况,可以使用 “//synopsys full_case”指示DC所有可能已完全覆盖。 例 1-5(full_case指示语句的使用): always @ (sel or a1 or a2) begin

case (sel) //synopsys full_case

2’b00: z = a1; 2’b01: z = a2; 2’b10: z = a1 & a2; endcase end

1.4.2 VHDL编译器指示语句 1) translate_off/ translate_on

作用同Verilog,注意需要使用符合VHDL语法的注释: --synopsys translate_off --synopsys translate_on 也可以使用:

--pragma translate_off --pragma translate_on

需要注意的是,在VHDL中使用了以上编译指示语句后,DC仍会对translate_off/on之间的描述进行语法检查,若想避免这一点,可以改变以下变量的值:

hdlin_translate_off_skip_text = true 2) synthesis_off/ synthesis_on

其作用和语法均类似于translate_off和translate_on,只是它的作用不受上述变量控制。 DC学习---第二章 设计入口

作者:未知 时间:2010-08-15 15:04:19 来自:网络转载 2.1 软件的启动

在UNIX下执行dc_shell即可启动DC的命令行界面,执行design_analyzer& 即可启动相应的图形界面。启动以后的图形界面如图2-1所示。

在图形界面中若需要执行命令行,可以用Window菜单打开命令行功能,如图2-2所示。

Setup->Command

在软件启动时,启动文件中所定义的变量均已加载,若希望改变其他变量的值,可以在Setup->Variable中进行,如图2-3所示。

2.2 设计的读入

设计的读入有两种方法:analyze + elaborate和read。

2.2.1 analyze + elaborate

analyze命令用以分析、翻译RTL代码,并将中间结果存入指定的库中。其语法为: analyze

-library <库名称> -format <文件类型> <文件名列表>

-library? <库名称>:指定中间结果所存放的库,即UNIX下的一个目录,缺省为当前目录(WORK)

-format? <文件类型>:RTL源文件的类型,即Verilog或vhdl ? <文件名列表>:所有需要分析的源文件名,若有多个文件,则用“{}”括起

例 2-1 (将直接数字频率合成器的所有设计源文件读入lib1库中):

hdlin_enable_presto = false /*禁止Presto编译器功能*/ define_design_lib lib1 -path “./lib1” /*将目录 ./lib1 映射为一个设计库*/

analyze –library lib1 –format verilog {croma.v, cromb.v, ddfs.v, froma.v, fromb.v}

在图形界面中,选择File -> Analyze,在弹出的Analyze File 对话框的File域中填入源文件名,并在Library域中填入 “lib1”,

选中 “Create New Library if it Doesn’t Exist” 复选框,点OK即可(如图2-4所示)。

Elaborate命令用于为设计建立一个结构级的与工艺无关的描述,为下一步的工艺映射做好准备。命令的一般格式为: elaborate <设计名>

-library <库名称> -architecture <构造体名> -parameters <参数列表> -update

? <设计名>:需要描述的设计

-library? <库名称>:设计的分析结果所在的库

-architecture? <构造体名>:需要分析的构造体,针对VHDL描

述中同一个实体对应多个构造体的情况;对于Verilog描述,改选项可缺省或为verilog

? -parameters <参数列表>:在这里给设计中的参数重新赋值,若省略则参数使用缺省值

? -update:要求综合器自动更新所有过期的文件

例 2-2 (将先前读入的设计产生结构级描述,并设置相应的参数值):

elaborate ddfs –library lib1 –architecture “verilog” –parameters “PAL_sub = 32'h20098ACB,\\ NTSC_sub = 32'h06F07BD6” –update

由于重置了参数值,顶层的设计名称变为 “ddfs_20098acb_06f07bd6”,为方便起见,将顶层设计名改为 “ddfs”:

rename_design ddfs_20098acb_06f07bd6 ddfs

在图形界面中,选择 File -> Elaborate 菜单,在弹出的 “Elaborate Design” 对话框的Library域中选择lib1,在Design域中选择ddfs,填入相应的参数值并选择 “Re-Analyze Out-of-Date Libraries” 复选框后点OK(如图2-5所示)。

完成以上步骤后,即可看到所有成功读入的设计模块,如前所述,利用命令行将顶层设计名改为 “ddfs”。在图形界面中,双击ddfs设计即可看到该设计的符号描述(如图2-6所示);点击界面左栏中的与门标志按钮即可看到电路级描述(如图2-7所示),该描述是由DC生成的与工艺无关的中间结果,将来用户通过Compile命令将该结果映射到相应的工艺库上。点击界面左栏中的芯片标志按钮又可回到符号描述。

2.2.2 read命令

使用read命令可以一步完成analyze+elaborate的工作,并且

read命令还可以用来读取db、EDIF等格式的设计(analyze+elaborate仅能用于VHDL和verilog)。但是,read命令无法支持参数修改、VHDL中的构造体选择等功能。该命令的语法为: read

-format <文件类型> <文件列表>

-format? <文件类型>:源文件的类型,如verilog, vhdl, edif, db等

? <文件列表>:所有需要读入的源文件名,若有多个文件,则用“{}”括起

例 2-3 (利用read命令将读取直接数字频率合成器的所有设计源文件):

read -format verilog {croma.v, cromb.v, ddfs.v, froma.v, fromb.v}

在图形界面中,选择 File -> Read 菜单,在弹出的 “Read File” 对话框中选择相应的文件打开即可(如图2-8所示)。

2.3 链接

在进一步工作之前,需要将设计中调用的子模块与链接库中定义的模块建立对应关系,这一过程叫做链接。这一过程可以利用link命令显式地完成,也可以将来综合时利用compile命令隐式地进行。推荐每次设计读入以后都用link命令执行一次链接。

注意:由于该命令以及以后提到的大部分命令均对当前设计(current_design)进行操作,所以在执行该命令前应正确设置current_design变量。

例 2-4(链接直接数字频率合成器的顶层设计:ddfs): current_design ddfs /*将ddfs设置为当前设计*/ link

在图形界面中,单击选中ddfs模块,选择Analysis -> Link Design菜单即可看到设计链接对话框。对话框中的 “Search Path” 和 “Link Library” 域就是用户在启动文件中定义的值。选中

“Search Memory First” 复选框将指示DC首先搜索内存来匹配相应的模块。设计链接菜单和对话框如图2-9所示。

一般有两种情况可能导致链接过程出错: 1)、设计中所调用子模块的描述文件没有读入;

2)、设计中使用了工艺库中的单元,但该工艺库没有加入链接库(link_library)或因为搜索路径(search_path)设置有误而导致DC无法正确定位链接库。 2.4 实例唯一化

当设计中的某个子模块被多次调用时就要对设计进行实例唯一化。实例唯一化就是将同一个子模块的多个实例生成为多个不同的子设计的过程。之所以要进行实例唯一化是因为DC在综合时可能使用不同的电路形式来实现同一个子模块的不同实例,从而这些实例在DC看来是一些不同的设计(尽管它们来源于同一个模块并且具有相同的逻辑功能)。使用uniquify命令可以完成实例唯一化的工作(该

命令对当前设计有效)。

例 2-5(将ddfs设计进行实例唯一化): current_design ddfs uniquify

在图形界面中,选中ddfs模块,选择Edit -> Uniquify -> Hierarchy菜单即可完成实例唯一化(如图2-10所示)。

注意:若设计中不存在同一子模块被多次调用的情况(比如上例中的ddfs设计),可不必进行实例唯一化,但仍推荐进行。 DC学习---第三章 设计环境

作者:未知 时间:2010-08-15 15:07:55 来自:网络转载 设计环境是指电路工作时的温度、电源电压等参数,以及输入驱动、输出负载、线上负载等情况。

3.1 设置电路的工作环境

一般的工艺库将温度、电源电压、工艺偏差、互连模型等参数的影响均归结为工作环境(operating_conditions),采用report_lib命令可以列出工艺库中的各项参数(包括工作环境)。 例 3-1(列出工艺库tcb773stc中的各项参数): report_lib tcb773stc

生成报告的头部如下所示(其中黑体部分就是该工艺库中定义的工作环境):

**************************************** Report : library Library: tcb773stc Version: 2000.05-1

Date : Jun 30 12:14:58 2002

**************************************** Library Type : Technology Tool Created : 1998.08

Date Created : Fri Aug 27 14:02:39 EAT 1999 Library Version : 210 Comments : Copyright TSMC Time Unit : 1ns

Capacitive Load Unit : 1.000000pf Pulling Resistance Unit : 1kilo-ohm

Voltage Unit : 1V Current Unit : 1mA Power Unit : 1pW Leakage Power Unit : 1pW

Bus Naming Style : %s[%d] (default) Operating Conditions:

Name Library Process Temp Volt Interconnect Model

----------------------------------------------------------------------------

WCCOM tcb773stc 1.30 125.00 3.00 worst_case_tree NCCOM tcb773stc 1.00 25.00 3.30 balanced_tree BCCOM tcb773stc 0.76 0.00 3.60 best_case_tree

注意:WCCOM是 “Worst-Case-COMmercial” 的缩写;NCCOM是 “Normal-Case-COMmercial”

BCCOM

“Best-Case-COMmercial” 的缩写。

set_operating_conditions命令用来设置设计的工作环境(该命令对当前设计有效),其语法为: set_operating_conditions -library <库名称> <工作环境名>

-library? <库名称>:定义工作环境的库,若当前仅读入唯一的目

标库,则改选项可省略

? <工作环境名>:设置的工作环境

例 3-2(将ddfs设计的工作环境设为 “WCCOM” ): current_design ddfs

set_operating_conditions -library tcb773stc WCCOM 在图形界面中,选中ddfs设计,选择Attributes -> Operating Environment -> Operating Conditions菜单,即弹出工作环境对话框。在此对话框中即可选择相应的工作环境(此例中选择WCCOM)。这一过程如图3-1所示。

3.2 设置连线负载

连线负载用来估算设计内部互连线上的寄生参数,从而估计由于连线造成的时间延迟,使得综合结果能够尽量接近实际中的物理情况。DC中的连线负载设定包括两部分:连线负载大小和连线负载模式。

3.2.1 设置连线负载大小

一般的工艺库通过设计的规模来表征连线负载的大小,在使用

-pin? <管脚名>:用于驱动设计输入端的外部单元管脚的名称 ? -no_design_rule:改选项要求DC忽略外部驱动单元管脚上的设计规则

? <端口名列表>:设置驱动的设计端口

例 3-6(将ddfs的所有输入端的驱动单元设置为DFF1的管脚Q,并忽略该管脚上的设计规则) current_design ddfs

set_driving_cell

–lib_cell

DFF1

–pin

Q

–no_design_rule all_inputs()

注意:该项功能无法通过图形界面实现。

由于通常情况下,设计的时钟和复位端都由驱动能力很大的单元或树形缓冲来驱动,所以可以用set_drive命令将这两个端口的驱动设为无穷大(该命令对当前设计有效),命令语法为: set_drive <阻抗> <端口名列表>

? <阻抗>:非负的驱动阻抗,该值越小表示驱动能力越大 ? <端口名列表>:设置驱动能力的端口名

例 3-7(将ddfs的时钟和复位端的驱动设为无穷大,即驱动阻抗设为零):

current_design ddfs set_drive 0 {clk, reset}

在图形界面中,进入ddfs设计的符号描述,选中其中一个输入端口,选择Attributes -> Operating Environment -> Drive Strength菜单。弹出Drive Strength对话框后,将Rise Strength和Fall Strength域都设为0即可(如图3-4所示)。

DC学习---第四章 设计约束

作者:未知 时间:2010-08-15 15:09:34 来自:网络转载 设计约束描述了设计的目标,这里所说的设计目标主要包括时延目标和面积目标两部分,相应的,设计约束也由时延约束和面积约束两部分组成。

4.1 时序电路的时延约束

时序电路的时延约束主要包括时钟主频、输入延时、输出延时等内容。

4.1.1 创建时钟

在DC中使用create_clock命令创建系统时钟(该命令对当前设计有效),该命令的语法如下:

create_clock <端口名> -period <周期> -waveform <边沿列表> <端口名>:设计的时钟端口

-period <周期>:时钟周期,单位一般为ns

-waveform <边沿列表>:时钟上升沿和下降沿的时刻,从而决定时钟信号的占空比。一般上升沿的时刻设为0

例4-1 (为ddfs设计创建一个5ns的时钟,时钟端口为clk,占空比为1:1)

current_design ddfs

create_clock clk –period 5 –waveform {0 2.5}

由于时钟端的负载很大, DC会使用Buffer来增加其驱动能力。但是一般情况下,设计者都使用布局布线工具来完成这项工作,所以有必要指示DC不要对时钟网络进行修改,可以使用以下命令: set_dont_touch_network clk

在图形界面中,进入ddfs的符号描述,选中其时钟端(clk),选择Attributes -> Clocks -> Specify菜单。在弹出的Specify Clock对话框的Period域中填入指定的周期值(本例中是10),并选择Don’t Touch Network复选框即可(如图4-1所示)。完成以上步骤后,可以在ddfs的clk端口上看到红色的方波标志(如图4-2所示)。

4.1.2 设置输入延时

输入延时的概念可用图4-3来解释。

在图4-3中,假设时钟周期为Tc,外部逻辑中,触发器的传输延时为Td,组合逻辑M的延时为TM,待综合的逻辑中,组合逻辑N

的延时为TN,触发器的建立时间为TS。则有: Tc = Td + TM + TN + Ts (1) 即:

TN + Ts = Tc – ( Td + TM ) (2)

当系统时钟设置完毕后,Tc已经确定,对待综合模块的输入部分加以约束(即设定TN+Ts的值),可以通过设定Td + TM来实现。这里的Td + TM就是DC定义的(对于待综合模块的)输入延时。若外部逻辑是寄存器直接输出,则TM = 0,输入延时就是外部逻辑触发器的延时,一般为1ns或更小。

在DC中,可以使用set_input_delay命令来设置输入延时(该命令对当前设计有效),其命令格式如下: set_input_delay -clock <时钟名> -max -min <延时值> <端口名列表>

-clock <时钟名>:输入延时所参考(关联)的时钟 -max:指定输入延时的最大值 -min:指定输入延时的最小值

<延时值>:输入延时的大小,单位一般为ns <端口名列表>:设定输入延时的端口

Optimizations Constraints -> Design Constraints,弹出Design Constraints对话框后在Max Area域中填入0即可(如图4-8所示)。

DC学习---第五章 设计的综合与结果报告

作者:未知 时间:2010-08-15 15:12:15 来自:网络转载 5.1 设计综合

设计综合使用compile命令进行(该命令对当前设计有效),该命令的格式如下: compile

-map_effort low | medium | high

-area_effort none | low | medium | high -incremental_mapping

-map_effort:综合器映射的努力程度,有low, medium, high三个选项,缺省为medium

-area_effort:综合器面积优化的努力程度,有low, medium, high三个选项,缺省为同map_effort的值

-incremental_mapping:值是综合器在前一次综合结果的基础上进行进一步优化,不改变电路结构

例5-1(综合ddfs设计,各选项均使用缺省值): current_design ddfs compile

在图形界面中,选中ddfs设计,选择Tools -> Design Optimization菜单。在弹出的对话框中点OK即可(如图5-1所示)。

综合过程中,屏幕上会显示综合的进程,如图5-2所示。其中第一栏为综合所花费的时间;第二栏为电路面积;第三栏为负的时延裕量;第四栏为所有负的时延裕量的总和(TNS);第五栏反映了设计规则的违反程度。从图5-2中可以看出,该电路的面积为118107.5μm2,时延比约束值相差0.07ns,即时钟周期可以达到5.07ns(约束值为5ns)。

例5-2(在刚才总和结果的基础上用高映射努力程度进行进一步优化):

current_design ddfs

compile –map_effort high –incremental_mapping 在图形界面中,选中ddfs设计,打开前面提到的设计优化对话框,点击More Map Options按钮,即可弹出Map Options对话框。在其中选中Incremental Mapping复选框,点OK。在设计优化对话框中的Map Effort下选中High选项,点OK即可(如图5-3所示)。

这一次综合的进程如图5-4所示,可见虽然在时延上没有改进,但电路面积较上一次综合已经有所减小。

5.2 设计结果报告 5.2.1 报告时延信息

使用report_timing命令可以报告时延信息(该命令对当前设计

有效),命令的格式如下: report_timing -to <路径终点列表> -from <路径起点列表> -nworst <路径数>

-to <路径终点列表>:需要计算时延的路径的终点 -from <路径起点列表>:需要计算时延的路径的起点

-nworst <路径数>:报告的路径数(缺省为1,由时延裕量最小的路径开始报起)

注意:缺省情况下,报告向屏幕输出,若要将报告写入文件,可在命令行后用 “>” 或 “>>”引出文件名。其中, “>”将新建一个文件,获将原文件覆盖; “>>”用于在原文件末尾填加。 例5-3(将ddfs设计中的时延信息输出到文件 “./report/report1.rpt” 中,共输出5条路径): current_design ddfs

report_timing –nworst 5 > “./report/report1.rpt” 5.2.2 报告面积信息

使用report_area命令可以报告时延信息(该命令对当前设计有效)。

例5-4(将ddfs设计中的面积信息添加到文件 “./report/report1.rpt” 中): current_design ddfs

本文来源:https://www.bwwdw.com/article/h2d7.html

Top