日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

静态时序分析(STA)附秋招面试提问

發(fā)布時間:2024/3/12 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 静态时序分析(STA)附秋招面试提问 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

什么是STA?

????????靜態(tài)時序分析(Static Timing Analysis):是分析、調(diào)試并確認一個門級系統(tǒng)設計時序性能的方法。檢驗門級電路的最大延遲,以保證在指定的頻率下,能否滿足建立時間的要求;檢驗門級電路的最小延遲,以保證在指定的頻率下,能否滿足保持時間的要求。

????????STA需要檢查哪些東西:檢查sequential cell的setup/hold是否滿足要求;檢查Async Reset/Set recovery/removal是否滿足要求;檢查一個短脈沖,是否能被后續(xù)電路檢測到;Clock gate setup/hold;

????????還包括計算design是否滿足DRC(Design Rule Check)的要求:電路的最大電容不能超過設置的最大電容(capacitance)、電路的翻轉時間(transition)不能超過設置的最大值,電路的扇出(fanout)不能超過最大值。

STA要檢查很多內(nèi)容:包括DFF的setup hold check、ARST check、pulse check、clock gate

check等。

DFF setup/hold?

?

????????在時鐘上升沿到來的時候,為了保證數(shù)據(jù)能確確實實的被采到,時鐘對數(shù)據(jù)有建立時間(set up time)和保持時間(hold time)要求。CK to Q 的時間比 hold 時間長,就不會出現(xiàn)Metastable(亞穩(wěn)態(tài)),如果出現(xiàn) setup hold 不滿足需求,那么就會出現(xiàn) Metastable。

ARST check?

????????包括在復位的時候,復位信號從0到1的時候,如果和時鐘挨的太近,就會出現(xiàn)Metastable,時鐘上升沿那個時刻,不確定采ARST的值為0還是為1,在上面圖里ARST信號的recovery check Violation,所以時序不滿足要求。

????????復位信號(低電平有效)時序檢查,只檢查上升沿,因為如果上升沿出現(xiàn)Metastable,可能會導致各個寄存器進入工作狀態(tài)的時間不一致,有些寄存器開始工作了,有些寄存器還抓著ARST的低電平信號沒進入工作狀態(tài),所以這種情況一定要進行時序檢查,但是ARST下降的時候不用檢查,因為哪怕違例了,你要所有寄存器復位,只有一部分復位還有一部分在工作狀態(tài),一部分先進入復位狀態(tài)一部分后進入復位狀態(tài),不關先后最后都會進入復位狀態(tài),不會影響功能結果。

Signal pulse check?

????????信號脈沖的寬度也要check timing,要檢查信號持續(xù)一段時間的長度夠不夠,比如上面提到的復位信號,如果復位信號拉低的時間不夠久,那么就有可能復位失敗。?

? ? ? ? 如果clk gate發(fā)生violation,比如clk_en在clk的下降沿才拉高,這樣組合邏輯或門的輸出clk_gate就會先低后高,產(chǎn)生一個非常短的毛刺,這就不行了,所以這里就要求clk_en在上升沿后面一點點,在下降沿前面一點點,這樣就不會clk gate violation。

具體分析時序之前,先講一講產(chǎn)生時序問題的來源到底和什么有關(延遲)

綜合 (synthesis):根據(jù)RTL設計和cell library,把RTL代碼映射到最基本的門級cells,根據(jù)STA的timing constraints,盡量保證映射后的gate level design滿足timing constraints。盡量把設計的面積和功耗優(yōu)化到最小(優(yōu)化面積和功耗,綜合工具有很多cell可以選擇,比如加法器就有行波進位和超前進位加法器,DC工具有很多選擇,具體選擇什么根據(jù)你的設計和約束來綜合) ,已經(jīng)盡量修復DRC violation(最大電容、最大扇出等),盡量讓門級的congestion最小(增加線路密度,減小芯片面積)。

綜合會涉及到一個工藝庫的概念,不同的工藝綜合出來的門電路的面積和延時都會不一樣

cell library簡介

