[Verilog] 10分鐘由淺入深看懂 clock gating (4) - timing check

更新 發佈閱讀 8 分鐘

前面文章提到過clk gating check實際上就是在check gating cell的enable訊號

檢查enable的timing是否能滿足STA的check,

不過不知道各位有沒有發現到,

這條path看起來很單純呀而且我還用上了latch大法,

可能讓訊號走完1整個cycle,為甚麼有時候還是會看到setup time violation?

raw-image


在這邊我們先複習一下setup time violation是如何檢查的

[Verilog] STA分析 - setup / hold violation 怎麼workaround

[Verilog] clk skew vs clk jitter

文章內提到

Tcycle + Tskew >= Tclk2Q_max + Tdata_max +Tsetup

raw-image


其中的Tskew指的就是clk從source出發後

因為reg0和reg1的placement位置不同導致抵達的reg clk pin上的時間會有落差

raw-image


因此可以在拆解的細一點


對於另外一種描述setup check的方式分為 data arrival time 和 date required time

arrival <= required 則meet setup time

arrival time = Tlaunch + Tclk2Q_max + Tdata_max

required time = Tcapture + Tcycle - Tsetup


raw-image


arrival <= require :

Tlaunch + Tclk2Q_max + Tdata_max < Tcapture + Tcycle - Tsetup

轉換一下 -> Tcycle + (Tcapture - Tlaunch) > Tclk2Q_max + Tdata_max + Tsetup

又 Tskew = Tcapture - Tlaunch 因此最後可以推回上面原先的公式

Tcycle + Tskew >= Tclk2Q_max + Tdata_max +Tsetup


好啦,那回到原先的問題,為甚麼我的clk gating path看起來很簡單卻還是會碰到Setup time violation,

因為其實上面的圖中是有一些盲點的,

我們直覺地都會認為clk->reg0 的速度一定會快於clk->reg1的速度,

因此skew扣出來都是正的,正的skew下有利於setup time的收斂,

不過因為實際上我們clk gating 的enable訊號組成大部分時候都是靠某些reg的output的結果重新組出來的條件,

所以這種情況下,在CG身上看到的skew是負的

舉個例子

always @ (posedge clk_gated or negedge rst) begin

if (!rst)

reg0 <= 1'b0;

else

reg0 <= in;

end

assign clk_gated = clk & clk_en ;

assign clk_en = (reg0 != in) ;



對於上面的code來說,

假設一下clk & clk_en會產出icg,

reg0的clk_gated是當clk_en ==1的時候才會toggle的,

clk_en 為1的條件則為reg0的output 不等於輸入in,

因此在這個情況下電路大致會長成以下樣貌

raw-image


timing check point會在latch的enable上

Tcycle + (Tcapture - Tlaunch) > Tclk2Q_max + Tdata_max + Tsetup

Tcycle 不變為1T

Tcapture = Tclk2icg

Tlaunch = Tclk2icg + Ticg2reg

Tclk2Q_max = latch內鎖住en的耗時被包含在Ticg2reg內

Tdata_max = 後級reg0所打出來的Q output

也就是說這級的timing check不是像先前一樣一級推一級,

而是拉了一個迴授的感覺,由後級往前級推,也因為這個迴授

讓skew變為負值,原本能靠skew偷到多一點的setup margin直接消失,

並且Tdata_max會隨著en組成的複雜度增長,

也因此有時候我們會發現好像clk path上很單純,

但是卻出現了timing violation


想必各位在碰到這邊跳出violation時也十分困擾,

因為他不像一般寫code一樣setup time violation那就多切幾級pipeline就好了,

有時候根本不知道該如何下手,

這邊就提供幾個經驗,

通常最簡單的方式就是研究一下en訊號是否組成太複雜,

clk gating 使用的效率實際上有一些指標可以看,

最簡單的判斷方式就是同一顆gating cell control了多少的reg量,

因為gating cell本身也是會耗power和area因此沒辦法無腦塞,

所以會希望說一顆cell能gating越多reg越好,

不過同時可能就會讓enable的條件變得複雜,

並且從icg出來到各個reg/ck的wire delay十分長,

也間接地拉高了Tdata_max和Ticg2reg,

因此就這個現象最直接的解法就是,

縮小gating cell的fanout,

