您好,欢迎访问三七文档
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核等。例如:setlink_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,如下图所示:19201.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来说:clockperiodTclk-q+Tx-max+Tsetup对于hold来说:TholdTclk-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为3nsset_clock_latency–source3[get_clocksCLK]#设置networklatency为1nsset_clock_latency1[get_clocksCLK]27set_clock_uncertainty命令让用户定义时钟扭斜信息。基本上此命令用于给时钟的建立时间和保持时间增加一定的余量。由时钟的抖动(jitter)可扭斜(skew)组成,如下图:set_clock
本文标题:DC逻辑综合
链接地址:https://www.777doc.com/doc-7203772 .html