????????各種工藝的library至少會提供三種library,slow/typical/fast三種,在slow工藝下主要關注setup分析,因為信號比較慢,容易setup violation,而在fast的時候主要關注hold的violation。現(xiàn)在的先進工藝還會提供不同的Vt工藝的cell library,分為:LVT、RVT、SVT(?Standard V threshold?)、HVT (?High V threshold?)?在每個VT下也至少會給出三種opration conor。不同的VT工藝下器件的delay是不同的LVT的器件delay是很小的,閾值電壓越低,因為飽和電流變小,所以速度性能越高;但是因為漏電流會變大,因此功耗會越大。速度大小按快到慢依次排列為SLVT, LVT, RVT, HVT。 功耗大小卻正好相反。(不要覺得是工藝部分自己就可以不用看了,在修復set up/hold violation的時候,就可以通過改變器件工藝角的方式來修復,所以需要知道LVT、RVT、HVT各自的區(qū)別)????????

????????如果用RVT的工藝角做了一塊芯片最高跑到380M頻率,而我們想讓他跑到400M,那么就可以用更快速的LVT工藝的器件,替換一些critical path 上的器件,這樣就能讓電路整體的頻率高一點,對應的也會犧牲一些功耗的代價。HVT什么時候用呢,在那些delay很小不是critical path的路徑上把RVT的一些器件換成HVT的,在不影響電路速度的情況下就可以降低功耗

????????對于一個cell的延遲,它延遲具體取多少,在cell library里是有具體設置顯示的,并且他的查找方式是通過查找表的形式來的。

????????DRC在檢查DC里面max?capacitance和max loading 的設置時,最大值不能超過類似上面表的cell library規(guī)定的最大值。

時鐘特性

同步時鐘是能夠明確定義多個時鐘間如下關系的時鐘:

????????① 時鐘頻率

????????② 時鐘高低電平的持續(xù)時間(duty cycle)

????????③ 各個時鐘的相位(waveform)

????????④ 時鐘的input latency

異步時鐘:不能明確定義多個時鐘間以上關系的時鐘源。

clock有很多參數(shù),頻率、占空比等,這里介紹一下和時鐘有關的參數(shù)。

clock period (時鐘周期):芯片上的時鐘為了準確,一般都是由晶振生成。

clock jitter :就是指兩個時鐘周期之間存在的差值,這個誤差是在時鐘發(fā)生器內(nèi)部產(chǎn)生的,和晶振或者PLL內(nèi)部電路有關,布線對其沒有影響。,這個一般問題不大,因為產(chǎn)生jitter的是晶振,可能晶振這個時鐘周期為100ns,下一個時鐘周期為101ns,產(chǎn)生了1ns的jitter,但是這也不會對時序有很大的影響,因為晶振是時鐘樹的源頭,寄存器A有jitter,寄存器B也有jitter,大家都有clock jitter。

duty cycle :占空比,高電平占整個時鐘周期的比例。

transition time:時鐘的翻轉不是直上直下的,其實有一個傳輸延時,傳輸延時定義是從時鐘的10%~90%所花的時間(上升傳輸延時)和從時鐘的90%~10%所花的時間(下降傳輸延時)。

phase 相位:第一個上升沿和第一個下降沿的位置,相對于零時刻的時間。

input latency:輸入終點相對于時鐘源頭的延遲,latency,(走線導致的延時)

clock skew:clock tree 到不同的寄存器的距離是不同的,因為這些距離的不同到達寄存器的時間也不同,同一個時鐘的同一個沿,到達不同寄存器的時間差異稱為clock skew。

clock uncertainty:clock jitter + pessimistic (悲觀量)

在SDC里創(chuàng)建一個時鐘(用Tcl腳本寫的)?

port:頂層設計的端口

pin:input/output???of a cell(not the top design)


STA??Timing Path:① 輸入到寄存器??② 寄存器到輸出??③ 寄存器到寄存器??④ 輸入到輸出

STA??Start/End Points

Start Points:input ports、Clock pins of sequential cells(clocks)

End Points:output ports、Data pins of sequential cells、Clock pins of sequential cells(clocks)

set up check

????????如果有兩個寄存器相連,set up 滿足要求的條件是:前一個寄存器在clock 第一個上升沿發(fā)出的數(shù)據(jù),能被后一個寄存器在第二個上升沿抓到(如果不能被第二個上升沿抓到,那就是delay太大了)。

hold check

????????如果有兩個寄存器相連,hold滿足要求的條件是:前一個寄存器在clock 第一個上升沿發(fā)出的數(shù)據(jù),不能被后一個寄存器在第一個上升沿抓到(如果被第一個上升沿抓到,那就是delay太小了,數(shù)據(jù)很快就到第二個寄存器了)。?

setup check 計算

