STA | 哐!一文打盡 SOCV / POCV

去年一年分了九次填了SOCV / POCV 這個大坑,整合到一塊兒,方便查閱。關於設計餘量跟各類Variation 模型《好文共賞 | 淺談芯片設計——設計餘量,Design Margin》這篇文章提出了有意思的觀點,值得一讀。


SOCV / POCV 數學模型



工藝誤差自集成電路誕生之日起,就是一個沒法規避的因素,芯片製造過程不比生個娃簡單,且每個過程都極其精細,即便極盡所能地控制製造過程的誤差,但隨着工藝進步,工藝誤差對芯片性能的影響卻日漸凸現。爲了模擬工藝誤差對芯片性能的影響,引入了On chip variation模型,40nm 以前簡單的flat derate模型基本能夠覆蓋大部分狀況,且不過於悲觀到不能接受。算法


但進入40 nm 以後flat derate 已再也不是一個『經濟』的模型,因此引入了更復雜的AOCV (Advanced OCV) 模型,考慮depth 跟 distance的影響,此時AOCV table的背後已有『統計學』的支撐,即所謂的SSTA (statistical staic timing analysis). 但限於runtime 當今STA 默認都是基於GBA (Graph Based Analysis) 進行timing 分析,這就使得Depth 的計算並不精確,從而致使過於悲觀,若是用PBA (Path Based Analysis) 方式來計算Depth runtime又不能接受。微信


因而進入16nm 以後,一種新的OCV 模型開始被普遍使用,C家稱之爲SOCV (statistical OCV), S家稱之爲POCV (Parametric OCV), 除了名字的差異,背後都是統計學都是正態分佈,背後的算法也基本一致。由於SOCV / POCV 再也不是簡單的設一個derate 值或查一個表格,而是要作一系列計算,正是由於這看似複雜的一系列計算,常常讓習慣於查表的老硅農暈頭轉向。其實這就是機率論中最基本的一些概念跟計算,難道大家忘了當年高分拿下機率論這事兒了嗎?app


機率論中涉及到的隨機變量分離散隨機變量和連續隨機變量,芯片製造過程當中的工藝誤差屬於連續隨機變量範疇,因此在進入SOCV / POCV 以前,先來捋清除幾個概念:隨機變量、機率函數、累積分佈函數、機率密度函數、均值、方差。溫習了這些概念以後,再看SOCV / POCV 一切只是套公式,並沒想象中那麼龐大複雜。dom


隨機變量 (Random Variable):在現實世界中,許多量是沒法準確預測的,故常用隨機變量來表示。在學數字集成電路時,涉及最多的一個跟隨機變量相關的概念應該是管子的閾值電壓。ide


Chip 1函數

Chip 2工具

Chip 3性能

Chip 4測試

Vth

0.20ui

0.21

0.24

0.28


機率函數 (Probability):若是運行大量測試,會發現隨機變量的值一般遵循必定規律。隨機變量處於x的可能性稱爲機率,一般用P(x) 表示。

累積分佈函數(Cumulative Distribution Function):又叫分佈函數,用於描述一個實隨機變量X的機率分佈,是機率密度函數的積分。它就是機率函數取值的累加結果。

機率密度函數 (ProbabilityDensity Function):用於描述隨機變量落在特定值範圍內的機率,這個機率爲機率密度函數在這個區域上的積分。以下圖,該隨機變量落在-1σ ~ 1σ間的機率是68.27%。SOCV / POCV 中sigma的取值,就是根據這個機率得來,所取sigma 的值須要保證大部分狀況能夠被覆蓋到。 


均值 (mean):用於表示機率分佈或以該分佈爲特徵的隨機變量的集中趨勢的一種度量。是隨機試驗在一樣的機會下重複屢次的結果計算出的等同「指望」的平均值。



方差 (Sigma σ):用於描述隨機變量與平均值的誤差程度。方差在統計描述和機率分佈中各有不一樣的定義,並有不一樣的公式。在統計描述中,方差用來計算每個變量(觀察值)與整體均數之間的差別。爲避免出現離均差總和爲零,離均差平方和受樣本含量的影響,統計學採用平均離均差平方和來描述變量的變異程度。

