DC逻辑综合课件_第1页
DC逻辑综合课件_第2页
DC逻辑综合课件_第3页
DC逻辑综合课件_第4页
DC逻辑综合课件_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

DC逻辑综合2概述综合是将RTL源代码转换成门级网表的过程。电路的逻辑综合一般由三个步骤组成,即综合=转化+逻辑优化+映射(见下页图)(Synthesis=Translation+LogicOptimization+Mapping)在综合过程中,优化进程尝试完成库单元的组合,使组合成的电路能最好地满足设计的功能、时序和面积的要求综合是约束驱动(constraintdriven)的,给定的约束是综合的目标。约束一般是在对整个系统进行时序分析得到的,综合工具会对电路进行优化以满足约束的要求。综合以时序路径为基础进行优化。常用的综合工具有Synopsys公司的DesignCompiler和Candance公司的EnconterRTLCompiler345综合过程中时序与面积的关系从下图中可以看出面积与延迟的折衷关系,综合工具以约束为指导,在满足时序的情况下获得最小面积。如果不施加约束,综合工具会产生非优化的网表,而这是不能满足要求的网表。所以约束对于综合来说是必不可少的。

6综合的基本流程

1.准备RTL代码:RTL代码经过前端仿真后才能用于综合。 2.定义库:设定好所需要用到的综合库等多种库。 3.读入设计:综合工具读入RTL代码并进行分析。

4.定义设计环境:设定设计的工作环境、端口的驱动和负载,线负载模型等

5.设置设计约束:这是综合的一个极其重要的环节,设定好正确的约束才能得到正确的综合结果。约束要适当,不能过紧或过松。主要是定义时钟和I/O的约束。 6.设置综合策略:有top-down和bottom-up两种策略,各有所长,对于不同的设计要具体分析。 7.优化设计:综合工具可以根据约束对电路进行优化,也可以人为地加入命令,改变优化方法。 8.分析和解决设计的问题:在设计综合(compile)后,根据报告来分析设计中出现的问题,进而修订所出现的问题。

9.保存设计数据:综合完成后,保存各种数据,以供后续的布局布线使用(需先通过验证)。78DesignCompiler简介DesignCompiler有两种界面供用户使用,一种是命令界面,一种是图形界面。在UNIX命令行下分别执行以下命令可以分别进入上述两种界面:

unix%dc_shell-t

(命令界面)

unix%design_vision

(图形界面) DesignCompiler支持TCL(ToolCommandLanguage)语言,它是公开的业界标准界面语言。DC-Tcl在TCL的基础上扩展丰富了TCL,使用户可以更加灵活方便地运用TCL命令来对电路进行分析和优化。DC中包含了多种工具,如DFTCompiler,PowerCompiler,HDLCompiler,LibraryCompiler等,使得DC具有强大的功能,成为业界最流行的综合工具。9目标库和初始环境的设置DC启动时会先启动.synopsys_dc.setup文件,它里面设定了综合所需要的工艺库的信息以及一些对于工具的设定命令。启动时,DC会以下述顺序搜索并装载相应目录下的启动文件:

1)、DC的安装目录;

2)、用户的home目录;

3)、当前启动目录。

注意:后装载的启动文件中的设置将覆盖先装载的启动文件中的相同设置。10.synopsys_dc.setup文件主要包括各种库的设定,变量的设定等。下面具体介绍各种库的意义及如何设定。(实例)搜寻路径(search_path): 指定各种库的路径,可以将所用的库的路径放入search_path中,在设定target_library和link_library时就不必加上库的绝对路径,DC会自动在search_path中寻找所用到的库的路径从而读入该库。目标库(target_library): 是DC在做编译(compile)的时候来构成电路图的,将电路映射到具体的单元上。例如

settarget_librarymy_tech.db链接库(link_library): 是将设计连接到对应的库上,一般包含目标库、宏单元、IP核等。例如:

set

link_library“*my_tech.db”。其中“*”指明当链接设计时,DC先搜寻内存中已有的库,然后再搜寻变量link_library中制定的其它库。符号库(symbol_library): 定义了单元显示的图形库,当用design_vision来查看图形的时候使用。综合库(synthetic_library): 是由Synopsys公司提供的DesignWare库,包含了许多IP核及运算单元,用于实现verilog描述的运算符,为电路的优化起着重要的作用。

