物理設計

時脈閘控(clock gating)

想像一棟大辦公樓,規矩是:每一盞燈都得整齊劃一地一明一滅,一整天、每個房間都如此,連空房間也不例外。不管有沒有人用這個房間,這一明一滅都在耗電。時脈閘控就是物業經理走過走廊,把沒人在的整片區域的總開關給關掉。在晶片裡,正反器就是房間,時脈就是那永不停歇的明滅:每來一個時脈邊緣,正反器就重新讀一遍自己的輸入,而這一次重新讀取就會撥動電晶體、給導線充電又放電。如果某塊邏輯這一拍根本沒在做正經事,你就根本不希望它的時脈送到。於是你插入一個小小的閘控單元,當一個致能訊號說「閒置」時,它就攔住時脈,不讓它到達那一組正反器。這些正反器的輸出被凍住,下游什麼都不翻轉,這些正反器及其扇出本會燒掉的動態功耗,乾脆就沒花出去。

為什麼停下翻轉能省這麼多?動態功耗,也就是真正把訊號來回切換所花的能量,遵循 P = alpha * C * V^2 * f,其中 C 是你要充放電的電容,V 是供電電壓,f 是時脈頻率,alpha 是活動因子,也就是一個節點真正翻轉的那部分週期所占的比例。時脈網路是整顆晶片上最繁忙、alpha 最高的訊號,因為按定義它每一拍都要翻轉,所以它和它驅動的那些正反器主導了動態功耗。把閒置區域的時脈掐掉,那裡的 alpha 就趨向於零,而由於這一項對活動因子(以及對 f 和 C)都是線性的,省下來的功耗既大又直接。要注意,這只對付動態功耗;即便電晶體不在切換、也會涓涓流過的漏電流,它一點都管不著,那個得改用電源閘控(power gating)來對付。

實際工作中你很少自己手搭那個 AND 閘,因為天真地「把時脈和致能做 AND 運算」很可能產生毛刺,或者在致能恰好在錯誤時刻變化時把時脈脈衝削短。取而代之的是,合成工具會插入一個專門設計的整合式時脈閘控單元(ICG),通常是基於閂鎖器的結構,它在時脈的無效相位上取樣致能,從而讓閘控後的輸出始終是一個乾淨、全寬的脈衝或一個乾淨、穩定的準位。只要你允許,工具會自動完成這件事:寫成「僅當致能為真時才更新這個暫存器」的 RTL 會被識別並轉換成閘控時脈,而在物理設計階段,時脈樹合成(clock-tree synthesis)這一步會透過這些 ICG 單元來平衡並緩衝時脈,讓被致能的路徑仍然準時到達。

P_dynamic = alpha * C * V^2 * f (gating an idle block drives its alpha toward 0)

動態功耗與活動因子 alpha 成正比;時脈是晶片上 alpha 最高的網路,所以在邏輯閒置處把它壓住,是最直接的一根動態功耗槓桿。

一條實戰經驗加一條提醒:為了省功耗,盡量把工具能給你的細粒度閘控都打開,但要盯住可測性和時序——閘控時脈需要測試模式的旁路(一個 scan/test_enable 訊號強行把閘打開),這樣 ATPG 才仍能翻轉這些正反器;而致能訊號本身必須滿足相對於閘控單元的建立時間(setup),否則就會出現時脈毛刺。

又稱
clock gategated clockclock-gating cellICG门控时钟閘控時脈