正態分佈 (Normal distribution) 也稱高斯分佈 (Gaussian distribution); 對於正態分佈,隨機變量落在-1σ ~ 1σ間的機率是68.27%,落在-2σ ~ 2σ間的機率是95.45%,落在-3σ ~ 3σ間的機率是99.73%。這也是爲何SOCV / POCV 取3σ 的緣由所在。


跋:SOCV / POCV就是一個基於正態分佈的OCV 模型,本篇先捋基本概念,概念清除了以後再細看這一模型在STA 中的應用

爲啥要SOCV / POCV 



STA無疑是數字集成電路設計實現方法學中最『漂亮』的模型之一,可是隨意着工藝進步,local varition 的隨機性及重要性增長,傳統STA 的侷限性日漸突出。大概在十五年前,SSTA成了一個研究熱點,相較於傳統的STA,SSTA 再也不是針對單一的timing 進行分析,它的分析結果是一個統計分佈,經過這個統計分佈結果,可獲得電路處在某個timing 點的機率。

"Statistical timing is a great approach," Keller said. "It's the most accurate I can think of, but it's also the most expensive. Except for IDMs, nobody could really deploy it in production because it required too much run time and memory."


local varition 本就是個正態分佈(類正太分佈),因此SSTA 能夠近乎精確地對其進行模擬。然而因爲SSTA 的複雜性,基本在正式工程應用中沒法落地,因此這麼些年來,都仍是在傳統STA 模型上作精化,而『精化』的重頭戲之一就是On chip variation。從OCV 到AOCV 到SOCV / POCV, 逐漸的加入更多因素,以獲得更精確的模擬。

  • OCV: 同一個corner 同一段path 上的全部cell 用一個derate 值;不考慮path 的depth 跟 distance, 也不考慮cell 的類型。因此結果對大部分path 而言過於悲觀,而對另外一小部分path 而言又過於樂觀。

  • AOCV: 即所謂的stage based OCV (SBOCV), 將derate 模擬成path depth 跟 distance 的函數,因此對同一段path 上不一樣depth、不一樣類型的cell 有不一樣的derate 值,並且同時還會考慮spatial 的影響 ( 即distance ) , 因此相較於OCV 更精確,可是AOCV 有兩個侷限:一是沒有考慮cell 的trantion 跟 load 對variation 的影響,也沒有考慮transition 的variation;二是depth 的計算,用GBA 過於悲觀,而PBA runtime 又難以接受。


  • SOCV / POCV: 統計OCV 是一種使用單一local variable 的SSTA 簡化模型,對每一個cell 分別建模,cell 的derate 再也不是path depth 的函數,而是一個基於單一 µ(均值) 和σ(方差) 的高斯隨機變量函數。SOCV / POCV 能夠彌補AOCV 的侷限,它考慮cell 的transition 跟 load 對variation 的影響,也考慮variation 對cell transition 的影響;因爲其不依賴於depth, 因此也不受depth 精度的影響。


注:1)同一段path 是指,在STA 能夠分別對data/clock 的late/early 設不一樣的derate值,因此用 "同一段path" 予以描述。2)Random variation 經過SPICE 作Monte Carlo 仿真獲得。3)Spatial variation 用distance based OCV 來模擬,對於AOCV 跟 SOCV都須要,這部分variation 經過硅片測試獲得。 

此時應該回顧一下《論STA:SOCV / POCV 開篇》,SOCV / POCV 的根本是高斯分佈,作SOCV / POCV STA 分析時,須要有描述derate 值的LVF 文件,一般LVF 文件由foundry 提供。

POCV / SOCV具備以下特色:

  • 每一級delay 都是一個(µ,σ) 的分佈,時序分佈做爲獨立的隨機變量經過時序圖傳播。

  • 每一個cell / net 的variation 都用統計參數表示。

  • variation 是輸入transition 跟輸出load 的函數。

  • 更精確,跟SPICE 仿真結果的correlation 更好。

  • timing report 中delay 值用µ + n*σ 表示,默認n 是3,即一般所說的3 sigma。