????????如圖所示的紫色路徑數(shù)據(jù)從clk端,到達寄存器C的D端所需要的時間為:

data_arrive_time = clk_latency + clk_path1_delay + ck_to_q + logic_delay;

????????數(shù)據(jù)到達時間為時鐘的延遲、時鐘從外部到clk端的路徑延遲、從clk端到數(shù)據(jù)輸出有一個延遲、再加上組合邏輯延遲。

????????相應的寄存器C還有一個數(shù)據(jù)要求時間,如果數(shù)據(jù)延遲小于require那就沒問題,如果大于require(數(shù)據(jù)來晚了)就會出現(xiàn)setup violation。

data_require_time = clk_period+clk_latency + clk_path2_delay - dff_set_up - clk_uncertainty;

數(shù)據(jù)需求時間:加一個時鐘周期,因為C要求的數(shù)據(jù)是上一個周期的數(shù)據(jù)。

????????綜合工具就會進行setup check:

?????????????????????????????setup_slack =?data_require_time - data_arrive_time?

?????????????????????????????if( setup_slack??>= 0)

????????????????????????????????????setup meet;

????????????????????????????else?

????????????????????????????????????setup violated;

????????因為你數(shù)據(jù)到達的時間必須小于數(shù)據(jù)需求時間,也就是數(shù)據(jù)要在下一個時鐘沿抓數(shù)據(jù)之前到達下一個寄存器且滿足下一個寄存器的setup要求。

hold check 計算

????data_arrive_time = clk_latency + clk_path1_delay + ck_to_q + logic_delay;

????數(shù)據(jù)到達時間為時鐘的延遲、時鐘從外部到clk端的路徑延遲、從clk端到數(shù)據(jù)輸出有一個延遲、再加上組合邏輯延遲。

????hold check的是寄存器C不能再當前時鐘上升沿抓到寄存器B當前時鐘上升沿的數(shù)據(jù)。

????data_require_time = clk_latency + clk_path2_delay +?dff_hold?+ clk_uncertainty;

????綜合工具會進行hold?check:

????????????????????????????hold_slack =?data_arrive_time -?data_required_time

????????????????????????????if( hold_slack?> = 0 )

????????????????????????????????????hold meet;

????????????????????????????else

????????????????????????????????????hold violated;

????????數(shù)據(jù)到達時間要比數(shù)據(jù)要求時間長,因為是同一個時鐘的數(shù)據(jù),數(shù)據(jù)不能到的太快,不能在同一個時鐘沿被后一個寄存器抓到,數(shù)據(jù)實際的到達時間要在窗口之后,不能被同一個時鐘沿抓到。

????????setup check的時候,要走一個組合邏輯路徑比較長的路徑,這樣容易setup violation,hold check的時候,要走一個組合邏輯路徑比較短的路徑,這樣容易hold violation,就是在兩種check階段都要考慮最壞情況。

????????上面講的setup check和hold check 針對的是來自同一個時鐘的check,如果兩個寄存器的時鐘來源于兩個不同的時鐘源?

????????對于setup check 還是用他的含義去理解,A寄存器在一個時鐘沿的數(shù)據(jù),在B寄存器的一個時鐘沿抓到,但是兩個時鐘是異步時鐘,不確定相位,所以綜合工具就會找兩個時鐘相距最近(這里最近是找waveform波形最近的地方)的地方去做check。

????????異步時鐘的STA分析里的hold分析,取setup check point 前一個上升沿作為hold check point,hold間隔最近的地方做hold check,如下圖:

setup hold都會去找最差的情況去做check。

????????兩個不同源的時鐘,我們不希望他去分析STA,就可以下false_path,因為很多這樣的violation是假的violation,我們不希望花很多的算力優(yōu)化這些不會出錯的地方上,就可以下false_path。

下約束的TCL,創(chuàng)建一個時鐘:

下 input_delay:

input_delay 下的是外部信號的delay,內(nèi)部還有的裕量是clock_period - input_delay,一般在邏輯的頂層,下的外部邏輯的delay。比如:

set_input_delay -clock CLK $dly [get_ports D]

下 output_delay也是一樣

對于input_delay和output_delay都可以下最大值和最小值的delay constraint。最大值用于setup分析,最小值用于hold分析。

set_input_delay

例如給輸入下最大6ns延遲和最小2ns延遲?