.synopsys_dc.setup文件11变量的设定:设置的变量在DC启动时读入,便于综合的处理,同时有些DC的变量必须在设置文件中输入。如可以设定命令的简写,保存多少条命令等:aliascudcurrent_designaliasrptreport_timinghistorykeep30012综合脚本实例(.synopsys_dc.setup)13系统层次的划分与基本概念在DC中,每个设计由6个设计物体组成,它们分别是design,cell,port,pin,net和clock。其中clock是特别的端口,它存在DC内存中,是用户自己定义的物体。如下图所示:14当前设计为TOP。Port和Pin是与当前设计有关的一对概念,如果当前设计改变,相应的port和pin也会不同15设计读入可以用以下命令读入设计:

1.analyze和elaborate命令:这是两个不同的命令,它使得设计人员可以在建立设计通用逻辑之前先对设计进行语法错误和RTL转换分析。

analyze-library<库名称>-format<文件类型><文件名列表>elaborate<设计名>-library<库名称>

-architecture<构造体名>-parameters<参数列表>

-update2.read_file命令:如:

read_file–formatverilogsd_clk.v3.read_verilog或read_vhdl命令,这些是从read_file中分离出来的命令,如:

read_verilogsd_clk.v读入代码后用命令current_design和link将读入的设计和综合库连接起来。建议使用analyze+elaborate的组合来读RTL16电路的设计目标与约束RTL模块综合的流程如下图所示。电路的约束分为设计环境和设计约束,DC以约束为目标进行电路优化。17设计环境 通过环境约束的设计,将设计所处的真实环境因素包含进去,使得设计可以正常工作在真实环境下。环境约束如下图所示:

设计环境设置电路的工作环境set_operating_conditions描述了设计的工艺、电压及温度条件。它们的工作条件分别是slow(WORST),typical(TYPICAL)和fast(BEST)。WORST情况通常用于综合阶段,而BEST情况通常用于修正保持时间违规。有时可能同时用WORST和BEST情况同时优化设计,这时使用命令:

set_operating_conditions-maxslow-max_libraryslow-minfast-min_libraryfast可以用set_min_library指定best和worst两种库,在设计中所用到的库都可以指定。如: #为综合用的sram库指定最佳情况可最坏情况

set_min_librarysram_slow.db–min_visionsram_fast.db18设置连线负载set_wire_load_model命令为DC提供估计的线负载信息,反过来DC使用线载信息把连线延迟建模为负载的函数,Synopsys工艺库里提供了多种线载模型,每个模型代表一个特定大小的模块。设计人员需要准确地选择线载模型。设置线载模型命令如下:

set_wire_load_model–namesmic18_wl10–libraryslowset_wire_load_mode定义了三种同建模线负载模型相关的模式,分别是top,segmented和enclosed,如下图所示:1920

1.top模式定义层次中所有连线将继承和顶层模型同样的线载模型。如上图中,所有的连线都继承顶层的线载模型50x50。

2.segmented模式用于跨越层次边界的连线。如上图中,子模块A和子模块B中的连线继承各自的线载模型,而A与B之间的连线继承模块MID的线载模型。

3.enclosed模式指定所有的连线(属于子模块的)将继承完全包含该子模块的模块线载模型。如上图中,整条连线处于模块MID的完全包围中,所以采用40x40线载模型。其命令如下设置输入驱动set_driving_cell和set_drive用于设置模块输入端口的驱动能力。set_drive命令用于指定输入端口的驱动强度,它主要用于模块或芯片端口外驱动电阻。值越小表示驱动能力越大set_driving_cell用于对输入端口的驱动电阻进行建模,这一命令将驱动单元的名称作为其参数并将驱动单元的所有设计规则约束应用于模块的输入端口。 set_driving_cell –lib_celland2a0[get_portsIN1]\ –libraryslowset_drive10[get_portsData_in_0]2122set_load将工艺库中定义的单位(通常为pf)上的容性负载设置到设计的指定连线或端口,设置输出端口的负载。

set_load5[get_portsOUT1] set_load[load_ofmy_lib/and2a0/A][get_portsOUT1]23设计约束描述了设计目标,包括时序和面积等。DC会依据约束来优化电路。因为不实际的规范会导致面积增大、功耗增加和/或时序恶化,所以设计人员必须根据情况指定实际的约束,约束设计的基本命令如下图所示。设计约束24单周期同步设计的时序要求DC默认的时序电路是单周期的,如下图所示。假设FF3的建立时间为Tsetup,保持时间为Thold,触发器FF2的时钟端到Q端的延迟为Tclk-q,对于setup来说:clockperiod>Tclk-q+Tx-max+Tsetup对于hold来说:Thold<Tclk-q+Tx-min时钟25定义时钟

