本文如果有錯,歡迎留言更正;此外,轉載請標明出處 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系統設計》,局部圖片來自這兩本書。