This website requires JavaScript.
優惠券 應用程式下載
寄往
部落格

理解數位電路時序:Setup、Hold、污染延遲與時脈偏移

最初發布於 Jan 03, 2026, 更新於 Jan 07, 2026

1 分鐘

這是關於數位電路傳播延遲系列的第二篇文章。設計數位電路時,我們必須確保兩件事:第一是功能性,第二是時序。我們已在另一篇文章中介紹過基本模組。在電子領域,時間就是時脈的滴答聲,所有動作都基於這些時脈週期,它決定了電子電路的運作頻率、速度等。我們先前看過的電路只有在與時脈同步時才會運作,稱為時序電路。使用微控制器、FPGA 或 ASIC 時,必須符合時序限制,才能確保電路正確運作。今天我們將探討有哪些時序限制需要注意。本指南涵蓋基礎:setup 時間、hold 時間、污染(最小)延遲與時脈偏移,並說明它們如何在時序公式與實際設計中互動。


數位設計中的時序參數:


組合邏輯區塊有兩個重要的延遲指標:

  • Tpd(傳播延遲,最大值):由組合邏輯元件所造成的最長可能延遲,用於 setup 檢查。
  • Tcd(污染延遲,最小值):最短可能延遲,用於 hold 檢查。
  • 時脈週期(Tclk):用於某路徑之連續時脈邊緣之間的時間。


傳播延遲 vs 污染延遲:


  • 傳播延遲(Tpd,最大值):閘極/邏輯區塊的最壞情況(最長)延遲,用於 setup 檢查,以確保最晚資料仍能滿足 setup。



  • 污染/最小延遲(Tcd,最小值):閘極/邏輯區塊的最佳情況(最短)延遲,用於 hold 檢查,以考量訊號最早可能改變的時間。


時脈偏移:


來源正反器與目的正反器之間的時脈到達時間差。可能由時脈到正反器 A 與 B 的長系統線造成。由於訊號無法同時到達所有正反器,會造成時序不匹配。主要來源包括時脈樹不平衡、佈線差異、緩衝器、合成/CTS 選擇、本地時脈閘控、PLL/BUF 插入抖動。

  • 正偏移:擷取時脈比另一邏輯區塊晚到。
  • 負偏移:擷取時脈比另一邏輯區塊早到。

為了改善時序,有時會故意引入偏移(通常用來放鬆關鍵路徑的 setup),同時確保 hold 限制仍被滿足。


Setup 時間:


Setup 時間(Tsu)是在正反器的有效時脈邊緣之前,輸入資料必須穩定的最短時間間隔。若資料在該時脈邊緣前的指定區間內未穩定,就會發生 setup 時間違規。若資料到達太晚,擷取正反器可能會取樣到錯誤值。

時序檢查:Setup 時間違規多由不當的傳播延遲造成。若從第一個正反器出發的傳播延遲超過下一個時脈邊緣,資料將無法被擷取,或與時脈同時出現,導致正反器進入亞穩態。


Hold 時間:


Hold 時間(Thold)是在有效時脈邊緣之後,輸入資料必須維持穩定的最短時間間隔。若資料在發射邊緣後太快改變,並在擷取正反器內部取樣鎖存器完成 hold 之前到達,擷取正反器可能會取樣到錯誤值。

時序檢查:新資料最早可能在 Tcq + Tcd 時到達,該時間必須晚於擷取正反器完成 hold 所需的時間。


數位電路中的時序路徑:


典型的同步時序路徑如下。我們將逐一檢視每個部分:

發射邊緣(正反器 A)→ Tcq(clock-to-Q)→ 組合邏輯 → Tpd/Tcd(傳播/污染延遲)→ 擷取正反器 B → Setup/Hold 檢查

  • 發射事件:正反器 A 在時脈事件後產生新的資料值,輸出固定為該值,並通過組合邏輯傳播。
  • 擷取事件:該資料作為正反器 B 的輸入,將在下一個相關時脈邊緣取樣。

發射與擷取是時序路徑的開始與結束,但中間還有許多細節,將於下一節討論。

時序公式:

Setup:

Hold:

其中 Jclk 為時脈抖動(保守地將正抖動加入 setup 公式,並在 hold 中適當加減作為安全裕度。抖動視為可用時序裕度的減少。)

數值範例(單週期路徑):

給定(典型數值):

  • Tclk = 5.0 ns(目標週期)
  • Tskew = +0.10 ns(擷取時脈晚到 0.1 ns)
  • Tcx (Tcq) = 0.12 ns(clock-to-Q)
  • Tpd = 2.80 ns(最大組合邏輯傳播延遲)
  • Tsu = 0.08 ns(setup 時間)
  • Tcd = 0.02 ns(污染/最小延遲)
  • Thold = 0.05 ns(正反器 hold 需求)

Setup 檢查:

所需週期:Tcq + Tpd + Tsu - Tskew = 0.12 + 2.80 + 0.08 - 0.10 = 2.90 ns

Slack_setup = Tclk - 2.90 = 5.00 - 2.90 = 2.10 ns → PASS(充裕裕度)。

Hold 檢查:

允許 hold = Tcq + Tcd - Tskew = 0.12 + 0.02 - 0.10 = 0.04 ns

Slack_hold = 0.04 - Thold = 0.04 - 0.05 = -0.01 ns → HOLD 違規 10 ps。

該路徑輕鬆通過 setup(大裕度),但極快的路徑導致 hold 違規。這在實際設計中很常見:setup 充裕而 hold 失敗。

違規的常見原因與實用解法

Setup 違規(常見解法):

  • 路徑過長:可插入流水線/暫存器、減少邏輯深度,或重構演算法。
  • 製程角慢:使用更快元件庫(更高驅動能力)、提高 VDD、優化佈線以減少 Tpd。

Hold 違規(常見解法):

  • 路徑過快:故意加入延遲(插入緩衝器/反相器)、在佈線階段使用最小延遲插入,或拉長佈線。
  • 多週期路徑:若功能允許,可將該路徑設為多週期(在 STA 工具中正確標記)。

設計技巧(有用偏移、多週期路徑、重定時)

  • 有用偏移:故意引入偏移以放鬆關鍵路徑的 setup,同時確保 hold 安全。此為需謹慎分析的高階技巧。
  • 多週期路徑:若架構允許路徑跨多個週期,請在 STA 中標記為多週期,並設定適當限制,而非強制單週期時序。

結論

本文深入探討了 setup 與 hold 時間,並結合範例說明污染延遲與時脈偏移如何與時序公式相互關聯。Setup 由最壞情況(最大)延遲決定,而 hold 則由最佳情況(最小)延遲決定。我們也分享了一些設計技巧及常見違規與解法。對於數位電路而言,不僅功能性重要,時序也同等關鍵。本系列未來將繼續探討更多數位設計與時序相關概念。請造訪JLCPCB 專區快速獲取這些知識。

持續學習