時脈樹:為什麼晶片裡要種一棵樹來送時鐘
在談樹的結構之前,必須先定義清楚我們到底在對抗什麼。時脈配送的品質,主要由三個誤差來源決定:插入延遲、時脈偏斜與時脈抖動。這三個詞經常被混用,但它們描述的是不同的事情。
2.1 時脈偏斜(Clock Skew):同一個時脈,不同時間到
時脈偏斜指的是「同一個時脈邊緣,到達兩個不同正反器的时间差」。它是一個空間上的概念:因為路徑長度不同、經過的緩衝器數量不同、負載電容不同,時脈訊號到達每個端點的延遲不會完全一樣。偏斜可以是正的,也可以是負的,端看你以哪個點為參考。
偏斜為什麼可怕?想像兩個相鄰的正反器,第一個負責把資料送出,第二個負責接收。如果接收端的時脈比發送端晚了太多,資料可能還沒準備好就被取樣,這是建立時間(setup time)違規;反過來,如果接收端的時脈來得太早,資料可能還沒從前一個週期更新完就被抓走,這是保持時間(hold time)違規。前者可以靠降頻解決,後者更麻煩,因為它跟頻率無關,一旦發生就是硬體錯誤,只能靠插入延遲元件(delay cell)硬補。
在實務上,一顆高效能晶片的全局偏斜預算,通常只佔時脈週期的 3% 到 8%。以 1 GHz、週期 1 奈秒為例,全局偏斜可能被要求在 60 到 80 皮秒以內,而且這還不包括抖動與製程變異。
2.2 時脈抖動(Jitter):同一個位置,不同時間到
如果說偏斜是「空間上的不一致」,抖動就是「時間上的不穩定」。同一個端點,這一拍的時脈邊緣與下一拍的時脈邊緣,抵達時間會有微小的隨機變化。抖動的來源包括時脈產生器(PLL)本身的相位雜訊、電源雜訊造成的延遲調變、相鄰訊號的串音(crosstalk),以及溫度與電壓的緩慢漂移。
抖動通常分為隨機抖動(random jitter)與確定性抖動(deterministic jitter)。前者符合統計分布,可以用 RMS 值描述;後者與電源週期性雜訊或特定資料樣式相關。對時序分析來說,抖動會直接從時脈週期裡扣掉,也就是所謂的「時脈不確定性(clock uncertainty)」預算。
2.3 插入延遲(Insertion Delay):從源頭到端點的總時間
插入延遲是指時脈從時脈源(例如 PLL 輸出或是外部時脈輸入腳)出發,經過整個時脈樹,抵達某個正反器時脈腳的總延遲。這個數字本身不是壞事,延遲大一點電路還是可以運作,因為它是固定的。但它會影響兩件事:一是與外部電路的介面時序,二是它放大了偏斜的絕對值。
在時脈樹綜合的目標函數裡,我們通常會同時最小化「最大插入延遲」與「偏斜」。因為插入延遲越大,代表樹越深、緩衝器越多、功耗越高,而且對製程變異(OCV)越敏感。
三、為什麼是「樹」?從扇出到樹狀拓撲
理解了問題,就可以談解法。最直覺的時脈配送方式,是從時脈源拉一條超寬的超級匯流排,直接接到所有正反器。但這在物理上不可行:一個驅動器的驅動能力有限,負載電容太大會讓訊號邊緣變得很緩慢(slew 變差),甚至根本推不動。因此必須把大負載切成小塊,一層一層地放大與分送,這就形成了樹。
3.1 一顆時脈要驅動幾百萬個負載
以一顆內含一千萬個正反器的系統單晶片(SoC)為例,每個正反器的時脈腳輸入電容大约是幾飛法拉(fF)等級,乘上一千萬,就是幾十奈法拉(nF)的總負載。任何單一緩衝器都無法驅動這樣的負載,所以必須把負載分群,每一群由一個較小的驅動器負責,再由更大的驅動器去驅動這些小驅動器。這樣一層一層往上收斂,自然就形成一棵以時脈源為根的樹。
樹的深度(level)在現代晶片上通常是 8 到 20 級,視製程、頻率與晶片面積而定。每一級都會增加延遲,但也讓扇出(fanout)維持在可控範圍,通常每個緩衝器驅動 4 到 16 個下游負載,這個數字跟製程與驅動器的尺寸有關。
3.2 樹狀結構的數學美感:H-Tree 與遞迴對分
最經典的時脈樹拓撲叫做 H 樹(H-Tree)。它的做法是把晶片平面不斷地對半切割,在每一層用 H 形的金屬線把四個子區域的中心連接起來,遞迴下去直到葉節點。由於每一個葉節點到根節點的路徑長度完全相同,理論上 H 樹可以做到零偏斜(zero skew),而且每一層的負載也完全對稱,非常適合用數學模型分析。
H 樹在學術論文與早期微處理器裡非常常見,例如一些 RISC 處理器就採用過改良式的 H 樹。但真實晶片不是均勻的:有些區域塞滿了運算單元,有些區域是記憶體陣列,有些地方還有類比電路與電源網路的禁制區(blockage)。因此實務上的時脈樹,是「演算法產生的樹」加上「配合實際布局的調整」,不會是完美的幾何 H 樹,而是所謂的「緩衝器樹(buffered tree)」或「時脈分散網路」。
3.3 緩衝器插入與樹的層級
樹的節點主要由兩種元件構成:緩衝器(buffer)與反相器對(inverter pair)。緩衝器用來放大訊號、恢復邊緣,反相器對則是兩級反相器串接,功能等同緩衝器,但在某些製程下面積更小、功耗更低,而且可以順便做相位控制。此外還有時脈閘控單元(integrated clock gating cell, ICG),它同時擔任「開關」與「緩衝」的角色,是省電設計的關鍵。
在樹的末端,通常還會插入所謂的「葉級緩衝器(leaf buffer)」,直接驅動正反器的時脈腳。這樣做的好處是把最後一段的負載隔離,避免正反器的輸入電容直接影響到上層的延遲計算。這種分層負責的設計,讓時脈樹的延遲可以被準確建模,也讓 CTS 工具能夠區域性地優化。
四、時脈樹綜合(CTS):把樹種進晶片裡
講完結構,接下來要談流程。時脈樹不是設計師一筆一畫畫出來的,而是由電子設計自動化(EDA)工具根據電路網表(netlist)與平面規劃,自動生成出來的。這個步驟就叫做時脈樹綜合(Clock Tree Synthesis, CTS)。
4.1 CTS 在設計流程中的位置
一顆晶片的實體設計流程大致是:合成(synthesis)→ 平面規劃(floorplan)→ 電源規劃(power plan)→ 擺置(placement)→ 時脈樹綜合(CTS)→ 繞線(routing)→ 時序簽核(STA signoff)→ 實體驗證(DRC/LVS)。CTS 排在擺置之後、繞線之前,原因是它必須知道每個正反器的實際位置,才能規劃最合理的中間節點;同時它產生的時脈線路,會成為後續繞線的基礎骨幹。
在 CTS 之前,工具只知道「這裡有一堆正反器需要時脈」,時脈網路還是理想化的(ideal clock),也就是假設時脈在每個端點同時到達。CTS 之後,時脈網路變成真實的(propagated clock),工具開始計算實際的插入延遲與偏斜,時序分析也從此進入比較接近現實的階段。
4.2 CTS 到底在優化什麼
時脈樹綜合的目標函數不是單一的,而是一組互相拉扯的指標:
這些目標彼此衝突。要偏斜小,通常得加更多緩衝器、走對稱路徑,功耗與面積就上升;要省電,就得減少緩衝器層級,偏斜控制就變難。所以 CTS 本質上是一個多目標優化問題,工具會根據設計師給的權重與限制,找一個可接受的平衡點。
4.3 實務上的取捨:有用偏斜與非預設規則
有一個很有意思的技巧叫做「有用偏斜(useful skew)」。既然偏斜無法完全消除,那不如刻意製造偏斜來幫忙時序。例如某條路徑的建立時間很緊,我們可以讓接收端正反器的時脈稍微晚一點到,等於多給它一點時間;同時讓發送端的時脈早一點到,等於提早出發。這種「借用時間」的做法,在高效能設計裡非常常見,但它是一把雙面刃,因為借來的時間會壓縮到相鄰路徑的保持時間,必須整體考量。
另一個實務重點是「非預設繞線規則(Non-Default Rule, NDR)」。時脈線通常會用雙倍線寬、雙倍間距,並且在兩側加上屏蔽線(shielding),以降低電阻與串音。在先進製程裡,線寬變細導致電阻上升,這些規則對時脈樹的品質影響非常大。設計師常常要為時脈網路指定專屬的金屬層與繞線規則,這也是 CTS 設定檔裡最關鍵的參數之一。
五、樹的變體:網格、脊柱與混合式時脈網路
標準的緩衝器樹並不是唯一的答案。當晶片面積變大、頻率變高,或對偏斜的要求極端嚴苛時,設計師會採用不同的拓撲。以下介紹三種常見的變體。
5.1 時脈網格(Clock Mesh)
網格的做法是在晶片上層鋪設一張金屬網,把時脈訊號灌進整張網,再由網格均勻地往下送到每個正反器。因為網格本身的電阻極低,整張網幾乎是同電位,所以偏斜可以壓得非常小,而且對製程變異與電源雜訊的免疫力很強。早期 IBM 的大型伺服器處理器就大量採用網格時脈。
但網格的代價也很明顯:它是一大片金屬,電容大、切換功耗高,而且會佔用寶貴的繞線資源。此外,驅動整張網需要非常強壯的驅動器陣列,設計複雜度高。因此網格通常只用在对偏斜極度敏感的關鍵區塊,或是高階伺服器晶片,不會整顆晶片都鋪。
5.2 脊柱與魚骨(Spine / Fishbone)
脊柱式時脈網路的概念是:先用一條或數條很粗的主幹(spine)把時脈送到晶片各區,再從主幹分支出去,像魚骨一樣。這種結構的好處是主幹延遲可控、分支長度短,介於樹與網格之間。它常見於記憶體密集的設計,或是需要把時脈送到多個重複區塊(例如多核心)的情況。
魚骨結構則進一步把分支做成對稱的梳狀,讓每個分支的負載與長度盡量一致,以降低偏斜。這種拓撲在類比與混合訊號電路裡也很常見,因為它對稱性好,適合搭配差動時脈。
5.3 混合式與區域化時脈
現代大型 SoC 幾乎都是混合式:全局用樹狀主幹把時脈送到各個功能區塊的根部,區塊內部再根據需求選用局部樹、局部網格或網格化的葉級網路。這種「分區治理」的做法,讓每個區塊可以獨立優化,也方便做時脈閘控與電源域切割。
另一個趨勢是「多源時脈樹(multi-source CTS)」。傳統樹只有一個根,所有路徑都從同一個點出發;多源則是在晶片多個位置放置時脈緩衝器,由同一組時脈源平行驅動,形成多個根。這樣可以縮短最長路徑、降低插入延遲,但必須確保各源之間的相位一致,否則反而製造偏斜。
六、省電的樹:時脈閘控與動態頻率
時脈網路是晶片裡的耗電大戶,這一點常常被忽略。因為時脈是持續切換的訊號,即使某個區塊當下沒有在做事,它的時脈線與正反器仍然在消耗動態功耗。動態功耗的公式是 P = αCV²f,其中 α 是切換率。時脈的 α 接近 1,等於每一拍都在充放電,這也是為什麼省電設計的第一刀,往往砍向時脈。
6.1 時脈閘控(Clock Gating)
時脈閘控的原理很簡單:既然這個區塊現在不需要動作,那就把它的時脈關掉。實作上會插入一個時脈閘控單元(ICG),它由一個鎖存器(latch)與一個 AND 閘組成,確保閘控訊號只在時脈低電位時切換,避免產生窄脈衝(glitch)。如此一來,被關閉的區塊裡,正反器不再切換,時脈樹的下游分支也停止充放電,功耗可以大幅下降。
現代的時脈閘控是自動化的:合成工具會根據電路行為推論出哪些暫存器在某個週期不需要更新,自動插入 ICG。設計師也可以在 RTL 裡手動描述閘控條件,讓工具更精準地優化。一個設計良好的 SoC,時脈閘控可以省下 20% 到 40% 的動態功耗。
6.2 多時脈域與閘控的代價
時脈閘控雖然省電,但不是沒有代價。首先,ICG 本身會增加時脈樹的延遲與面積;其次,被閘控的區塊在重新開啟時,需要考慮時脈穩定時間與相位對齊;第三,如果閘控邊界跨越不同的時脈域,就會牽涉到跨時脈域(CDC)的問題,必須用同步器(synchronizer)或非同步 FIFO 來處理,否則會產生亞穩態(metastability)。
除了閘控,動態電壓頻率調整(DVFS)也是常見手段。系統根據負載高低,切換不同的時脈頻率與電壓。這需要在時脈樹上加入可切換的時脈源(例如多個 PLL)與時脈多工器(clock mux),而多工器的切換必須做到無毛刺(glitch-free),否則會讓整個時脈域瞬間失效。這些電路雖然不在「樹」的本體裡,卻是樹能夠靈活運作的重要配套。
七、先進製程與未來:樹還種得下去嗎
摩爾定律走到今天,時脈樹面臨的挑戰比過去任何時候都嚴峻。製程越先進,元件越快,但線路的電阻也越高,變異也越難預測。這棵樹要怎麼種,正在被重新思考。
7.1 FinFET、GAA 與金屬層電阻
在 16 奈米以下的 FinFET 製程,以及 3 奈米之後的環繞閘極(GAA)製程,電晶體的驅動能力很強,但金屬連線的電阻因為線寬縮小而快速上升。時脈線如果只走較細的下層金屬,RC 延遲會大到無法接受。因此先進製程的時脈網路,幾乎都集中在上層較厚、較寬的金屬層,並且使用雙倍線寬與屏蔽。這也造成時脈繞線資源與電源網路、高速訊號線之間的激烈競爭。
另一個問題是「晶片上變異(On-Chip Variation, OCV)」。同一顆晶片上,不同區域的電晶體速度可能因為製程隨機性、溫度梯度與電壓降(IR drop)而不同。CTS 必須用統計方法(如 AOCV、POCV)把這些變異納入考量,否則在實驗室跑得過的設計,量產時就會有一批晶片時序違規。這也是為什麼先進設計的偏斜預算越來越緊,卻越來越難達成。
7.2 3D IC 與晶片堆疊的時脈挑戰
當製程微縮逼近物理極限,業界開始往垂直方向發展:把多顆晶粒(die)堆疊起來,透過矽穿孔(TSV)或混合鍵合(hybrid bonding)連接。這種 3D IC 的好處是縮短晶粒間的距離、提高頻寬,但也讓時脈配送變得更複雜。跨越不同晶粒的時脈路徑,延遲與變異都很難準確建模,而且不同晶粒可能來自不同製程,溫度特性也不一致。
目前的做法包括:每個晶粒各自有自己的時脈樹與 PLL,透過握手協定同步;或是用主從式架構,由其中一顆晶粒產生時脈,透過 TSV 傳遞。但不論哪一種,跨晶粒的偏斜與抖動都是難題,也是 3D IC 設計工具仍在努力補強的地方。
7.3 光學時脈與非同步電路的想像
學術界一直在探索用光來配送時脈。光在波導中的傳播損耗低、延遲穩定,而且沒有電磁干擾問題,理論上可以做到極低偏斜的全域時脈網路。已經有研究團隊做出用矽光子波導構成的 H 樹,把時脈以光的形式分送到晶片各處,再在末端轉回電訊號。這種「光學時脈」的挑戰在於光電轉換的功耗與面積,以及與現有 CMOS 製程的整合難度,目前還停留在研究階段。
另一條路是回到非同步或「局部同步、全域非同步(GALS)」的架構。如果每個區塊用自己的時脈,區塊之間用握手協定溝通,就不需要一棵覆蓋全晶片的大樹,偏斜問題也被拆解成許多小問題。這種想法在低功耗感測器與特殊加速器上已經有實際產品,但在需要極高效能的通用處理器上,同步設計的簡潔與可預測性仍然難以取代。
八、給學習者的觀察清單
如果你正在學習數位 IC 設計,或是想更深入理解時脈樹,以下幾點可以當作實作與閱讀時的檢查清單:
時脈樹是一個很特別的設計物件:它幾乎不執行任何邏輯功能,卻決定了整顆晶片能不能運作。它像城市的自來水管線,平常沒人注意,一旦水壓不穩,整個城市都會出問題。下一次你看到晶片顯微照片裡那棵對稱分叉的金屬樹,或許會對它有比較多的敬意。
結語:一棵為了「同時」而存在的樹
回到最初的問題:為什麼晶片裡要種一棵樹來送時鐘?答案其實很樸素——因為我們需要「同時」。在一個由數十億個開關組成的系統裡,同時不是自然狀態,而是靠工程手段硬生生創造出來的秩序。時脈樹就是這個秩序的載體:它把一個震盪訊號,經過層層分叉、放大、平衡,送到每一個需要節拍的角落,並且努力讓抵達的時間差控制在皮秒等級。
從 H 樹的幾何對稱,到 CTS 工具的多目標優化;從時脈網格的強健,到時脈閘控的節制;從先進製程的電阻與變異,到 3D IC 與光學時脈的未來想像,這棵樹的形式不斷演變,但它存在的理由沒有改變。它是晶片的心血管系統,也是同步數位世界裡最安靜、卻最關鍵的基礎建設。
下次當你打開手機、啟動電腦,或只是看著螢幕上的一個游標閃爍,不妨想像一下:在那一小片矽晶圓裡,有一棵看不見的樹,正以每秒數十億次的頻率,把同一句「現在」送到每一個角落。這大概就是工程師版的浪漫了。