SOCV / POCV Variation


芯片製造涉及到許多複雜重複的過程,如:光刻、蝕刻、離子注入、擴散、退火。並且都是原子級操做,儘管控制很是嚴格,但誤差不可避免。工藝誤差會致使芯片物理參數誤差,如:線寬、溝道摻雜濃度、線厚、臨界尺寸、柵氧厚度;而物理參數誤差會致使電特性參數誤差,如:線的電容電阻、閾值電壓、飽和電流、柵極電容;電特性參數誤差會致使 cell delay, cell transtion, net delay的誤差,這正是STA 要如此重視variation 的緣由所在。


PVT《巴山夜雨漲秋池,邀君共學PVT:STA之PVT》跟RC corner《抽刀斷水水更流,RC Corner再也不愁:STA之RC Corner》《一曲新詞酒一杯,RC Corner繼續飛: STA之RC Corner拾遺》《且將新火試新茶,深究趁年華:STA之RC Corner再論》 從宏觀上來看都屬於對variation 模擬。

  • Environmental variation: 電壓跟溫度的變化,也就是PVT 中的V跟T。

  • Process variation: 工藝製造過程的誤差,工藝誤差一部分用PVT 中的P來模擬,另外一部分用OCV 來模擬。

Process variation

Process variation 可進一步細分爲systematic 跟non-systematic 兩種:

  • Systematic process variation:  The behaviour of these physical parameter variations have been well understood and can be predicted apriori, by analyzing the layout of the design. The examples are variations due to optical proximity, CMP and metal fill etc.


  • Non systematic process variation: these have uncertain or random behaviour and arise from processes that are orthogonal to design implementation. The examples are the primary contributor to process variations RDF < Random dopant fluctuation >, LER < Line edge roughness >, OTV < Oxide thickness variation >.




Non systematic process variation又能夠進一步細分爲Global varation 和local variation:

  • Global variation: 因爲工藝偏移致使的die-to-die, wafer to wafer, lot to lot 之間誤差,如:同一個chip上全部管子的溝道長度都比典型值偏大或偏小。 


  • Local variation (within-die or intra-die): 同一芯片上不一樣管子受工藝誤差影響不一樣< 注:on  chip variation 之源>,如:同一芯片上有些管子的溝道長度偏小,而有些管子的溝道長度卻偏大。顯然,local variation 比 global  variation 小。


Local variation又能夠進一步細分:

  • Spatially correlated variations: 相較於距離相距較遠的管子,相鄰管子有像似特徵。這也是AOCV 跟 SOCV / POCV 要考慮 spatial / distance 的緣由。


  • Random or independent variation: 在統計學上徹底隨機獨立,故須要SSTA 對其進行更精確模擬,而做爲SSTA的簡化模型,SOCV / POCV的精確性從下圖可見一斑。



結:

  • 工藝誤差致使芯片物理參數誤差,進一步致使管子電特性誤差,在STA 中表現於cell delay, cell trantion 跟 net delay的誤差。

  • STA 用PVT + OCV 來模擬cell 的timing,用Spice 仿真獲得cell delay 跟variation。

  • STA 用RC corner來模擬互連線的variation。

  • PVT 跟RC corner 用於模擬Global varition。

  • Flatten OCV, AOCV, SOCV / POCV 用於模擬local variation.


POCV/SOCV 對lib 的要求




