靜態(tài)時(shí)序分析(STA)
什么是STA?
????????靜態(tài)時(shí)序分析(Static Timing Analysis):是分析、調(diào)試并確認(rèn)一個(gè)門(mén)級(jí)系統(tǒng)設(shè)計(jì)時(shí)序性能的方法。檢驗(yàn)門(mén)級(jí)電路的最大延遲,以保證在指定的頻率下,能否滿足建立時(shí)間的要求;檢驗(yàn)門(mén)級(jí)電路的最小延遲,以保證在指定的頻率下,能否滿足保持時(shí)間的要求。
????????STA需要檢查哪些東西:檢查sequential cell的setup/hold是否滿足要求;檢查Async Reset/Set recovery/removal是否滿足要求;檢查一個(gè)短脈沖,是否能被后續(xù)電路檢測(cè)到;Clock gate setup/hold;
????????還包括計(jì)算design是否滿足DRC(Design Rule Check)的要求:電路的最大電容不能超過(guò)設(shè)置的最大電容(capacitance)、電路的翻轉(zhuǎn)時(shí)間(transition)不能超過(guò)設(shè)置的最大值,電路的扇出(fanout)不能超過(guò)最大值。
STA要檢查很多內(nèi)容:包括DFF的setup hold check、ARST check、pulse check、clock gate
check等。
DFF setup/hold

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

