DC综合操作流程 - 设置流程 - 图文

更新时间:2023-03-10 22:40:01 阅读量: 教育文库 文档下载

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

总流程

1:库的设置 2:设计的读入 3:设置环境属性

(1)set_operating_conditions

(2)set_wire_load_model和set_wire_load_mode (3)set load

(4)set_drive或者set_driving_cell 4:设计规则约束

(1)set_max_transtion (2)set_max_capacitance (3)set_max_fanout 5:优化约束

(1)create_clock

(2)set_clock_uncertainty (3)set_clock_latency (4)set_input_delay (5)set_output_delay (6)set_false_path

(7)set_multicycle_path

(8)set_max_delay和set_min_delay (9)set_max_area

7:一些编译命令及DC的输出格式

注意: 1:在前端设计中一般不做hold_time的约束,hold_time的约束可以在后端修复!!!

总流程:

1:对库进行基本设置,如下:设置完成后应该查看.synopsys_dc.setup里面库的设置和软件application setup处的设置是否一样!DC的初始化文件.synopsys.dc.setup需要用ls –a显示,命令:more .synopsys.dc.setup查看文件内容!

2:读入设计,两种方法:read和analyze+elaborate

Analyzer是分析HDL的源程序并将分析产生的中间文件存于work(用户可以自己指定)的目录下;Elaborate则在产生的中间文件中生成verilog的模块或者VHDL的实体缺省情况下,elaborate读取的是work目录中的文件

3:设置环境定义:如果不指定operating_conditions,DC自动搜索link_library中的第一个库的工作环境作为优化时使用的工作环境。

(1) set_operating_conditions:工作条件包括三方面—温度、电压以及工艺;工

作条件一般分三种情况:best case, typical case, worst case

图形界面:

#1:先进入the symbol view of the top界面,选择top模块 #2:attributes—operating environment—operating conditions

命令方式:

#1:可通过report_lib libraryname命令来查看,如下图查看的是slow.db库的工作条件,则使用命令:report_lib slow,右边是report_lib fast。

另外一个例子,只是为了说明库中的library name必须是用report_lib命令得到下面图形中的conditions里面的库的name:(******自己想的******)

#2:一般综合时候只需考虑最差和最好两种情况即可,最差情况用于做建立时间(setup time)的时序分析,最好情况用于做保持时间(hold time)的时序分析。最差情况-max下使用slow.db库,最好情况-min下使用fast.db库;

{最差和最好情况和温度以及电压有很大关系,温度越大,延时越大;电压越大,延时越小;不过温度对延时的作用更大} 所以:

##1: 做建立时间分析时候用最差情况,命令:

set_operating_conditions –max “slow”

##2: 如果既要分析建立时间,又要分析保持时间,则需要两条命令:

set_min_library slow.db –min_version fast.db set_operating_conditions –min fast –max slow

首先通过命令set_min_library同时设置worst-case和best-case的library,然后通过set_operating_conditions命令指定不同环境下使用的库模型; 上面的命令指定的是:fast库用于对hold time优化,slow库用于对setup time进行优化。

set_operating_conditions –min fast –max slow命令中的–min fast和–max slow可以互换。

(2) set_wire_load_model和set_wire_load_mode

命令方式:

#1:set_wire_load_model: 设置连线负载模型, 为了估计模块输出的时序

—transition time;DC默认输出负载为0

负载模型可以通过report_lib libraryname命令下查看线的模型种类,如下图是fast.db库中的几种线的模型。

在布局布线前应使用较悲观的模型,对最坏的情况做综合,线负载模型由目标库提供。-max –min选项指定该模型用于估计最大路径延迟和最小路径延迟。 例如:(写一个即可)

set_wire_load_model -name tsmc13_wl40 -min

set_wire_load_model -name smic13_wl50 –max :最坏情况

或者可以直接设置负载模型:

set_wire_load_model -name tsmc13_wl40 -library slow 表示使用的是slow库里的tsmc13_wl40线模型。

