目前最好用的芯片低功耗方法-Multi-bits register
目前芯片功耗的問題越來越突出,我們到底需要采用什麽樣的方法才能降低功耗,並且對我們的DUT改動最小呢?(人心貪婪啊,吃在碗裏,看著鍋裏)。 不過真的有這麽一種方法,不僅可以使的芯片功耗降低,而且對設計的改動幾乎為0。你一定問是什麽大招。不過了解之前稍微有點耐心讓我慢慢給你道來。
下面是一個SoC動態功耗(dynamic power)的分布圖,圖中可以清楚看到時鐘樹和寄存器CK pin上的動態功耗的總和占據了總動態功耗的51%。納尼,居然占比有這麽大。這時候,我想大家應該知道從哪裏下手。是的,如果能找到一種方法使得時鐘樹動態功耗和寄存器CP pin上的動態功耗降低,那我們的目標就達成了。
其實,無論是DC,RC,ICC都能供了一種叫做multi-bits register banking(翻譯成中文太別扭了)的方法。這種方法其實非常容易理解,就是將原來的single bit register根據一些規則等價替換成為multi-bits register. 工程證明,這種方法不僅降低寄存器CK pin上的動態功耗,也能有效降低時鐘樹上的BUF個數,從而帶來時鐘樹上功耗的節省。
ingle bit(單比特) register VS dual bits(雙比特) register
下方圖片就是我們平常所看的single bit register,而dual bit register就是將
如果它是一個scan flip-flop,那麽dual bit register就會少一個SI和SE端口。這種端口的減少,可以給route congestion減少不少工作量哦。
在時鐘樹上,發現buf的數目急劇下降。這就是時鐘樹和寄存器CK pin上動態功耗節省的奧秘哦。
你可能會問dual bit 還有其他方面的優勢嗎?接下來我們來比比PPA(power performance area)
AREA | Leakage | CP Internal Power | CP rise CAP | CP fall CAP | Tcq rise | Tcq fall | |
DE1:MB/SB | 2.00 | 1.86 | 1.50 | 0.99 | 0.99 | 0.96 | 1.10 |
DE2:MB/SB | 2.00 | 1.80 | 1.48 | 0.99 | 0.99 | 1.00 | 1.13 |
上面表格中,我們可以得出下面的結論:
1. 面積:dual bit 是single bit的2倍,所以在面積上沒什麽收益;
2. Leakage power:dual bit 可以節省15%左右;
3. CP Internal power:dual bit可以節省25%,這是因為dual bit的CP CAP和一個single bit flop相當,也就意味著負載電容減少了一半;
4. Timing上,dual bit的timing 性能差了10%左右;
IC設計,就是在不停的tradeoff。
信息量太大了,讓我歇歇。
Multi-bits register 綜合方法
我們最好利用DCT flow,因為DCT flow是physical aware的。否則,綜合工具只會對在同一個BUS上的的寄存器進行banking,這樣導致的結果就是banking的比率非常的低。為了提高banking的比例,並且同時獲得最好的timing效果,我們一般都用DCT flow.
在整個流程中,我們需要額外提供2個文件,分別是mapping 文件和register group 文件。
Mapping file
Mapping文件如下所示。我們很少看到把多於4個single bit寄存器mapping 成個一個multi-bits寄存器,原因是因為太多的bit,會加劇route的congestion問題。
2 {1 dff_2bitA} # 把2個single bit register mapping 成1個2-bits register
3 {1 dff_2bitA} # 把3個single bit register mapping 成1個3-bits register
4 {1 dff_4bitA} # 把4個single bit register mapping 成1個4-bits register
register group file
除了需要提供map 文件之外,還需要提供register group 文件,該文件的作用是指導DC工具只對相同類型的寄存器進行mapping,不相同類型的寄存器不做任何mapping替換。否則會導致功能上出錯,如下面的group文件,dffx1 ddf2 dff4 這幾種類型的可以banking在一起並且mapping成等價的dff_2bit或者dff_4bit. sdffx1 sddf2 sdff4 這幾種類型的可以banking在一起並且mapping成等價的sdff_2bit或者sdff_4bit. 但是dffx1和sdffx1 是不能做任何banking,否則會導致功能的錯誤。
reg_group_1 3 {dffx1 dffx2 dffx4} {dff_2bit dff_4bit}
reg_group_2 3 {sdffx1 sdffx2 sdffx4} {sdff_2bit sdff_4bit}
Multi-bits register 對SCAN影響
采用multi-bits register 策略後,我們會發現scan path的長度(length)變得比之前更長了,但是好在後端工具可以做scan-reorder, 這樣scan path的length還是在一個可以控制的範圍之內。
Multi-bits register 對Congestion的影響
左圖是一個普通的布局布線圖,而右邊是詞啊用multi-bit register策略的布局布線圖。可以看到左圖有3處的congestion問題(紅色圈的都是),而右圖只有一處congestion問題。
Multi-bits register 實驗結果
采用multi-bits register 策略後,面積減小2%,timing變差了7%,寄存器CK pin動態功耗降低24%,時鐘樹動態功耗降低15%。
Logic Area (um^2) | Setup WNS (ns) | Register Clock Dyn Power (W) | 時鐘樹動態功耗(W) | Multibit banking比例 | |
Normal run | 442891 | 0.2020 | 0.0687 | 0.0573
| 0.00% |
Multibit banking | 431976 | 0.1872 | 0.0517 | 0.0485 | 93.08% |
終於完成了,可以喝咖啡了!!!
更多IC方面行業分享,可以關註E課網
本文出自 “12920961” 博客,請務必保留此出處http://12930961.blog.51cto.com/12920961/1927176
目前最好用的芯片低功耗方法-Multi-bits register