create_colck–period10[get_portclk]

对于时钟(除了虚拟时钟)的定义来说,时钟周期和时钟源(port或pin)是必不可少的,还可以定义时钟的占空比,时钟名等。定义虚拟时钟时,不必定义时钟源。设定时钟的uncertainty、latency和transition,其中uncertainty是用来模拟时钟的skew和jetter,latency设定时钟的延迟,transition设定时钟的转换时间。通过这些设定让时钟更加接近实际情况,更有利于综合的准确性,但过分约束会使得综合起来比较困难。由于时钟一般是高扇出(highfanout)的,DC不会对高扇出的连线做设计规则(DRC)的检查和优化。DC默认的时钟网络是理想的。在综合时不对时钟的高扇出做处理,而是留在后续的布局布线中做时钟树综合(CTS)。26sourcelatency是指实际的时钟源到时钟定义点的传播延迟,而networklatency是指设计内部从时钟定义点到触发器时钟端的延迟。如下图所示,设置如下:

create_clock–period10[get_portsCLK]

#设置sourcelatency为3ns

set_clock_latency–source3[get_clocksCLK]

#设置networklatency为1ns set_clock_latency1[get_clocksCLK]27set_clock_uncertainty命令让用户定义时钟扭斜信息。基本上此命令用于给时钟的建立时间和保持时间增加一定的余量。由时钟的抖动(jitter)可扭斜(skew)组成,如下图:

set_clock_uncertainty0.6[get_clocksCLK]set_clock_transition命令让用户定义时钟的转换时间。如下图

set_clock_transition0.45[get_clocksCLK]28除了create_clock命令,还有create_generated_clock命令用来创建产生的时钟,如时钟经过分频后的时钟,在创建生成时钟时,要指定源时钟的名字和端口,分频数(倍频数),生成时钟的端口。

create_generated_clock–sourceclk2x–divied_by2\ [get_pinsclk]有时需要创建虚拟时钟(virtualclock)用来说明相对于时钟的I/O端口的延迟,虚拟时钟在设计里并不驱动触发任何寄存器。

#建立虚拟时钟,周期为10ns,命名为vclk,不需要定义时钟源

create_clock–period10–namevclk通常给时钟加上dont_touch的约束,使得DC在综合的时候不会给时钟网络加入BUFFER以满足skew的要求,时钟网络通常留在布局布线阶段进行时钟树综合(CTS)。

set_dont_touch_network[get_clocksclk]

29I/O的约束set_input_delay指定相对于时钟的信号输入的到达时间。它用在输入端口,指定在时钟沿后数据稳定所需的时间。如下图所示,设置的输入延迟的值为Tclk-q

+TM。30例:根据外部逻辑的延迟设定输入延迟

#创建时钟

create_clock–period20–nameClk[get_portsClk]

#将时钟设置为dont_touch_network

set_dont_touch_network[get_clocksClk]

#设置输入延迟,外部逻辑延迟最大值为7.4,加入-max选项 #用于setup分析(setup分析采用最慢的路径延迟)

set_input_delay7.4–max–clockClk[get_portsA]

31set_output_delay命令用于在输出端口定义在时钟边沿来到之前数据有效所需时间。如下图所示,设置输出时间的值为TT

+Tsetup32例:设置输出延迟

#创建时钟

create_clock–period20–nameClock[get_portsClock]

#将时钟设置为dont_touch_network

set_dont_touch_network[get_clocksClock]

#设置输入延迟,外部逻辑setup要求为7.0,即为setup分析设 #定输出延迟

set_output_delay7.0–max–clockClock[get_portsB]33DRC约束DRC即DesignRuleConstraints,一般由半导体厂商提供,在使用工艺库中的逻辑单元时对其连接所强加的限制,主要有:max_capacitance,max_transition,max_fanout

#为当前设计设定最大电容值为0.5pf

set_max_capacitance0.5[current_design] #为当前设计设定最大转换时间为2.0ns,在整个设计上施加最 #大转换时间延迟可以帮助防止在上连线上出现长的转换时间, #也可以约束单元的输出端的转换时间以减少其功耗

set_max_transition2.0[current_design]

#在当前设计的所有单元的输出引脚上设置max_fanout

