當下這社會,沒有幾萬個Clock Gating,出門都不好意思和別人打招呼!
現在的深亞納米工藝的設計中,低功耗已經是一個日漸總要的主題了,尤其是移動市場蓬勃發展起來之后,功耗的要求越來越嚴格,據傳,在高級的手機系統開發的過程中,系統架構的設計,已經精確到每一個服務模塊的毫安時(mAH)的級別,所以如果你的芯片功耗控制不下來,很有可能會被手機生產廠家踢出局。
在低功耗的世界里,我們有很多方法可做,譬如提高設計工藝(工藝節點越高,功耗就越小)UPF策略,代碼優化等等。其中的clock gating方法就是一個解決內部功耗的有效辦法
Clock gating從原理上講,就是在FF的clock 的輸入通路上,加入額外的邏輯,來使得FF在不發生變化的情況下,clock端沒有反轉,如果不采取這個策略,那么FF的clock pin是長時間翻轉的,在D/Q都不翻生變化的時候,帶來了額外功耗消耗,采用clock gating就可以有效境地這種損耗
從用途上講,一般將Clock gating分為如下兩類:
1:RTL實例化的clock gating cell
在很多的前端設計中,我們都會認為的實例化primitive clock gating cell,這里是按照前端的設計要求來的,一般這樣的GC都是接近于clock 的源頭,譬如一個模塊的輸入clock,我們使用一個實例化的GC來作為這個clock 的控制端,在不需要的時候,可以直接使用寄存器把他關斷,從而達到節省模塊級power的目的
這種GC結構,在結構上后端是不用干預的,但是由于這種GC的fanout 都很大,在某種情況下可能會引起比較悲觀的setup violation。這個我們會在后邊仔細描述
2:綜合工具推斷出(inferred )clock gating cell
這種推斷出的CG是基于綜合器對RTL的理解,首先,我們的設計需要遵循一定得大媽風格(coding style),這是工具分析的基礎,我們來看下面這段代碼
藍色箭頭所指是clock的edge檢測,這里是一個if 語句的開始,而后如橙色箭頭所指,在clock edge的這個function里邊,使用EN來做判別,如果EN為1的時候,產生賦值操作,這是一個標準的帶同步enable的寄存器語法。
綜合器會按照約定的規則來解析rtl code,然后產生對應的網表。按照通常的綜合結果(compile_ultra),會得到下面這個結果
模塊輸入端的clock port會直接連接到所有的FF clock pin 上邊,通常的器件庫里邊,沒有帶EN端的DFF,這是一種簡化設計,因為所有的FF EN pin,都可以和D pin做組合邏輯,從而達到控制輸出的結果。從土里可以看到,這里的EN也是被拉到了FF’D pin前級的組合邏輯的輸入端,從而達到控制FF輸出的結果。
這個時候,是沒有clock gating的設計的,工具嚴格遵守RTL的設計產生了這段網表結構。
如果在綜合的時候,打開inferred clock gating 選項(compile_ultra –gate_clock),這個時候會得到下面的這個結構。
這個時候的網編結構發生了變化,在緊跟clock port的后面,多了一個CG,EN的port 從之前的鏈接到各個FF 的D pin,到現在只連接到了clock gating cell的en pin上,通過控制FF的clk pin,來達到僅在EN使能的時候翻轉clock來刷新FF的輸出,從而達到省電。
由于在沒有使用CG之前,由于FF需要不停地刷新,DC為了保障FF的輸出在EN端非使能的時候保持當前狀態,所以一定有一條從Q到D的回路來保證FF的輸出保持不變,類似下圖
FF’D pin 前面的是一個四輸入與或門,在EN為0的時候,FF會把Q的值反復刷新,盡管輸出Q不改變,但是短路功耗是少不了的。
在使用了gate clock 以后,FF的結構變成了
可以看到,這里的FF的D輸入端,變得更為簡單了,以為所有前后級都被掛載到了同樣的CG下面,只有當CG有輸出clock的時候,這些FF才進行工作,工具就不用創建那些組合邏輯來考慮EN不使能的情況了。
就相同設計的面積比較,采用inferred CG策略的結果還可以節省面積
Area with CG: 8.0997
Area without CG: 8.3790
在一個3M gate-count的完整設計里邊,可以看到,當打開gate_clock選項的時候,會增加大約7k的CG cell,時序邏輯大概增加了6%的面積,但是整個設計的std-cell的面積(組合加時序)反而降低了4%,從這方面看,綜合器的這個功能對絕對面積和功耗都是有貢獻的
討論完CG的好處后,我們再來看一下Clock gating 的類別:
先看一下這個表格。通常上來講,CG分為兩類,一種是帶latch的,另外一種是不帶latch的,由組合邏輯構成。
這里的模型規則如下
Posedge:
o Latch based:clk負沿敏感的latch
o None-latch:非或門結構的CG
Negedge:
o Latch based:clk正沿敏感的latch CG
o None-latch:與門結構CG
Pre-control:
o Latch based : latch的EN輸入前插入一個或門,從而帶入TE的管控
o None-latch: 在組合邏輯的EN輸入側插入一個或門,從而帶入TE的管控
Post-control:
o Latch based : latch的output輸出后插入一個或門,從而帶入TE的管控
o None-latch: 不支持
Observe:
o 再有pre/post control的設計中監控與門中非TS管控測的信號
借用新思的電路圖來給大家詳細的示例(侵刪)
由于clock是敏感信號 ,一般推薦使用latch-based gating CG,這要可以有效地過濾EN上的毛刺。
有了上邊的知識,那么工具是如何識別和插入CG的的呢?
在綜合的時候,需要在你的綜合環境里邊定義工具自動插入時可已使用的CG cell類型,然后喚起compile_ultra命令即可完成CG插入:
set_clock_gating_style -pos {integrated:CG_CELL_NAME} -control_point before -num_stages 4
compile_ultra –gate_clock
用戶可以在compile結束后,使用report_clock_gating命令來查看數據庫里邊的CG情況。
這個報告很有意思,他可以打印出數據庫里所有被CG控制的FF的情況,同時也會列出來沒有被CG控制的FF的情況,并且會生成一些比率報告,有興趣的同學可以仔細了解一下。
此外,這里邊的CG_CELL_NAME,這個cell是一個真實存在在你的std-cell庫里的實際CG,并且這個lib_cell必須要有一個特殊的屬性:
DC只有看到這個屬性的時候,才會認為這是一個真實可信的CG。而后按照他后邊屬性說明來進行inferred CG insertion,后面的屬性無外乎我們前面表格里邊羅列的那些屬性,具體名詞如下:
當然,DC也支持一些組合邏輯的CG的創建,如果你使用如下命令,DC會插入相應的none-lath結構的CG
set_clock_gating_style -pos {buf nand inv}
在同步設計的架構下,不推薦使用這樣的gating 結構,由于這是拿兩三個蘇合邏輯器件搭乘的,后期的timing closure是很難做的,推薦使用library里邊latch-based的CG。
上邊用了一定的篇幅講述了一下CG的特點、原理和初步實現。但是這還沒有結束,應為還有layout的實現要考慮
Clock_gating作為clock tree的一部分,在做layout的時候,有更多的因素需要考量
首先,所有的latch based CG都有一組setup/hold timing arc,就是clk –> EN的timing check
其次,在CTS的時候,clock-gating被當作了一個none-stop pin而非一個stop pin如下圖示例:
工具會balance 后面四個被gating 驅動的FF(stop pin)之間的skew,但是CG是它們的clock 的driver,不難想象,CG EN的latency(T_latch)一定小于CG fanout FF的clock latency(T_FF),這是一個永遠不能改變的事實。在某些情況下會帶來CG setup violaoiton,如下圖:
如果有一條正面這樣的data path存在,那么launch clk (FF) 一定是晚于capture clk (CG),在高頻和復雜datapath的情況下,這樣的timing是很難修復的
所以要在CTS之前解決或者簡化這個問題,
解決這個問題的關鍵就是,讓CG clock latency(T_latch)和fanout FF clk latency(T_FF) 盡可能的足夠小。
要讓前后兩級的clock latency的差值足夠小,其中有一個方法就是讓他們的擺放足夠近,在綜合結束后,通過report_clock_gating的report可以看到所有CG和他的fanout的列表,這個時候,我們通過第一版的CTS結果,可以評估出那些FF-CG的timing是有困難的,這些FF以及他們的CG使用relative placement的方法,讓工具在place 的階段就把他們擺放的足夠近,從而在物理距離上來解決這個CG 的setup 問題。
-
驅動器
+關注
關注
53文章
8272瀏覽量
147074 -
寄存器
+關注
關注
31文章
5363瀏覽量
121194 -
RTL
+關注
關注
1文章
385瀏覽量
59952 -
CTS
+關注
關注
0文章
35瀏覽量
14149
發布評論請先 登錄
相關推薦
DFT設計實戰案例解讀
![DFT設計實戰案例解讀](https://file.elecfans.com/web2/M00/8A/DE/poYBAGPE7YSAG2KZAABqJyz3T4k763.png)
RTL實例化的clock gating cell淺見
![RTL實例化的<b class='flag-5'>clock</b> <b class='flag-5'>gating</b> cell淺見](https://file1.elecfans.com/web2/M00/8C/B6/wKgZomSwsByAFC63AAAIGFbKCrw328.png)
FPGA的時鐘門控是好還是壞?
通常有兩種不同的時鐘門控實現技術
ASIC的clock gating在FPGA里面實現是什么結果呢?
![ASIC的<b class='flag-5'>clock</b> <b class='flag-5'>gating</b>在FPGA里面<b class='flag-5'>實現</b>是什么結果呢?](https://file1.elecfans.com/web2/M00/9E/79/wKgaomToCi2AO553AAAbgEw5j9A025.png)
時鐘子系統中clock驅動實例
![時鐘子系統中<b class='flag-5'>clock</b>驅動實例](https://file1.elecfans.com/web2/M00/88/EB/wKgaomR3AEiAZmUCAAA9O8KTcYs263.jpg)
什么是Clock Gating技術?Clock Gating在SoC設計中的重要性
IC設計:clock-gating綜合實現方案
![IC設計:<b class='flag-5'>clock-gating</b>綜合<b class='flag-5'>實現</b>方案](https://file1.elecfans.com/web2/M00/AA/00/wKgZomUslbKAJGOsAAAU5TuzfHI691.png)
評論