????????包括在復(fù)位的時(shí)候,復(fù)位信號(hào)從0到1的時(shí)候,如果和時(shí)鐘挨的太近,就會(huì)出現(xiàn)Metastable,時(shí)鐘上升沿那個(gè)時(shí)刻,不確定采ARST的值為0還是為1,在上面圖里ARST信號(hào)的recovery check Violation,所以時(shí)序不滿足要求。
????????復(fù)位信號(hào)(低電平有效)時(shí)序檢查,只檢查上升沿,因?yàn)槿绻仙爻霈F(xiàn)Metastable,可能會(huì)導(dǎo)致各個(gè)寄存器進(jìn)入工作狀態(tài)的時(shí)間不一致,有些寄存器開(kāi)始工作了,有些寄存器還抓著ARST的低電平信號(hào)沒(méi)進(jìn)入工作狀態(tài),所以這種情況一定要進(jìn)行時(shí)序檢查,但是ARST下降的時(shí)候不用檢查,因?yàn)槟呐逻`例了,你要所有寄存器復(fù)位,只有一部分復(fù)位還有一部分在工作狀態(tài),一部分先進(jìn)入復(fù)位狀態(tài)一部分后進(jìn)入復(fù)位狀態(tài),不關(guān)先后最后都會(huì)進(jìn)入復(fù)位狀態(tài),不會(huì)影響功能結(jié)果。
Signal pulse check

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

????????如果clk gate發(fā)生violation,比如clk_en在clk的下降沿才拉高,這樣組合邏輯或門(mén)的輸出clk_gate就會(huì)先低后高,產(chǎn)生一個(gè)非常短的毛刺,這就不行了,所以這里就要求clk_en在上升沿后面一點(diǎn)點(diǎn),在下降沿前面一點(diǎn)點(diǎn),這樣就不會(huì)clk gate violation。
具體分析時(shí)序之前,先講一講產(chǎn)生時(shí)序問(wèn)題的來(lái)源到底和什么有關(guān)(延遲)
綜合 (synthesis):根據(jù)RTL設(shè)計(jì)和cell library,把RTL代碼映射到最基本的門(mén)級(jí)cells,根據(jù)STA的timing constraints,盡量保證映射后的gate level design滿足timing constraints。盡量把設(shè)計(jì)的面積和功耗優(yōu)化到最?。▋?yōu)化面積和功耗,綜合工具有很多cell可以選擇,比如加法器就有行波進(jìn)位和超前進(jìn)位加法器,DC工具有很多選擇,具體選擇什么根據(jù)你的設(shè)計(jì)和約束來(lái)綜合) ,已經(jīng)盡量修復(fù)DRC violation(最大電容、最大扇出等),盡量讓門(mén)級(jí)的congestion最小(增加線路密度,減小芯片面積)。
綜合會(huì)涉及到一個(gè)工藝庫(kù)的概念,不同的工藝綜合出來(lái)的門(mén)電路的面積和延時(shí)都會(huì)不一樣
cell library簡(jiǎn)介
各種工藝的library至少會(huì)提供三種library,slow/typical/fast三種,在slow工藝下主要關(guān)注setup分析,因?yàn)樾盘?hào)比較慢,容易setup violation,而在fast的時(shí)候主要關(guān)注hold的violation?,F(xiàn)在的先進(jìn)工藝還會(huì)提供不同的Vt工藝的cell library,分為:LVT、RVT、SVT(?Standard V threshold?)、HVT (?High V threshold?)?在每個(gè)VT下也至少會(huì)給出三種opration conor。不同的VT工藝下器件的delay是不同的LVT的器件delay是很小的,閾值電壓越低,因?yàn)轱柡碗娏髯冃?,所以速度性能越高;但是因?yàn)槁╇娏鲿?huì)變大,因此功耗會(huì)越大。速度大小按快到慢依次排列為SLVT, LVT, RVT, HVT。 功耗大小卻正好相反。(不要覺(jué)得是工藝部分自己就可以不用看了,在修復(fù)set up/hold violation的時(shí)候,就可以通過(guò)改變器件工藝角的方式來(lái)修復(fù),所以需要知道LVT、RVT、HVT各自的區(qū)別)
如果用RVT的工藝角做了一塊芯片最高跑到380M頻率,而我們想讓他跑到400M,那么就可以用更快速的LVT工藝的器件,替換一些critical path 上的器件,這樣就能讓電路整體的頻率高一點(diǎn),對(duì)應(yīng)的也會(huì)犧牲一些功耗的代價(jià)。HVT什么時(shí)候用呢,在那些delay很小不是critical path的路徑上把RVT的一些器件換成HVT的,在不影響電路速度的情況下就可以降低功耗。
????????對(duì)于一個(gè)cell的延遲,它延遲具體取多少,在cell library里是有具體設(shè)置顯示的,并且他的查找方式是通過(guò)查找表的形式來(lái)的。

DRC在檢查DC里面max?capacitance和max loading 的設(shè)置時(shí),最大值不能超過(guò)類似上面表的cell library規(guī)定的最大值。
時(shí)鐘特性
同步時(shí)鐘是能夠明確定義多個(gè)時(shí)鐘間如下關(guān)系的時(shí)鐘:
????????① 時(shí)鐘頻率
????????② 時(shí)鐘高低電平的持續(xù)時(shí)間(duty cycle)
????????③ 各個(gè)時(shí)鐘的相位(waveform)
????????④ 時(shí)鐘的input latency
異步時(shí)鐘:不能明確定義多個(gè)時(shí)鐘間以上關(guān)系的時(shí)鐘源。
clock有很多參數(shù),頻率、占空比等,這里介紹一下和時(shí)鐘有關(guān)的參數(shù)。
clock period (時(shí)鐘周期):芯片上的時(shí)鐘為了準(zhǔn)確,一般都是由晶振生成。
clock jitter :就是指兩個(gè)時(shí)鐘周期之間存在的差值,這個(gè)誤差是在時(shí)鐘發(fā)生器內(nèi)部產(chǎn)生的,和晶振或者PLL內(nèi)部電路有關(guān),布線對(duì)其沒(méi)有影響。,這個(gè)一般問(wèn)題不大,因?yàn)楫a(chǎn)生jitter的是晶振,可能晶振這個(gè)時(shí)鐘周期為100ns,下一個(gè)時(shí)鐘周期為101ns,產(chǎn)生了1ns的jitter,但是這也不會(huì)對(duì)時(shí)序有很大的影響,因?yàn)榫д袷菚r(shí)鐘樹(shù)的源頭,寄存器A有jitter,寄存器B也有jitter,大家都有clock jitter。
duty cycle :占空比,高電平占整個(gè)時(shí)鐘周期的比例。
transition time:時(shí)鐘的翻轉(zhuǎn)不是直上直下的,其實(shí)有一個(gè)傳輸延時(shí),傳輸延時(shí)定義是從時(shí)鐘的10%~90%所花的時(shí)間(上升傳輸延時(shí))和從時(shí)鐘的90%~10%所花的時(shí)間(下降傳輸延時(shí))。
phase 相位:第一個(gè)上升沿和第一個(gè)下降沿的位置,相對(duì)于零時(shí)刻的時(shí)間。
input latency:輸入終點(diǎn)相對(duì)于時(shí)鐘源頭的延遲,latency,(走線導(dǎo)致的延時(shí))
clock skew:clock tree 到不同的寄存器的距離是不同的,因?yàn)檫@些距離的不同到達(dá)寄存器的時(shí)間也不同,同一個(gè)時(shí)鐘的同一個(gè)沿,到達(dá)不同寄存器的時(shí)間差異稱為clock skew。
clock uncertainty:clock jitter + pessimistic (悲觀量)
在SDC里創(chuàng)建一個(gè)時(shí)鐘(用Tcl腳本寫(xiě)的)

port:頂層設(shè)計(jì)的端口
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
????????如果有兩個(gè)寄存器相連,set up 滿足要求的條件是:前一個(gè)寄存器在clock 第一個(gè)上升沿發(fā)出的數(shù)據(jù),能被后一個(gè)寄存器在第二個(gè)上升沿抓到(如果不能被第二個(gè)上升沿抓到,那就是delay太大了)。
hold check
????????如果有兩個(gè)寄存器相連,hold滿足要求的條件是:前一個(gè)寄存器在clock 第一個(gè)上升沿發(fā)出的數(shù)據(jù),不能被后一個(gè)寄存器在第一個(gè)上升沿抓到(如果被第一個(gè)上升沿抓到,那就是delay太小了,數(shù)據(jù)很快就到第二個(gè)寄存器了)。


setup check 計(jì)算:

????????如圖所示的紫色路徑數(shù)據(jù)從clk端,到達(dá)寄存器C的D端所需要的時(shí)間為:
data_arrive_time = clk_latency + clk_path1_delay + ck_to_q + logic_delay;
????????數(shù)據(jù)到達(dá)時(shí)間為時(shí)鐘的延遲、時(shí)鐘從外部到clk端的路徑延遲、從clk端到數(shù)據(jù)輸出有一個(gè)延遲、再加上組合邏輯延遲。
?????? ?相應(yīng)的寄存器C還有一個(gè)數(shù)據(jù)要求時(shí)間,如果數(shù)據(jù)延遲小于require那就沒(méi)問(wèn)題,如果大于require(數(shù)據(jù)來(lái)晚了)就會(huì)出現(xiàn)setup violation。
data_require_time = clk_period+clk_latency + clk_path2_delay - dff_set_up - clk_uncertainty;
數(shù)據(jù)需求時(shí)間:加一個(gè)時(shí)鐘周期,因?yàn)镃要求的數(shù)據(jù)是上一個(gè)周期的數(shù)據(jù)。
????????綜合工具就會(huì)進(jìn)行setup check:
???????????????????????????? setup_slack =?data_require_time - data_arrive_time?
?????????????????????????????if( setup_slack? >= 0)
????????????????????????????????????setup meet;
????????????????????????????else?
????????????????????????????????????setup violated;
因?yàn)槟銛?shù)據(jù)到達(dá)的時(shí)間必須小于數(shù)據(jù)需求時(shí)間,也就是數(shù)據(jù)要在下一個(gè)時(shí)鐘沿抓數(shù)據(jù)之前到達(dá)下一個(gè)寄存器且滿足下一個(gè)寄存器的setup要求。
hold check 計(jì)算:

? ? data_arrive_time = clk_latency + clk_path1_delay + ck_to_q + logic_delay;
? ? 數(shù)據(jù)到達(dá)時(shí)間為時(shí)鐘的延遲、時(shí)鐘從外部到clk端的路徑延遲、從clk端到數(shù)據(jù)輸出有一個(gè)延遲、再加上組合邏輯延遲。
? ? hold check的是寄存器C不能再當(dāng)前時(shí)鐘上升沿抓到寄存器B當(dāng)前時(shí)鐘上升沿的數(shù)據(jù)。
????data_require_time = clk_latency + clk_path2_delay +?dff_hold?+ clk_uncertainty;
? ??綜合工具會(huì)進(jìn)行hold?check:
????????????????????????????hold_slack =?data_arrive_time -?data_required_time
????????????????????????????if( hold_slack?> = 0 )
????????????????????????????????????hold meet;
????????????????????????????else
????????????????????????????????????hold violated;
????????數(shù)據(jù)到達(dá)時(shí)間要比數(shù)據(jù)要求時(shí)間長(zhǎng),因?yàn)槭峭粋€(gè)時(shí)鐘的數(shù)據(jù),數(shù)據(jù)不能到的太快,不能在同一個(gè)時(shí)鐘沿被后一個(gè)寄存器抓到,數(shù)據(jù)實(shí)際的到達(dá)時(shí)間要在窗口之后,不能被同一個(gè)時(shí)鐘沿抓到。
????
????????setup check的時(shí)候,要走一個(gè)組合邏輯路徑比較長(zhǎng)的路徑,這樣容易setup violation,hold check的時(shí)候,要走一個(gè)組合邏輯路徑比較短的路徑,這樣容易hold violation,就是在兩種check階段都要考慮最壞情況。
????????上面講的setup check和hold check 針對(duì)的是來(lái)自同一個(gè)時(shí)鐘的check,如果兩個(gè)寄存器的時(shí)鐘來(lái)源于兩個(gè)不同的時(shí)鐘源

對(duì)于setup check 還是用他的含義去理解,A寄存器在一個(gè)時(shí)鐘沿的數(shù)據(jù),在B寄存器的一個(gè)時(shí)鐘沿抓到,但是兩個(gè)時(shí)鐘是異步時(shí)鐘,不確定相位,所以綜合工具就會(huì)找兩個(gè)時(shí)鐘相距最近(這里最近是找waveform波形最近的地方)的地方去做check。
????????異步時(shí)鐘的STA分析里的hold分析,取setup check point 前一個(gè)上升沿作為hold check point,hold間隔最近的地方做hold check,如下圖

setup hold都會(huì)去找最差的情況去做check。
????????兩個(gè)不同源的時(shí)鐘,我們不希望他去分析STA,就可以下false_path,因?yàn)楹芏噙@樣的violation是假的violation,我們不希望花很多的算力優(yōu)化這些不會(huì)出錯(cuò)的地方上,就可以下false_path。
下約束的TCL:
創(chuàng)建一個(gè)時(shí)鐘:

下 input_delay:
input_delay 下的是外部信號(hào)的delay,內(nèi)部還有的裕量是clock_period - input_delay,一般在邏輯的頂層,下的外部邏輯的delay。比如:
set_input_delay -clock CLK $dly [get_ports D]
下 output_delay也是一樣:

對(duì)于input_delay和output_delay都可以下最大值和最小值的delay constraint。最大值用于setup分析,最小值用于hold分析。
set_input_delay
例如給輸入下最大6ns延遲和最小2ns延遲

看第二個(gè)時(shí)鐘上升沿,在第二個(gè)時(shí)鐘上升沿過(guò)了2ns后數(shù)據(jù)開(kāi)始不穩(wěn)定,因?yàn)閏lock delay最快是2ns,過(guò)了6ns后數(shù)據(jù)就穩(wěn)定了,因?yàn)闀r(shí)鐘最大delay是6ns,超過(guò)這個(gè)6ns后,數(shù)據(jù)就穩(wěn)定了。
如果沒(méi)有分別設(shè)置 max數(shù)值和min數(shù)值,那么綜合工具就默認(rèn)兩個(gè)數(shù)值相同。
set_output_delay ,是設(shè)置端口外部的delay,所以留給內(nèi)部的delay就只有T-$delay,當(dāng)然這里注意:約束的output_delay也可以是負(fù)數(shù),負(fù)數(shù)的意思就是,模塊內(nèi)部連接到外部部分的delay,必須大于這個(gè)負(fù)數(shù)的絕對(duì)值,比如:
set_output_delay -clock CLK -min -3 [get_ports OUT]
設(shè)置了output_delay是負(fù)數(shù),那么你內(nèi)部邏輯到output的delay必須大于3ns,這樣,內(nèi)部delay+外部delay > 0?才合理??梢岳斫鉃橥獠拷恿艘粋€(gè)寄存器,然后寄存器的hold是3ns,在同一個(gè)時(shí)鐘沿,前一個(gè)寄存器在該時(shí)鐘沿的數(shù)據(jù)不能被后一個(gè)寄存器抓到,所以數(shù)據(jù)到后一個(gè)寄存器的delay必須大于該寄存器的hold time,否則就出現(xiàn)hold violation。設(shè)置外部delay為負(fù)數(shù),其實(shí)目的是為了約束內(nèi)部delay 必須大于這個(gè)負(fù)數(shù)的絕對(duì)值。
set_false_path:
如果我們下了這個(gè)路徑,意思就是不讓工具做STA分析,例如:
set_false_path -from A -to B
※A→B之間的路徑不check timing;但是B→A之間的路徑仍需要進(jìn)行check timing。
set_multicycle_path:
如果數(shù)據(jù)持續(xù)兩個(gè)周期,也就是setup分析的時(shí)候,前一個(gè)寄存器第一個(gè)時(shí)鐘上升沿的數(shù)據(jù)可以被后一個(gè)寄存器第三個(gè)時(shí)鐘上升沿抓到,不希望setup分析按默認(rèn)的來(lái),那就下set_multicycle_path,例如:
set_multicycle_path 2 -setup -from A -to B;
set_multicycle_path 1 -hold -from A -to B;

一般來(lái)說(shuō),如果用set_multicycle_path,setup約束和hold約束往往成對(duì)出現(xiàn)。比如上面設(shè)置了setup延遲一個(gè)周期(set_multicycle_path 2),還設(shè)置hold提前一個(gè)周期(set_multicycle_path 1)。這意思就是,數(shù)據(jù)在第一個(gè)上升沿發(fā)出,能被下一個(gè)寄存器第三個(gè)上升沿抓到(setup滿足),數(shù)據(jù)在第一個(gè)上升沿發(fā)出,不能被下一個(gè)寄存器同一個(gè)上升沿抓到(hold滿足),如果set_multicycle_path 2 -hold -from A - to B 那就是 數(shù)據(jù)在第一個(gè)上升沿發(fā)出,不能被下一個(gè)寄存器第二個(gè)上升沿抓到(hold滿足)。
高級(jí)STA概念:
on-chip-Variation:OCV
同一個(gè)芯片,不同位置的cell的PVT不一致,在STA分析setup的時(shí)候,在計(jì)算data_arrive_time時(shí),故意用延遲大一點(diǎn)的工藝,讓數(shù)據(jù)延時(shí)變大,而在下一個(gè)寄存器的時(shí)鐘路徑上用延時(shí)小的工藝,即讓setup更容易違例。
但是這種方式有些過(guò)于悲觀,原本能跑很高頻率的電路,給這樣悲觀的分析,跑了一個(gè)低頻率,所以實(shí)際上一般都是在延遲的基礎(chǔ)上加一個(gè)5%的悲觀量,這個(gè)具體多少人為設(shè)定。
common-Path-Pessimism-Remove :CPPR
在共同的clock路徑上,cell的delay是一樣的。比如計(jì)算setup的時(shí)候走了一條clock path經(jīng)過(guò)了一個(gè)buffer,計(jì)算下一個(gè)寄存器的data_require_time的時(shí)候走了另一條clock path也經(jīng)過(guò)了這個(gè)buffer那么兩條路徑都經(jīng)過(guò)了這個(gè)buffer,按照OCV,我們不可能給這個(gè)buffer同時(shí)用好的工藝和壞的工藝來(lái)做悲觀,所以這種情況下就可以把這個(gè)共同路徑上的cell設(shè)為同樣的工藝,即同樣delay。
STA算例1:

Setup路徑計(jì)算,取最長(zhǎng)的延時(shí),最大的延時(shí)的路徑要在第二個(gè)時(shí)鐘沿前到來(lái),且應(yīng)滿足setup需求(data_required 中減去setup時(shí)間,因?yàn)閿?shù)據(jù)要在setup窗口之前到達(dá))。

slack = 8.75ns,代表setup還有這么多的裕量。
Hold路徑計(jì)算,數(shù)據(jù)到達(dá)時(shí)間要比hold窗口還慢,保證數(shù)據(jù)不能被同一個(gè)時(shí)鐘沿采到

STA算例2:

計(jì)算data_require_time 再計(jì)算data_arrive_time 然后計(jì)算裕是否夠。
第一題,求最大工作頻率(setup 分析):
時(shí)鐘頻率影響的只有setup分析,之前在寫(xiě)路徑的時(shí)候,setup的data_require_time里是有一個(gè)clock_period的,所以setup分析是與時(shí)鐘頻率有關(guān)的,且容易推斷出時(shí)鐘頻率越快,越容易出現(xiàn)setup violation。
每個(gè)寄存器都得分析setup的裕量
對(duì)寄存器1 來(lái)說(shuō):
寄存器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 (兩個(gè)buffer+Tcq+Tandgate)
data_require = Tcycle + Tbuffer- Tsu = Tcycle + 1 - 3 = Tcycle - 2
最長(zhǎng)的delay為Path2,Path2的delay要小于data_require所以有不等式:
6 =< Tcycle - 2? ? 從而有? ? T cycle >= 8ns
對(duì)寄存器2來(lái)說(shuō):
只有一條數(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 所以時(shí)鐘最大工作頻率為100MHz;
第二題,判斷時(shí)鐘10MHz時(shí),是否有timing violation(hold 分析):
首先,電路的最大工作頻率是100MHz,所以時(shí)鐘為10MHz時(shí),一定沒(méi)有setup的violation,但是有沒(méi)有hold 的violation我們不知道, 所以需要計(jì)算兩個(gè)寄存器的hold是否會(huì)出現(xiàn)時(shí)序問(wèn)題。
對(duì)寄存器1來(lái)說(shuō):
path1 :0.5 + 2 = 2.5 ns
path2 : 1 + 1 + 2 + 2 = 6ns
data_require_time = 1 + 2 = 3ns
hold分析要求數(shù)據(jù)延時(shí)要在時(shí)鐘上升沿之后到來(lái),所以data_arrive_time >= data_require_time
對(duì)于path1來(lái)說(shuō) 2.5ns < 3ns,所以路徑1會(huì)出現(xiàn)hold violation。
對(duì)寄存器2來(lái)說(shuō):
data_arrive_time = 1 + 2 + 2 + 2 + 2 = 9 ns
data_require_time = 1 + 1 + 2 = 4ns
9 > 4 滿足要求,所以寄存器2不會(huì)hold violation。
????實(shí)際上的STA分析是EDA工具幫我們分析的,工具會(huì)幫我們分析各條路徑的setup/hold是否滿足要求,所以對(duì)我們實(shí)際工程來(lái)說(shuō),我們只需要看timing報(bào)告就可以了,看是否有出現(xiàn)violation,如果有出現(xiàn),要知道原因,以及如何修復(fù)violation。
文章內(nèi)容總結(jié)自sky的課程:數(shù)字IC/數(shù)字電路/FPGA設(shè)計(jì)_從入門(mén)到精通_合集-學(xué)習(xí)視頻教程-騰訊課堂 (qq.com),老師講的很好,感興趣的可以去了解其課程。
STA自測(cè):
如果芯片tape out了,測(cè)試懷疑有setup violation,怎么確認(rèn)?(降低時(shí)鐘頻率,clock_period 就變大了,setup check 的不等式就更容易滿足了,如果降低了時(shí)鐘頻率結(jié)果電路從不能工作變到穩(wěn)定工作了,那就很可能是setup violation了,如果PLL做死了,不能調(diào)時(shí)鐘頻率,那還可以調(diào)ck_to_q(用不同的工藝庫(kù),PVT),和logic_delay)
如果芯片tape out了,測(cè)試懷疑有hold?violation,怎么確認(rèn)(和setup 檢測(cè)一樣,如果hold violation了,那就是不等式不成立,那我們就想辦法讓不等式成立,同樣的可以改PVT,也可以增加 logic delay,)?
什么是setup time 什么是hold time
寫(xiě)出setup check和hold check的判斷公式
如果出現(xiàn)setup violation了怎么處理?
如果出現(xiàn)hold violation了怎么處理?(根據(jù)不等式調(diào)參數(shù),比如換PVT,修改logic_delay)
clock jitter 和clock skew有什么區(qū)別?
同步時(shí)鐘,異步時(shí)鐘的區(qū)別
不希望兩個(gè)異步時(shí)鐘之間做STA怎么辦?怎么下約束?
如果從寄存器A到寄存器B之間有多條組合邏輯路徑,setup和hold分析的時(shí)候怎么分析?
設(shè)置output_delay的時(shí)候,delay可以是負(fù)數(shù)嗎?為什么?
如果給你電路圖,讓你分析setup和hold時(shí)序是否滿足要求,你能分析嗎?如果讓你判斷該電路能跑的最高時(shí)鐘頻率為多少,能計(jì)算嗎?