Latch應用總結!附Time Borrowing,Lockup,Clock Gating Check概念解析
The following article is from RTL2GDS Author 老本 Benjamin
數字集成電路設計中從RTL到GDS Tapeout整個過程中的知識點系統性分享。包括:IC后端設計(物理設計), 綜合, STA, PV, DFT等。也會發表些行業觀察類文章!
同步數字電路中的Path主流還是用寄存器,但是鎖存器(Latch)相關的Path也不容忽視,它既能用作數據存儲單元,又能作為時鍾控制單元。這一篇就講講Latch的功能,相關的Timing Path如何分析,其中也會涉及到time borrowing, lockup, clock gating check等概念。
Latch功能
Latch的電路結構如下圖:
Latch電路結構
當 E = 1 時,latch直傳(transparent),D端信號的變化會即時反應在Q端;
當 E = 0 時,latch關斷(closed),Q端保持關斷瞬間D端的值。
設計中使用Latch的好處是,相比寄存器的面積更小,功耗更低,可以從后級電路進行time borrowing,更容易滿足setup time,然而壞處是STA分析不會那么直接,下面我們就看看引入了Latch的Timing Path如何分析。
Time Borrowing
在數字設計中,經常會碰到如下圖所示的Path,兩個寄存器(UFF0和UFF1)之間存在一個鎖存器(ULAT1),這種情況工具會怎么分析path呢?不同STA工具的行為會有稍微的區別,我們先以PT傳統的分析方法來解釋。
加入Latch后的電路圖
Time Borrowing示意圖
根據Latch的特點,在CLKN為高電平時,ULAT1是transparent,ULAT1/D端的數據能即時地反映在ULAT1/Q端。上圖中的情況是,UFF0->ULAT1/D的Path Delay使得ULAT1/D數據在CLKN的上升沿之后才到達,需要從后一級ULAT1->UFF1中借了1.81ns,使得原本違例的path滿足了要求,而ULAT1->UFF1的timing path即使借出去1.81ns,也能夠滿足要求,具體的timing report如下:
UFF0->ULAT1的Timing Path
ULAT1->UFF1的Timing Path
這里需要指出的一點是,在計算setup timing的時候,在UFF0->ULAT1中,ULAT1的clock path是按照early/min模式計算的,而在ULAT1->UFF1中,ULAT1的clock path是按照late/max模式計算的,有一部分公共路徑的CRPR是不會被排除掉的,所以現在的PT引入了一種新的latch timing分析的模式,它把latch當成一個組合邏輯,在分析UFF0->UFF1的path時可以穿過ULAT1,這里只提示一下可以通過下面這個選型來打開,從而可以減少悲觀度:
set_app_var timing_enable_through_paths true
這種模式下,Latch的D Pin只能作為Endpoint,不能作為Startpoint,所以在report_timing的時候也要注意是用-to還是-through的區別:
report_timing -to $latch_d_pin
report_timing -through $latch_d_pin
需要注意的是,這種through模式只是針對setup,對hold分析還是保持不變。下面接着看一個用latch來解決跨時鍾域hold timing問題的應用。
Lockup Latch in Scan Chain
(因為是scan chain, 所以不同與常規時序邏輯電路, 中間沒有組合邏輯)
為了芯片測試的需要,我們會用Scan Chain的方式將絕大部分的寄存器串鏈起來,在不影響功能的情況下,以簡單的方式測試電路中寄存器的良率。但是存在一種情況,前后相鄰的兩級寄存器如果時鍾不一樣(跨時鍾域),如下圖所示:
加入Lockup latch之前的電路圖
由於CLK1和CLK2為不同的時鍾域,很難保證他們同步,假如CLK2相比CLK1有一段不確定的延遲Tskew,可大可小,那么很有可能FF1/CLK1->FF1/Q->FF2/SI這段延時Tdata會比Tskew小,造成hold timing違例。
加入Lockup latch之前的hold timing時序圖
上一節提到Latch有time borrowing的功效,假如在兩級寄存器之間加入一個latch,結構如下圖所示:
加入Lockup latch之后的電路圖
CLK1低電平的時候,Lockup Latch是transparent,CLK1高電平的時候Lockup Latch一直保持上一拍的數據,這樣即使CLK2有延遲,只要不超過CLK1高電平持續時間,就能保證hold timing沒有問題。
加入Lockup latch之后的hold timing時序圖
在DC中可以很方便的實現這一功能,具體會在RTL2GDS微信公眾號的綜合/DFT教程中詳細介紹。
Clock Gating Check
Latch的另一個應用是作為門控時鍾單元(Clock Gating Cell),通過避免部分寄存器不必要的時鍾翻轉,可以極大地節省電路的動態功耗。實際應用中,為了避免出現毛刺,會在Latch后面添加一個與門組成一個ICG(Integrated Clock Gating)。
ICG電路結構
由於ICG是用在clock path上,STA工具默認會要求做CLKI到EN端的clock gating check,目的是保證時鍾使能的時序滿足要求,所以會存在REG2ICG的path。因為ICG的clock會比REG的clock delay要短,所以天然存在一個skew對setup不利,特別是假如有多級的ICG級聯,更加加重了這種情況。在設計上,需要保證REG2ICG的數據路徑不能太復雜,否則物理實現會存在困難。
在CTS之前,由於clock tree是ideal的,考慮不到這種skew的不利影響,所以往往需要通過SDC命令"set_clock_gating_check"人為地設置,讓綜合或者布局工具提前認識到這一點並提前優化。
需要注意的是,不僅僅ICG需要clock gating check,如果clock path上存在與門、或門等邏輯也需要進行clock gating check。