看第二個時鐘上升沿,在第二個時鐘上升沿過了2ns后數(shù)據(jù)開始不穩(wěn)定,因為clock delay最快是2ns,過了6ns后數(shù)據(jù)就穩(wěn)定了,因為時鐘最大delay是6ns,超過這個6ns后,數(shù)據(jù)就穩(wěn)定了。

如果沒有分別設置 max數(shù)值和min數(shù)值,那么綜合工具就默認兩個數(shù)值相同。

set_output_delay ,是設置端口外部的delay,所以留給內(nèi)部的delay就只有T-$delay,當然這里注意:約束的output_delay也可以是負數(shù),負數(shù)的意思就是,模塊內(nèi)部連接到外部部分的delay,必須大于這個負數(shù)的絕對值,比如:

set_output_delay -clock CLK -min -3 [get_ports OUT]

設置了output_delay是負數(shù),那么你內(nèi)部邏輯到output的delay必須大于3ns,這樣,內(nèi)部delay+外部delay > 0?才合理。可以理解為外部接了一個寄存器,然后寄存器的hold是3ns,在同一個時鐘沿,前一個寄存器在該時鐘沿的數(shù)據(jù)不能被后一個寄存器抓到,所以數(shù)據(jù)到后一個寄存器的delay必須大于該寄存器的hold time,否則就出現(xiàn)hold violation。設置外部delay為負數(shù),其實目的是為了約束內(nèi)部delay 必須大于這個負數(shù)的絕對值。

set_false_path

如果我們下了這個路徑,意思就是不讓工具做STA分析,例如:

set_false_path -from A -to B

※A→B之間的路徑不check timing;但是B→A之間的路徑仍需要進行check timing。

set_multicycle_path

如果數(shù)據(jù)持續(xù)兩個周期,也就是setup分析的時候,前一個寄存器第一個時鐘上升沿的數(shù)據(jù)可以被后一個寄存器第三個時鐘上升沿抓到,不希望setup分析按默認的來,那就下set_multicycle_path,例如:

set_multicycle_path 2 -setup -from A -to B;

set_multicycle_path 1 -hold -from A -to B;?

????????一般來說,如果用set_multicycle_path,setup約束和hold約束往往成對出現(xiàn)。比如上面設置了setup延遲一個周期(set_multicycle_path 2),還設置hold提前一個周期(set_multicycle_path 1)。這意思就是,數(shù)據(jù)在第一個上升沿發(fā)出,能被下一個寄存器第三個上升沿抓到(setup滿足),數(shù)據(jù)在第一個上升沿發(fā)出,不能被下一個寄存器同一個上升沿抓到(hold滿足),如果set_multicycle_path 2 -hold -from A - to B 那就是 數(shù)據(jù)在第一個上升沿發(fā)出,不能被下一個寄存器第二個上升沿抓到(hold滿足)。

高級STA概念

on-chip-Variation:OCV

同一個芯片,不同位置的cell的PVT不一致,在STA分析setup的時候,在計算data_arrive_time時,故意用延遲大一點的工藝,讓數(shù)據(jù)延時變大,而在下一個寄存器的時鐘路徑上用延時小的工藝,即讓setup更容易違例。

但是這種方式有些過于悲觀,原本能跑很高頻率的電路,給這樣悲觀的分析,跑了一個低頻率,所以實際上一般都是在延遲的基礎上加一個5%的悲觀量,這個具體多少人為設定。

common-Path-Pessimism-Remove :CPPR

在共同的clock路徑上,cell的delay是一樣的。比如計算setup的時候走了一條clock path經(jīng)過了一個buffer,計算下一個寄存器的data_require_time的時候走了另一條clock path也經(jīng)過了這個buffer那么兩條路徑都經(jīng)過了這個buffer,按照OCV,我們不可能給這個buffer同時用好的工藝和壞的工藝來做悲觀,所以這種情況下就可以把這個共同路徑上的cell設為同樣的工藝,即同樣delay。

STA算例1:?

????????Setup路徑計算,取最長的延時,最大的延時的路徑要在第二個時鐘沿前到來,且應滿足setup需求(data_required 中減去setup時間,因為數(shù)據(jù)要在setup窗口之前到達)。

slack = 8.75ns,代表setup還有這么多的裕量。

Hold路徑計算,數(shù)據(jù)到達時間要比hold窗口還慢,保證數(shù)據(jù)不能被同一個時鐘沿采到?

STA算例2:

