逻辑综合 2 概述 l 综合是将RTL源代码转换成门级网表的过程 l 电路的逻辑综合一般由三个步骤组成,即 综合=转化+逻辑优化+映射(见下页图) (Synthesis=Translation+Logic Optimization+Mapping) l 在综合过程中,优化进程尝试完成库单元的组合,使组合成的电路能最好地 满足设计的功能、时序和面积的要求 l 综合是约束驱动(constraint driven)的,给定的约束是综合的目标约束 一般是在对整个系统进行时序分析得到的,综合工具会对电路进行优化以满 足约束的要求 l 综合以时序路径为基础进行优化 l 常用的综合工具有Synopsys公司的Design Compiler 和Candance公司的 Enconter RTL Compiler 3 4 l综合过程中时序与面积的关系 从下图中可以看出面积与延迟的折衷关系,综合工具以约束为指导,在满足时 序的情况下获得最小面积如果不施加约束,综合工具会产生非优化的网表,而 这是不能满足要求的网表所以约束对于综合来说是必不可少的 5 l 综合的基本流程 1.准备RTL代码:RTL代码经过前端仿真后才能用于综合。
2.定义库:设定好所需要用到的综合库等多种库 3.读入设计:综合工具读入RTL代码并进行分析 4.定义设计环境:设定设计的工作环境、端口的驱动和负载,线负载模型等 5.设置设计约束:这是综合的一个极其重要的环节,设定好正确的约束才能 得到正确的综合结果约束要适当,不能过紧或过松主要是定义时钟和I/O 的约束 6.设置综合策略:有top-down和bottom-up两种策略,各有所长,对于不同的 设计要具体分析 7.优化设计:综合工具可以根据约束对电路进行优化,也可以人为地加入命 令,改变优化方法 8.分析和解决设计的问题:在设计综合(compile)后,根据报告来分析设计 中出现的问题,进而修订所出现的问题 9.保存设计数据:综合完成后,保存各种数据,以供后续的布局布线使用( 需先通过验证) 6 l Basic Flow Develop HDL files Specify libraries Read design Define design environment Set design constraints Select compile strategy Optimize the design Analyze and resolve design problem Save the design database 7 Design Compiler简介 l Design Compiler有两种界面供用户使用,一种是命令界面,一种是图形界面 。
在UNIX命令行下分别执行以下命令可以分别进入上述两种界面: unix% dc_shell-t (命令界面) unix% design_vision(图形界面) l Design Compiler支持TCL(Tool Command Language)语言,它是公开的业界 标准界面语言DC-Tcl在TCL的基础上扩展丰富了TCL,使用户可以更加灵活 方便地运用TCL命令来对电路进行分析和优化 l DC中包含了多种工具,如DFT Compiler,Power Compiler,HDL Compiler, Library Compiler等,使得DC具有强大的功能,成为业界最流行的综合工具 8 目标库和初始环境的设置 l DC启动时会先启动.synopsys_dc.setup文件,它里面设定了综合所需要的工 艺库的信息以及一些对于工具的设定命令 l 在综合之前,要设定好所需要的库,如综合库、I/O单元库,IP核等 l 半导体厂商提供与DC兼容的工艺库-综合库,它包含许多信息,如单元的功 能、面积、时间、功耗、测试等,线负载模型,工作条件和设计规则约束等 在0.18um的工艺下,可采用非线性延迟模型(NLDM)来计算单元的延迟。
单元的延迟与输入的逻辑转换时间和输出负载有关根据每个单元的输入逻 辑转换时间和输出负载,在工艺库提供的查找表(Look-Up Table)中查出单 元的延迟 9 l .synopsys_dc.setup文件主要包括各种库的设定,变量的设定等下面具体 介绍各种库的意义及如何设定实例) 目标库(target_library): 是DC在做编译(compile)的时候来构成电路图的,将电路映射到具体的单元 上例如 set target_library my_tech.db 链接库(link_library): 是将设计连接到对应的库上,一般包含目标库、宏单元、IP核等例如: set link_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的 变量必须在设置文件中输入如可以设定命令的简写,保存多少条命令等: alias cud current_design alias rpt report_timing history keep 300 11 l 综合脚本实例(.synopsys_dc.setup) 12 系统层次的划分与基本概念 l 在DC中,每个设计由6个设计物体组成,它们分别是design,cell,port, pin,net和clock其中clock是特别的端口,它存在DC内存中,是用户自己 定义的物体如下图所示: 13 l 当前设计为TOPPort和Pin是与当前设计有关的一对概念,如果当前设计改 变,相应的port和pin也会不同 14 设计读入 l 读入设计有多种方法,DC支持读入Verilog,VHDL,可以是RTL级代码,也 可以是门级网表,也可是ddc格式的文件。
综合前的设计不需用RTL格式(虽 然也有其它格式)输入到DC中 l 可以用以下命令读入设计: 1.analyze和elaborate命令:这是两个不同的命令,它使得设计人员可以在建 立设计通用逻辑之前先对设计进行语法错误和RTL转换分析 2.read_file命令:如: read_file –format verilog sd_clk.v 3.read_verilog或read_vhdl命令,这些是从read_file中分离出来的命令, 如: read_verilog sd_clk.v l 读入代码后用命令current_design和link将读入的设计和综合库连接起来 15 电路的设计目标与约束 l RTL模块综合的流程如下图所示电路的约束分为设计环境和设计约束,DC 以约束为目标进行电路优化 16 l 设计环境 通过环境约束的设计,将设计所处的真实环境因素包含进去,使得设计可以 正常工作在真实环境下环境约束如下图所示: 17 l set_operating_conditions描述了设计的工艺、电压及温度条件Synopsys 库包含这些条件的描述,通常为WORST,TYPICAL,BEST情况。
工作条件 的名称可库的名称是相关的,如SMIC 0.18um工艺提供slow.db,typical.db ,fast.db三种工艺库,它们的工作条件分别是slow(WORST), typical(TYPICAL)和fast(BEST)WORST情况通常用于综合阶段,而 BEST情况通常用于修正保持时间违规有时可能同时用WORST和BEST情 况同时优化设计,这时使用命令: set_operating_conditions -max slow -max_library slow \ -min fast -min_library fast l 可以用set_min_library指定best和worst两种库,在设计中所用到的库都可 以指定如: # 为综合用的sram库指定最佳情况可最坏情况 set_min_library sram_slow.db –min_vision sram_fast.db 18 l set_wire_load_model命令为DC提供估计的线负载信息,反过来DC使用线 载信息把连线延迟建模为负载的函数,Synopsys工艺库里提供了多种线载模 型,每个模型代表一个特定大小的模块。
设计人员需要准确地选择线载模型 设置线载模型命令如下: set_wire_load_model –name smic18_wl10 –library slow l set_wire_load_mode定义了三种同建模线负载模型相关的模式,分别是top ,segmented和enclosed,如下图所示: 19 1.top模式定义层次中所有连线将继承和顶层模型同样的线载模型如上图中 ,所有的连线都继承顶层的线载模型50x50 2.segmented模式用于跨越层次边界的连线如上图中,子模块A和子模块B 中的连线继承各自的线载模型,而A与B之间的连线继承模块MID的线载模型 3.enclosed模式指定所有的连线(属于子模块的)将继承完全包含该子模块 的模块线载模型如上图中,整条连线处于模块MID的完全包围中,所以采用 40x40线载模型其命令如下 set_wire_load_mode enclosed l set_driving_cell和set_drive用于设置模块输入端口的驱动能力set_drive 命令用于指定输入端口的驱动强度,它主要用于模块或芯片端口外驱动电阻 set_driving_cell用于对输入端口的驱动电阻进行建模,这一命令将驱动单 元的名称作为其参数并将驱动单元的所有设计规则约束应用于模块的输入端 口。
set_driving_cell –lib_cell and2a0 [get_ports IN1] \ –library slow 20 set_drive 10 [get_ports Data_in_0] l set_load将工艺库中定义的单位(通常为pf)上的容性负载设置到设计的指 定连线或端口,设置输出端口的负载 set_load 5 [get_ports OUT1] set_load [load_of my_lib/and2a0/A] [get_ports OUT1] 21 l 设计约束描述了设计目标,包括时序和面积等DC会依据约束来优化电路 因为不实际的规范会导致面积增大、功耗增加和/或时序恶化,所以设计人员 必须根据情况指定实际的约束,约束设计的基本命令如下图所示 设计约束 22 l单周期同步设计的时序要求 DC默认的时序电路是单周期的,如下图所示假设FF3的建立时间为Tsetup, 保持时间为Thold,触发器FF2的时钟端到Q端的延迟为Tclk-q, 对于setup来说:clock period Tclk-q + Tx-max + Tsetup 对于hold来说: Thold source –echo –verbose constraints.tcl 5.综合,优化 dc_shell compile_ultra -n。