1. 程式人生 > 實用技巧 >【第三章:標準單元庫 下】靜態時序分析聖經翻譯計劃

【第三章:標準單元庫 下】靜態時序分析聖經翻譯計劃

本文由知乎趙俊軍授權轉載,知乎主頁為https://www.zhihu.com/people/zhao-jun-jun-19

3.6 黑盒的介面時序模型

本節將介紹黑盒(任意模組或塊)的IO介面時序弧,時序模型將捕獲黑盒(black box)IO介面(interface)的時序。黑盒的介面時序模型可以具有組合邏輯弧,也可以有時序邏輯弧。通常,這些時序弧也可能取決於狀態。

對於如圖3-11所示的例子,可以將時序弧分為以下幾類:

  • 輸入到輸出的組合邏輯弧:這對應於直接從輸入到輸出的組合邏輯路徑,例如從輸入埠FIN到輸出埠FOUT。
  • 輸入時序邏輯弧:這對應於連線到觸發器D引腳的輸入埠的建立時間或保持時間。通常,在將模組的輸入埠連線到觸發器的D引腳之前,可以存在一些組合邏輯。這樣的一個例子是在輸入埠DIN上相對於時鐘埠ACLK的建立時間檢查。
  • 輸出時序邏輯弧:這類似於觸發器時鐘端到輸出端Q的傳播延遲。通常,觸發器輸出引腳與模組輸出埠之間可以存在一些組合邏輯。一個示例是從時鐘BCLK到觸發器UFF1的輸出引腳再到輸出埠DOUT的路徑。
  • 非同步輸入時序弧:這類似於觸發器非同步輸入引腳的恢復時間和撤銷時間時序約束,例如輸入埠ARST到觸發器UFF0的非同步清零引腳。

除上述時序弧外,在黑盒的外部時鐘引腳上還可以進行脈衝寬度檢查。還可以定義內部節點(node)並在這些內部節點上定義衍生時鐘(generated clock),從而指定在這些節點之間的時序弧。總之,黑盒模型可以具有以下時序弧:

  • 純組合邏輯路徑的輸入到輸出時序弧(Input to output timing arcs)
  • 從同步輸入埠到相關時鐘埠的建立時間和保持時間時序弧(Setup and hold timing arcs)
  • 從非同步輸入埠到相關時鐘埠的恢復時間和撤銷時間時序弧(Recovery and removal timing arcs)
  • 從時鐘埠到輸出埠的輸出傳播延遲(Output propagation delay)

如上所述的介面時序模型並非旨在捕獲黑盒的內部時序,而只是捕獲其介面上的時序。

3.7 高階時序建模

非線性延遲模型(NLDM)這類的時序模型是基於輸出負載電容和輸入過渡時間來表示通過時序弧的延遲的。實際上,單元輸出的負載不僅包括電容還應當包括互連電阻(interconnect resistance)。由於NLDM方法假設輸出負載為純電容,因此互連電阻成為了一個問題。即使互連電阻不為零,但當互連電阻的影響較小時,仍使用了這些NLDM模型。在互連電阻存在的情況下,延遲的計算方法通過在單元的輸出端獲得等效的有效電容(effective capacitance)來改進NLDM模型。延遲計算工具中使用的“有效”電容法獲得的等效電容可保證單元輸出延遲與具有RC互連的單元輸出延遲相同。有效電容法將在5.2節裡的延遲計算部分再詳細介紹。

隨著特徵尺寸的縮小,由於波形變得高度非線性,互連電阻的影響會導致較大的誤差,各種建模方法為單元的輸出驅動能力提供了更高的精度。通常,這些方法通過用等效電流源對驅動器(driver)的輸出級進行建模來獲得更高的精度。例如CCSComposite Current Source)複合電流源或ECSMEffective Current Source Model)有效電流源模型:CCS時序模型通過使用隨時間變化且依賴電壓的電流源,為建模單元輸出驅動能力提供了更高的精度。通過為不同情況下的接收引腳電容(receiver pin capacitance)和輸出充電電流(output charging currents)指定詳細時序模型,可以提供時序資訊。接下來描述CCS模型的細節。

3.7.1 接收引腳電容