此處對前面的內容作幾點總結:
  • 在芯片製造過程當中的工藝誤差由global variation 和local variation 兩部分組成。
  • 在集成電路設計實現中,global variation 用PVT 跟 RC-corner 來模擬;local variation 用 OCV/ AOCV/ SOCV 來模擬。
  • 在40nm 以前OCV 被普遍採用,可是OCV 對同一條path 上的全部cell 都設同一個derate 值,若是設的太嚴則過於悲觀,若是設得太鬆又會致使過多的path 過於樂觀,進入28nm 以後尤爲是16nm 以後,OCV 模型愈來愈"力不從心",因而有了AOCV 模型。
  • AOCV 模型再也不是一個簡單的derate 值,而是跟cell 所在path 的邏輯級數和物理位置相關,AOCV table 一般是基於Monte-Carlo 模型仿真獲得的(對此有興趣的驢友能夠研究一下Virtuoso Variety),它的index 是邏輯級數或distance. 可是AOCV 有兩缺點,其一:AOCV derate 值跟cell 的輸入transition 和輸出load 無關,因此不能考慮這部分因素;其二,GBA 模式下計算獲得的邏輯級數和distance 過於悲觀,而PBA 模式下能夠獲得精確的邏輯級數和distance 可是runtime 又不可接受。因而又進一步引入了SOCV 。
  • SOCV 能夠很好的解決精度和runtime 的問題,本質上,SOCV 是在某個特定PVT 下的SSTA, 即單參數SSTA, 它再也不依賴於邏輯級數和distance, 因此也就避免了GBA 模式下計算獲得的邏輯級數和distance 過於悲觀;同時SOCV 模型考慮了輸入transition 跟輸出load 的影響,更貼合實際。
  • 作精確的SOCV 分析,須要特別的庫支持,在庫裏要有針對每個cell 每一條timing arc 的cell delay, output transition, timing check 的sigma table, table 的兩個index 分別是輸入transition 和輸出load. 


這個特別的庫,就是本文的主題,即:LVF ( Liberty Validation Format ).


OpenSource Liberty Version 2013.12 開始支持LVF; 從2017 年開始,LTAB ( Liberty Advisory Board ) 批准了對LVF 的擴展,以提供先進的moment-based 模型。


傳統LVF 中有對cell delay, output transiton, timing check 的ocv_sigma_* table, 這些值表示與相關NLDM表中包含的標稱值的誤差,該值用1-sigma 表示。在表中用關鍵詞 "sigma_type" 來表示是用於early path 仍是late path 的分析,但timing check variation 的table 是不分early 跟late 的。


16nm 及如下的先進工藝結點和超低電壓會產生強非高斯分佈 (Strongly non-Gaussian ), 表現出均值偏移 ( mean-shift ) 和偏斜效應 ( skewness effects ). 因而從2017 年起新引入了3個moment-based 模型,用於對已有 ocv_sigma_* 模型的矯正。

這三個moment-based 分別是:mean-shift, Standard Deviation, Skewness.


  • Mean-shift:在表中用關鍵詞ocv_mean_shift_* 定義,表示表中的標稱值與分佈平均值之間的差別,其定義爲:

  • Standard Deviation: 在表中用ocv_std_dev_* 定義,其定義爲:

  • Skewness: 在表中用ocv_skewness_* 定義,其定義爲:

在沒有LVF 時,能夠用AOCV table 抽取一個SOCV sigma 值用於簡單非精確分析,除此以外對於SOCV 若是使用Cadence 工具也可使用SOCV library format, 其格式以下:


POCV/ SOCV 分析

Library reading


目前,SOCV 能夠三種形式呈現:
  • Timing lib 中帶有LVF data, T 家先進工藝的庫大多以這種形式呈現,LVF data 集成在timing lib 中,以下圖所示,每一個timing arc 都有 early/ late 的 ocv_sigma* 和LVF moment 表格,表格的縱座標是輸入pin 的slew, 表格的橫座標是輸出pin 的load. 
  • 獨立的LVF data,  其內容同timing lib 中集成的LVF data 同樣。
  • 沒有SOCV data, 須要基於AOCV 的table 抽取SOCV data. 

對於LVF 的三種呈現形式,Innovus 跟Tempus 在single mode single corner (SMSC) 跟multi mode multi corner (MMMC) 讀入時有些許差異。

