下图所示为咱们社区低功耗四核A7 Top Hierarchical Flow后端训练营中的一个案例,设计中存在若干个Power Domain,其中Power Domain2(简称PD2)为default Top Domain,Power Domain1(简称PD1)为一个需要power off的domain,PD1和PD2为同一个Voltage Domain,Power Domain3也是一个需要power off的domain,且它的工作电压是VDD1。
数字IC后端设计零基础快速入门(附数字IC后端设计实现培训视频)
数字IC实战后端项目| 必须掌握的28个SoC低功耗项目经验!
对于这样的low power设计需求,每个数字IC后端工程师都应该能够写出对应的power intent约束文件upf文件。
这个案例在实际IC后端项目中也是非常常见的。下面小编根据这个案例分享下常见的几个问题。
1)Always On Buffer的Secondary PG Pin连接错误
PD1内部是可以使用Aon Buffer的,但它的Secondary PG Pin只能连接到VDD这条net上,而不能连接到VDD1上。Innovus的upf flow是support自动插Aon Buffer,并且把secondary pg pin连接到global VDD net上。
但工具很容易出现一些问题,比如从PD2的一根信号经过PD1,并且插入若干颗buffer/inverter,最后再穿出到PD2。但这几颗buffer/inverter有可能是如下几种情况:
- 普通buffer/inverter
- 使用aon buffer但secondary pg pin连接错误(PD2内的aon buffer secondary pg pin连接到VDD1)
数字IC秋招笔试面试必备 | 低功耗设计实现十大灵魂拷问
所以,为了避免这个问题,我们通常可以不让这根信号穿到PD1内部。具体方法可以使用upf来约束。
update_power_domain –name PD1 –user_attributes {disable_secondary_domains {PD2 PD3}}
create_power_domain PD1
-supply {primary}
-supply {extra_supplies “” }
-include_elements
史上最全的数字IC后端设计实现培训教程(整理版)
2)Always On Buffer in 相对Aon Domain
下图黄色所示为PD2内一根普通信号,但在做完placement后发现这条net上有很多AON的buffer和inverter。即便这个PD2是一个power off的 power domain,这根信号上也只需要普通buffer即可。
如果出现这种情况,最终的low power验证clp或mvrc都会报出相应的violation。
3)Common Buffer in Power Off Domain
在数字IC后端低功耗设计实现中,我们会经常下图绿色标注的timing path,其中有两个普通buffer是在PD1内。这明显不符合低功耗设计实现的power约束。
盘点Power Switch Cell在实际项目中应用注意事项
【思考题】Power Domain1和Power Domain3之间的最小间距应该如何预留?为什么?
通常出现这种情况,我们需要重点检查upf文件中的pst state描述,查看各个power domain的开关应用场景是否描述完整准确。
4)跨Power Domain绕线问题
下图所示为一根从PD1中cell B的输出连接到PD3的cell C输入端信号对应的routing走线。这条net工具走线时跨越在PD2上,当这条net出现max transition时我们是不好修的。
因此,我们需要通过设置如下绕线和opt的mode来控制工具走线。下图所示为施加特殊routing constraint约束后的绕线结果。很显然,这根信号的走线没有跨在PD2上。
setRouteMode -earlyGlobalHonorMsvRouteConstraint true
setNanoRouteMode -routeHonorPowerDomain true
setOptMode -addAOFeedThruBuffer false
5)各大Power Domain形状切分原则
下面通过几个case来分享低功耗后端设计实现过程做模块partition时应该遵守的几大原则。
Case1: Power Domain形状尽量规则
通常情况power domain的形状(子模块单独harden模块)要尽量规则,特别是timing和routing都不太好做的设计。
下图左侧存在大量拐角及窄channel都是一个不好floorplan的表现。右侧所示的模块切分相对更好,但这种L型的形状在模块直角转弯处也非常容易有timing和routing问题。
Case2: 避免Macro或Blockage放置在Power Domain中间区域
这个就是我们一直提倡的摆放Macro的方法或原则——Macro尽量摆放在模块或Power Domain的边界处。所以在做模块或Power Domain切分时需要考虑好内部Macro的情况,特别是那种宽度或高度个别大的Macro。
Case3: 避免thin channel的PD
Case4: Power Domain边界处尽量不要摆放Default PD的Memory
当PD1接口信号要往左下角出来和Default PD进行交互时,PD1边界处的Macro会挡住标准单元的摆放和阻挡接口信号线的routing。
而且我们知道PD1接口出来的信号还需要插isolation cell,如果这类isolation cell被摆放至图中的黄色区域,肯定会有max transition violation。不巧的是这类信号对应的net还必须设置dont touch。