set_max_fanout10[current_design]在DC优化时,DRC约束具有最高的优先级,DC会先让电路满足DRC,然后才是时序约束。34面积约束我们用set_max_area来设定面积约束。例如

set_max_area1000 set_max_area0面积的单位由工艺库定义,可以是:

1.2输入与非门 2.晶体管数目 3.平方微米设定了面积约束,DC会尽量优化到所设定的面积;当没有设定面积约束时,DC会做最小限度的面积优化;若设定为0,则DC会对面积做优化直到再继续优化也没有大的效果,这样可以使得面积优化最小,但运行时间较长。可用命令report_area报告面积。35时序例外时序例外有以下几种:1.Falsepaths。用set_false_path来设定路径使得DC不对其进行时序分析,移除该路径上的时序约束。通常异步电路的时钟之间、逻辑上不存在的路径等上设定为falstpath2.Minimumandmaximumpathdelayvalue。我们使用命令set_max_delay和set_min_delay来覆盖默认的用于setup和hold约束的最大/最小延迟。3.Multicyclepaths。由于DC默认的是单周期,有时某些路径可能需要多个周期的时间才能到达,如在两个寄存器之间进行乘法操作可能需要多个周期才能完成,这时用命令set_muticycle_path来设定多周期路径,以满足时序要求。同时要注意setupcheck和holdcheck的设定。36综合策略的选择综合的策略有两种:自顶向下和自底向上。 1.自顶向下(top-down):在top-down的综合方案中,顶层模块和它的所有子模块放在一起优化,所有的限制条件和电路工作环境一般也都是针对顶层模块设置的,因此,这种综合方案能够自动将模块之间的连接和依赖关系考虑到综合中去,从而优化综合结果。但是,这种方法对于一个规模比较大的电路显然不适合,因为在综合的过程中,所有的模块必须同时存在于存储区中,而且运行时间也会比较长。

2.自底向上(bottom-up):即分而治之的解决方法。从最底层模块开始综合优化,必须对所有底层子模块施加限制条件并且需要单独优化,这个过程一直延续到顶层模块。其中每一个子模块综合完成之后,直接将该模块集成到它的上一级中和上一级的其他模块一起优化,而且一般使用set_dont_touch命令让DC不再改变该子模块的结构。使用这种方法进行优化的优点是当工作站的处理能力不足时,可以分别进行子模块的优化,而不需要将所有的模块都放到存储区中,这种做法的缺点是只能在子模块内部进行优化,无法考虑到模块周围的环境而将子模块和其他的模块一起优化。37设计优化采用命令compile或compile_ultra来启动DC综合和优化的进程。DC提供许多选项来设定进行何种综合。先执行第一进程①,通过report_constraints报告看是否有违例。如果有违例,再执行进程②增进式综合compile_ultra命令具有强大的功能,使用该命令可以得到更好的延迟质量,特别适用于高性能的算术电路优化。该命令包含了以时间为中心的优化算法。compile_ultra命令主要的开关选项有:

-scan#做可测性设计编辑,加入扫描链 -no_autoungroup#关掉自动取消划分特性 -no_boundary_oprimization#不作边界优化 -area_high_effort_script#面积优化 -timing_high_effort_script#时序优化3839

电路的优化分为三个阶段:结构级的优化,逻辑级优化和门级优化,如下图所示。40 1.结构级的优化,包括:

1.1设计结构的选择:在DesignWare中选择最合适的结构或算法实现电路的功能。

1.2数据通路的优化:选择CSA等算法优化数据通路的设计

1.3共用子表达式:例如下面两个等式:

SUM1<=A+B+C; Temp<=A+B; SUM2<=A+B+D; SUM1<=Temp+C; SUM3<=A+B+E; SUM2<=Temp+D

; SUM3<=Temp+E; 这种方法可以把比较器的数目减少,共享共同的子表达式。

41 1.4资源共享。如右图所示,如果没有资源 共享,DC将综合出两个加法器和一个多路 器,采用资源共享后,仅综合出一个加法 器和两个多路器,这样即节省了面积又提高 了时序。42 1.5重新排序运算符号:由于VHDL/HDL编译器从座到右解析表达式,括号的优先级更高,可以通过改变表达式的次序或用括号强制电路用不同的拓扑结构。如下面的表达式: Z=A+B+C+D;则初始的排序为:

加上括号改变运算次序从而改变电路结构:

Z=((B+C)+D)+A;

