您好,欢迎访问三七文档
1.概述1.1.综合的目的综合是完成从RTL代码到门级电路的转换。如果在综合时,链接了厂家的库文件,则门级电路使用的器件是厂家库文件中提供的器件。综合在整个IC设计中,起到的作用如图1所示。图1综合在IC设计中的作用由于目前IC设计规模日益增大,设计难度不断提高,设计人员必须通过综合工具实现综合任务。目前IC所采用的是综合工具是Synopsys公司的DesignCompiler。本讲义紧密结合了DesignCompiler的应用。1.2.综合的特性1.2.1.综合是由约束驱动的对于一个设计来说,在进行综合前,需要给这个设计加上约束,约束也就是综合的目标,综合工具会竭力满足约束,以实现综合的目标。约束可分为多方面,如时序方面的约束、面积方面的约束、环境属性方面的约束、驱动和负载方面的约束等。其中最重要的约束是对时钟等与时序相关的属性进行约束。在综合时,约束的各个方面可能存在一定的矛盾,如对速度和面积的约束,见图2所示。综合的过程就是找到一个最好的平衡点,满足各个方面的约束。图2约束中速度与面积间的关系好的、合理的约束,是综合成功的关键。不同的约束会导致不同的综合效果。1.2.2.综合是基于path分析的在整个综合的过程中,完成是基于path进行时序分析的,因此path的概念非常重要。何谓path?如下图所示。图3TimingPath的概念Path是综合工具进行时序分析的基本单位。对于一条path而言,它的起点只能是输入端口,或者触发器/寄存器的时钟端;终点只能是输出端口,或者触发器/寄存器的数据输入端(对D触发器而言,就是D端)。结合图3而言,其中共有4条path,分别为:1)输入端口A-FF2的D端;2)FF2的CK端-FF3的D端;3)FF3的CK端-输出端口Z;4)输入端口A-输出端口Z。同一个时钟域多条path,组成一个组,称为pathgroup。与任何时钟都没有关系的path也组成一个组,成为defaultpathgroup。结合图3而言,有2个pathgroup,其中path2和path3属于时钟CK的pathgroup,path1和path4属于defaultpathgroup。在计算一条path的延时信息时,是将这条path上所有线延时加上所有的器件单元延时。1.3.综合的步骤对于DesignCompiler而言,综合的步骤如下:1)将需要进行综合的设计读入DesignCompiler的内存中;2)对设计添加合适的约束;3)对设计进行综合优化;4)分析综合的结果是否满足要求;5)如果满足要求的话,保存综合的结果。综合的主要过程也可以用图4进行表示。图4综合的主要过程2.DesignCompiler简介2.1.DesignCompiler接口模式DesignCompiler是Synopsys公司推出的综合工具,在业界有较广泛的应用。DesignCompiler有三种接口方式:图形化接口、dcshell接口和dcshelltcl接口。图5DesignCompiler的接口方式对于初学者来说,建议使用图形化方式,便于使用,同时建议打开命令窗口,以便可以尽快熟悉DesignCompiler的命令。图形化方式需要占用较多的内存资源,运行速度相对命令行方式来说较慢。2.2.DesignCompiler启动脚本文件DesignCompiler启动时需要执行一个启动脚本文件,该文件名为.synopsys_dc.setup。执行该脚本文件帮助DC链接指定的库文件,也就是综合需要使用的厂家库文件。库文件是由厂家提供的,而不是由Synopsys公司提供。.synopsys_dc.setup文件可以放在下面三个目录下:1)$SYSNOPSYS/admin/setup2)用户的home目录3)用户的当前工作目录DC启动时搜索.synopsys_dc.setup文件的顺序为先查找用户的当前工作目录,然后查找用户的home目录,最后再查找$SYSNOPSYS/admin/setup目录。若在用户的当前工作目录下存在.synopsys_dc.setup文件,则直接使用该文件启动DC。建议将.synopsys_dc.setup文件放在用户的当前工作目录下,方便使用和修改。.synopsys_dc.setup文件中需要为DC指定链接的库文件,这是通过设置target_library,link_library,symbol_library等保留字变量实现的。target_library指定的库文件是DC在搭建电路时使用的库。在DC映射的过程中,会根据电路功能选择库中的器件,并在时序分析时,使用库中各器件的timing数据。link_library指定的库中包含HDL源代码所有单元的示例,综合使用的线载模型和工作环境模型。symbol_library指定的库用来将库中的器件用图形表示出来。下面是一个.synopsys_dc.setup文件的例子(节选其中部分内容)。另外,为了能使用户当前工作目录的条理清晰,建议在DC的当前工作目录下,划分source、scripts、mapped和reports等子目录。在source子目录下存放RTL源代码,scripts/*SetuptheSynopsysDCenv.*/designer=dcusercompany=PGCwork_lib_path=./workdefine_design_libWORK-pathwork_lib_pathsearch_path={./opt/tools/synopsys_2000.11/libraries/syn\/opt/lib/TSMC_lib/Artisan_025um_2000q2v0/io/tpz873g_200d/synopsys/tpz873g_200b\/opt/lib/TSMC_lib/Artisan_025um_2000q2v0/core/synopsys\/opt/lib/TSMC_lib/Avanti_025um_2000.2};target_library={tpz873gbc.dbtsmc25_memory_min.dbpseudo_buf_min.db\tpz873gtc.dbtsmc25_memory_typ.dbpseudo_buf_typ.db\tpz873gwc.dbtsmc25_memory_max.dbpseudo_buf_max.db};link_library={tpz873gbc.dbtsmc25_memory_min.dbpseudo_buf_min.db\tpz873gtc.dbtsmc25_memory_typ.dbpseudo_buf_typ.db\tpz873gwc.dbtsmc25_memory_max.dbpseudo_buf_max.db*};symbol_library={tsmc25.sdb};synthetic_library={standard.sldb};……目录下存放综合的各种约束文件,mapped目录下存放综合后的网表文件,reports目录下可以用来存放各种报告文件。3.Partition的意义Partition是把复杂的、规模较大的设计划分为多个规模适中的部分,以便综合时间不要过长,比较容易得到满足要求的综合结果。Partition应该在编写RTL代码前进行,在方案设计时就充分考虑模块的大小、模块间的连接等要素。只有这样才能够得到比较好的partition结果。综合中,能够对partition进行一定的调整,但效果有限。所以这里要强调,partition应该在编写RTL代码前进行。综合中进行partition的主要原则有:1)不要有组合逻辑穿过层次边界;2)每个层次边界,最好以寄存器做输出;3)不要有胶合逻辑(gluelogic)穿过层次边界;4)限制每个块(block)的大小;5)把输入输出pad、时钟产生模块、JTAG模块和核心逻辑分开。下面结合多个例子,说明partition的原则。例1:图6Partition的原则(例1)-a这个例子中,模块B是一个纯组合逻辑的电路,跨接在模块A和模块C之间,违背了原则1。另外模块A以组合逻辑输出做为层次的边界,违背了原则2。对于例1来说,较好的partition方式如下图所示。图7Partition的原则(例1)-b例2:每个模块都是以寄存器输出,满足原则2,所以是一个比较好的partition结果。图8Partition的原则(例2)例3:在这个例子中,模块A、B、C间有一个两输入与非门,这个两输入与非门属于胶合逻辑,穿过了模块A、B、C的边界,违背了原则3。图9Partition的原则(例3)-a对例3的修改方法如下图所示。图10Partition的原则(例3)-b例4:这个例子中,时钟产生模块、异步逻辑模块、输入输出PAD、JTAG模块与核心逻辑模块CORE是划分开的,满足原则5,是个很好的partition。图11Partition的原则(例4)4.约束文件学习使用DC的命令,设置约束,是本教材的核心内容。对一个需要进行综合的设计,如果不加任何约束就进行综合是没有任何意义的。只有加上了合理的约束后,综合算法才有目标,才能综合出满足需求的电路。对设计需要加上的所有约束、命令可以写入脚本(script)文件中,就成为约束文件。4.1.约束文件应包含的基本内容一般情况下,约束文件中应该包括以下内容,如下图所示。图12约束文件的基本内容其中主要有对时钟的定义,并定义时序方面的其他约束,如设置inputdelay,outputdelay等。对于输入信号、输出信号,还要考虑其驱动、负载问题,这是通过设置输入信号的drivingcell,设置输出信号的load来实现的。工作条件对芯片性能的影响也是必须考虑的因素,需要设置operatingcondition。随着制造工艺的不断提升,线延时成为延时信息中越来越重要的部分,因此也要考虑设置线载模型。这些是主要的约束条件,在实际工作中,约束文件中还需要其他一些约束条件,详细情况见下面的章节。4.2.与时钟相关的约束综合中,最重要的约束条件就是与时钟相关的约束条件。在这些约束条件下,DC进行综合,并尽可能满足时序方面的要求。4.2.1.时钟的定义定义时钟时,必须给出时钟周期、时钟的来源,除此之外,还可以定义时钟的dutycycle、skew、时钟的名字等。图13与时钟相关的约束(一)图13中,需要综合的设计中,只有一个时钟,定义该时钟使用的命令如下:create_clock–period10[get_portClk]set_dont_touch_network[get_clockClk]set_dont_touch_network命令告诉DC不要在时钟线上加上任何buffer。这是为后端布线方便需要设置的命令。定义时钟是定义其他与时钟相关的约束条件的前提。4.2.2.输入延时的定义时钟定义后,还需要对输入path上的延时信息进行约束,如图13所示,对于要综合的设计,必须能够约束逻辑N的延时。这是通过设置输入延时命令实现的。图14定义输入延时上图中,Tclk-q+TM+TN+TSETUP应该等于一个时钟周期,这里假设Tclk-q+TM等于4ns。设置输入延时命令的格式如下:set_input_delay–max4–clockClk[get_portA]需要注意的是输入延时命令设置的是综合模块外部,输入信号的延时信息。4.2.3.输出延时的定义对于输出信号,需要对输出path上的延时信息进行约束,如图13所示,对于要综合的设计,必须能够约束逻辑S的延时。这是通过设置输出延时命令实现的。图15定义输出延时上图中,Tclk-q+TS+TT+TSETUP应该等于一个时钟周期,这里假设TT+TSETUP等于5.4ns。设置输入延时命令的格式如下:set_output_delay–max5.4–clockClk[get_portB]需要注意的是输出延时命令设置的是综合模块外部,输出信号的延时信息。4.2.4.同
本文标题:综合讲义
链接地址:https://www.777doc.com/doc-3780848 .html