接收引腳電容對應於NLDM模型中指定的輸入引腳電容(input pin capacitance)。與NLDM模型的輸入引腳電容不同,CCS模型允許在過渡波形的不同部分分別指定接收引腳電容。由於互連RC和由單元內部輸入裝置的米勒效應(Miller effect)所引起的等效輸入非線性電容,接收引腳電容值會在過渡波形的不同點處發生變化。因此,該電容值在波形的初始部分(leading portion)與在波形的後續部分(trailing portion)的建模是不同的。

接收電容可以在引腳級別(pin level)上指定(如NLDM模型),通過該引腳的所有時序弧都使用該電容值;或者,接收電容可以在時序弧(timing arc level)級別上指定,在這種情況下可以為不同的時序弧指定不同的電容模型。接下來將介紹這兩種指定接收引腳電容的方法。

在引腳級別指定電容

當在引腳級別指定電容時,接收引腳電容的一維表格示例如下:

index_1指定了此引腳輸入過渡時間的索引值,一維表格values為波形的初始部分指定了輸入引腳上用於上升沿波形的接收電容。

與上面示例中的receiver_capacitance1_rise表格類似,receiver_capacitance2_rise表格為波形的後續部分指定了輸入引腳上用於上升沿波形的接收電容。而下降電容(用於下降沿輸入波形的引腳電容)分別由表格receiver_capacitance1_fallreceiver_capacitance2_fall指定。

在時序弧級別指定電容

接收引腳電容值也可以在時序弧級別上,根據輸入過渡時間和輸出負載以二維表格的形式來指定。以下給出了在時序弧級別指定電容的示例。本示例指定了輸入引腳IN上波形初始部分的接收引腳上升電容,該電容取決於輸入引腳IN上的過渡時間和輸出引腳OUT上的負載。

上面的示例指定了receiver_capacitance1_rise的模型,庫中也包含有關receiver_capacitance2_risereceiver_capacitance1_fallreceiver_capacitance2_fall的類似定義。

下表總結了四種不同型別的接收電容型別。如上所述,可以在引腳級別將它們指定為一維表格,或在時序弧級別將它們指定為二維表格。

3.7.2 輸出電流

在CCS模型中,非線性時序表現為輸出電流。輸出電流資訊被指定為一個查詢表,該表的查詢取決於輸入過渡時間和輸出負載。

輸出電流會根據輸入過渡時間和輸出負載電容的不同組合被指定,對於每一個組合,都將分別指定一個輸出電流波形。本質上,此處的波形指的是隨時間變化的輸出電流值。以下示例使用output_current_fall指定了用於下降輸出波形的輸出電流:

reference_time是指輸入波形超過延遲閾值的時間,index_1index_2是指輸入過渡時間和所使用的輸出負載電容,而index_3是時間。index_1index_2(輸入過渡時間和輸出負載電容)只能有一個值,index_3是指時間值,表值是指相應的輸出電流。因此,對於給定的輸入過渡時間和輸出負載,輸出電流波形是時間的函式。同樣,還指定了用於輸入過渡時間和輸出電容的其他組合的查詢表。

類似地可以使用output_current_rise去指定上升輸出波形的輸出電流。

3.7.3 串擾噪聲分析模型

本節介紹用於串擾噪聲(或毛刺)分析的CCS模型,又被稱為CCSNCCS Noise)模型。CCS噪聲模型是結構(structural)模型,並針對單元內的不同溝道連線塊-CCB(Channel Connected Blocks)表示。

什麼是CCB? CCB是指單元的源極(source)-漏極(drain)的溝道(channel)連線部分。例如,單級(single stage)單元(例如反相器、與非門和或非門單元)僅包含一個CCB,即整個單元僅通過一個溝道連線區域進行連線,而多級單元(例如與門和或門單元)包含多個CCB。

通常僅為由單元輸入驅動的第一個CCB和驅動單元輸出的最後一個CCB指定CCSN模型,並且會使用穩態電流、輸出電壓和傳播噪聲模型來指定這些CCSN模型。

