EDN首页   博客首页

日志档案

发表于 2008-1-15 15:11:53

0

标签: 无标签

靜態時序分析(Static Timing Analysis)基礎及應用(下)[转]

靜態時序分析(Static Timing Analysis)基礎及應用(下)

◎陳麒旭

前言

在製程進入深次微米世代之後,晶片(IC)設計的高複雜度及系統單晶片(SOC)設計方式興起。此一趨勢使得如何確保IC品質成為今日所有設計從業人員不得不面臨之重大課題。靜態時序分析(Static Timing Analysis簡稱STA)經由完整的分析方式判斷IC是否能夠在使用者指定的時序下正常工作,對確保IC品質之課題,提供一個不錯的解決方案。在「靜態時序分析(Static Timing Analysis)基礎及應用(上)」一文中筆者以簡單敘述及圖例說明的方式,對STA的基礎概念做了詳盡的說明。接下來,就讓我們藉由實際設計範例來瞭解STA在設計流程的應用。

設計範例說明

設計範例為一個32bit x 32bitPipeline乘法器,其架構如圖一所示。Pipeline共分3級,電路之輸出輸入端皆有暫存器儲存運算數值。

圖一

依據Cell-based設計的方式,首先以硬體描述語言設計圖一之電路。接下來實作此電路,進行合成(Synthesis)及佈局與繞線(P&R)。並在實作的各步驟後進行靜態時序分析,確認時序規格是否滿足。實作及驗證所用到的軟體及設計資料庫如下所示:

l    合成:SynopsysÔ Design Compiler

l    佈局與繞線:SynopsysÔ Astro

l    設計資料庫:ArtisanÔ 0.18um Cell Library

在接下來的文章中,各位將會看到靜態時序分析在實作過程中的應用。藉由實際產生的數據瞭解在不同實做步驟上時序分析的差異。

 

 