#2:自己不清楚如何选择的话,则让DC自动选择 set auto_wire_load_selection true #3:上面的设置完成后,需要对负载模块的使用位置加以说明,三种模式,命令如下:

set_wire_load_mode top 或 set_wire_load_mode enclosed 或 set_wire_load_mode segmented 关系如下:

top : 指定模块互连线延迟的估计使用顶层模块的线负载模型 enclosed: 指定模块互连线延迟的估计使用包含该连线的最小模块的线

负载模型

segmented: 将连线按模型边界分段,各段的延迟分别按照各自模块的线负

载模型估计延迟,然后把估计结果相加得到该连线的延迟

一般情况下使用的是:set_wire_load_mode top

图形界面:

上图中的第一步指的是先选择top模块,然后设置top模块下的环境属性。

***附加:还可以给某个模块设置负载模型:(下面设置timer模块)***

set current_design timer ***先转到timer模块下***

set_wire_load_model -name tsmc13_wl40

或者下面的:

(3) set load:设置输出负载

比较精确地计算输出电路的延迟,DC需要知道输出电路驱动的所有负载。该命令有两种用法:一种是直接给端口赋一个具体的值,另一种是结合命令load_of指出它的负载相当于工艺库中哪个单元的负载值。 命令方式:

#1:set_load 5 [get_ports OUT1]

#2:set_load [load_of my_lib/and2a0/A] [get_ports OUT1]

说明OUT1端口接的负载值地my_lib中and2a0单元的A管脚的负载值。

#3:把上面命令set_load [load_of my_lib/and2a0/A] [get_ports OUT1]中的get_ports OUT1换为all_outputs就可以给全部输出端口赋值。其中load_of命令可以算出某个引脚的负载电容值。

电路负载的大小会影响到它的延迟,而且负载越大,延迟越大,DC在缺省情况下认为端口的负载电容都是0,因此具有无穷大的驱动能力。

图形界面:

必须先选中全部的输出负载然后再设置负载值!!!!!

***********具体如何找这个负载不清楚!!!!!!!!!!!****************

(4) set_drive或者set_driving_cell:设置输入驱动。

为了更加准确估计模块的输入时序,为了更加准确的估计输入电路的延迟,DC需要知道信号到达输入端口的过渡时间(transition time)。默认下,DC认为输入驱动的驱动能力无限大,即transition time=0;

Set_drive使用确定的值来估计输入端的输入电阻,从而得到输入端口的延迟;

set_driving_cell是假定一个实际的外部驱动单元来估计输入的transition time;

该命令用于设置输入端口或者双向端口上的电阻值,该电阻值是用于驱动输入端口的单元的输入电阻,因此,该值越大,就说明输入端口的驱动能力越弱,连线的延迟也就越大。

更常用的是set_driving_cell命令,以库中某个单元电路的引脚驱动能力为基准来模拟输入端口的驱动能力。

例1:首先通过drive_of指定具体的驱动单元电阻值,得到驱动单元电阻后,通过:set_drive+值+[get_ports clk] 命令给输入端口clk赋值。

下图是给除了clk以外的其它输入端口驱动:

4:设计规则约束约束(DRC:design_rule_constraint) DRC规则的优先级: transition>fanout>capacitance (1) set_max_transtion:设置最大传输时间

连线的转换时间是其驱动引脚的逻辑电平变化的时间,包括rising time和falling,从10%的VDD变化到90%的VDD所需的时间。

设定最大的转换时间set_max_transtion,这个值一般设为周期的10%。 例如:set_max_transtion 1.8 [current_design] 一般情况下current_design指的是top。

(2) set_max_capacitance:输出管脚可以驱动的最大电容值 定义输出管脚可以驱动的最大电容值。

例:set_max_capacitance 1.5 [get_ports out1] 或者

set_max_capacitance 1.5 [get_designs top]

(3) set_max_fanout:设置最大扇出负载

