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 = {\"DesignWare-Foundation\alias rt “report_timing” designer= XXXXX
company= “ASIC Lab, Fudan Univ.” z search_path指定了综合工具的搜索路径。
z target_library为综合的目标库,它一般是由生产线提供的工艺相关的库。
z synthetic_library是综合库,它包含了一些可综合的与工艺无关的IP。dw_foundation.sldb
是Synopsys提供的名为Design Ware的综合库,它包含了基本的算术运算逻辑、控制逻辑、可综合存储器等IP,在综合是调用这些IP有助于提高电路性能和减少综合时间。 z link_library是链接库,它是DC在解释综合后网表时用来参考的库。一般情况下,它和目
标库相同;当使用综合库时,需要将该综合库加入链接库列表中。 z symbol_library为指定的符号库。
z synlib_wait_for_design_license用来获得DesignWare-Foudation的许可(license)。 z alias语句与UNIX相似,它定义了命令的简称。
z 最后的designer和company项则表明了设计者和所在公司。
另外,在启动文件中用符号 “/*” 和 “*/” 进行注释。
1.2 设计实体
在DC中,总共有8种设计实体:
z 设计(Design):一种能完成一定逻辑功能的电路。设计中可以包含下一层的子设计。 z 单元(Cell):设计中包含的子设计的实例。
z 参考(Reference):单元的参考对象,即单元是参考的实例。 z 端口(Port):设计的基本输入输出口。 z 管脚(Pin):单元的输入输出口。
z 连线(Net):端口间及管脚间的互连信号。 z 时钟(Clock):作为时钟信号源的管脚或端口。 z 库(Library):直接与工艺相关的一组单元的集合。
1.3 寻找设计实体
在DC中使用find命令寻找设计实体,其语法为: find
<实体类型> <名称列表> -hierarchy
z <实体类型>:上节所述的8种类型
z <名称列表>:用来匹配的关键词,其中可带 “*” 统配符 z -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,只是它的作用不受上述变量控制。
第二章 设计入口
2.1 软件的启动
在UNIX下执行dc_shell即可启动DC的命令行界面,执行design_analyzer& 即可启动相应的图形界面。启动以后的图形界面如图2-1所示。
图2-1 Design Analyzer的主界面能,如图2-2所示。
在图形界面中若需要执行命令行,可以用Setup->Command Window菜单打开命令行功
(a) 命令行菜单 (b) 命令行窗口
图2-2 Design Analyzer的命令行功能
在软件启动时,启动文件中所定义的变量均已加载,若希望改变其他变量的值,可以在Setup->Variable中进行,如图2-3所示。
(a) 变量菜单 (b) 变量修改对话框
图2-3 Design Analyzer中修改变量的值
2.2 设计的读入
设计的读入有两种方法:analyze + elaborate和read。
2.2.1 analyze + elaborate
analyze命令用以分析、翻译RTL代码,并将中间结果存入指定的库中。其语法为: analyze
-library <库名称>
-format <文件类型>
<文件名列表>
z -library <库名称>:指定中间结果所存放的库,即UNIX下的一个目录,缺省为当前目录
(WORK)
z -format <文件类型>:RTL源文件的类型,即Verilog或vhdl
z <文件名列表>:所有需要分析的源文件名,若有多个文件,则用“{}”括起
例 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所示)。
(a) Analyze菜单 (b) 文件分析对话框
图2-4 在Design Analyzer中进行文件分析
Elaborate命令用于为设计建立一个结构级的与工艺无关的描述,为下一步的工艺映射做好准备。命令的一般格式为:
elaborate
<设计名>
-library <库名称> -architecture <构造体名> -parameters <参数列表> -update z z
<设计名>:需要描述的设计
-library <库名称>:设计的分析结果所在的库
z -architecture <构造体名>:需要分析的构造体,针对VHDL描述中同一个实体对应多个构造体的情况;对于Verilog描述,改选项可缺省或为verilog
z z
-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所示)。
(a) Elaborate菜单 (b) 设计描述对话框
图2-5 在Design Analyzer中进行设计的结构级描述
完成以上步骤后,即可看到所有成功读入的设计模块,如前所述,利用命令行将顶层设计名改为 “ddfs”。在图形界面中,双击ddfs设计即可看到该设计的符号描述(如图2-6所示);点击界面左栏中的与门标志按钮即可看到电路级描述(如图2-7所示),该描述是由DC生成
的与工艺无关的中间结果,将来用户通过Compile命令将该结果映射到相应的工艺库上。点击界面左栏中的芯片标志按钮又可回到符号描述。
图2-6 DDFS设计的符号描述
图2-7 DDFS设计的电路级描述
2.2.2 read命令
使用read命令可以一步完成analyze+elaborate的工作,并且read命令还可以用来读取db、EDIF等格式的设计(analyze+elaborate仅能用于VHDL和verilog)。但是,read命令无法支持参数修改、VHDL中的构造体选择等功能。该命令的语法为:
read
-format <文件类型>
<文件列表>
z -format <文件类型>:源文件的类型,如verilog, vhdl, edif, db等
z <文件列表>:所有需要读入的源文件名,若有多个文件,则用“{}”括起
例 2-3 (利用read命令将读取直接数字频率合成器的所有设计源文件): read -format verilog {croma.v, cromb.v, ddfs.v, froma.v, fromb.v}
在图形界面中,选择 File -> Read 菜单,在弹出的 “Read File” 对话框中选择相应的文件打开即可(如图2-8所示)。
(a) Read菜单 (b) 文件读入对话框
图2-8 在Design Analyzer中读入设计文件
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所示。
(a) Link Design 菜单 (b) 设计链接对话框
图2-9 在Design Analyzer中进行设计链接
一般有两种情况可能导致链接过程出错: 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所示)。
图2-10 在Design Analyzer中进行实例唯一化
注意:若设计中不存在同一子模块被多次调用的情况(比如上例中的ddfs设计),可不必进行实例唯一化,但仍推荐进行。
第三章 设计环境
设计环境是指电路工作时的温度、电源电压等参数,以及输入驱动、输出负载、线上负载等情况。
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 <库名称>
<工作环境名>
z -library <库名称>:定义工作环境的库,若当前仅读入唯一的目标库,则改选项可省略 z <工作环境名>:设置的工作环境
例 3-2(将ddfs设计的工作环境设为 “WCCOM” ): current_design ddfs
set_operating_conditions -library tcb773stc WCCOM
在图形界面中,选中ddfs设计,选择Attributes -> Operating Environment -> Operating Conditions菜单,即弹出工作环境对话框。在此对话框中即可选择相应的工作环境(此例中选择WCCOM)。这一过程如图3-1所示。
(a) Operating Conditions菜单 (b) 工作环境设置对话框
图3-1 在Design Analyzer中设置工作环境
3.2 设置连线负载
连线负载用来估算设计内部互连线上的寄生参数,从而估计由于连线造成的时间延迟,使得综合结果能够尽量接近实际中的物理情况。DC中的连线负载设定包括两部分:连线负载大小和连线负载模式。
3.2.1 设置连线负载大小
一般的工艺库通过设计的规模来表征连线负载的大小,在使用时,根据实际设计的规模选用相应的连线负载即可。下文所示的是对tcb773stc运行report_lib而生成报告的一部分,他描述了该库中可供选择的连线负载大小的种类以及各自对应的设计规模,例如:设计面积在360000μm2到810000μm2之间则对赢得连线负载为TSMC16K。此外,相同的设计规模所对应的连线负载还有保守的(Conservative)和激进的(Aggressive)之分。
Wire Loading Model Selection Group:
Name : WireAreaCon
Selection Wire load name min area max area
-------------------------------------------
0.00 360000.00 TSMC8K_Conservative 360000.00 810000.00 TSMC16K_Conservative 810000.00 1690000.00 TSMC32K_Conservative 1690000.00 3240000.00 TSMC64K_Conservative 3240000.00 5760000.00 TSMC128K_Conservative
Wire Loading Model Selection Group:
Name : WireAreaAgr
Selection Wire load name min area max area
-------------------------------------------
0.00 360000.00 TSMC8K_Aggresive 360000.00 810000.00 TSMC16K_Aggresive 810000.00 1690000.00 TSMC32K_Aggresive
1690000.00 3240000.00 TSMC64K_Aggresive 3240000.00 5760000.00 TSMC128K_Aggresive
Wire Loading Model Mode: segmented.
使用set_wire_load_model命令来设置连线负载,其语法为: set_wire_load_model -name <连线负载名> -library <库名称>
<对象列表>
z -name <连线负载名>:设定的连线负载 z z
-library <库名称> :定义工作环境的库,若当前尽读入唯一的目标库,则改选项可省略 <对象列表>:设定连线负载的对象
例 3-3(将ddfs的连线负载设为TSMC8K_Conservative):
set_wire_load_model –name TSMC8K_Conservative -library tcb773stc ddfs
在图形界面中,选中ddfs设计,选择Attributes -> Operating Environment -> Wire Load菜单,即弹出连线负载设置对话框。在此对话框中即可选择所需的连线负载(此例中选择TSMC8K_Conservative)。这一过程如图3-2所示。
(a) Wire Load菜单 (b) 设置连线负载对话框
图3-2 在Design Analyzer中设置连线负载
3.2.2 设置连线负载模式
连线负载模式规定了跨越多个模块层次的连线其连线负载的计算方式,DC供支持三种连线负载模式: z
top:某一模块的连线负载设为top模式意味着该模块及其子模块中所有连线的连线负载大
小均取该模块的值
z
enclosed:某一模块的连线负载设为enclosed模式意味着该模块及其子模块中所有连线的
连线负载大小的取值与恰好能完全包含该连线的最底层模块的连线负载大小一致。
z
segmented:这是一种分段模式,意味着一根连线上不同段的连线负载不同,某一段地连
线负载与恰好包含该段的最底层模块的连线负载大小一致。
set_wire_load_mode命令用来设置连线负载模式(该命令对当前设计有效),该命令的格式如下:
set_wire_load_mode
<模式名>
z <模式名>:连线负载模式的名称,为 “top”、“enclosed”、“segmented”中的一项
例 3-4(将ddfs的连线负载模式设为top): current_design ddfs set_wire_load_mode top
注意:该功能无法通过图形界面实现
3.3 设置输出负载
为了更精确地计算电路的延时,DC需要知道设计的输出端驱动的负载大小(主要是电容)。用户可以通过set_load命令来为输出端设置负载(该命令对当前设计有效),其语法为:
set_load
<负载电容值> <对象列表>
z <负载电容值>:设定的负载电容值,必须为非负数,其单位在库文件中定义
z <对象列表>:设定负载电容的对象,可以是输出口、输出管脚、互连线等
例 3-5(将ddfs的所有输出口的输出负载设为0.1pF) current_design ddfs set_load 0.1 all_ouputs()
在图形界面中,进入ddfs设计的符号描述,选中一组输出端口,选择Attributes -> Operating Environment -> Load菜单。在弹出的Load对话框的Capacitive load域中填入1.00即可(如图3-3所示)。
(a) Load菜单 (b) 设置输出负载对话框
图3-3 在Design Analyzer中设置输出负载
3.4 设置输入驱动
为了精确计算电路的延时,DC还需知道设计输入端的驱动能力的情况。用户可以利用set_driving_cell命令来指定一个驱动设计输入端的外部单元(该命令对当前设计有效),该命令的格式如下:
set_driving_cell -lib_cell <库单元名> -library <库名称> -pin <管脚名> -no_design_rule
<端口名列表>
z -lib_cell <库单元名>:用于驱动设计输入端的外部单元名称 z
-library <库名称>:上述单元所在库的名称,若当前仅读入唯一的目标库且驱动单元就在
该库中,则改选项可省略
z z z
例 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
<阻抗> <端口名列表>
-pin <管脚名>:用于驱动设计输入端的外部单元管脚的名称
-no_design_rule:改选项要求DC忽略外部驱动单元管脚上的设计规则 <端口名列表>:设置驱动的设计端口
z <阻抗>:非负的驱动阻抗,该值越小表示驱动能力越大 z <端口名列表>:设置驱动能力的端口名
例 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所示)。
(a) Drive Strength菜单 (b) 设置驱动强度对话框
图3-4 在Design Analyzer中设置输入端口的驱动强度
第四章 设计约束
设计约束描述了设计的目标,这里所说的设计目标主要包括时延目标和面积目标两部分,相应的,设计约束也由时延约束和面积约束两部分组成。
4.1 时序电路的时延约束
时序电路的时延约束主要包括时钟主频、输入延时、输出延时等内容。
4.1.1 创建时钟
在DC中使用create_clock命令创建系统时钟(该命令对当前设计有效),该命令的语法如下:
create_clock
<端口名>
-period <周期> -waveform <边沿列表> z z z
<端口名>:设计的时钟端口
-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所示)。
(a) Specify Clock菜单 (b) 创建时钟对话框
图4-1 在Design Analyzer中创建时钟
图4-2 时钟创建成功的示意图
4.1.2 设置输入延时
输入延时的概念可用图4-3来解释。
外部逻辑DQclkTdTMTcMN待综合模块DQTnTs图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
<延时值> <端口名列表>
z -clock <时钟名>:输入延时所参考(关联)的时钟 z -max:指定输入延时的最大值 z -min:指定输入延时的最小值
z <延时值>:输入延时的大小,单位一般为ns z <端口名列表>:设定输入延时的端口
例4-2(将ddfs设计的mode输入端的输入延时最大值设为1ns,最小值设为0,参考
(关联)时钟为clk):
current_design ddfs
set_input_delay –clock clk –max 1 find (port, “mode”) set_input_delay –clock clk –min 0 find (port, “mode”)
在图形界面中,进入ddfs的符号描述,选中mode端口,选择Attribute -> Operating Environment -> Input Delay菜单。在弹出的Input Delay对话框的关联时钟选择框中选择clk,
在Max域中填入1.00,在Min域中填入0.00,并选中Same Rise and Fall复选框即可(如图4-4所示)。
(a) Input Delay菜单 (b) 设置输入延时对话框
图4-4 在Design Analyzer中设置输入延时
4.1.3 设置输出延时
输出延时的概念可以用图4-5来说明。
待综合模块DQclkTdTnTcN外部逻辑MDQTMTs图4-5 输出延时的示意图 在图4-5中,假设时钟周期为Tc,外部逻辑中,触发器的建立时间为TS,组合逻辑M的延时为TM,待综合的逻辑中,组合逻辑N的延时为TN,触发器的传输延时为Td。则有:
Tc = Td + TN + TM + Ts (1) 即:
Td + TN = Tc – (TM + Ts ) (2) 当系统时钟设置完毕后,Tc已经确定,对待综合模块的输出部分加以约束(即设定Td+TN
的值),可以通过设定TM + Ts来实现。这里的TM + Ts就是DC定义的(对于待综合模块的)输出延时。若待综合模块是寄存器直接输出,则TN = 0,又由于触发器的传输延时(Td)基本固定,所以待综合模块的输出部分可以不必约束,既可以不设输出延时。
在DC中,可以使用set_output_delay命令来设置输出延时(该命令对当前设计有效),其命令格式如下:
set_output_delay -clock <时钟名> -max -min
<延时值> <端口名列表>
z 所有参数、开关含义均与set_input_delay命令相同
例4-3(将ddfs设计所有输出端的输出延时最大、最小值设为4ns,参考时钟为clk): current_design ddfs
set_output_delay –clock clk 4 all_outputs()
在图形界面中,进入ddfs的符号描述,选中一组输出端口,选择Attribute -> Operating Environment -> Output Delay菜单。弹出Output Delay对话框后,在关联时钟选择框内选择clk,在Max和Min域中填入9.00,并选中Same Rise and Fall复选框即可(如图4-6所示)。对另外一组输出端口可同样设置。
(a) Output Delay 菜单 (b) 设置输出延时对话框
图4-6 在Design Analyzer中设置输出延时
4.2 组合电路的时延约束
由于组合电路中不带有时钟,所以对它的时延约束主要是规定其输出端到输入端的最大时延,这可以通过set_max_delay来实现(该命令对当前设计有效),该命令的格式如下:
set_max_delay
<延时值>
-from <起点列表> -to <终点列表>
z <延时值>:延时的大小,单位一般为ns z -from <起点列表>:延时约束的起点 z -to <终点列表>:延时约束的终点
例4-4(将16位加法器设计所有输入端到所有输出端的最大延时设为2ns): read adder_16.v /*读入16位加法器的设计源文件*/ set_max_delay 2 –from all_inputs() –to all_outputs()
在图形界面中,读入源文件后进入设计的符号描述,选中所有的输出端口,选择Attributes -> Optimizations Constraints -> Timing Constraints菜单,弹出Timing Constraints对话框后,在Maximum -> Rise域中填入2.00,并选中Same Rise and Fall复选框即可(如图4-7所示)。
(a) Timing Costraints菜单 (b) 设置时延约束对话框 图4-7 在Design Analyzer中设置组合电路的时延约束
4.3 设计的面积约束
使用set_max_area命令可以对设计的最大面积进行约束(该命令对当前设计有效),其命令格式为:
set_max_area -ignore_tns z
<面积值>
-ignore_tns:忽略负时延裕量总和(TNS)来优化面积。DC的缺省优化算法是先使TNS最
小,在此基础上优化面积。使用该开关将使得DC忽略TNS而优先考虑面积优化
z
<面积值>:约束面积的大小,其单位由不同的工艺库决定
例4-5(将ddfs设计的面积约束设为0,这将指示DC尽可能的优化面积): current_design ddfs set_max_area 0
在图形界面中,选中ddfs设计,选择Attributes -> Optimizations Constraints -> Design Constraints,弹出Design Constraints对话框后在Max Area域中填入0即可(如图4-8所示)。
(a) Design Constraints菜单 (b) 设计约束对话框
图4-8 在Design Analyzer中设置面积约束
第六章 设计的保存与时序文件的导出
6.1 设计的保存
使用write命令来实现设计的保存,命令格式如下: write -format -hierarchy -output z
<设计列表>
-format:指定保存的格式,可选的格式有:db, edif, equation, lsi, mentor, pla, st, tdl, verilog,
vhdl, xnf,缺省为db
z z z
-hierarchy:指令DC保存所有设计层次 -output:指定保存的文件名 <设计列表>:需要保存的设计
例6-1(将ddfs设计以db形式保存到 “./mapped/ddfs.db”文件中,要求保存所有设计层
次):
write –format db –hierarchy –output ./mapped/ddfs.db ddfs
在图形界面中,选中ddfs设计,选择File -> Save As菜单,在弹出的Save File对话框中定位到相应的目录,填入文件名,并选择db作为保存格式,选中Save All Designs in Hierarchy复选框,点OK即可(如图6-1所示)。
(a) Save As菜单 (b) 保存文件对话框
图6-1 在Design Analyzer中保存设计
例6-2(将ddfs设计的门级网表以verilog形式保存到 “./export/ddfs.v”文件中,要求保存
所有设计层次):
write –format verilog –hierarchy –output ./export/ddfs.v ddfs
在图形界面中,只需将上述保存文件对话框中的文件类型该为verilog,并指定相应的目录和文件名即可(如图6-2所示)。
图6-2 在Design Analyzer中保存设计的
网表
6.2 时序文件的导出
DC可以导出的时序文件包括时序描述文件和时序约束文件两种。前者描述了设计的时序情况主要用于进行综合后的动态仿真;后者带有关键路径的时延约束信息,主要供后端工具进行时延驱动的布局布线。无论哪中时序文件都采用标准延时文件(SDF)的格式。
6.2.1 时序描述文件的导出
在DC中,使用write_sdf命令导出时序描述文件(该命令对当前设计有效),命令格式如下:
write_sdf
-version <文件版本> -instance <实例名>
<时序描述文件名>
z -version <文件版本>:指定导出的SDF文件的版本,可选项有1.0和2.1,缺省为2.1版 z -instance <实例名>:指定导出当前设计中某个实例的时序描述文件 z <时序描述文件名>:导出的时序描述文件的文件名
例6-3(导出ddfs设计的时序描述到 “./export/ddfs.sdf”中,版本为2.1): current_design ddfs write_sdf ./export/ddfs.sdf
在图形界面中,选中ddfs设计,选择File -> Save Info -> Design Timing菜单,在弹出的Save Timing Information对话框中填入文件名,将Format选为SDF V2.1,点击OK即可(如图6-3所示)。
(a) Design Timing菜单 (b) 保存时延信息对话框
图6-3 在Design Analyzer中导出时序描述文件
6.2.2 时序约束文件的导出
在DC中,使用write_constraints命令来到出时序约束文件(该命令对当前设计有效),命令的格式如下:
write_constraints -output <文件名> -format
-max_paths <路径数> -max_path_timing -from <起点列表> -to <终点列表>
z -output <文件名>:导出的时序约束文件名
z -format:时序约束文件的格式,可选项有:synopsys,sdf,sdf-v2.1 z -max_paths <路径数>:时序约束文件所包含的路径数,缺省为1 z -max_path_timing:指令DC导出示延最大的路径 z -from <起点列表>:路径的起点列表 z -to <终点列表>:路径的终点列表
例6-4(导出ddfs设计的时序约束到 “./export/ddfs_constraint.sdf”中,版本为sdf 2.1
版,要求导出5条时延最大的路径):
current_design ddfs
write_constraints –output ./export/ddfs_contraint.sdf –format sdf-v2.1 –max_paths 5 \\
–max_path_timing
在图形界面中,选中ddfs设计,选择File -> Save Info -> Constraints,在弹出的Save Constraint Information对话框中填入文件名,将Format选为SDF V2.1,选中Max Path Timing Constraints复选框,并在Max Paths域中填入5,点击OK即可(如图6-4所示)。
(a) Constraints菜单 (b) 保存约束信息对话框
图6-4 在Design Analyzer中导出设计的时延约束文件
第五章 设计的综合与结果报告
5.1 设计综合
设计综合使用compile命令进行(该命令对当前设计有效),该命令的格式如下: compile
-map_effort low | medium | high -area_effort none | low | medium | high
-incremental_mapping
z -map_effort:综合器映射的努力程度,有low, medium, high三个选项,缺省为medium z
-area_effort:综合器面积优化的努力程度,有low, medium, high三个选项,缺省为同
map_effort的值
z
-incremental_mapping:值是综合器在前一次综合结果的基础上进行进一步优化,不改变
电路结构
例5-1(综合ddfs设计,各选项均使用缺省值): current_design ddfs compile
在图形界面中,选中ddfs设计,选择Tools -> Design Optimization菜单。在弹出的对话框中点OK即可(如图5-1所示)。
(a) Design Optimization菜单 (b) 设计优化对话框
图5-1 在Design Analyzer中进行设计综合
综合过程中,屏幕上会显示综合的进程,如图5-2所示。其中第一栏为综合所花费的时间;第二栏为电路面积;第三栏为负的时延裕量;第四栏为所有负的时延裕量的总和(TNS);第五栏反映了设计规则的违反程度。从图5-2中可以看出,该电路的面积为118107.5μm2,时延比约束值相差0.07ns,即时钟周期可以达到5.07ns(约束值为5ns)。
图5-2 综合工具显示的综合进程
例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所示,可见虽然在时延上没有改进,但电路面积较上一次综合已经有所减小。
(a) 映射选项对话框 (b) 设计优化对话框
图5-3 在Design Analyzer中进行高映射努力程度的进一步优化
图5-4 进一步优化时的综合进程
5.2 设计结果报告
5.2.1 报告时延信息
使用report_timing命令可以报告时延信息(该命令对当前设计有效),命令的格式如下:
report_timing -to <路径终点列表> -from <路径起点列表> -nworst <路径数>
z -to <路径终点列表>:需要计算时延的路径的终点 z -from <路径起点列表>:需要计算时延的路径的起点
z -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
report_area >> “./report/report1.rpt”
在图形界面中,选中ddfs设计,选择Analysis -> Report菜单,在弹出的Report对话框中,选择Area和Timing即可获得设计的面积和时延信息。可以通过选择Send Output To选项来控制输出到屏幕或文件(如图5-5所示)。
(a) Report菜单 (b) 设计结果报告对话框
图5-5 在Design Analyzer中报告设计结果
这时,报告出来的关键路径只有一条,若要增加报告的路径,可点Report对话框中的Set Options按钮,在弹出的Report Options对话框的Max Paths to Show域中填如适当的数值,点OK即可(如图5-6所示)。
图5-6 在Design Analyzer中设置
报告路径条数
因篇幅问题不能全部显示,请点此查看更多更全内容