Latch功能
Latch的電路結(jié)構(gòu)如下圖:
Latch電路結(jié)構(gòu)
當(dāng) E = 1 時(shí),latch直傳(transparent),D端信號(hào)的變化會(huì)即時(shí)反應(yīng)在Q端;
當(dāng) E = 0 時(shí),latch關(guān)斷(closed),Q端保持關(guān)斷瞬間D端的值。
設(shè)計(jì)中使用Latch的好處是,相比寄存器的面積更小,功耗更低,可以從后級(jí)電路進(jìn)行time borrowing,更容易滿足setup time,然而壞處是STA分析不會(huì)那么直接,下面我們就看看引入了Latch的Timing Path如何分析。
Time Borrowing
在數(shù)字設(shè)計(jì)中,經(jīng)常會(huì)碰到如下圖所示的Path,兩個(gè)寄存器(UFF0和UFF1)之間存在一個(gè)鎖存器(ULAT1),這種情況工具會(huì)怎么分析path呢?不同STA工具的行為會(huì)有稍微的區(qū)別,我們先以PT傳統(tǒng)的分析方法來(lái)解釋。
加入Latch后的電路圖
Time Borrowing示意圖
根據(jù)Latch的特點(diǎn),在CLKN為高電平時(shí),ULAT1是transparent,ULAT1/D端的數(shù)據(jù)能即時(shí)地反映在ULAT1/Q端。上圖中的情況是,UFF0->ULAT1/D的Path Delay使得ULAT1/D數(shù)據(jù)在CLKN的上升沿之后才到達(dá),需要從后一級(jí)ULAT1->UFF1中借了1.81ns,使得原本違例的path滿足了要求,而ULAT1->UFF1的timing path即使借出去1.81ns,也能夠滿足要求,具體的timing report如下:
UFF0->ULAT1的Timing Path
ULAT1->UFF1的Timing Path
這里需要指出的一點(diǎn)是,在計(jì)算setup timing的時(shí)候,在UFF0->ULAT1中,ULAT1的clock path是按照early/min模式計(jì)算的,而在ULAT1->UFF1中,ULAT1的clock path是按照l(shuí)ate/max模式計(jì)算的,有一部分公共路徑的CRPR是不會(huì)被排除掉的,所以現(xiàn)在的PT引入了一種新的latch timing分析的模式,它把latch當(dāng)成一個(gè)組合邏輯,在分析UFF0->UFF1的path時(shí)可以穿過(guò)ULAT1,這里只提示一下可以通過(guò)下面這個(gè)選型來(lái)打開,從而可以減少悲觀度:
set_app_var timing_enable_through_paths true
這種模式下,Latch的D Pin只能作為Endpoint,不能作為Startpoint,所以在report_timing的時(shí)候也要注意是用-to還是-through的區(qū)別:
report_timing -to $latch_d_pin
report_timing -through $latch_d_pin
需要注意的是,這種through模式只是針對(duì)setup,對(duì)hold分析還是保持不變。下面接著看一個(gè)用latch來(lái)解決跨時(shí)鐘域hold timing問(wèn)題的應(yīng)用。
Lockup Latch in Scan Chain
為了芯片測(cè)試的需要,我們會(huì)用Scan Chain的方式將絕大部分的寄存器串鏈起來(lái),在不影響功能的情況下,以簡(jiǎn)單的方式測(cè)試電路中寄存器的良率。但是存在一種情況,前后相鄰的兩級(jí)寄存器如果時(shí)鐘不一樣(跨時(shí)鐘域),如下圖所示:
加入Lockup latch之前的電路圖
由于CLK1和CLK2為不同的時(shí)鐘域,很難保證他們同步,假如CLK2相比CLK1有一段不確定的延遲Tskew,可大可小,那么很有可能FF1/CLK1->FF1/Q->FF2/SI這段延時(shí)Tdata會(huì)比Tskew小,造成hold timing違例。
加入Lockup latch之前的hold timing時(shí)序圖
上一節(jié)提到Latch有time borrowing的功效,假如在兩級(jí)寄存器之間加入一個(gè)latch,結(jié)構(gòu)如下圖所示:
加入Lockup latch之后的電路圖
CLK1低電平的時(shí)候,Lockup Latch是transparent,CLK1高電平的時(shí)候Lockup Latch一直保持上一拍的數(shù)據(jù),這樣即使CLK2有延遲,只要不超過(guò)CLK1高電平持續(xù)時(shí)間,就能保證hold timing沒(méi)有問(wèn)題。
加入Lockup latch之后的hold timing時(shí)序圖
在DC中可以很方便的實(shí)現(xiàn)這一功能,具體會(huì)在RTL2GDS微信公眾號(hào)的綜合/DFT教程中詳細(xì)介紹。
Clock Gating Check
Latch的另一個(gè)應(yīng)用是作為門控時(shí)鐘單元(Clock Gating Cell),通過(guò)避免部分寄存器不必要的時(shí)鐘翻轉(zhuǎn),可以極大地節(jié)省電路的動(dòng)態(tài)功耗。實(shí)際應(yīng)用中,為了避免出現(xiàn)毛刺,會(huì)在Latch后面添加一個(gè)與門組成一個(gè)ICG(Integrated Clock Gating)。
ICG電路結(jié)構(gòu)
由于ICG是用在clock path上,STA工具默認(rèn)會(huì)要求做CLKI到EN端的clock gating check,目的是保證時(shí)鐘使能的時(shí)序滿足要求,所以會(huì)存在REG2ICG的path。因?yàn)镮CG的clock會(huì)比REG的clock delay要短,所以天然存在一個(gè)skew對(duì)setup不利,特別是假如有多級(jí)的ICG級(jí)聯(lián),更加加重了這種情況。在設(shè)計(jì)上,需要保證REG2ICG的數(shù)據(jù)路徑不能太復(fù)雜,否則物理實(shí)現(xiàn)會(huì)存在困難。
在CTS之前,由于clock tree是ideal的,考慮不到這種skew的不利影響,所以往往需要通過(guò)SDC命令"set_clock_gating_check"人為地設(shè)置,讓綜合或者布局工具提前認(rèn)識(shí)到這一點(diǎn)并提前優(yōu)化。
需要注意的是,不僅僅ICG需要clock gating check,如果clock path上存在與門、或門等邏輯也需要進(jìn)行clock gating check。
-
寄存器
+關(guān)注
關(guān)注
31文章
5342瀏覽量
120285 -
鎖存器
+關(guān)注
關(guān)注
8文章
906瀏覽量
41502 -
STA
+關(guān)注
關(guān)注
0文章
51瀏覽量
18960 -
SDC
+關(guān)注
關(guān)注
0文章
49瀏覽量
15534 -
CLK
+關(guān)注
關(guān)注
0文章
127瀏覽量
17162
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論