图22: MTCMOS placement in the layout map
? 现在voltage area已经创建,MTCMOS单元也已经摆放连接好了。下一步就开始做power plan了,也就是电源网络的规划。由于VSS在每个power domain都是一样的。所以三个power domain的VSS mesh是连在一起。True VDD(VDD)在所有的power domain都会用到,所以在每个power domain都需要加上power mesh。而在掉电区PD_1,VDD通过MTCMOS得到VDD_1,由VDD_1来给掉电区供电。所以VDD_2在PD_2和VDD_1在PD_1的power mesh不能连接到一起。ICC里面提供一个自动的电源网络综合的功能,用户可以告诉工具一些电源网络的约束以及要达到的电压降的目标,工具就可以自动产生符合要求的电源网络。而且,它是支持带MTCMOS的综合,也可以一次综合多个电源、地。用户只要根据产生的电源网络作些精细的修改就可以了。电源网络做好后,还要把MTCMOS的辅助电源连接好,如图23所示。连接辅助电源的方法主要有两种:一种是在“True” PG正好在MTCMOS上方的情况下,可以用create_preroute_vias命令来直接用过孔把MTCMOS的电源端口与”True” PG连接起来;另一种就是如果“True” PG不在MTCMOS上方,那就要用preroute_standard_cells命令里net连接的模式物理连接起来。至此,所有的电源、地网络都连接好了,还可以借用ICC提供的PNA(Power Network Analysis)的功能对包含MTCMOS的电压降进行分析,以帮助判断MTCMOS单元数量是否足够以及其位置是否合理。
图23: MTCMOS辅助电源的连接
? 如果voltage area位置形状、macro的摆放以及电源网络都合理了,而且用check_mv_design来检查低功耗的规则还有电源、地的连接都没有问题了,floorplan阶段的工作也就结束了。自此,设计中所有因为低功耗设计要引入的新的cell都已经插入到设计中了。在综合及DFT阶段插入了isolation cell,在floorplan阶段我们又插入了MTCMOS。
Floorplan结束后,ICC里面的布局、时钟树综合以及布线都和传统非UPF流程没有太大区别了。这些步骤工具都是可以自动理解low-power要求的,并会自动把isolation单元放到相对应的voltage area的边界。在我们这个设计中,我们还用到了ICC对动态功耗和静态功耗的电路优化能力,只要把相应开关打开工具就可以自动进行电路方面的功耗优化了。同样,在各个阶段都可以通过check_mv_design命令来检查是否有违反低功耗设计规则。
自此,在ICC里面的主要工作就结束了,为了给sign-off工具提供数据,我们还要写出带PG信息的netlist以作理解low-power的形式验证、要写出最后的UPF以及不带PG信息的netlist以作最后的时序、SI及功耗分析。PrimeRail作IR-drop分析可以直接读取Milkyway的设计库。Star-rcxt作参数提取也可以直接读取Milkyway的设计库。
3.5 经验介绍
在上一节中已经介绍了一些物理实现的经验,比如如何确定Voltage Area的位置和形状,如何合理摆放MTCMOS等等。下面再就我们在实现过程中遇到的一些问题,以及一些需要注意的地方,在这里和大家分享:
1. UPF里面特殊cell的控制信号(比如Isolation cell和MTCMOS的控制信号)最好定义在leaf pin上,不要定义在hierarchy pin上,否则ICC可能不能正确的识别该控制信号。
2. DFT设计阶段会在UPF里定义的特殊cell的控制信号上插入mux,用于测试时控制这些信号,如果UPF里面定义的控制信号在插入的mux之前,则ICC也会找不到这些特殊cell的控制信号。比如Isolation cell的控制信号,如图24所示,UPF中本来定义的Isolation cell控制信号是func_iso_en,但是加了DFT mux之后,UPF中就需要将Isolation cell的控制信号定义在iso_en上才行。
图24: DFT模式下的Isolation控制信号
3. 关于Isolation cell的插入有一个需要注意的问题,power domain的某些接口信号在网表中可能是直接接电源或地的,如果在这些信号上插入了Isolation cell,在ICC中不能正确derive出这些Isolation cell的power连接关系。会报告这样的告警”The isolation cell ?xxx? does not have any associated UPF isolation strategy ”。解决的方法就是在UPF中指定对这些信号不要插入Isolation cell,或者在ICC中直接指定这些Isolation cell的电源和地。
4. 需要在Voltage Area的边界用hard blockage留出足够的间隙或者在创建voltage area的时候加上guard_band的选项,工具就不会在这些区域摆放cell,否则如果voltage area边界内外cell紧密摆放的话,不同电源、地的cell就物理连接到一起了,就会有电源或地的短路出现。具体需要留多少间隙,要根据不同工艺的design rule来计算。
5. 关于MTCMOS的插入数量,可以先根据该模块的功耗大致估算一下。首先通过功耗分析估算出掉电区的功耗P,根据P=VI,及电源电压,计算出供电电流I;再根据foundry提供的MTCMOS的电阻值R,可以计算出并联n个MTCMOS的IR drop大致为IR/n;这样就可以根据期望达到的IR drop值,计算出需要插入多少MTCMOS了。当然最后还需要通过更精确的IR drop分析工具(比如Prime Rail)来分析IR drop是否满足要求。
6. 关于MTCMOS的摆放和分布,则需要考虑掉电区的功耗分布,功耗密度大的地方电流密度也大,所以MTCMOS摆放密度要高一些,以减小IR drop。比如在我们的设计中,掉电区有个大块的Macro(见图22左上),且它的时钟频率比其他部分高,功耗密度比其他部分大很多,所以我们在其外围放了一圈紧挨着的MTCMOS,而在其他部分,则是按阵列形式摆放了几列MTCMOS,每列MTCMOS都是隔行摆放。 7. 掉电区的电源网络规划、以及MTCMOS的电源连接也是需要特别考虑的地方。掉电区有三个PG nets(True VDD、Virtual VDD和VSS),在做电源网络规划时,建议对三个PG nets都画一个密度相当的电
源网格。True VDD和Virtual VDD的网格通过MTCMOS连接,MTCMOS处是电流密度最大的地方,所以为了减小IR drop,在MTCMOS上方尽量用宽金属走Power Strap。这样做出来的电源网络,一般不会有IR drop的问题。
4. 结论及建议
利用Synopsys基于UPF标准的低功耗流程,帮助我们在设计的整个流程(从前端到后端,以及验证)中,达成对低功耗设计意图描述上的连贯性、简洁性与一致性,并提供各方面的验证功能,极大的提高了设计实现的效率,并保证了设计的正确性。
对于设计实现工程师来说,UPF流程仅比传统流程增加了如何用UPF来描述自己设计中的低功耗意图,工具就可以根据UPF里面的约束,自动实现低功耗设计。而且实现与验证可能要用到多个工具,传统流程中,每个工具都要求有自己独立的低功耗设计命令,这样很难保证各个工具之间的描述是否一致,有了UPF,这个问题就彻底解决了,各个工具都使用统一的UPF文件来得到一致的低功耗设计要求。另外,低功耗设计需要的特殊单元,如Isolation cells和Level Shifters在前端综合时工具会根据UPF的描述自动插入,MTCMOS在后端实现工具中插入以及连接,整个过程中复杂及容易出错的Power连接、控制信号连接等步骤都由工具根据UPF的描述自动实现了,操作简单方便,且不容易出错。
觉得需要增强的是,当我们在作这个项目的时候,Synopsys的低功耗流程还不支持在优化的中间过程对UPF进行修改。比如在物理实现的后期,想对power domain做些微小的修改,又不想从头开始重做,要是UPF也能像SDC一样可以remove后再load就更方便了。但是令人振奋的是,当前ICC0906的版本提供了一个叫reset_upf的新命令,已经可以实现这个功能了。
5. 致谢
UPF流程对于我们是一个全新的低功耗流程,完成本设计,离不开华为通信芯片团队的集体智慧和不懈的努力。在此,要特别感谢张方、张小珏、吕忠华、宋隽、乐彬、戴方明、余剑锋,以及各位同事的大力协助。另外,还要感谢Synopsys工程师杜广山、黄秋儿,他们提出了很多宝贵的意见和建议,并现场支持,及时解答每一个疑问,给予了我们极大的支持和帮助。
6. 参考文献
[1] Synopsys Low-Power Flow User Guide, Version B-2008.09, September 2008 [2] Synopsys? Low Power Solution white paper, December 2008
[3] Michael Keating, David Flynn, Robert Aitken, Alan Gibbons, Kaijian Shi, “Low Power Methodology Manual For System-on-Chip Design”
7. 附件
7.1 UPF范例
# create power domains
create_power_domain PD_TOP –include_scope create_power_domain PD_1 –elements BLOCKA create_power_domain PD_2 –elements BLOCKB # supply nets definitions
create_supply_net VDD –domain PD_TOP create_supply_net VDD –domain PD_1 –reuse create_supply_net VDD_2 –domain PD_TOP create_supply_net VDD_2 –domain PD_1 –reuse create_supply_net VDD_2 –domain PD_2 –reuse create_supply_net VDD_1 –domain PD_1 create_supply_net VSS –domain PD_TOP create_supply_net VSS –domain PD_1 –reuse create_supply_net VSS –domain PD_2 –reuse #define the primary power/ground for power domains
set_domain_supply_net PD_TOP –primary_power_net VDD –primary_ground_net VSS set_domain_suupply_net PD_1 –primary_power_net VDD_1 –primary_ground_net VSS set_domain_supply_net PD_2 –primary_power_net VDD_2 –primary_ground_net VSS # power ports definitions
create_supply_port VDD –domain PD_TOP –direction in create_supply_port VDD_2 –domain PD_TOP –direction in create_supply_port VSS –domain PD_TOP –direction in #connect the supply net to power port