對於不一樣的lib 須要的注意的點有:

  • 先進工藝的LVF libraries 包含兩部份內容:
  • Early/Late sigma LVF, 在lib 中以ocv_sigma* 表示。
  • LVF 會分別有delay, transtion, constraint 的Early/Late sigma 值,能夠經過以下命令選擇當前分析使用哪些sigma 值:

  • Advanced moments based models, moment Groups 有一大組變量,能夠回顧《論STA | POCV/SOCV 對lib 的要求》。
  • 能夠用以下命令來設置,是否使用LVF 中的moments 數據:

  • 若是沒有SOCV LVF, 能夠用AOCV lib 抽取一個data 來模擬SOCV. 這種flow 只適用於flow tunning, 由於精度不夠,不足以用於sign off. 由於AOCV 只有對delay 的variation, 因此沒法從AOCV lib 中抽出transtion 跟constraints 的variation. 
  • 要從AOCV lib 裏抽取SOCV 在Innovus 跟Tempus 中必須設置以下變量: 
set timing_library_infer_socv_from_aocv true
  • 在AOCV 跟SOCV 中常常提到sigma 的概念,回顧《論STA | SOCV / POCV 模型》可知,對於正態分佈,隨機變量落在-1σ ~ 1σ <即1 sigma >間的機率是68.27%,落在-2σ ~ 2σ <即2 sigma >間的機率是95.45%,落在-3σ ~ 3σ <即3 sigma > 間的機率是99.73%. 由此可知3 sigma 能夠保證99.73 的狀況均可以被覆蓋到,因此當前最早進工藝仍用3 sigma 來卡。在用AOCV 抽SOCV 時,能夠用以下變量來控制用幾sigma, 該值默認是3.
timing_library_scale_aocv_to_socv_to_n_sigma 
  • 除了隨機variation 還能夠讀入Spatial derating file 來模擬distance axis based variation. 在早一點的工藝庫中會把depth based 的AOCV variation 跟spatial based 的AOCV variation 分紅兩張table, 但在新工藝庫中,一般會將兩者合成一張表。


Innovus/ Tempus 中的變量設置

Innovus 跟Tempus 中SOCV 的相關設置以下表所示。

若是在同一個Design 中,對某個corner 想用flat OCV, 而其餘corner 用SOCV; 假設SOCV LVF lib 已在view Definition 中定義好,能夠經過以下方式將某個Corner 的SOCV reset 掉,用Flat OCV 的值代替:
  •  enable SOCV;

  • 設置Flat OCV, Sigma variation Derate;

  • 將要用flat OCV Corner 的sigma Variation reset 掉,此處爲delay_corner dc1.

  • 定義analysis_view.


對於如上設置,View1 跟View2 的timing report 分別爲:
  • View1 的sigma 爲0,用flat OCV 進行分析。


  • View2 用SOCV data 進行分析:


POCV/ SOCV 時序報告解析



關於時序報告的解析,可回顧《論STA | 讀懂timing report, 很重要》,SOCV 以前的時序報告都同樣,delay 值能夠相加獲得,帶SOCV 的時序報告會多出不少列,用以表述不一樣類型的mean 跟sigma 值。

在Innovus/ Tempus 中,默認的時序報告的格式仍同以前同樣,只是Delay 值再也不是簡單相加。對於下圖所示的時序報告,Arrival time != pre-Arrival time + Delay.

搞清楚 Arrival time 如何計算,須要經過以下命令 ,將delay mean, delay sigma, arrival mean, arrival sigma 分別列出而後計算。

以下所示,是一個列出了mean 跟sigma 值的時序報告,要讀懂SOCV 的時序報告,須要搞清楚:
  • 當前cell 的delay = Delay mean + N * Delay sigma; 

  • 當前cell 的Transition = Slew mean + N * Slew sigma;

其中:

  • Delay mean, Delay sigma, Slew mean, Slew sigma 都是從library 中讀出的值;

  • N 就是一般所說的『幾sigma』由統計學特性決定,目前經常使用的N=3 即常說的3-sigma.

  • N 值可在工具端設置,在Innovus /Tempus 中用以下變量控制:


Arrival delay  的計算爲:
  • Arrival Delay = Arrival Mean + N * Arrival Sigma;

