基于Physical Aware的动态功耗优化实现方案

1.Multibit Register Banking

它是指将原来一位位宽的寄存器(只有寄存器的D Pin)替换成N位位宽的寄存器(寄存器有D0,D1,D3 ...,DN Pin)的一种设计方法。利用这种技术可以实现节省芯片面积,降低时钟树上功耗的目的,如图1所示。目前大部分先进工艺的foundary都提供了这种Multibit register的标准单元库,这是因为大部分低功耗设计都有这方面的需求。这种方法虽然可以减少芯片面积,节省功耗,但是它很多时候会降低我们的performance,如果你用不好的话。因此,在保持performance的前提下,我们可以先利用这个技术来做Multibit register banking,然后再让工具优化timing,根据timing情况再来做debanking,从而实现功耗,性能的最优化。

图1 Multibit Register banking

在DCG综合阶段,与正常DCG综合flow一样,只是增加identify_register_banks和读入工具根据input map文件产生的create_reg.tcl脚本文件,如图2所示。其中input.map文件的格式如图3所示,意思为将3个单bit的寄存器merge成一个所指定的寄存器。最后做compile_ultra 时建议带上spg的选项,优化的效果更佳(当然case by case,需要自己去不断尝试)。

图2 Multibit register的DCG综合流程

图3 input map文件格式

在ICC实现阶段,整个流程如图4所示。在做multibit register banking后需要做timing的优化(place_opt -skip_initial_placement),然后再做进一步的debanking工作。这里的debanking工作是将多位宽的寄存器替换成若干个单位宽的寄存器,通过命令split_register_bank来实现,如图5所示。为何要做debanking?(这个先留给大家做思考,有问题可以通过公众号留言和小编互动交流)

图4 icc 实现流程

图5 Debanking图解

通过实验数据表明,这种方法在保持性能的前提下,可以节省约11%的功耗,见图6。

图6 功耗节省统计

2.Placement Aware的门控时钟技术

在数字IC设计中,门控时钟通常是中为了降低功耗,针对寄存器组的时钟进行门控优化,减少时序电路不必要的时钟翻转,以降低系统功耗。通常由工具综合时自动插入,代码集成的时候也会例化一些clock gating cell。对于很多高性能的设计,数字后端工程师经常会碰到很多clock gating方面的timing问题,比较常见的是到clock gating使能端的setup问题。clock gating cell越靠clock root,问题越明显,越不好解决,但是它能够显著降低芯片的功耗。

很多时候数字前端工程师做完DC综合release netlist后(DC timing是没有violation),后端工程师实现时发现place timing中clock gating 的时序违例比较严重(CTO之后timing会更惨不忍睹,为什么?自己思考下),而且本身的timing path上的cell都已经是最大驱动的了。那碰到这种情况怎么办呢?之所以前端工程师综合后timing是meet的是因为做综合时是logical的优化,并没有physical的信息,所以在DC中,一个ICG所带的所有寄存器都认为是在一起的,但是在后端实现时,同属于一个ICG控制的那些寄存器很可能物理位置比较远,如图7所示。如果实际place结果如图7右侧所示,会带来两大问题,第一个是Timing violations,第二个则是Clock tree latency变长,功耗变大(clock tree的non-common path变长)。

图7 clock gating

那么,在DCT中如何去实现physical aware的clock gating insertion呢?主要通过以下命令:

set_power_cg_physically_aware_cg true

compile_ultra -gate_clock -scan -spg

主要步骤为工具在插入clock gating时考虑寄存器的摆放位置,将同属一个clock gating的寄存器做一个Register clustering ,冗余clock gating的merge以及clock gating的拆分(根据逻辑分布进行clock gating的拆分和克隆)。

ICC实现阶段,精准估算ICG clock latency来实现timing的优化。ICC只实现后的效果如图8所示。主要命令如下:

place_opt -optimize_icgs -spg

图8 Non physical aware 和physical aware对比图

好了,今天的码字就到这里了,原创不容易,喜欢的可以帮忙转发,小编在此先谢过!与此同时,吾爱IC社区(52-ic.com)也正式上线了。吾爱IC社区(52-ic.com)是一个专业交流和分享数字IC设计与实现技术与经验的IC社区。如果大家在学习和工作中有碰到技术问题,欢迎前往网站提问交流。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180314A0RGLR00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券