付費限定

[Verilog] STA分析 - hold time violation如何處理 ? (原創)

更新於 發佈於 閱讀時間約 8 分鐘

上一篇內容提到說,

hold time violation的成因是因為訊號源在clk trigger edge後太快就開始要變化成新的value,

導致reg在還沒完全把data取樣下來時他的input端口就開始震動,

可能會導致reg在抓data時出現問題,雖然預期要鎖到1但是最後卻因為input端太早變化導致output又變回原本的0


那對於hold time violation我們又有幾種解法呢?

這邊來探討一下


raw-image


data在clk trigger後所需維持最短的時間為hold time (上圖藍色區域),

因此以reg1為例要如何解他的hold time,

這裡大致也像setup time 一樣有4種解法

1.從data端解決

2.從clk端解決

3.從製程端解決

4.從apr tool解

raw-image


hold time check的時間點是當reg 收到clk trigger的那一剎那開始算

reg0收到clk trigger的時間是1+1個▷

reg1收到clk trigger的時間是1+5個▷

Q0端在reg0收到clk trigger後把新的vaule傳到D1的時間是2個▷


對於data端來解的話,

發生violation代表 Q0 -> comb. (2* ▷)-> D1這段path傳輸得太快

導致Q0一旦開始變化就會去trigger comb變化2個▷後就帶動D1看到新的value,

到D1變動總共花4*▷

但此時clk根本還沒經過6*▷的時間傳到reg1叫開始抓data,

還須持續keep data 2個▷的時間才能動避免hold time violation


因此最直接的解法就是增加comb的深度或複雜度,讓訊號在comb.裡面流動久一點再傳到D1的點上 (e.g. comb= 4*▷) ,

電流在流動時像是水在水管裡流動,一旦水管變長的從Q0到D1就會來的久一點,

只要水管的長度撐過最短的限制就可以成功解掉hold time violation,

那增加水管長度對於在電路上最簡單的時做就是在comb中間多插一些buffer增加delay time


對於clk端來說

其實和Data端解是一個相對的概念

以拍照來舉例,

data端就像是拍照時需要物體靜止不動讓快門Trigger後可以有足夠的時間來抓取物體,

假如物體是一隻在飛的鳥我不可能讓他在空中停留下來不動,每次按下快門後鳥就飛出了觀景窗

我唯一的解法就是先預判等一下鳥會飛到哪個位置比他早到一步然後按下快門,

對於電路來說就是縮短clk->reg1(6*▷)的時間,

想像上是我的data維持一樣的速度行走(2*▷),D1看到變化共1+1+2個▷

因此我把clk->reg1縮短成1+3個▷,

就可以剛好配合data的抵達時間抓取訊號


以製程解來說,

同一個cell都會提供不同特性的cell type,

大致分成幾個種類,

HVT , SVT , LVT , ULVT

HVT : High Voltage Threshold

SVT : Standard Voltage Threshold

LVT : Low Voltage Threshold

ULVT : Ultra Low Voltage Threshold

raw-image


特色是大家的leakage power和cell delay不同

這是天秤兩邊的tradeoff,

想要得到低延遲所需的代價就是漏電量很大,

想要漏電小就必須拿速度來換

速度快慢是 ULVT > LVT > SVT >HVT

漏電大小是 ULVT >LVT > SVT >HVT

ULVT的速度最快同時漏電也最大

HVT則速度慢但漏電小


因此在碰到hold time violation時代表combinational logic的電路速度太快,

不仿換顆速度慢的cell同時還可以得到low leakage的好處

setup time violation亦有一樣的解法

拿leakage power 去換cell運算速度


對於第四種解法apr tool解來說

很特別的關鍵是這裡寫的不是synthesis tool解,

和setup time解法說的不同,

這邊又要帶出一個hold time check很重要的觀念,

前面提到說hold time violation可能是因為combinational logic太簡單,

所以多加幾個buffer來增加delay,

或是因為clk流到Reg0和clk流到Reg1的時間差太多,所以縮短兩段path的差異

但是實際上這些步驟都不會在rtl的內部做任何的改動,

和Setup time violation不同,可以從rtl端下手從源頭把violation修掉(e.g.敲pipe)

通常在修hold time的步驟是留到APR的階段才執行的,

原因是因為hold time violation和clk tree及cell擺放的位置強相關,

rtl level沒有clk tree的概念,也就是clk->reg0和clk->reg1時間相差多少是未知的,

直到apr階段長好clk tree才定案,

因此可以藉由apr tool來重長新的clk tree或是重擺cell的位置分布來達到修正hold time violation的問題

這也是大家提到說synthesis階段大部分可以忽略hold time violation,只需專注於解setup time violation的原因



那來思考一下

上面說hold time violation要到apr長完clk tree後才能得知,

因為會跟cell的擺放和clk tree的走向有關,

那這點會不會對我們在synthesis時專注的Setup time check有影響?

