zoukankan      html  css  js  c++  java
  • Tcl与Design Compiler (五)——综合库(时序库)和DC的设计对象

    本文如果有错,欢迎留言更正;此外,转载请标明出处 http://www.cnblogs.com/IClearner/  ,作者:IC_learner

      前面一直说到综合库/工艺库这些东西,现在就来讲讲讲综合库里面有什么东西,同时也讲讲synopsys的Design Ware库。主要内容分为三个部分:标准单元库、DC的设计对象、Design Ware库

    (1)标准单元库

      绝大多数的数字设计流程都是基于标准单元的半定制设计流程。标准单元库包含了反相器、缓冲、与非、或非、与或非、锁存器、触发器等等逻辑单元综合模型的物理信息,标准单元是完成通用功能的逻辑,具有同等的高度(宽度可以不同),这样方便了数字后端的自动布局布线。

    ①概述

    一个ASIC综合库包括如下信息:

      ·一系列单元(包括单元的引脚)。

      ·每个单元的面积(在深亚微米中,一般用平方微米表示,在亚微米工艺下,一般用来称呼,至于具体的单位,可以咨询半导体制造商)。

      ·每个输出引脚的逻辑功能。

      ·每个输入到输出的传递延时,输出到输出的传递延时;inout到输出的传递延时。

    ②内容与结构

    Synopsys的工艺库是一个.lib文件,经过LC编译后,产生.db文件。工艺库文件主要包括如下信息:

      ·单元(cell)(的信息):(主要有)功能、时间(包括时序器件的约束,如建立和保持)、面积(面积的单位不在里面定义,可按照规律理解,一般询问半导体厂商)、功耗、测试等。

      ·连线负载模型(wire load models):电阻、电容、面积。

      ·工作环境/条件(Operating conditions):制程(process)(电压和温度的比例因数k,表示不同的环境之间,各参数缩放的比例)

      ·设计规则约束(Design ):最大最小电容、最大最小转换时间、最大最小扇出。

    工艺库的结构如下所示:

                    

    文本描述如下所示:

                

               

                 

                                    

                

    我使用的TSMC90nm的工艺库,我用slow.lib这个库来给大家介绍:

            

    这个库总共三万多行,不可能每一行都解说,因此我按照结构进行介绍。

     

    打开这个.lib文件,可以看到最前面:

           

    最前面的是这些注释,描述的是:制程(是慢的模型)、电压、温度等数据信息。

    接下来才是真正的库的信息:

    库组(大结构)

    Library(library_name){

    ......

    ......

    }

    A首先是库的属性的描述

          

     

    下面是这张图的解释:

        ·通用属性描述(general attribute)

    主要是工艺类型、延迟模型、替代交换方式、库特征、总线命名方式等信息

     工艺类型:这个库没有给出,主要用来说明这个库是CMOS工艺还是FPGA工艺。默认是CMOS工艺。

     延迟模型:指明在计算延迟时用的那个模型,主要有generic_cmos(默认值)、table-lookup(非线性模型)、piecewise-cmos(optional)、dcm(Delay Calculation Module)、polynomial。这个库使用的非线性模型。

     替代交换方式:这里选的是匹配封装的方式。具体的信息可以查阅其他治疗或者询问半导体厂商。

     库特征:报告延迟计算,也就是这个库具有延迟计算的特征。

     总线命名方式:定义库中总线命名规则。例如:bus_naming_style:"Bus%spin%d";这个库没有进行总线规则的命名。

     

        ·库的文档资料属性(document attribute):

    主要是库的版本、库的日期、还有注释。例如:

      用库报告命令report_lib可显示日期例如:Date:"Wed Jun 22 12:31:54 2005"。

      修正版属性定义库的版本号码,例如Revision:1.3;

      注释属性用于报告report_lib命令所显示的信息,如版权或其他产品信息。例如:Comment:"Copyright (c) 2005 Artisan Components, Inc.  All Rights Reserved.”

     

        ·定义单位属性(unit attribute):

        Design Compiler工具本身是没有单位的。然而在建立工艺库和产生报告时,必须要有单位。库中有6个库级属性定义单位:time_ unit(时间单位)、voltage_unit(电压单位)、current_  unit(电流单位)、pulling_resistance_unit(上/下拉电阻单位)、capacitive_load_unit(电容负载单位)、leakage_power_unit(漏电功耗单位)

        单位属性确定测量的单位,例如可在库中用毫微秒(nanoseconds)或皮法拉(picofar-ads)作为时间和电容负载的单位。

      注:关于面积的单位,前面已经说了,这里不再详述。

     

    B接下来是环境描述

      主要包括操作条件(operation conditions)、临界条件定义(threshold definitions)、默认的一些环境属性(default attributes)、一些(时序、功耗)模型(templates)、比例缩放因子(k-factors)、I/O pad属性(pad attributes)、线负载模型(wire-loads)

        ·操作条件(operation conditions):

         

        在工艺库中,用操作条件设置了制程(process)、温度(temperature)、电压(voltage)与RC树模型(tree_type)

      在综合和静态时序分析时,DC要用到这些信息来计算电路的延迟,而库中的这组操作条件为基础(也就是nom_xxxx)操作条件。一个工艺库只有这么一组基础的操作条件,如果要使用不同的操作条件,则需要借助K参数了(见后面)。制程、温度、电压这些很好理解,下面主要说一下这个RC树模型(tree_type)。

      tree-type属性定义了布局之前延时的计算方式。此外,线负载模型(后面有讲)是根据连线的扇出来估算连线的RC寄生参数的,RC如何分配就是根据这个tree-type属性来的。

      连线延时(从驱动引脚的状态变化到每个接受单元输入引脚的状态变化,线负载模型设每个分枝的延迟是一样的。)的一个示例如下图所示:

         

      在这个简单的电路中,BUF1的输出驱动两个单元:BUF2与BUF3。在物理上,这是两根连线。而在网表中,两根连线用一个net来表示。    

      在布局前,假设这两根线有相同的寄生电阻与寄生电容,即Cwire1-Cwire2=R1-R2

    假设我们想了解从BUF1的输出到BUF2的输入端的延时。这个延时实际上是给连线及BUF2的输入引脚负载进行充、放电所消耗的时间

        如何计算这个延时呢?tree-type就是为此而定义的。Tree-type有三种取值,这个延时就有三种计算模型,这三种模型有两种理解方式,这两种理解方式是等价的。

    第一种理解方式的三种模型

      A:当它取值为worst-case-tree时,连线的寄生参数采用集总模型,即用Cwire*(Cwire 1+Cwire2)这个乘积表示连线的等效电容,Rwire(R1+R2)表示连线的等效电阻。C1表示BUF1输入引脚的等效电容。C2表示BUF2输入引脚的等效电容。从BUF 1到BUF2的延时计算模型下图所示:

         

          在这种模型中,net本身的延迟为Rwire*Cwire .

      B:当tree-type取值为best-case-tree时,计算延时的RC模型如下图所示:

         

          在这种模型中,Rwire为0,因此net本身的延时为0

     

      C:当tree-type取值为balanced-tree时,计算延时的RC模型如下图所示:

           

        在这种模型中,net的延时为Rwire*Cwire/(N^2)。这里N表示负载数目,本例中取值为2.

     

    第二种理解方式的三种模型:

           

    无论是从哪一种方式理解,这个库中使用的是平衡树的模型。

     

        ·临界条件定义(threshold definitions):

    主要是定义一些极限值,比如时钟抖动的最大最小值、输出输出的上升下降沿的最大最小值等等信息,如下图所示:

           

        ·默认的一些环境属性(default attributes):

         

      主要是默认漏电流功耗密度、标准单元的漏电流功耗、扇出负载最大值、输出引脚的电容、IO类型的端口电容、输入引脚的电容、最大转换时间。

        ·一些(时序、功耗)模型(templates):

         

      都是写查找表模型,主要是功耗(比如输入转移时间的功耗)、时序(比如输入线转换的延时、建立时间和保持时间的延时)等等,根据不同的操作环境,进行查表进行选择对应的参数。

     

        ·比例缩放因子(k-factors):

     由于一般库中只有单元“nom_xxx”的值,为了计算不同的制程、电压和温度下单元的延迟(或者说是计算不同的操作条件),库中提供了比例缩放因子

         

      比例因子有许多,这里只是列举了这几个。

    根据提供的K参数,DC按下面的公式计算不同的制程,电压和温度的单元延迟:

      Delay derated = (nominal delay)*(1+(DP*KfactorP))*(1+(DV*KfactorV))*(1+(DT*KfactorT))

    其中:

      delta = current-nominal ;  

      DP = CP-NP,CP为current process,NP为nominal process;

      DV=CV-NV,CV为current voltage,NP为nominal voltage;

      DT=CT-NT,CT为current temperature,NT为nominal temperature.

      KfactorP、KfactorV、KfactorT分别是对于的K参数,表示制程、电压、温度对延时的影响。

        ·I/Opad属性(pad attributes):

         

        主要就是定义I/O引脚的电平属性,告诉你输入是COMS还是TTL,什么时候达到高电平、什么时候是低电平。

     

        ·线负载模型(wire-loads):

       工艺库的线负载模型如下所示:

           

        DC采用wire-load模型在布局前预估连线的延时。通常,在工艺库中,根据不同的芯片面积给出了几种模型(上图所示)。这些模型定义了电容、电阻与面积因子。此外,导线负载模型还设置了slope与fanout_length,fanout-length设置了与扇出数相关的导线的长度。

      有时候,除了扇出与长度,该属性还包括其他参数的值(这个工艺库没有),例如average_capacitance、standard_deviation与number_of_nets,在DC产生导线负载模型时会自动写出这些值。对于超过fanout-length属性的节点,可将该导线分成斜率不同的几段,以确定它的值。

     

    C工艺库剩下的全是标准单元(cell)的描述:如反相器、触发器、与非门、或非门的描述等:

                

          ·标准单元内容概述

      综合库中的每个单元都包括一系列的属性,以描述功能、时序与其他的信息。 在单元的引脚描述中,包含了如下内容:输入引脚的fanout-load属性、输出引脚的max_fanout属性、输入或输出引脚的max_transition属性、输出或者inout引脚的max_capacitance属性。利用这些描述,可以对设计进行DRC(设计规则检查)如果某个单元的输出最大只能接0.2pF的负载,但在实际综合的网表中却连接了0.3pF的负载,这时候综合工具就会报出DRC错误。

      通常,fanout_load与max_fanout一起使用max_transition与max_capacitance一起使用。 如果一个节点的扇出为4,它驱动3个与非门,每个与非门的fanout-load是2,则这三个与非门无法被驱动(因为3*2>4)。

      max_transition通常用于单元的输入引脚,max_capacitance一般用于单元的输出引脚。如果任何节点的transition时间大于引脚的max_transition值,则该节点不能连接。如果发生违例,则DC用一个具有更大max_capacitance值的单元来取代驱动单元。

      在对输出引脚的描述中,给出了该引脚的功能定义,以及与输入弓}脚相关的延时。输入引脚定义了它的引脚电容与方向。这个电容值不能与max_capacitance值相混。DC利用输入引脚的电容值进行延时计算,而max_capacitance仅用来进行设计规则检查。

      对于时序元件中的时钟引脚,专门用clock类型进行说明,如下所示:

         

        注:许多设计者都会抱怨工艺库中对单元的DRC属性设置不当,这是由于库的能力是有限的所致。对于一个设计,综合库的DRC设置可能很合适,而对于另一个设计就可能不太合适。这时候,需要设计者对综合库进行“剪裁”。当然,这种“剪裁”必须比库中的定义更为严格。如将一个库中buffd0的Z端的max_fanout由4.0改为2.0的命令:

        dc_shell> set_addribute  find(pin, ex25/BUFFDO/Z)  max_fanout  2.0

    上述的命令可以写在synopsys-dc.setup文件中。

      (单元的延时)

      在一个单元的综合库中,最核心的是对时序和功耗的描述。一个单元的延时跟以下因素有关:

      器件内部固有的延时、输入转换时间(也称为输入上升/下降时间)、负载(驱动的负载及连线)、温度、电压、制程变化

      前三个因素是由电路本身的特性所决定的,后三个因素是由环境决定的。在实际电路中,输入转换时间、负载与连接单元的电路有关,所以我们只需要列出在不同的输入转换时间、不同的负载下单元的延时就可以了。这个延时包括器件的内部固有延时。此外,利用前面提到K缩放因子,将温度、电压、制程的影响也考虑进来。如下面的这个反相器单元,它的延时就可以通过输入转换时间和负载决定:

                 

    说到单元的延时,不得不说计算单元延时的模型

      Synopsys支持的延时模型包括:CMOS通用延时模型、CMOS分段线性延时模型和CMOS非线性延时查找表模型(Nonlinear Delay Model)。前两种模型精度较差,已经被淘汰,主要用非线性延时模型。下面进行解释非线性延时模型。

        非线性延时模型也称为二维非线性延时模型。在该模型中,用二维列表的形式给出单元在特定的输入转换时间、输出负载下的延迟(包括单元的延时和单元的输出转换时间):

           

       单元的输出转换时间又成为其驱动的下级单入的输ru转换时间。库中每个单元有两个NLDM表。上面的图中,当输出负载和输入转换时间为0.05 pF和0.5 ns时,从表中可查出单元的延迟为0.23 ns,输出转换时间为0.30 ns 。

     

      对于在范围之内的点,可以用插值的方法得到;对于在范围之外的点,可以用外推的方法得到。线性插值如下图所示:

           

    计算延时的公式为:

                    Z=A+BXX+CXY+DXXXY

        其中,Z代表单元的延时,A, B, C, D是系数,X为输出节点电容,Y为输入转换时间。

        输入的上升、下降时间是由上一级输出的上升、下降时间得到的。输出节点的电容可以由负载的输入引脚电容及连线负载计算得到。在综合时,使用导线负载表可以预测导线负载。导线负载模型在综合库中进行了定义。当然,用户也可以自己生成连线负载模型。该模型也是用查找表的方式,列出在不同负载下的平均连线延迟。在布局之后,可以得到更为精确的导线长度。在布线后,可以得到最确切的导线长度。可以用该导线负载来计算最终的延时,以便进行静态时序分析与时序计算。

      使用线性插值的举例:一个标准单元的延迟查找表如下图所示:

             

      在查找表中,根据不同的输入转换时间和输出节点电容,列出了标准单元的延时。例如,当输入节点的转换时间为0.1 ns,输出负载为0.01pF时,单元的延时为0.17 ns。如果单元的输入转换时间为0.2 ns,输出节点电容为0.002 pF,则从表中无法直接查找到延时,需要通过线性插值的方法来求得该值:

      计算延时的第一步,是求出延时公式中的系数A,  B,  C,  D,然后根据实际的输入转换时间和输出电容求出实际的延时。

       假设该单元的输入转换时间为0.2(位于查找表的第1列与第2列之间),输出节点电容为0.003(位于查找表的第1行与第2行之间),这样,我们将查找表中的相应的4值代入延时公式,可得:

        0 .080=A+B*0.1 +C *0.001 +D*0.1*0.001;

        0 .130=A+B * 0 .5+C * 0.001 +D*0.5*0.001;

        0 .170=A+B * 0 .1+C*0.01 +D*0.1*0 .01

        0 .220=A+B * 0.5+C*0.01 +D*0.5*0.01

        求解这4个等式,可得 A=0 .057 52,B=0 .1248,C=9 .9998,D=0 .2。

      接下来,我们将实际的节点电容、输入转换时间代入延时公式,可以得到这种情形下该单元的实际延时为:

        Z=0 .5752+0.1248X0.003+9.9998 X 0.2+0.2X0.2X0.003 (ns)

        单位为ns,输出转换时间、短路功耗的计算与此类似。

      说明:利用DC中的report_power_calculation命令,可以显示出某一节点处energy的具体求解过程;利用DC中的report_delay_calculation命令,可以显示出某一节点处延迟或输出转换时间的具体求解过程。

     

    前面对标准单元库的内容和结构有了一个概述,下面对一个反相器单元一个寄存器单元进行详细解说。

          ·反相器的综合模型

      综合库中主要给出了各端口的功能、电容、功耗及延时等信息(不同的库模型信息种类可能不一样)。反相器的功耗主要分为两部分:静态功耗和动态功耗。 其中静态功耗是指泄漏功耗,动态功耗包括翻转时的短路功耗及节点电容的充放电所消耗的功耗。节点电容充放电消耗的功耗仅跟VDD、节点翻转率及节点电容有关。其中,VDD和节点电容是固定的,节点翻转率跟输入激励有关,需要通过仿真激励进行计算。因此,在综合库中,不列出充放电功耗。而短路功耗跟输入转换时间和节点电容有关,一般以查找表的形式给出(在综合库中,用internal_power表示)。

      具体的反相器的综合模型如下所示:

           

    当然,上面看到的只是部分内容,有些内容折叠起来了比如输入引脚的等效负载、输出引脚的短路功耗等被折叠起来了,下面进行讲解:

           

    引脚A表示反相器的输入(上图),展开后可以看到输入的引脚的等效负载,也就是等效电容的大小。

     

    输出管脚Y有:

           

      里面主要包含了引脚的功能(function)、短路功耗(internal_power)、时序信息(timing)、输出的最大负载(max_capacitance)等信息。

    短路功耗信息(internal_power):

    展开短路信息如下图所示:

         

    短路功耗与A管脚相关联,也就是与A管脚有关系。

      rise_power给出了Y从低到高时的短路功耗,功耗跟输入信号的转换时间(index_1)及节点电容(index_2)有关;根据不同的信息进行查表,表的值就是(value),7X7表示index_1是7,index_2也是7,因此value是7X7=49,如下图所示:

         

    也给出了从高到低的短路功耗(fall_power),功耗跟输入信号的转换时间及节点电容有关;具体内容类似从低到高时的短路功耗,不再详述。

     

    时序信息(timing):

           

    主要包括相关引脚、时序敏感类型、单元延时、转换时间等。

    Cell_rise 给出了Y从低到高时单元的延时,延时跟输入转换时间和节点电容有关:

           

    Rise_transition给出Y从低到高时输出的延时(transtion),跟输入转换时间和节点电容有关:

           

    Cell_fall、fall_transition:则是对应Y从高到低时的单元延时和输出延时,也是跟输入转换时间和节点电容有关。

     

    cell_leakage_power:单元的泄漏功耗

    有时候,也给出在不同条件时的泄漏功耗(也就是查表的方式):

           

    反相器作为组合逻辑最简单、最经典的模型,其综合库的模型内容就如上所示了,下面介绍时序逻辑的。

     

            ·寄存器单元的综合模型

    寄存单元综合库模型主要包括以下内容:

      · 单元面积; 

      ·D端短路功耗; 

      ·D端的建立时间约束和保持时间约束; 

      · 时钟引脚上的短路功耗; 

      · 时钟引脚上的最小脉宽要求; 

      · 输出端的短路功耗; 

      · 输出端的延时;  

      · 输出端的最大负载约束; 

      · 单元的泄漏功耗。

    其综合库内容如下所示:

         

    上面综合库的具体内容下面进行具体叙述:

    D端口(引脚):

    输入端口,主要包含输入的等效负载、短路功耗、时序信息

         

    internal_power,D端消耗的短路功耗

         

      rise_power给出D端由低电平变到高电平时的短路功耗,跟输入转换时间有关,电容为定值:

         

      fall-power则给出D端由高电平变到低电平时的短路功耗,跟输入转换时间有关,电容为定值。

     

    Timing,时序信息:

         

      D的时序信息与“CK”端口有关,Setup_rising表明是setup(建立时间)的时序信息。

      rise-constraint:给出D端由低电平变到高电平时的setup约束,跟D端输入转换时间和时钟的转换时间有关:

         

      fall-constraint则给出D端由高电平变到低电平时的setup约束,跟输入转换时间和时钟的转换时间有关。

     

    前面我们看到,有两个timing,一个既然是建立时间了,那么另外一个就是保持时间了

           

      rise-constraint:给出D端由低电平变到高电平时的hold约束,跟输入转换时间和时钟的转换时间有关:

           

      fall-constraint:给出D端由高电平变到低电平时的hold约束,跟输入转换时间和时钟的转换时间有关。

     

     

    CK端口

    这个是时钟端口,主要给出了输入的负载、最大转换时间约束、短路电流、高低电平的最小脉宽要求,如下图所示。

           

    Internal_power,短路功耗

           

    也是分为CK上升时跟下降时的短路功耗,与D端有关。

     

    min_pulse_width_high、min_pulse_width_low :给出了时钟高低电平的最小脉宽要求。

     

    ff:描述寄存器的功能。

       

    Q端口

       

    主要描述Q的功能,短路功耗,时序信息,输出最大的负载电容

    Internal_power,短路功耗:

         

      rise_power给出了输出端由低电平变到高电平时的短路功耗,跟输入转换时间、Q端负载及QN端负载有关:

         

      fall_power则输出端由高电平变到低电平时的短路功耗,跟输入转换时间、Q端负载及QN端负载有关。

     

    Timing,时序信息

         

    说明Q端口与CK的上升沿有关。

      cell-rise给出Q端由低电平变到高电平时CK到Q的延时,跟输入转换时间和输出节点电容有关:

         

      rise-transitio给出了Q端由低电平变到高电平时Q端转换时间,跟输入转换时间和输出节点电容有关:

         

      cell-fall给出了Q端由高电平变到低电平时CK到Q的延时,跟输入转换时间和输出节点电容有关;

      fall-transition给出了Q端由高电平变到低电平时Q端转换时间,跟输入转换时间和输出节点电容有关。

     

    max_capacitance,则是最大输出负载电容约束。 

     

    QN管脚,跟Q管脚类似,不进行陈述了。

    cell_leakage_power给出了默认单元漏电流大小。而下面的不同漏电流,则是根据端口信号处在不同状态时的漏电流大小:

         

    注:对于有复位信号的寄存器,还有可能有下面的信息:

      · 复位引脚上的短路功耗;

      · 复位引脚上的最小脉宽要求; 

      · 复位引脚上的recovery/removal时序约束; 

      · 输出端的输出转换时间(相对于时钟); 

      · 输出端的输出转换时间(相对于异步复位信号);

      · 输出端的延时(相对于异步复位信号); 

     

     

     

    (2)DC的设计对象

      在了解了综合库之后,下面介绍一下DC的设计对象,虽然这个设计对象相对于综合库没有那么重要,但是还是要了解一下的。

      对于一个verilog代码模块,我们知道这是一个模块的名字是什么,这个模块的功能是什么,这个模块有哪些端口等等信息。但是对于DC来说,它不想我们那么理解,给它一个verilog模块,它把这个模块的内容当做设计对象(简称对象)来看。DC支持的对象和解释如下所示:

         

    DC支持8中设计对象:

      Design :具有某种或多种逻辑功能的电路描述;

      Cell :设计的 instance;

      Reference :cell 或 instance 在库中定义的名字;

      Port :design 的输入、输出;

      Pin :design 中 cell 的输入、输出;

      Net :ports 和 pins 之间或 pins 之间的信号名;

      Clock :被定义为时钟源的 pin 或 port;

      Library :cell 的集合,如: starget_library,link_library;

    在DC读入设计时候,可以通过下面命令查看这些对象:

         

      Query:访问某一个对象,

      Sizeof:查某一个(对象)集合的大小。

    对象具有某些属性,比如:

      端口(port)的属性有:方向、驱动单元、负载、最大电容约束等等

      单元(cell)的属性有:层次化、不触碰 等待;

      时钟的属性有:周期、抖动等;

    写约束,就是通过对设计对象的属性进行约束,至于要约束什么,怎么约束,在后面进行介绍。

     

     

    (3)Design Ware 库

        DesignWare是Synopsys提供的知识产权(Intellectual Property,简称IP)库。IP库分成可综合IP库(synthesizable IP,SIP) ,验证IP库(Verification IP,VIP)和生产厂家库(foundry 1ibraries)。IP库中包含了各种不同类型的器件。这些器件可以用来设计和验证ASIC, SoC和FPGA。库中有如下的器件:

      ·积木块(Building Block)IP(数据通路、数据完整性、DSP和测试电路等等)。

      ·AMBA总线构造(Bus Fabric)、外围设备(Peripherals)和相应的验证IP。

      ·内存包(Memory portfolio)(内存控制器、内存BIST和内存模型等等)。

      ·通用总线和标准I/O接口(PCI Express,PCI-X,PCI和USB)的验证模型。

      ·由工业界最主要的明星IP供应商提供的微处理器(Microprocessor)和DSP核心。

      ·生产厂家库(Foundry Libraries)。

       ·板级验证IP<Board verification IP)。

      ·微控制器(Microcontrollers,如8051和6811)。

      ·等等

      这里主要介绍集成在DC综合工具中的designware foundation库。所有的IP都是事先验证过的、可重复使用的、参数化的、可综合的,并且不受工艺的约束。

    常用的designware foundation库单元如下所示:

         

          

           

         

          

         

         

      使用IP库中的器件,可以用运算符号推论法(Operator Inferencing)或功能推论法(Functional Inferencing)。运算符号推论法是直接在设计中使用“+、一、*、>、一和<”等的运算符号。功能推论法是在设计中例化(instantiate) DesignWare中某种算术单元,例如直接指定用库中的DWF_ mult_ tc,DWF_ div_ uns和DWF_sqrt_tc单元。

      由于DesignWare库中的所有器件都是事先验证过的,使用该IP库我们可以设计得更快,设计的质量更高,增加设计的生产力和设计的可重复使用性,减少设计的风险和技术的风险。对于每个运算符号,一般地说DesignWare库中会有多个结构(算法)来完成该运算。这样就允许DC在优化过程中评估速度/面积的折衷,选择最好的实现结果。对于一个给定的功能,如果有多个DesignWare的电路可以实现它,Design Compiler将会选择能最好满足设计约束的电路。此外使用DesignWare中的DW Foundation库是需要许可证的(license) , DW Foundation库提供了更好的设计质量(Quality of Result)。

      使用DesignWare中IP的方法如下图所示:

            

      Design Compile自动选择和优化算术器件。对于算术运算,我们并不需要在DC中指定标准的(基本的)综合库standard.sldb。标准的综合库standard.sldb包含内置的HDL运算符号,综合时DC会自动使用这个库。如果我们要使用性能更高的额外的IP库,例如DW_ foundation.sldb,我们必须指定这些库,如下所示:

      #Specify for use during optimization

      set  synthetic_library  dw_foundation.sldb

      #Specify for cell resolution during link

      lappend link_library    $synthetic_library

    本文的总结主要参考了《专用集成电路设计使用教程》、《数字IC系统设计》,局部图片来自这两本书。

  • 相关阅读:
    [CodeForces]Codeforces Round #429 (Div. 2) ABC(待补)
    About Me
    2018-06-14
    Codeforces Codeforces Round #484 (Div. 2) E. Billiard
    Codeforces Codeforces Round #484 (Div. 2) D. Shark
    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings
    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes
    Codeforces Avito Code Challenge 2018 D. Bookshelves
    Codeforces Round #485 (Div. 2) D. Fair
    Codeforces Round #485 (Div. 2) F. AND Graph
  • 原文地址:https://www.cnblogs.com/IClearner/p/6622524.html
Copyright © 2011-2022 走看看