目前芯片功耗的问题越来越突出,我们到底需要采用什么样的方法才能降低功耗,并且对我们的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就是将2个寄存器进行集成变成一个大std cell。这中从左边2个single bit register 替换成1个dual bits register的过程我们称之为banking或者mapping。
如果它是一个scan flip-flop,那么dual bit register就会少一个SI和SE端口。这种端口的减少,可以给route congestion减少不少工作量哦。
在时钟树上,发现buf的数目急剧下降。这就是时钟树和寄存器CK pin上动态功耗节省的奥秘哦。
你可能会问dual bit 还有其他方面的优势吗?接下来我们来比比PPA(power performance area)
AREALeakageCP Internal PowerCP rise CAPCP fall CAPTcq riseTcq fall
DE1:MB/SB2.001.861.500.990.990.961.10
DE2:MB/SB2.001.801.480.990.991.001.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 bitflop相当,也就意味着负载电容减少了一半;
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%。
原文链接:https://www.sohu.com/a/141467613_485357?_trans_=000019_wzwza
网友评论