對於單級組合邏輯單元(例如與非門和或非門單元),將為每個時序弧指定CCS噪聲模型。 這些單元只有一個CCB,因此模型將會是從單元的輸入引腳到輸出引腳的。

以下是一個與非門單元的模型示例:

現在我們描述CCS噪聲模型的屬性:ccsn_first_stage欄位表示該模型用於與非門單元的第一級CCB。如前所述,與非門單元只有一個CCB。is_needed欄位幾乎始終為true,但天線單元(antenna cell)等非功能性單元除外。stage_type欄位中的both表示該級CCB同時具有上拉(pull-up)和下拉(pull-down)結構。miller_cap_risemiller_cap_fall分別代表輸出上升和下降過渡時的米勒(Miller)電容值。

直流電流

dc_current表中為輸出引腳上針對輸入和輸出引腳電壓不同組合的的直流電流,其中index_1為輸入電壓,index_2為輸出電壓, 二維表格中的數值為CCB輸出處的直流電流。輸入電壓和輸出電流均在庫中指定單位(通常為伏特和毫安)。對於從與非門單元的輸入引腳IN1到輸出引腳OUT的CCS噪聲模型示例,當輸入電壓為-0.9V並且輸出電壓為0V時,輸出端的直流電流為0.42mA。

輸出電壓

output_voltage_riseoutput_voltage_fall表中分別包含CCB輸出上升和下降的時序資訊。這些表格是CCB輸出節點的多維表格,指定了針對不同輸入過渡時間和輸出電容的上升和下降輸出電壓。每個表格的index_1指定了軌到軌輸入過渡時間,index_2指定了輸出電容,index_3指定了輸出電壓超過特定閾值點的時間(在這種情況下,為0.9V的Vdd電源的30%,70%和90%)。在每個多維表中,電壓交叉點(voltage crossing points)是固定的,並且CCB輸出節點與電壓交叉時的時間值在index_3中指定。

噪聲傳播