用以降低en的複雜度同時可以讓cell擺的離reg近一點縮短wire delay


但是有時候看到violation的時機總是有點尷尬在apr才看到,

總是感覺很奇怪,

我明明在synthesis的時候timing都clean了沒有看到任何violation,

apr的時候BE卻跟我說clk gating cell上跳setup violation我該怎辦,

到底是哪個Tool錯了?

冷靜思考一下發現

原來是因為我們在synthesis的時候cell placement的位置都是未知的呀,

clk端也不會長clk tree,

因為這些部分都在apr的階段才會做處理,

所以這時候看到violation也只能硬著頭皮解,

當然最簡單的解法就是看一下是否能把cg cell往timing violation的reg靠近一點,

降低wire delay (降低skew),

不過很有可能牽一髮動全身,換別條path跳出來

所以再好幾天沒睡東瞧瞧西瞧瞧後還是走投無路的情況下

在這邊提供最強的大絕招給各位

讓各位可以從地獄解脫


ECO把clk_en 直接 tie 1 !!!

不要讓clk gating生效了,

也就是說當作沒有這顆clk gating,

當然這樣做也會帶來一些impact,

不過這個impact是屬於power bug不是function bug,

對於function使用上完全沒問題,還可以讓你從地獄解脫,完美


#clock gating check #CG #STA #low power #clock gating check #setup time #hold time #ECO