其中:

  • Arrival Mean = Pre-Arrival Mean + Delay mean;

  • Arrival Sigma = sqr ( Pre-Arrival Sigma ^ 2 Delay Sigma ^ 2);

結合上例,計算buff_4_2/Z 的Arrival Delay:
  • 從lib 中可得buff_4_2 falling edge 的:
Delay mean = 0.02450;
Delay sigma = 0.00119;
  • 到buff_4_1 的pre-Arrival Mean = 0.52430;

  • 因此可得,到 buff_4_2/Z 的Arrival mean:

Arrival mean= 0.52430 + 0.02450 = 0.54880
  • 到buff_4_1 的Pre-Arrival Sigma= 0.00118;

  • 因此可得,到 buff_4_2/Z 的Arrival sigma:

    Arrival sigma= sqr (0.00118 ^ 2 + 0.00119 ^ 2)= 0.00168;

  • 因此可得,到buff_4_2/Z 的Arrival delay 爲:


Arrival delay = Arrival mean + N * Arrival sigma

                      = 0.54880 + 3*0.00168

                      = 0.55384

示例中,buff_4_2/Z 的arrival delay 值爲0.55383, 是由於工具在計算時是按照浮點數位寬計算的,最後顯示在時序報告中的值作過四捨五入。

在Innovus/ Tempus 中若是設置了以下變量,時序報告的表頭也會分別列出mean 和sigma 值:


接下來看下兩點:
  • 表頭,每一個值的mean 跟sigma 如何計算獲得?

  • 讀了SOCV 又設了timing derate 該如何解讀?


在support.cadence.com 上正好有兩篇對應文章,解釋得簡單明瞭,借用於此。


表頭解析


從這個timing report 的表頭,可分別獲得:
  • 第一行,可知當前是setup check, endpoint 的clock pin, 是否知足timing 需求;
  • 第二行,第三行,分別列出startpoint, endpoint, 跟對應的launch clock, capture clock, 以及對應的clock edge; 
  • 第四行,給出當前path 所屬的clock group;
  • 第五行,Other End Arrival time 就是capture clock path 的Arrival time, 計算方式同launch path 的Arrival time 相似,區別是對於setup check, capture clock path arrival time = mean - N * sigma. 
  • 第六行,Phase shift, 若是無multi cycle 即爲當前clock 的週期;
  • 第七行,CPPR 再也不是簡單的Launch clock path common point arrival time - Capture clock path common point arrival time. 在Innovus/ Tempus 中用report_cppr 可獲得對應的mean 跟sigma 值

由如上的report 可得:

  • 當前時鐘上升沿跟降低沿分別對應的Late/ Ealry 的Mean 和 Sigma.
  • 對應到本例,是時鐘上升沿check, 所對應的CPPR mean 在report_cppr 中用Pessimism Mean 表示,其計算方式是:

Late Mean - Early Mean =
0.279 - 0.229 = 0.51 
  • 一樣可獲得上升沿對應的CPPR sigma, 即report_cppr 中的Pessimism Sigma, 其計算方式爲:
sqr (Late Sigma ^ 2 + Early Sigma ^ 2) =
sqr (0.023 ^ 2 + 0.019 ^2) = 0.030
  • timing report 中的CPPR 在report_cppr 中用Pessimism 表示,其計算方式爲:
Pessimism Mean + N * Pessimism Sigma =
0.51 + 3*0.030 = 0.141
再回到timing report:
  • 第八行,Required Time = Req Time Mean - N * Req Time Sigma. 其中每一個值的計算爲:

  • 第九行,Arrival Time 便是Launch Clock Path + Launch Data Path 的Arrival Time;

  • 第十行,Slack Time = Slack Mean - N * Slack sigma. 其中每一個值的計算爲:



對mean 跟Sigma 設了timing derate 的解析