propagated_noise_high模型和propagated_noise_low模型指定的多維表格提供了通過CCB的噪聲傳播資訊。這些模型表徵了串擾毛刺(或噪聲)從CCB的輸入到輸出的傳播,表徵時輸入端使用了對稱的三角波。噪聲傳播的多維表被組織為了多個表,這些表指定了CCB輸出處的毛刺波形。這些多維表包含:

  • 輸入毛刺幅值(index_1
  • 輸入毛刺寬度(index_2
  • CCB輸出電容(index_3
  • 時間(index_4

表格中的數值指定了CCB輸出電壓(或通過CCB傳播的噪聲)。

兩級單元的噪聲模型

與單級單元一樣,兩級單元(例如與門和或門單元)的CCS噪聲模型通常被描述為時序弧的一部分。由於這些單元包含兩個單獨的CCB,因此需要分別為ccsn_first_stageccsn_last_stage指定噪聲模型。例如,對於兩輸入與門單元,CCS噪聲模型由第一級和最後一級相互獨立的模型組成,如下所示:

為IN2引腳指定的ccsn_last_stage中的模型與為IN1引腳指定的ccsn_last_stage中的模型是相同的。

多級單元和時序單元的噪聲模型

通常將較為複雜的組合邏輯單元或時序邏輯單元的CCS噪聲模型描述為引腳規範(pin specification)的一部分,這與前面在單級或二級單元的CCS噪聲模型中以引腳對(pin-pair)為基礎,指定為時序弧的一部分是不同的。通常由所有輸入引腳的ccsn_first_stage模型和所有輸出引腳的ccsn_last_stage模型描述複雜的多級和時序單元。這些單元的CCS噪聲模型不是時序弧的一部分,但通常是為引腳指定的。

如果輸入和輸出之間的內部路徑多達兩級CCB,則噪聲模型也可以表示為引腳對時序弧的一部分。通常,多級單元中可以將某些CCS噪聲模型指定為引腳對時序弧的一部分,而其他一些噪聲模型可以通過引腳說明來指定。

下面的示例使用引腳說明以及時序弧的一部分指定了CCS噪聲模型:

請注意,上述觸發器單元的某些CCS模型是通過引腳定義的。使用輸入引腳上的引腳說明定義的指定為ccsn_first_stage,而輸出引腳QN上的CCS模型指定為ccsn_last_stage。另外,兩級CCS噪聲模型被描述為CDN到Q的時序弧的一部分。因此本示例表明,一個單元可以具有指定為引腳說明一部分和時序弧一部分的CCS模型。

3.7.4 其它噪聲模型

除了上述CCS噪聲模型之外,某些單元庫還提供了其他模型來表徵噪聲。早在CCS噪聲模型出現之前,就已經使用了其中一些模型。如果CCS噪聲模型可用,則不需要這些附加模型。為了完整起見,我們在下面介紹一些早期的噪聲模型。

直流裕度模型(Models for DC margin):直流裕度是指單元輸入引腳允許的最大直流變化(DC variation),它將使單元保持穩定狀態,即不會在輸出端引起毛刺。例如,低電平輸入的直流裕度指的是輸入引腳上最大的直流電壓值,而不會在輸出端引起任何電平跳變。

抗擾度模型(Models for noise immunity):抗擾度模型指定輸入引腳可以允許的毛刺幅度(glitch magnitude)。通常以二維表的形式來描述,其中毛刺寬度和輸出電容為兩個索引量,表中的值對應於輸入引腳可以允許的毛刺幅度。這意味著任何小於指定幅度和寬度的毛刺都不會通過單元傳播。抗擾度模型還具有不同變形形式,例如:

  • noise_immunity_high
  • noise_immunity_low
  • noise_immunity_above_high
  • noise_immunity_below_low

3.8 功耗建模

單元庫中也包含與單元功耗有關的資訊,包括有功功率(active power)以及待機(standby)或漏電(leakage)功率。顧名思義,有功功率與設計中的行為有關,而待機功率是待機模式下的功耗,這主要是由於漏電引起的。

3.8.1 有功功率

有功功率與單元輸入和輸出引腳上的行為有關。單元中的有功功率是由於輸出負載的充電以及內部的開關引起的,通常分別稱這兩個為輸出開關功率(output switching power)和內部開關功率(internal switching power)。

輸出開關功率與單元型別無關,僅取決於輸出負載電容、開關頻率和供電電源;內部開關功率取決於單元的型別,因此該值會包含在單元庫中,接下來將介紹庫中的內部開關功率。

內部開關功率在單元庫中被稱為internal power,這是當單元的輸入或輸出處於活動狀態時單元內部的功耗。對於組合邏輯單元,輸入引腳的電平跳變會導致輸出引腳的電平跳變,從而導致內部開關功耗。例如,每當輸入引腳電平跳變(上升或下降)時,反相器單元就會消耗功率。 庫中描述的內部開關功率如下所示:

上面的示例展示了單元從輸入引腳A到輸出引腳Z1的功耗,模板中的2x2表是根據引腳A上的輸入過渡時間和引腳Z1上的輸出電容來確定的。注意,儘管該表包含了輸出電容,但表中的值僅對應於內部開關,不包括輸出電容的影響。該值表示每個開關轉換(上升或下降)時在單元中耗散的內部能量,單位是從庫中的其他單位匯出的(通常電壓以伏特V為單位,電容以皮法拉pF為單位,並且表示為以皮焦耳pJ為單位的能量)。因此,庫中的內部開關功率實際上是指每次開關轉換時內部所消耗的能量。

除了內部開關功率表之外,上面的示例中還給出了電源引腳、接地引腳的說明,並且指定了可將單元斷電的條件。這些構造允許在設計和方案中使用多個電源,在這些情況下可以關閉不同的電源。下面展示了單元的電源引腳說明:

功率描述的語法允許上升和下降(指輸出過渡方向)功率使用單獨的構造。就像時序弧一樣,功率描述也可能取決於狀態。例如,可以將異或門(XOR)單元的狀態相關功耗指定為取決於各種輸入的狀態。

對於組合邏輯單元,開關功率是基於輸入-輸出引腳對指定的。但是,對於諸如具有互補輸出Q和QN的觸發器之類的時序單元來說,CLK-> Q轉換也會導致CLK-> QN轉換。因此,該庫可以將內部開關功率指定為三維表格,如下所示。下例中的三個維度分別是CLK的輸入壓擺(input slew)和Q與QN的輸出電容。

即使輸出和內部狀態沒有轉換,也可以消耗開關功率。一個常見的例子是在觸發器的時鐘引腳上切換(toggle)的時鐘。觸發器在每次時鐘切換時都會消耗功率,通常是由觸發器單元內部反相器的開關所帶來的。即使觸發器輸出未切換,也會消耗由於時鐘引腳切換引起的功率。因此,對於時序邏輯單元,輸入引腳功率(input pin power)是指單元內部的功耗,即輸出不切換時的功耗。以下例子中描述了輸入引腳功率:

上述例子展示了CLK引腳切換時的功率說明,它表示即使輸出未切換,時鐘切換也會導致功耗。

時鐘引腳的功率是否被重複計算了?

注意,觸發器還包含由於CLK-> Q轉換引起的功耗。因此重要的是,CLK-> Q功率描述表格中的值是不包括與CLK內部功率有關的影響的,CLK內部功率與輸出Q不切換時的狀況相對應。

以上內容涉及到了應用工具對功率表使用的一致性,能夠確保在功率計算期間與時鐘輸入有關的內部功率不會被重複計算。

3.8.2 漏電功率

大多數標準單元的設計都僅在輸出或狀態發生變化時才消耗功率。單元通了電但沒有任何行為時,所有功耗都歸因於洩漏電流(leakage current)。洩漏可能是由於MOS器件的亞閾值電流引起的,也可能是由於通過柵極氧化物的隧穿電流引起的。在以前的CMOS工藝技術中,漏電功率可以忽略不計,並且在設計過程中並不是主要考慮因素。但是,隨著技術的發展,漏電功率變得越來越大,與有功功率相比,漏電功率已經無法忽略不計了。

如上所述,漏電功率主要有兩個來源:MOS器件中的亞閾值電流和柵氧化物隧穿。通過使用高閾值電壓單元,可以降低亞閾值電流;然而,由於高閾值電壓單元的速度較低而存在一個折中(trade-off):高閾值電壓單元的漏電較小,但速度較慢。同樣,低閾值電壓單元的漏電較大,但速度較高。無論是使用高閾值電壓還是低閾值電壓的單元,柵極氧化物隧穿帶來的影響都差不多。因此,控制漏電功率的可能方法是使用高閾值電壓的單元。類似於在高閾值電壓和標準閾值電壓單元之間進行選擇,設計中使用的單元強度(strength)也是一種漏電和速度之間的折中。強度較高的單元具有較高的漏電功率,但速度較高。與功率管理有關的折中將在10.6節中詳細介紹。

MOS器件的亞閾值洩漏電流與溫度具有很強的非線性特性,在大多數工藝技術中,隨著器件溫度從25°C升高到125°C,亞閾值洩漏電流可能會增加10倍至20倍。柵極氧化物隧穿帶來的影響基本不隨溫度或器件閾值電壓而改變,在100nm及以上工藝技術中可以忽略的柵極氧化物隧穿已成為65nm或更精細技術在較低溫度下漏電的主要原因。例如,對於65nm或更精細的工藝技術,柵極氧化物隧穿漏電量可能等於室溫下的亞閾值漏電量。而在高溫下,亞閾值漏電仍然是導致漏電功率的主要因素。

庫中的每個單元都被指定了漏電功率。例如,反相器單元的漏電功率可能描述如下:

這是單元中耗散的漏電功率,漏電功率單位在庫的標頭檔案中指定,通常以納瓦為單位。通常,漏電功率還取決於單元的狀態,可以使用when條件指定狀態相關值。

例如,一個反相器單元可以具有如下描述:

其中I是反相器單元的輸入引腳。需要注意的是,上例中的描述還包括了一個預設值(在when條件之外),該預設值通常是在when條件內指定值的平均值。

3.9 單元庫中的其它屬性

除時序資訊外,庫中的單元描述還指定了單元面積、功能和時序弧的SDF條件。這些將在本節中進行簡要描述,有關更多詳細資訊,請參閱Liberty手冊。

單元面積

面積描述中指定了一個單元或一組單元的面積:

area:2.35

上面指定了單元的面積為2.35個面積單位,這可以代表單元實際使用的矽面積,也可以是面積的相對測量值。

單元功能

功能描述中指定了一個引腳或一組引腳的功能:

上面指定了一個兩輸入與門單元輸出引腳Z的邏輯功能。

SDF條件

SDF條件屬性支援標準延遲格式SDF(Standard Delay Format)檔案的生成以及在反標(backannotation)期間的條件匹配。就像when條件指定用於時序分析的狀態相關模型的條件一樣,SDF標註(annotation)時狀態相關時序的相應條件由sdf_cond來表示。以下是一個示例:

3.10 特徵和工作條件

單元庫中還會指定建立該庫的特徵(characterization)和工作條件。例如,庫檔案的頭部可能包含以下內容:

工作條件(nom_processnom_temperaturenom_voltage)指定了對庫進行表徵的工藝、電壓和溫度, 也指定了使用該庫中單元的條件。如果特徵和工作條件不同,則需要對延遲計算過程中獲得的時序值進行降額(derate)處理, 這可以通過使用庫中指定的降額係數(k-係數)來實現。

在除用於表徵之外的條件下使用降額獲得時序值會導致時序計算不準確。只有當無法在預期的條件下表徵庫時,才能使用降額過程。

什麼是工藝變數?

與作為物理量的溫度和電壓不同,工藝是不可量化的變數。就數字特徵和驗證而言,它可能是緩慢(slow)、典型(typical)或快速(fast)的工藝之一。因此,工藝值為1.0(或任何其它值)是什麼意思?答案在下面。

庫的表徵是一個耗時的過程,針對各種工藝角(process corner)對庫進行表徵可能需要數週的時間,工藝變數的設定使得以特定工藝角為特徵的庫可以用於不同工藝角的時序計算。工藝的k-係數可用於完成從特徵庫工藝到目標工藝的延遲降額。如上所述,降額係數的使用在時序計算期間引入了不準確性,跨工藝條件進行降額尤其不準確,因此很少採用。總而言之,指定不同工藝變數值(例如1.0或任何其它值)的唯一功能就是在少數情況下允許跨工藝條件進行降額處理。

3.10.1 使用K-係數降額

如上所述,當工作條件不同於表徵條件時,降額係數(或稱k-係數)可用於計算延遲,k-係數是近似係數。庫中k-係數的示例如下所示:

當延遲計算過程中工作條件的工藝、電壓或溫度與庫中的標稱條件不同時,可使用這些係數來進行計算。注意,k_volt係數為負,這意味著延遲隨著電壓的增加而減小,而k_temp因子為正,這意味著延遲通常隨溫度的升高而增加(除非單元具有2.10節中所描述的溫度反轉現象)。k-係數的用法如下:

  • \(降額後延遲 = 庫中原始延遲 * (1+ k_{process} * \Delta_{process}+k_{volt} * \Delta_{volt}+k_{temp} * \Delta_{temp})\)

例如,假設使用slow工藝模型在1.08V和125°C下表徵了一個庫。如果要獲得1.14V和100°C的延遲,則slow工藝模型的單元上升延遲可以通過以下計算獲得:

  • \(降額後延遲 = 庫中原始延遲 * (1 + k_{volt\_cell\_rise} * 0.06 - k_{temp\_cell\_rise} * 25)\)

假設使用上例中的k-係數代入以上計算公式,可得:

  • \(降額後延遲 = 庫中原始延遲 * (1 - 0.42 * 0.06 - 0.0012 * 25)= 庫中原始延遲 * 0.9448\)

可見,在降額條件下的延遲約為原始延遲的94.48%。

3.10.2 庫中各單位

單元描述中數值的單位都是在庫中指定的,可使用Liberty命令集在庫檔案中宣告單位。電壓、時間、電容和電阻的單位宣告如下例所示:

在本書中,我們假設庫中時間單位為納秒(ns),電壓單位為伏特(V),每轉換一次的內部功率單位為皮焦耳(pJ),漏電功率單位為納瓦(nW),電容單位為皮法(pF),電阻單位為Kohms,面積單位為平方微米,但明確有特殊說明的情況除外。