您好,欢迎访问三七文档
逻辑综合2概述综合是将RTL源代码转换成门级网表的过程。电路的逻辑综合一般由三个步骤组成,即综合=转化+逻辑优化+映射(见下页图)(Synthesis=Translation+LogicOptimization+Mapping)在综合过程中,优化进程尝试完成库单元的组合,使组合成的电路能最好地满足设计的功能、时序和面积的要求综合是约束驱动(constraintdriven)的,给定的约束是综合的目标。约束一般是在对整个系统进行时序分析得到的,综合工具会对电路进行优化以满足约束的要求。综合以时序路径为基础进行优化。常用的综合工具有Synopsys公司的DesignCompiler和Candance公司的EnconterRTLCompiler34综合过程中时序与面积的关系从下图中可以看出面积与延迟的折衷关系,综合工具以约束为指导,在满足时序的情况下获得最小面积。如果不施加约束,综合工具会产生非优化的网表,而这是不能满足要求的网表。所以约束对于综合来说是必不可少的。5综合的基本流程1.准备RTL代码:RTL代码经过前端仿真后才能用于综合。2.定义库:设定好所需要用到的综合库等多种库。3.读入设计:综合工具读入RTL代码并进行分析。4.定义设计环境:设定设计的工作环境、端口的驱动和负载,线负载模型等5.设置设计约束:这是综合的一个极其重要的环节,设定好正确的约束才能得到正确的综合结果。约束要适当,不能过紧或过松。主要是定义时钟和I/O的约束。6.设置综合策略:有top-down和bottom-up两种策略,各有所长,对于不同的设计要具体分析。7.优化设计:综合工具可以根据约束对电路进行优化,也可以人为地加入命令,改变优化方法。8.分析和解决设计的问题:在设计综合(compile)后,根据报告来分析设计中出现的问题,进而修订所出现的问题。9.保存设计数据:综合完成后,保存各种数据,以供后续的布局布线使用(需先通过验证)。6BasicFlowDevelopHDLfilesSpecifylibrariesReaddesignDefinedesignenvironmentSetdesignconstraintsSelectcompilestrategyOptimizethedesignAnalyzeandresolvedesignproblemSavethedesigndatabase7DesignCompiler简介DesignCompiler有两种界面供用户使用,一种是命令界面,一种是图形界面。在UNIX命令行下分别执行以下命令可以分别进入上述两种界面:unix%dc_shell-t(命令界面)unix%design_vision(图形界面)DesignCompiler支持TCL(ToolCommandLanguage)语言,它是公开的业界标准界面语言。DC-Tcl在TCL的基础上扩展丰富了TCL,使用户可以更加灵活方便地运用TCL命令来对电路进行分析和优化。DC中包含了多种工具,如DFTCompiler,PowerCompiler,HDLCompiler,LibraryCompiler等,使得DC具有强大的功能,成为业界最流行的综合工具。8目标库和初始环境的设置DC启动时会先启动.synopsys_dc.setup文件,它里面设定了综合所需要的工艺库的信息以及一些对于工具的设定命令。在综合之前,要设定好所需要的库,如综合库、I/O单元库,IP核等。半导体厂商提供与DC兼容的工艺库-综合库,它包含许多信息,如单元的功能、面积、时间、功耗、测试等,线负载模型,工作条件和设计规则约束等。在0.18um的工艺下,可采用非线性延迟模型(NLDM)来计算单元的延迟。单元的延迟与输入的逻辑转换时间和输出负载有关。根据每个单元的输入逻辑转换时间和输出负载,在工艺库提供的查找表(Look-UpTable)中查出单元的延迟。9.synopsys_dc.setup文件主要包括各种库的设定,变量的设定等。下面具体介绍各种库的意义及如何设定。(实例)目标库(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描述的运算符,为电路的优化起着重要的作用。搜寻路径(search_path):指定各种库的路径,可以将所用的库的路径放入search_path中,在设定target_library和link_library时就不必加上库的绝对路径,DC会自动在search_path中寻找所用到的库的路径从而读入该库。.synopsys_dc.setup文件10变量的设定:设置的变量在DC启动时读入,便于综合的处理,同时有些DC的变量必须在设置文件中输入。如可以设定命令的简写,保存多少条命令等:aliascudcurrent_designaliasrptreport_timinghistorykeep30011综合脚本实例(.synopsys_dc.setup)12系统层次的划分与基本概念在DC中,每个设计由6个设计物体组成,它们分别是design,cell,port,pin,net和clock。其中clock是特别的端口,它存在DC内存中,是用户自己定义的物体。如下图所示:13当前设计为TOP。Port和Pin是与当前设计有关的一对概念,如果当前设计改变,相应的port和pin也会不同14设计读入读入设计有多种方法,DC支持读入Verilog,VHDL,可以是RTL级代码,也可以是门级网表,也可是ddc格式的文件。综合前的设计不需用RTL格式(虽然也有其它格式)输入到DC中。可以用以下命令读入设计:1.analyze和elaborate命令:这是两个不同的命令,它使得设计人员可以在建立设计通用逻辑之前先对设计进行语法错误和RTL转换分析。2.read_file命令:如:read_file–formatverilogsd_clk.v3.read_verilog或read_vhdl命令,这些是从read_file中分离出来的命令,如:read_verilogsd_clk.v读入代码后用命令current_design和link将读入的设计和综合库连接起来。15电路的设计目标与约束RTL模块综合的流程如下图所示。电路的约束分为设计环境和设计约束,DC以约束为目标进行电路优化。16设计环境通过环境约束的设计,将设计所处的真实环境因素包含进去,使得设计可以正常工作在真实环境下。环境约束如下图所示:17set_operating_conditions描述了设计的工艺、电压及温度条件。Synopsys库包含这些条件的描述,通常为WORST,TYPICAL,BEST情况。工作条件的名称可库的名称是相关的,如SMIC0.18um工艺提供slow.db,typical.db,fast.db三种工艺库,它们的工作条件分别是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.db18set_wire_load_model命令为DC提供估计的线负载信息,反过来DC使用线载信息把连线延迟建模为负载的函数,Synopsys工艺库里提供了多种线载模型,每个模型代表一个特定大小的模块。设计人员需要准确地选择线载模型。设置线载模型命令如下:set_wire_load_model–namesmic18_wl10–libraryslowset_wire_load_mode定义了三种同建模线负载模型相关的模式,分别是top,segmented和enclosed,如下图所示:191.top模式定义层次中所有连线将继承和顶层模型同样的线载模型。如上图中,所有的连线都继承顶层的线载模型50x50。2.segmented模式用于跨越层次边界的连线。如上图中,子模块A和子模块B中的连线继承各自的线载模型,而A与B之间的连线继承模块MID的线载模型。3.enclosed模式指定所有的连线(属于子模块的)将继承完全包含该子模块的模块线载模型。如上图中,整条连线处于模块MID的完全包围中,所以采用40x40线载模型。其命令如下set_wire_load_modeenclosedset_driving_cell和set_drive用于设置模块输入端口的驱动能力。set_drive命令用于指定输入端口的驱动强度,它主要用于模块或芯片端口外驱动电阻。set_driving_cell用于对输入端口的驱动电阻进行建模,这一命令将驱动单元的名称作为其参数并将驱动单元的所有设计规则约束应用于模块的输入端口。set_driving_cell–lib_celland2a0[get_portsIN1]\–libraryslow20set_drive10[get_portsData_in_0]set_load将工艺库中定义的单位(通常为pf)上的容性负载设置到设计的指定连线或端口,设置输出端口的负载。set_load5[get_portsOUT1]set_load[load_ofmy_lib/and2a0/A][get_portsOUT1]21设计约束描述了设计目标,包括时序和面积等。DC会依据约束来优化电路。因为不实际的规范会导致面积增大、功耗增加和/或时序恶化,所以设计人员必须根据情况指定实际的约束,约束设计的基本命令如下图所示。设计约束22单周期同步设计的时序要求DC默认的时序电路是单周期的,如下图所示。假设FF3的建立时间为Tsetup,保持时间为Thold,触发器FF2的时钟端到Q端的延迟为Tclk-q,对于setup来说:clockperiodTclk-q+Tx-max+Tsetup对于hold来说:TholdTclk-q+Tx-min时钟23定义时钟create_colck–period10[get_portclk]对于时钟(除了虚拟时钟)的定义来说,时钟周期和时钟源(port或pin)是必不可少的,还可以定义时钟的占空比,时钟名等。定义虚拟时钟时,不必定义时钟源。设定时钟的uncertainty、latency和transition,其中uncertainty是用来模拟时钟的skew和jetter,latency设定时钟的延迟,transition设定时钟的转换时间。通过这些设定让时钟更加接近实际情况,更有利于综合的准确性,但过分约束会使得综合起来比较困难。由于时钟一般是高扇出(highfanout)的,DC不会对高扇出的连线做设计规则(DRC)的检查和优化。DC默认的时钟网络是理想的。在综合时不对时钟的高扇出做处理,而是留在后续的布局布线中做时钟树综合(CTS)
本文标题:逻辑综合
链接地址:https://www.777doc.com/doc-5132075 .html