若是要在SOCV 的基礎上加更多的Derate 能夠用命令set_timing_derate 來設置,一般有:
  • 對cell 的mean 和sigma 值分別設置Derate, 在Timing report 中會顯示在"User Derate" 一列,格式是mean : sigma, 設置示例:

  • 對net 的mean 和sigma 值分別設置Derate, 在Timing report 中會顯示在"User Derate" 一列,格式是mean : sigma, 設置示例:


  • 對net 或 cell 設置incremental derate, 在Timing report 中會與"User Derate" 相加後呈如今"Total Derate" 一列,設置示例:

設置timing derate 的timing report 以下所示,在該例中,Total mean/ sigma derate, Delay Mean, Delay sigma 的計算分別爲,其餘的計算跟不帶set_timing_derate 的一致。

  • Total mean Derate = User mean Derate + incr_adjust;

  • Total sigma Derate = User sigma Derate;

  • Delay mean = Total mean Derate * Delay mean from lib;

  • Delay sigma = Total sigma Derate * Delay sigam from lib;



POCV / SOCV total derate 計算



應某豬要求,擼一下POCV/ SOCV total derate 的計算。在沒有找到更有效的方法,機器沒法承受SSTA 以前,目前看來POCV/ SOCV 彷佛是惟一出路,然而爲了更完備地模擬各類『因素』對delay 的影響,POCV/ SOCV 看上去很胖,以致於豬同窗撓着一頭亂髮在四海八荒羣裏『控訴』。

其實POCV/ SOCV 只是看上去胖,解析開也簡單,首先要明確當前derate 的對象:
  • cell: 帶LVF 信息的library 中的POCV/ SOCV 值都是針對cell 的;

  • net: 在某些工藝點T 會給出一個net 的POCV/ SOCV table; 在沒有table 的狀況下一般用以下命令設一個定值:

若是是cell derate, 須要明確是針對cell check 仍是cell delay:
  • cell check: 寄存器的setup/ hold time 就是這裏的cell check, 若是是flat OCV 可用以下命令設置:

  • cell delay: 就是全部cell 的delay 值。


cell delay 的total derate 由如下幾部份內容構成:
  • Guardband derate: 由LVF 定義的POCV/ SOCV 再乘以由set_timing_derate -mean/ -sigma 的設置值計算獲得;
豬問:爲何LVF 定義了POCV/ SOCV 還須要再用set_timing_derate 設一個值呢?
驢答:目前LVF 中定義的POCV/ SOCV 只表徵了PVT 中的P, 即工藝誤差,那若是要將溫度跟電壓對mean 跟sigma 的影響考慮在內時,就須要再用set_timing_derate 額外設置。
  • Distance based derate: 標示local variations, 同一條path 上相距越遠的cell 之間的variation 越大,該部分derate 也是一張表,由library vendor 提供,其內容大體以下,關於這部份內容後續文章會展開闡述。

  • incremental derate: 用圖示中的命令設置,某些cell 的variation 天生就比別人大,好比delay cell,對於這類cell 若是要加額外的derate 就須要用到該命令;固然也能夠用該命令模擬溫度和電壓對variation 的影響。


在STA 分析中,total derate 是如何計算的呢?C 跟S 的計算公式相似,只是對incremental derate 的處理方式不一致。


POCV/ SOCV spatial derate



回顧一下《論STA | POCV / SOCV total derate 計算解析》total derate 的計算公式,其中distance derate 就是本文要論及的spatial derate. 此處total derate 的計算公式中都是乘以distance derate, 實際上不管是C 仍是S, 在其timing 計算引擎中,都有相應控制變量來控制是『加上』仍是『乘以』distance derate. 到目前爲止,默認行爲應該都是『乘以』。

若是設置了用『相加』的模式來計算total derate 則其計算公式爲:

spatial derate 也叫distance-based derate 也叫location-based derate 用於模擬location variations, 理論上相對位置越遠工藝誤差越大。LVF 是能夠支持saptial derate 建模的,可是目前大部分Feb 都會提供一張單獨spatial derate 表格。一般SOCV spatial derate 表格有以下兩種格式:

  • Design-level spatial derate data
  • Library cell-level spatial derate data