连线的最大扇出负载指的是它所驱动的所有输入引脚的扇出负载的总和。扇出负载不同于负载,它是个无量纲的数值。

max_fanout经验值一般设为20,即一个门的输出最多驱动20个输入引脚(如果每个引脚的输出负载是1的话)。

******计算fanout值,如下*******

或者: set_max_fanout 3.0 [all_outputs]

图形界面:在attributes-optimization constraints-design constraints

5:优化约束Optimization Constraints

(1) create_clock: 用于定义时钟的周期和波形(duty及起始沿) duty:占空比,指高电平在一个周期所占的时间比率。

命令:create_clock –period 40 –waveform{0 20} [get_ports clk] :表示CLK 周期40ns,上升沿0 ns,下降沿20 ns; 如果不定义waveform, 则默认占空比为50%。

或者:

或者:

#1: set_dont_touch_network:在net或port上设置don’t touch属性,主要用于clock和reset信号,使DC不对这些nets插buffer,留到布局布线时综合。 #2:set_dont_touch:用于对current_design, cells, references, nets设置don’t touch属性,阻止DC对它们进行映射或优化,一般在分模块综合和综合后优化时使用。 例:set_dont_touch [get_cells X_DATA_N_1_33B_reg[0]]

(2) set_clock_uncertainty:定义好时钟后,就要设置时钟不确定性,即反映时钟偏差(clock skew), 一般设为0.2-0.3。

命令:set_clock_uncertainty 0.3 [get_clocks core_clk]

(3) set_clock_latency: 模拟时钟树插入后从时钟输入端口到寄存器clock端口的延时,用于布局布线前的综合和时序分析,一般设0.3-0.8。 命令:set_clock_ latency 0.3[get_clocks core_clk]

set_clock_latency 默认情况下代表:Network Latency

(4) set_input_delay (看另一个总结的时序分析文档)

对于输入和输出延时,若不知要求,可设延时为周期的40% 命令:

set_input_delay –clock clk_name –max max_value –min min_value

命令中的-max 的选项:指定输入的最大延迟,为了满足时序单元建立时间(setup time)的要求。-min的选项:指定输入的最小延迟,为了满足时序单元保持时间(hold time)要求。

例如:set_input_delay –max 5.8 -clock clk_62_5M [all_inputs]

设置所有最大输入延迟为5.8ns,所有输入信号受到clk_62_5M时钟信号约束!

remove_input_delay [get_ports [list clk_62_5M rst]] 去掉像clk、rst这些不需要设置输入延时的信号!

(5) set_output_delay:命令和设置input_delay一样。

(6) set_false_path:虚假路径。

set_false_path 命令用于给出异步电路或者逻辑上不存在的电路,优化的时候所有加在该路径上的限制条件都不予以考虑。如果要取消该设置,使用reset_path命令。 指出异步电路的路径:

如果 CLKA 和 CLKB 是属于不同的时钟晶振,因此,CLKA到 CLKB 的路径是异步电路。 set_false_path –from [get_clocks CLKA] –to [get_clocks CLKB] set_false_path –from [get_clocks CLKB] –to [get_clocks CLKA] set_false_path -through reset

其中reset信号一般采用“异步复位,同步置位”方式(置位是强制置1,复位是强制置0),所以对于reset信号和跨越时钟域的信号,都要设置为伪路径。

其它资料释义:

false path指的是电路中一些不需要考虑时序约束的路径,一般出现在异步逻辑中。对多时钟域或不可实现的路径的处理:用set_false_path指示DC不对这些路径进行时序优化,如果不对false path路径进行标识,DC会对所有的路径进行优化,从而影响关键时序路径。

(7) set_multicycle_path:设置多路径

(8) set_max_delay和set_min_delay:设置路径的最大最小延迟。

如果电路完全是组合逻辑电路,而没有时钟,可以使用这两条命令直接限制路径的最大最小的延迟。 例如,限制一个 reset 信号:由于 reset 信号跨越了

