更新於 2024/11/28閱讀時間約 6 分鐘

[Verilog] 10分鐘由淺入深看懂 clock gating (1) - low power design

先前文章中提提了幾種low power design常用的手法

[Verilog] 10分鐘看懂IC design的low power design - 1 (原創)

其中最廣為使用的招數就是clock gating

藉由停住當下沒在運作的module clk 及clk network 來達到節省dynamic power的效果


那麼這篇來聊聊clk gating的細節

探討一下如何將網路上那些破碎的資訊一一串起


首先對於clk gating來說他還有一個好朋友

一樣是被創出來做為省dynamic power的技巧,稱為data gating

和clk gating的差異在一個是掐斷不必要的Data update一個則是對掐斷clk下手

因此在這邊先來探討一下逐漸少見的Data gating


data gating 對於reg的D端做一個enable來決定說當前的D0使否是有需要的,

如果沒意義的話即可以不做update data以省下dynamic power的消耗,

對於clk端則是free run.


當我的input data不動了,自然power也省了,

雖然這個設計上確實可以降低data update的頻率,

但是實際使用上得到的效益卻很有限,

不過這個架構最大的優點就是沒有clk gating最棘手的問題,

也就是不會對於STA的評估造成太多的負擔,

因為他就只是單純在Din端的combiantional circuit,

因此在EDA tool還不夠強的時候這個方法可能是還不錯的選擇,



然而對於這次要探討的clk gating而言,

和上述的不同則是希望在reg不用時去停掉他的clk而不是data,

此時我們在觀測的部分就由data端變成了clk端,

在clk path上插上額外的電路,希望藉此降低dynamic power.


在此之前我們在RTL level階段的clk path永遠都是乾淨沒東西的,

只會在APR階段時insert buffer/invertor 來長clk tree,

加入了clk gating cell後意味著我們在長clk tree及STA的評估上必須多了一些考量,

對於timing check及clk tree synthesis增添了難度


下圖即為加入CG cell後樣貌,

實際上就是在clk準備被餵進reg前先判斷當前的reg是否有使用需求,

沒有即可停掉藉以省下power浪費


然而我們所描述的CG實際上有兩種樣貌 , or gate based 或 and gate based

選哪個type得到的效果都一模一樣,差異點就在當你clk gating後希望把clk訊號Tie 1或Tie 0



那選擇tie0或tie1又有甚麼差別呢?

為了防止clk gating enable的時機不好導致餵給reg的gated clk非完整的1個cycle

因此在這邊and gate和or gate有不一樣的限制


對於and gate來說其中一邊是0則輸出0,所以enable觸發的時機必須在clk為low時才能觸發,因為在為low時setting不會影響最終的輸出

對於or gate來說則剛好相反,一邊是1則輸出1,因此enable必須在clk為high時觸發,來避免夾出不完整的clk輸出到reg上


那看到的cycle不完整又會有甚麼問題呢?

曾經在面試的時候面試官問了一個這個問題,

為甚麼clk cycle一定要是完整的?


小弟聽到問題的時候唯一的想法就是,

書上都是畫完整的呀,50%50%就是對稱美學,

所以第一時間我還真的是答不出來,

後來經過一段時間的思考後現在大概有點想法,

這種clk cycle不完整的狀況可以分成2種case討論

  1. 少正緣
  2. 少負緣


付費訂閱
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.