時序限制(Timing Constraint

要作靜態時序分析,首先要有時序限制。此設計範例的時序限制如下所述。(à後為設定時序限制之SDC指令)

1          時脈規格(Clock Specification

1.1         週期:6ns à
 
create_clock -name "MY_CLOCK" -period 6 -waveform {0 3} [get_ports {clk}]

1.2         Source Latency1ns à
 
set_clock_latency -source 1 [get_clocks {MY_CLOCK}]

1.3         Network Latency1ns à
 
set_clock_latency 1 [get_clocks {MY_CLOCK}]

1.4         Skew0.5ns à
 
set_clock_uncertainty 0.5 [get_clocks {MY_CLOCK}]

2          周邊狀況(Boundary Condition

2.1         輸入延遲(Input Delay):1.2ns à
 
set allin_except_CLK [remove_from_collection [all_inputs] [get_ports clk] ]
 
set_input_delay $I_DELAY -clock MY_CLOCK $allin_except_CLK

2.2         輸出延遲(Output Delay):1.2ns à
 
set_output_delay $O_DELAY -clock MY_CLOCK [all_outputs]

2.3         輸出負載(Output Loading):0.5pF à
 
set_load $O_LOAD 0.5 [all_outputs]

3          時序例外(Timing Exception):無

 

合成軟體之時序報告

SynopsysÔ Design Compiler將電路合成完畢後,執行下面指令可以產生時序報告:

report_timing -path full -delay max -max_paths 10 -input_pins \
-nets -transition_time -capacitance > timing_syn.txt

時序報告會儲存在timing_syn.txt此檔案中。在檔案的開頭不遠處,會列出此電路最有可能不符合時序規格的路徑(Critical Path)。例如:

  Startpoint: S2/B2_reg_0_

                (rising edge-triggered flip-flop clocked by MY_CLOCK)

  Endpoint: S3/P3_reg_47_

              (rising edge-triggered flip-flop clocked by MY_CLOCK)

  Path Group: MY_CLOCK

  Path Type: max

在這個例子中,Critical Path的起點Flip-Flop是第2Pipeline Stage內的B2暫存器的第0個位元,終點Flip-Flop則是第3Pipeline Stage內的P3暫存器的第47個位元(圖二)。

Critical Path報告的下方會有Wire Load Model的資訊,此範例使用的是UMC18_Conservative Model。這個Model會以較悲觀的方式預估連線的延遲時間(Interconnect Delay)。

圖二

繼續往下檢視檔案,你會看到Critical Path的詳細時序資訊。例如:

Point                                  Fanout       Cap     Trans      Incr       Path

-------------------------------------------------------------------------------

clock MY_CLOCK (rise edge)                                           0.00      0.00

clock network delay (ideal)                                           2.00      2.00

S2/B2_reg_0_/CK (DFFHQX4)                                   0.00      0.00      2.00r

S2/B2_reg_0_/Q (DFFHQX4)                                     0.16     0.30      2.30r

S2/n36 (net)                               1         0.03               0.00      2.30r

S2/U10/A (BUFX20)                                             0.16     0.00      2.30r

S2/U10/Y (BUFX20)                                             0.23     0.21      2.51r

...

...

S3/add_106/U0_5_47/A (XNOR2X2)                              0.18      0.00      7.74f

S3/add_106/U0_5_47/Y (XNOR2X2)                              0.12      0.22      7.96f

S3/add_106/SUM[47] (net)                 1         0.01                0.00      7.96f

S3/add_106/SUM[47] (stage3_DW01_add_54_0)                            0.00      7.96f

S3/N94 (net)                                         0.01                 0.00      7.96f

S3/P3_reg_47_/D (DFFTRXL)                                    0.12      0.00       7.96f

data arrival time                                                                    7.96

 

clock MY_CLOCK (rise edge)                                             6.00       6.00

clock network delay (ideal)                                            2.00       8.00

clock uncertainty                                                       -0.50       7.50

S3/P3_reg_47_/CK (DFFTRXL)                                             0.00       7.50r

library setup time                                                      -0.28       7.22

data required time                                                                   7.22

--------------------------------------------------------------------------------

data required time                                                                   7.22

data arrival time                                                                   -7.96

--------------------------------------------------------------------------------

slack (VIOLATED)                                                                     -0.74

 

先由左往右看,第一個直行Point標示出路徑中的節點,節點可以是元件的輸出入端點,也可以是元件間的連線(Net)。第二個直行Fanout標示節點推動的元件個數。第三個直行Cap標示出節點推動的負載。第四個直行Trans標示出節點上信號的轉換時間(Transition Time)。第五個直行Incr標示出節點造成的延遲時間。最後一個直行Path則是自路徑起點到到此節點為止的總延遲時間。

再來我們由上往下檢視Critical Path的時序資訊。

clock network delay (ideal)                                            2.00       2.00

此處的2nsclock network delay是由我們給定的時序限制計算而來的,因為我們給定了各1nssource latencynetwork latency,加起來共有2ns

S2/B2_reg_0_/CK (DFFHQX4)                                   0.00       0.00       2.00 r

此行表示Critical Path的起點為S2 Instance下的B2_reg_0_這個instanceCK端點。由於有2nsnetwork delay,所以時脈信號到達此節點的時間為2ns(圖三)。至於0nsTransition Time則是因為我們沒有在時脈規格中定義其數值,合成軟體的會假設是一個0ns Transition Time的理想波形。最右邊的r是因為這個Flip-Flop是正緣觸發,所以以r表示。如果是f就是負緣觸發。

圖三

S2/B2_reg_0_/Q (DFFHQX4)                                    0.16       0.30       2.30 r

接著信號自起點開始向終點傳遞,這一行表示路徑起點的Flip-FlopCK端點到Q端點的時間延遲為0.3ns,且在此節點的Transition Time0.16ns。所以信號到達此節點的時間為2+0.3=2.3ns(圖四)。最右邊顯示r是因為Q端點從0變化到1時的延遲時間比1變化到0時的延遲時間還長,如果狀況相反的話,最右邊會標示f。以上數值是由元件庫(Cell Library)裡的時序表(Timing Table)查出來的,其計算的方式請參照「靜態時序分析(Static Timing Analysis)基礎及應用(上)」。

S2/n36 (net)                               1         0.03                0.00       2.30 r

S2/U10/A (BUFX20)                                              0.16      0.00       2.30 r

這兩行和上一行最右邊的Path欄位都一樣,這是因為其實它們是同一個節點,所以信號到達時間一樣。仔細的讀者這時候可能會有個疑問,Flip-FlopQ輸出端和後面Buffer的輸入端A信號到達時間應該有一個連線延遲(Interconnect Delay)的差距吧?想法上是沒錯,但因為Design Compiler這個合成器將連線延遲的時間合併到元件延遲(Cell Dealy)的時間內計算,所以從時序報告中看不到延遲時間的資訊。也就是說,如果Point欄是net的話,各位只需去檢視FanoutCap欄位即可。S2/n36這個net只有推動一個Buffer,其Fanout1。負載則是Buffer的輸入負載和預估連線負載的總和,其值為0.03pF

圖四

S2/U10/Y (BUFX20)                                              0.23      0.21       2.51 r

這一行是描述Buffer從輸入端到輸出端的時間延遲,其值為0.21,所以信號到達Buffer輸出端的時間為2.3+0.21=2.51ns(圖五)。

接下來是一堆類似的元件時序資訊,我們略過它們不討論,直接跳到最後面幾個元件。

S3/add_106/U0_5_47/A (XNOR2X2)                              0.18      0.00       7.74 f

S3/add_106/U0_5_47/Y (XNOR2X2)                              0.12      0.22       7.96 f

這是到Critical Path終點前的最後一個元件,信號到達的時間是7.96ns。各位可以看到最右邊的標示已經變成f了,這表示信號由10的狀況元件延遲時間較長。

S3/add_106/SUM[47] (net)                 1        0.01                 0.00       7.96 f

S3/add_106/SUM[47] (stage3_DW01_add_54_0)                            0.00       7.96 f

S3/N94 (net)                                          0.01                0.00       7.96 f

S3/P3_reg_47_/D (DFFTRXL)                                    0.12      0.00       7.96 f

data arrival time                                                                     7.96

這幾行都是同一個節點的時序資訊只是邏輯階層(Logic Hierarchy)不同。信號最後到達Critical Path終點的時間為7.96ns(圖六)。以上是Arrival TimeAT)的計算,接下來我們看Required TimeRT)的計算。

圖五

圖六

clock MY_CLOCK (rise edge)                                             6.00       6.00

clock netw