43 2.逻辑级优化。做完结构的优化后,电路的功能以GETCH的器件来表示。在逻辑级优化的过程中,可以作结构(structuring)优化和展平(flattening)优化。

2.1.结构优化:用共用子表达式来减少逻辑,这种方式既可用作速度优化又可用作面积优化,结构优化是DC默认的优化策略。结构优化在作逻辑优化时,在电路中加入中间变量和逻辑结构。

2.2.展平优化:把组合逻辑路径减少为两级,变为乘积之和的电路,即先与后或的电路。如下图所示:

44 3.门级优化:门级优化时,DC开始映射,完成实现门级电路。映射的优化过程包括四个阶段:延迟优化,设计规则修整,以时序为代价的设计规则修整,面积优化。

45DC中,常用report_timing命令来报告设计的时序是否满足目标,report_timing命令的默认行为是报告每个时序路径理的关键路径。可以设置各种选项以查看不同的类型时序或不同路径的时序。具体用法可在dc_shell使用man命令来查看report_timing命令的详细介绍。report_timing

report_area

report_reference

report_cell

report_constraint

report_power

check_design

时序报告和时序问题的诊断46在DC综合完成后,要保存好相应的数据,输出相应的网表,SDC(设计约束文件),SDF(时序文件),供给后续的布局布线工具使用,也可以供给PT读入,检查时序是否满足。综合结果要经过PT分析满足时序要求,经过验证工具(如Formaility)的验证满足后才能提供给布局布线工具使用。还可以保存ddc格式的文件,以便DC下次启动的时候读入,ddc文件保存了上次DC运行的各种数据。具体的命令有:write–fverilog–hierarchy–outputmy_design.vwrite–fddc–hierarchy–outputmy_design.ddcwrite_sdcmy_design.sdc

write_sdfmy_design.sdf

数据的保存47RTL综合流程48小芯片综合实验1.熟悉设计,获得设计目标和要求,如芯片的时钟频率,外部接口的时序要求等。2.设置.synopsys_dc.setup文件3.启动DC,读入RTL代码,并写出RTL级代码的ddc文件。

unix%dc_shelldc_shell>source–echo–verboseread_file.tcl4.设置约束。

dc_shell>source–echo–verboseconstraints.tcl5.综合,优化

dc_shell>compile_ultra-no_autogroup6.查看报告

dc_shell>report_constraint-all_violarors7.保存文件

dc_shell>write–formatddc–hierarchy–outputRecordchiptop.ddc49

1.熟悉设计,获得设计目的和要求。 输入信号:在小芯片中,输入时钟clk_128,时钟频率为128KHz。Read_ADPCM为输入控制信号,采样速率为8K,类似于一个频率为8K的时钟,且占空比为50%。另外就是8位的数据输入信号,reset信号。在这里还有inout信号CMD,DATA0,但不用作输入,只用作输出。 输出信号:输出SD卡输入时钟信号CLK,这里输出的CLK配置成clk_128的两分频,即64K,和输出数据DATA0信号,输出CMD信号。502.设置.synopsys_dc.setup文件选择要使用的工艺文件,这里采用SMIC的0.18um工艺,SMIC提供了slow.db,fast.db和typical.db三种标准单元的综合库,我们选用slow和fast两种库,其中slow用于最坏情况分析,fast用于最佳情况分析。芯片中的sram是IP核,提供了包含时序信息的综合库用于逻辑综合,它也有最坏情况和最佳情况之分,另外用到的综合库还有标准的IO单元的综合库。具体设置可参见示例文件。3.启动DC,读入RTL代码,并写出RTL级代码的ddc文件。

在unix的终端中键入dc_shell,即可启动DC,这时读入代码文件,可以一个一个的读入,也可以写成TCL语言的文本,用source命令在dc_shell中读入。使用命令analyze和elaborate来读入设计。读入设计后用check_design命令来检查设计存在的问题,是否是可综合的。具体命令可见脚本文件。4.设置约束。这是一个及其重要的环节。要在熟悉设计的前提下才能设置好正确的约束,约束的设置要参考与芯片输入输出有关的芯片的输出/输入信号时序,还要了解0.18工艺下如何选择线负载模型,如何设置DRC规则等。可以先设置工作条件,最坏情况采用slow,最佳情况采用fast,并对应相应的库,选择wire_load_model,要根据设计的大小来选择合适的线负载模型。51

设置DRC规则,通常DRC约束由工艺厂商设定,我们可以选择加紧

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论