以行動支持創作者!付費即可解鎖
本篇內容共 2923 字、0 則留言,僅發佈於IC面試專班你目前無法檢視以下內容,可能因為尚未登入,或沒有該房間的查看權限。
留言
avatar-img
留言分享你的想法!
avatar-img
數位IC設計第一品牌
68會員
25內容數
數位IC設計第一品牌 從0到1用嘴做IC 觀念大權
2025/04/23
作為designer一定經常看到spec中描述當edge出現時需要trigger電路運作, 舉個實際的例子 2 phase的handshake protocal, 以下方paper中的圖例來看. Quasi Delay-Insensitive High Speed Two-Phase Prot
Thumbnail
2025/04/23
作為designer一定經常看到spec中描述當edge出現時需要trigger電路運作, 舉個實際的例子 2 phase的handshake protocal, 以下方paper中的圖例來看. Quasi Delay-Insensitive High Speed Two-Phase Prot
Thumbnail
2024/10/28
前面探討完setup time / hold time violation的原因跟解法, 來更進一步探討一下現實面, 實際ic design中, 我們有可能會碰到一個狀況, synthesis過後path出現了setup time violation 或 hold time violatio
Thumbnail
2024/10/28
前面探討完setup time / hold time violation的原因跟解法, 來更進一步探討一下現實面, 實際ic design中, 我們有可能會碰到一個狀況, synthesis過後path出現了setup time violation 或 hold time violatio
Thumbnail
2024/10/01
上一篇內容提到說register取樣時需要刻意地維持訊號源的stable, 才不會讓register取樣時出現問題, 那如果我真的發生了上述的violation要怎麼處理呢? setup time violation和hold time violation的解法一致? 在這邊詳細的說明一
Thumbnail
2024/10/01
上一篇內容提到說register取樣時需要刻意地維持訊號源的stable, 才不會讓register取樣時出現問題, 那如果我真的發生了上述的violation要怎麼處理呢? setup time violation和hold time violation的解法一致? 在這邊詳細的說明一
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
題目敘述 Minimum Deletions to Make String Balanced 給定一個只會有包含'a'b或'b'的輸入字串s。 每次操作可以任選一個字元刪除。 請問最少需要多少次操作,才會使得所有的'b'都在'a'後面? 測試範例 Example 1: Input: s
Thumbnail
題目敘述 Minimum Deletions to Make String Balanced 給定一個只會有包含'a'b或'b'的輸入字串s。 每次操作可以任選一個字元刪除。 請問最少需要多少次操作,才會使得所有的'b'都在'a'後面? 測試範例 Example 1: Input: s
Thumbnail
探討如何使用DP動態規劃的方法來進行單字串接,包含了DP遞迴關係式、狀態定義、優化技巧和程式碼示例。同時分析了時間複雜度、空間複雜度和關鍵知識點。這是LeetCode的一個應用題,類似於Word Break I的延伸。
Thumbnail
探討如何使用DP動態規劃的方法來進行單字串接,包含了DP遞迴關係式、狀態定義、優化技巧和程式碼示例。同時分析了時間複雜度、空間複雜度和關鍵知識點。這是LeetCode的一個應用題,類似於Word Break I的延伸。
Thumbnail
這篇文章,會帶著大家複習以前學過的 區間DP框架, 並且以回文子字串、回文子序列的應用題與概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 回文字串的基本定義 s = s[::-1] 也就是說字串s的正序 和 逆序完全相同。 回文字串的基本結構 空字串"
Thumbnail
這篇文章,會帶著大家複習以前學過的 區間DP框架, 並且以回文子字串、回文子序列的應用題與概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 回文字串的基本定義 s = s[::-1] 也就是說字串s的正序 和 逆序完全相同。 回文字串的基本結構 空字串"
Thumbnail
題目已經給了依照起點升序排列好的區間陣列。 接下來新插入一個區間,插入後如果和原本的區間重疊,請把他們合併,要求我們輸出插入後的結果。 這是一個線性掃苗,所需時間為O(n)的演算法。 題目已經幫我們排序好區間順序,我們只要接著依序檢查區間、(假如有重疊的話)合併區間。
Thumbnail
題目已經給了依照起點升序排列好的區間陣列。 接下來新插入一個區間,插入後如果和原本的區間重疊,請把他們合併,要求我們輸出插入後的結果。 這是一個線性掃苗,所需時間為O(n)的演算法。 題目已經幫我們排序好區間順序,我們只要接著依序檢查區間、(假如有重疊的話)合併區間。
Thumbnail
題目敘述 題目會給我們一個定義好的類別和function介面,要求我們實作建構子和ping() function來滿足指定的需求。 RecentCounter類別的建構子 建構子應該初始化來電紀錄,內容為空(零筆資料) int ping(int t) t代表來電時刻,單位是毫秒m
Thumbnail
題目敘述 題目會給我們一個定義好的類別和function介面,要求我們實作建構子和ping() function來滿足指定的需求。 RecentCounter類別的建構子 建構子應該初始化來電紀錄,內容為空(零筆資料) int ping(int t) t代表來電時刻,單位是毫秒m
Thumbnail
題目敘述 題目會給我們兩個輸入,字串s和字串t,要求我們判定s是否為t的子序列(Subsequence)? 題目的原文敘述 測試範例 Example 1: Input: s = "abc", t = "ahbgdc" Output: true Example 2: Input:
Thumbnail
題目敘述 題目會給我們兩個輸入,字串s和字串t,要求我們判定s是否為t的子序列(Subsequence)? 題目的原文敘述 測試範例 Example 1: Input: s = "abc", t = "ahbgdc" Output: true Example 2: Input:
Thumbnail
這篇文章介紹了如何建立一個時間限制的異步函數,以確保操作在指定時間內完成。 - 知識點包括異步編程、Promise使用、計時器函數和函數引數處理,以及錯誤處理。 - 應用情境包括網頁請求超時控制、前端性能優化和遊戲開發。 - 提高應用程式的可靠性和用戶體驗,確保操作不會花費過長的時間。 - 文章內
Thumbnail
這篇文章介紹了如何建立一個時間限制的異步函數,以確保操作在指定時間內完成。 - 知識點包括異步編程、Promise使用、計時器函數和函數引數處理,以及錯誤處理。 - 應用情境包括網頁請求超時控制、前端性能優化和遊戲開發。 - 提高應用程式的可靠性和用戶體驗,確保操作不會花費過長的時間。 - 文章內
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News