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系統設計》,局部圖片來自這兩本書。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM