論功耗 | 如何計算toggle rate
- 2019 年 10 月 4 日
- 筆記
先吐個槽,數字前端AE 生存環境實屬惡劣,按理說AE 只要解決工具端的問題即可,可現實中經常被揪住討論SDC 如何設置,power 估算該用哪個corner, toggle rate 如何算這些很難概論的問題。周二在某司,某位老兄打了一大疊IEEE 文章在研讀toggle rate 計算的問題,興緻勃勃得來找老驢討論,聽完該兄敘述,老驢深深陷入一團迷霧中,於是發文《求助 | toggle rate的計算》求助廣大驢友。感謝驢群2.0 的@if 同學,感謝驢群1.0 的@剩冷盤、@剛剛、@白菜王國,感謝驢友@DragonBaby 糖糖、@the1ne. 在以上同學的幫助下,老驢又研讀了一些資料,總結於此。
Probability
邏輯功能一定,輸入Probability 確定的情況下,輸出的Probability 是個定值,Probability 用於leakage 的計算,具體計算方式可回顧《四月清和雨乍晴,靜態功耗亂伊心》。此處的Probability 指訊號處在狀態 「1" 的概率,實際上用duty 更達意。基本邏輯門,Probability 的計算公式為:

除了這個指代訊號處於狀態"1" 的Probability, 還有一個概念叫Transition Probability, 驢理解的這個概率跟計算輸出的toggle rate 相關,如果輸入的toggle rate 已知,如果不考慮串擾的影響,那輸出的toggle rate 可能可以根據條件概率計算得到。基本邏輯門的 Transition Probability 的計算公式為:


Toggle Rate
真實Toggle Rate 的計算特別複雜,據文獻《Toggle Rate Estimation and Glitch Analysis on Logic Circuits 》, 真實的Toggle Rate 受如下因素影響:
- Temporal correlation
- Spatial correlation
- Timing delay of the circuit
- Presence of glitches
該文獻引用了17 篇其他研究Toggle Rate 的文獻,有興趣的同學可以深讀一下,概括來說,如果要精確計算Toggle Rate 需要SSTA 來支撐。

顯然當今各家Power 分析工具都不會用到如此複雜的方式來計算Toggle Rate, 在《An ASIC low Power Primer 》中提到,對於組合邏輯單元, 輸出的toggle Rate 可以根據輸入的toggle Rate 及對應的邏輯功能模擬得到。驢群2.0 的@if 同學提到可以用蒙特卡洛模擬,或BDD (Binary decision diagram ) 演算法擬合,該同學曾用perl 寫過一個蒙特卡洛擬合過程,好牛逼!
除了模擬之外,還有一種簡單粗暴的方式,根據輸入的Probability 和Toggle Rate 計算得到,老驢估計當前主流Power 分析工具都是用這種方式計算的,基本邏輯門的計算公式為:

到此,再回顧《探討 | 功耗應該在哪個corner 看》,可以更明確地得知工具只能估算 Power, 無法精確。