留言
avatar-img
數位IC設計第一品牌
165會員
30內容數
數位IC設計第一品牌 從0到1用嘴做IC 觀念大權
2024/12/28
到了最後一個階段, 我們做了這麼多CG cell insertion後, 要怎麼知道到底是不是對Design有幫助的呢? 是否有個rule又或是量化的數據來解釋說CG的效果如何 在下面這篇paper中提到了幾種觀測CG cell efficiency的方法 J. Srinivas, M
Thumbnail
2024/12/28
到了最後一個階段, 我們做了這麼多CG cell insertion後, 要怎麼知道到底是不是對Design有幫助的呢? 是否有個rule又或是量化的數據來解釋說CG的效果如何 在下面這篇paper中提到了幾種觀測CG cell efficiency的方法 J. Srinivas, M
Thumbnail
2024/12/16
前面文章曾經提到說, 除了我們在寫rtl當下直接撰寫加入的cg cell外, 實際上我們有些clk gating cell是靠tool自己幫忙插的, [Verilog] 10分鐘由淺入深看懂 clock gating -2 那麼tool是怎麼判斷說哪邊要插gating cell的呢?
Thumbnail
2024/12/16
前面文章曾經提到說, 除了我們在寫rtl當下直接撰寫加入的cg cell外, 實際上我們有些clk gating cell是靠tool自己幫忙插的, [Verilog] 10分鐘由淺入深看懂 clock gating -2 那麼tool是怎麼判斷說哪邊要插gating cell的呢?
Thumbnail
2024/12/02
由於前篇提到說純的logic gate 的CG cell有些先天上的缺點在, 像是enable output 必須在指定的區間內才能trigger, 這也使的這條path上的timing變得更嚴苛, 因此就開發出了一個新的架構來解決上述的問題, 也就是大家常看到的latch based的cl
Thumbnail
2024/12/02
由於前篇提到說純的logic gate 的CG cell有些先天上的缺點在, 像是enable output 必須在指定的區間內才能trigger, 這也使的這條path上的timing變得更嚴苛, 因此就開發出了一個新的架構來解決上述的問題, 也就是大家常看到的latch based的cl
Thumbnail
看更多
你可能也想看
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
給定一個Linked list鏈結串列的Head node, 請判斷這條Linked list是否存在環路(Cycle)? 如果有環路,回傳True。 如果沒有,回傳False。
Thumbnail
給定一個Linked list鏈結串列的Head node, 請判斷這條Linked list是否存在環路(Cycle)? 如果有環路,回傳True。 如果沒有,回傳False。
Thumbnail
題目敘述 題目會給我們一個定義好的類別和function介面,要求我們實作建構子和ping() function來滿足指定的需求。 RecentCounter類別的建構子 建構子應該初始化來電紀錄,內容為空(零筆資料) int ping(int t) t代表來電時刻,單位是毫秒m
Thumbnail
題目敘述 題目會給我們一個定義好的類別和function介面,要求我們實作建構子和ping() function來滿足指定的需求。 RecentCounter類別的建構子 建構子應該初始化來電紀錄,內容為空(零筆資料) int ping(int t) t代表來電時刻,單位是毫秒m
Thumbnail
在 Kotlin 程式語言中,while 迴圈是用來重複執行區塊內程式碼,只要滿足特定條件就會持續運行,一旦條件不滿足,迴圈就會停止執行。這種特性讓你能夠以更靈活的方式處理程式邏輯,並在滿足特定情況時停止迴圈的執行。
Thumbnail
在 Kotlin 程式語言中,while 迴圈是用來重複執行區塊內程式碼,只要滿足特定條件就會持續運行,一旦條件不滿足,迴圈就會停止執行。這種特性讓你能夠以更靈活的方式處理程式邏輯,並在滿足特定情況時停止迴圈的執行。
Thumbnail
題目會給定我們兩個點座標,分別是起點和終點。 另外,還有一個參數t,代表時間限制。 從起點出發之後,每一秒鐘,我們必須選擇一個N8 8連通的方向,往鄰居的格子點移動。(題目有特別強調,每一秒必須強制移動到下一個格子點,不能停留在原地) 請問我們能不能在時間限制內,從起點走到終點?
Thumbnail
題目會給定我們兩個點座標,分別是起點和終點。 另外,還有一個參數t,代表時間限制。 從起點出發之後,每一秒鐘,我們必須選擇一個N8 8連通的方向,往鄰居的格子點移動。(題目有特別強調,每一秒必須強制移動到下一個格子點,不能停留在原地) 請問我們能不能在時間限制內,從起點走到終點?
Thumbnail
這篇文章介紹了如何建立一個時間限制的異步函數,以確保操作在指定時間內完成。 - 知識點包括異步編程、Promise使用、計時器函數和函數引數處理,以及錯誤處理。 - 應用情境包括網頁請求超時控制、前端性能優化和遊戲開發。 - 提高應用程式的可靠性和用戶體驗,確保操作不會花費過長的時間。 - 文章內
Thumbnail
這篇文章介紹了如何建立一個時間限制的異步函數,以確保操作在指定時間內完成。 - 知識點包括異步編程、Promise使用、計時器函數和函數引數處理,以及錯誤處理。 - 應用情境包括網頁請求超時控制、前端性能優化和遊戲開發。 - 提高應用程式的可靠性和用戶體驗,確保操作不會花費過長的時間。 - 文章內
Thumbnail
題目會給定一個字串s,裡面都是由() [] {}打散交錯而成。 問我們給定的輸入字串s 是不是合法括弧自串,也就是所有的右括弧都在左括弧後面,而且可以兩兩相消。
Thumbnail
題目會給定一個字串s,裡面都是由() [] {}打散交錯而成。 問我們給定的輸入字串s 是不是合法括弧自串,也就是所有的右括弧都在左括弧後面,而且可以兩兩相消。
Thumbnail
嗨,大家好!今天我們來聊聊什麼是延遲評估模式,它的好處是啥,還有在 Go 裡面是怎麼玩的。
Thumbnail
嗨,大家好!今天我們來聊聊什麼是延遲評估模式,它的好處是啥,還有在 Go 裡面是怎麼玩的。
Thumbnail
C# 迴圈(C# 教學) – for loop 可以說是程序編寫的基本功. 運用LOOPING可以減少程式碼, 只需透過for內的BLOCK, 就可把程式碼重用, 避免要不停把程序碼重覆. 以下我會介紹迴圈的結構, 運行方式, 如何離開迴圈, 以及迴圈的種類. 2) 迴圈的種類 3) 迴圈的用法
Thumbnail
C# 迴圈(C# 教學) – for loop 可以說是程序編寫的基本功. 運用LOOPING可以減少程式碼, 只需透過for內的BLOCK, 就可把程式碼重用, 避免要不停把程序碼重覆. 以下我會介紹迴圈的結構, 運行方式, 如何離開迴圈, 以及迴圈的種類. 2) 迴圈的種類 3) 迴圈的用法
Thumbnail
break、continue、更進一步的for迴圈、while迴圈、switch
Thumbnail
break、continue、更進一步的for迴圈、while迴圈、switch
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News