不同的模块,因此,一般在顶层模块中对该模块做限制: 即指定所有 reset 信号出发的路径的最大延迟都为 5, set_max_delay 5 –from reset

限制一个从 IN输入到 OUT输出的最小路径: set_min_delay 10 –from IN –to OUT 或 限制所以输入到输出的最小路径:

set_min_delay 2 –from [all_inputs] –to [all_outputs] (9) set_max_area current_design top

set_max_area 0 (常用)

将top模块的面积设为0,此时综合后电路肯定不满足要求,但DC会对电路的面积进行优化,达到可能的最小面积,同时使得综合之后的电路没有“弹性”。 或者下面:(不常用)

图像界面:

上图中的max rise和min rise就是inputs或者outputs端口的最大延迟和最小延迟!!!!!选择时候选中same rise and fall选项!!!

以上所有的语句并不是需要全部都设置的,根据自己的设置来判断需要设置的内容即可!!!!!!!!!!

上面设置完成后进行uniquify实例唯一化设置,然后再编译,方法: (不是所有都有这一步的,看情况)

(1) 界面上:hierarchy—uniquify—hierarchy,出现对话框后选择ok,也可选中

下面的instances to be renamed…小框框,是进行强制唯一化的。

(2) 命令:uniquify或者uniquify –force(强制将所有调用模块重新命名)

7:开始编译:

*****编译 compile

report_constraints 或者report_constraint –all_violators //报告没有满足时序的约束条件

此时如果不满足的话可以加大映射的effort,如:compile –map_effort high或其它命令进行优化。

report_timing

change_names -rule verilog –hier set_fix_multiple_ports_net –all

set_fix_hold [all_clocks] 修正holdtime

write -format verilog -hier -output mux.sv //输出网表,自动布局布线需要(注意是.sv格式) write -format ddc -hier -output mux.ddc //输出ddc

write_sdf mux.sdf //输出延时文件,使用PT做静态时序分析时需要

write_sdc mux.sdc //输出约束设置信息,使用Astro或encounter自动布局布线需要

其它命令:

report_clock –skew –attribute 生成时钟报告 report_port –verbose 报告端口信息

report_port –v clk 查看时钟端口所有属性

8:DC的几种输出文件:

write –f ddc –hierarchy –output my_ddc.ddc

write –f verilog –hierarchy –output my_verilog.v

# Write out the constraints-only sdc file :约束信息,布局布线需要 write_sdc my_design.sdc

# Write out the scan chain information :布局布线需要 write_scan_def –out my_design.def

# Write out the physical constraints :输出全部的物理约束,布局布线需要 write_physical_constraints –output PhysConstr.tcl

write_sdf my_design.sdf:输出延时信息,STA分析使用

-format:指定保存的格式,可选的格式有:db, edif, equation, lsi, mentor, pla, st, tdl, verilog, vhdl, xnf,缺省为db

-hierarchy:指令DC保存所有设计层次 -output:指定保存的文件名

电路综合完成之后,可以用report命令将电路的一些信息report出来分析,阅读报告时主要需要注意几个部分: 1)、看看报告中的综合库、线负载模型、工作条件等是不是你所要求的。 2)、看看报告的路径是最大路径还是最小路径,即看报告中的Path type为

max,该路径是为了满足library中FF的setup time的要求。 3)、看路径中是否有很大延迟的单元,或者输入/输出延迟是否很大 4)、看关键路径上是否有slack 5)、这样综合完成之后,对于最差工作环境下的库如果没有问题,对于最好的工作情况,可能会出现Hold time violation. 这时可用set_fix_hold [all_clocks],之后再compile, 来让DC对电路中的hold time violation进行处理。 6)、如果在综合之后发现电路中出现violation,即电路的时序不能满足要求, 当出现的slack比较小时,可以使用一些综合的选项来减小这些slack;

如果slack比较大,通过综合的这些选项无法解决,则需要返回重新写HDL源代码。 一般在综合时violation较小时,可以用compile –inc –map high来减小路

径的延迟。

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

Top