計算data_require_time 再計算data_arrive_time 然后計算裕是否夠。

第一題,求最大工作頻率(setup 分析):

時鐘頻率影響的只有setup分析,之前在寫路徑的時候,setup的data_require_time里是有一個clock_period的,所以setup分析是與時鐘頻率有關的,且容易推斷出時鐘頻率越快,越容易出現(xiàn)setup violation。

每個寄存器都得分析setup的裕量

對寄存器1 來說:

????????寄存器1 的data_arrive有兩條路徑,一條是從din直接到D端的Path1,另一條是從F2的Q端到D端Path2。

Path1 :0.5 + 2 = 2.5 ns(din + Tandgate)

Path2 :1 + 1 + 2 + 2 = 6ns (兩個buffer+Tcq+Tandgate)

data_require = Tcycle + Tbuffer- Tsu = Tcycle + 1 - 3 = Tcycle - 2

最長的delay為Path2,Path2的delay要小于data_require所以有不等式:

6 =< Tcycle - 2????從而有????T cycle >= 8ns

對寄存器2來說:

只有一條數(shù)據(jù)路徑

data_arrive_time =??1 + 2 + 2 + 2 + 2 = 9ns

data_require_time = Tcycle + 1 + 1 - 3 = Tcycle - 1

data_require_time >= data_arrive_time 所以,Tcycle >= 10ns

綜上,所以Tcycle >= 10ns 所以時鐘最大工作頻率為100MHz;

第二題,判斷時鐘10MHz時,是否有timing violation(hold 分析):

????????首先,電路的最大工作頻率是100MHz,所以時鐘為10MHz時,一定沒有setup的violation,但是有沒有hold 的violation我們不知道, 所以需要計算兩個寄存器的hold是否會出現(xiàn)時序問題。

對寄存器1來說:

path1 :0.5 + 2 = 2.5 ns

path2 : 1 + 1 + 2 + 2 = 6ns

data_require_time = 1 + 2 = 3ns

hold分析要求數(shù)據(jù)延時要在時鐘上升沿之后到來,所以data_arrive_time >= data_require_time

對于path1來說 2.5ns < 3ns,所以路徑1會出現(xiàn)hold violation。

對寄存器2來說:

data_arrive_time = 1 + 2 + 2 + 2 + 2 = 9 ns

data_require_time = 1 + 1 + 2 = 4ns

9 > 4 滿足要求,所以寄存器2不會hold violation。

????實際上的STA分析是EDA工具幫我們分析的,工具會幫我們分析各條路徑的setup/hold是否滿足要求,所以對我們實際工程來說,我們只需要看timing報告就可以了,看是否有出現(xiàn)violation,如果有出現(xiàn),要知道原因,以及如何修復violation。

STA自測

1.如果芯片tape out了,測試懷疑有setup violation,怎么確認?(降低時鐘頻率,clock_period 就變大了,setup check 的不等式就更容易滿足了,如果降低了時鐘頻率結果電路從不能工作變到穩(wěn)定工作了,那就很可能是setup violation了,如果PLL做死了,不能調(diào)時鐘頻率,那還可以調(diào)ck_to_q(用不同的工藝庫,PVT),和logic_delay)

2.如果芯片tape out了,測試懷疑有hold?violation,怎么確認(和setup 檢測一樣,如果hold violation了,那就是不等式不成立,那我們就想辦法讓不等式成立,同樣的可以改PVT,也可以增加 logic delay,)?

3.什么是setup time 什么是hold time

4.寫出setup check和hold check的判斷公式

5.如果出現(xiàn)setup violation了怎么處理?

6.如果出現(xiàn)hold violation了怎么處理?(根據(jù)不等式調(diào)參數(shù),比如換PVT,修改logic_delay)

7.clock jitter 和clock skew有什么區(qū)別?

8.同步時鐘,異步時鐘的區(qū)別

9.不希望兩個異步時鐘之間做STA怎么辦?怎么下約束?

10.如果從寄存器A到寄存器B之間有多條組合邏輯路徑,setup和hold分析的時候怎么分析?

11.設置output_delay的時候,delay可以是負數(shù)嗎?為什么?

12.如果給你電路圖,讓你分析setup和hold時序是否滿足要求,你能分析嗎?如果讓你判斷該電路能跑的最高時鐘頻率為多少,能計算嗎?

總結

以上是生活随笔為你收集整理的静态时序分析(STA)附秋招面试提问的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。