Design-level spatial derate data:
Design-level spatial derate 對當前design 的全部cell 跟net 都有效,可使用path_type 指定是針對clock path 仍是data path;也可使用delay_type 指定是針對cell delay 仍是net delay, 其格式爲:

Library cell-level spatial derate data
Library cell-level spatial derate 針對lib cell 設置,可使用path_type 指定是針對clock path 仍是data path,其格式爲:

優先 級:
  • 若是同時設置了Design-level 跟Library Cell-level 的spatial derate, 則library cell-level spatial derate 優先級更高,Design-level spatial derate 會用於net. 
  • 若是隻指定了某一種path_type 的cell-level spatial derate, 則其他部分用Design-level spatial derate 計算;
  • 若是同對一個cell 設置了兩次類型相同的spatial derate, 則先設的優先級高。

Innovus/Tempus SOCV spatial derate Flow

  • 讀入SOCV side-file;

  • 設置spatial derate analysis;
  • 進行spatial derate timing 分析。


讀入SOCV side-file
  • single mode single coner, 用命令read_lib -socv 讀入:

  • Multi mode multi coner, 在view definition 中用create_library_set 或update_library_set 讀入:

設置spatial derate analysis

主要由如下幾個變量控制,除此處列出的變量還有控制計算total derate 時是將spatial derate 『加上』仍是『乘以』跟是否將spatial derate 應用於sigma. 在計算derate distance 時有兩種模式:

  • Bounding_box, 跟計算AOCV distance 同樣,從common point 起到endpoint 止,框一個矩形,矩形的對角線即爲所求distance 值。 

  • chip_size, 用timing_spatial_derate_chip_size 指定一個固定值。chip_size 能夠從帶座標信息的SPEF 中讀入,也能夠從DEF 中讀入。

在GBA 模式,便可以將distance_mode 設爲chip_size 也能夠設爲bounding_box; 在PBA 模式一般用bounding_box. 

進行spatial derate timing 分析
  • GBA bounding-box mode
  • GBA chip-size mode
  • PBA bounding-box mode

GBA bounding-box mode
  • GBA 模式,工具不精確計算每一條path 的bounding-box, 針對一對startpoint-endpoint 從common point 起將該對timing check point  間全部timing path 的全部cell 都框起,用最長的對角線來計算這一組timing path 的spatial derate. 這種方式計算獲得的distance 使setup 更悲觀,該模式不建議應用於hold 分析。

  • GBA Bounding-box 只能用於design-level spatial derate table, 不能用於cell-level spatial derate table;

  • GBA Bounding-box 的spatial derate 直接應用於timing report最後arrival time 和required time 的計算,不體現於timing path 的每個cell 上;

  • GBA Bounding-box 不能分別針對data, clock, net, cell 跟不一樣電壓進行設置;


GBA chip-size mode
  • 因爲如上諸多限制,GBA bounding-box 模式一般不建議用於sign-off. 建議使用GBA chip-size 模式作sign-off

  • GBA chip-size mode 用design-level spatial derate 對net 作derate, 能夠同時讀入cell-level spatial derate 對cell 作derate.

  •  GBA chip-size mode, spatial derate 針對timing path 上的cell 設置,能夠分別針對data, clock, net, cell 跟不一樣電壓進行設置。

  • 在timing report 中spatial derate 呈如今socv_derate 列:

PBA bounding-box mode

  • PBA 模式,若是物理座標數據可用,工具會針對每一條path 計算一個精確的distance 值;若是物理座標數據不可用,工具將默認使用芯片的尺寸來得到距離參數。

  • PBA bounding-box mode, 針對一對startpoint-endpoint 從common point 起到endpoint 止將當前timing path 框起,計算對角線距離爲distance 值,若是該條timing path 沒有common point 則用chip-size 計算distance.

  • PBA bounding-box mode, spatial derate 針對timing path 上的cell 設置,能夠分別針對data, clock, net, cell 跟不一樣電壓進行設置。

  • 在timing report 中spatial derate 呈如今socv_derate 列



驢說IC

本文分享自微信公衆號 - 陌上風騎驢看IC(MoShangFengQiLv)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索