数字IC后端流程——(三)布局Placement

参考原博地址:https://blog.csdn.net/weixin_46752319/article/details/107360843

ICC布局阶段

                                                        

在布局规划阶段完成了芯片的整体规划,而布局阶段主要是软件自动的标准单元的摆放。

 

在布局开始之前,需要对设计进行确认和检查。

主要确认内容包括:

·检查设计中的所有macro是否设置为dont_touch属性。在大多数情况下,宏单元的位置是在布局规划期间确定的,并且其位置是“固定的”。最好再次修复所有宏位置,以防万一在设计计划后手动移动了宏,却忘记了将其fix住,导致在placement阶段使其移动。

Icc_shell>set_dont_touch_placement [all_macro_cells]

·检查placement blockage是否正确添加,以及确认blockage的类型。

·检查TLU+文件是否设置。前面说过这是软件计算RC的查找表,是软件计算timing的基础。

Icc_shell>check_tlu_plus_files       需要三项Passed!

                                                 

如果还未设置,Icc_shell>set_tlu_plus_files   -max_tluplus $tlup_max    -min_tluplus $tlup_min   -tech2itf_map  $tlup_map

·将所有的scenario都激活。如果没有MCMM,则不用执行该操作。

Icc_shell>set_active_scenarios -all

·将每个scenario高扇出网络以及时钟网络设置为理想的网络。

Icc_shell>set_ideal_network [all_fanout  -flat  -clock_tree]

·检查绕线的layer是否设置正确。如果设置不正确,会影响到工具估算congestion map的准确性。

Icc_shell>report_ignored_layers

设置ignored layer(Eg:ignored M3以下 M5以上的layer)

Icc_shell>set_ignored_layers   -min_routing_layer M3   -max_routing_layer M5

·设置标准单元摆放的约束。一般在电源地Strap下面放置标准单元时,可能会在Strap的地方存在Congestion。这时可以限制工具在电源地Srtap下面少放或者不放置标准单元。举例说明对Pnet(Power net)Placement Blockages的设置:

将M1和M2的PG线下方设置为Partial Blockage:>set_pnet_options-partial {M1 M2}

不允许M1和M2的PG线下方放置任何标准单元:>set_pnet_options-complete { M1 M2}

允许软件在M1和M2的PG线下方放置任何标准单元,在不指定的情况下,软件默认:>set_pnet_options-none {M1 M2}

                           

其中,-paretial option允许软件在pg strap下放置标准单元,但是需注意strap和单元引脚之间的短路,需要满足最小距离的DRC,但这将导致在strap附近的引脚能难以接线,使得拥塞增大。

以上即为布局之前的设计检查。

其中提到了scenario和MCMM(Multi-corner Multi-mode)。

corner是PVT上的区别,一种PVT对应一个corner;mode主要有func和scan。

由于影响cell delay的因素主要有:工艺,电压和温度三种(PVT),由此产生各种corner:
WC:worst case slow,低电压,高温度,慢工艺 -> 一般情况下delay最大,setup 差。
WCL:worst case low-temperature,低电压,低温度,慢工艺 -> 温度反转效应时delay最大,setup差。
LT:即low-temperature,也叫bc(best case fast),高电压,低温度,快工艺 -> 一般情况下delay最小,hold差。
ML:max-leakage,高电压,高温度,快工艺 -> 温度反转效应下delay最小,hold差。
TC:typical,也叫tt,普通电压,普通温度,标准工艺 -> 各种typical。
其中的快、慢和标准工艺指manufacture时的N/PFET的驱动电流值,min对应慢工艺,max对应快工艺。

一个corner和一个mode组成一个scenario 形成不同组合的scenario。针对不同的scenario可以进行不同的功耗以及setup、hold time的优化。

icc中创建不同的scenario的命令为Icc_shell>create_scenario $name 当需要多个scenario时一般可以自己写成一个脚本,设置dc输出的约束条件.sdc文件和相应的RC文件TLU+。

                      

使用set_scenario_options命令设定该scenario对setup hold 或者动态静态功耗进行优化。

 

在布局前的检查完成之后,接着进行placement flow。

·DFT Setup

DFT全称是Design for test,这一步主要是针对设计中存在scan chains(扫描链)的情况下进行的优化。

为了满足可测试性设计(DFT)的需求(可观测,可控),将设计中所有(或大部分)的触发器连接在一条或者若干条链上,这条链我们称之为scan chain。这步是在逻辑综合工具(Design Compiler)中实现的。在netlist网表中,ICC读到设计进行了扫描链scan chains,需要读入scandef文件。这个scandef文件也是DC输出的。

在ICC中,我们可以用命令icc_shell>check_physical_design   -stage pre_place_opt进行检查,若出现Error:

                            

说明该设计中进行了扫描链设计,但是没有输入scandef文件。

icc_shell>report_scan_chain  可以看到报告中没有任何scan_chain信息,此时我们就需要读入scandef文件。

                                                                           

在绕线资源比较紧张的情况下,在ICC/ICC2中读入对应的scandef,然后让工具做scan chain的reorder,从而缓解绕线资源紧张的状态。原因是:

在DC综合阶段,由于工具并没有所有寄存器的物理位置信息,所以工具默认情况下是按照字母的顺序来做scan chain的插入。大部分情况下,这样的scan chain连接方式并不是最优的。ICC/ICC2中的placement是基于timing和congestion driven的,所以原来两个寄存器(比如下图中的DFF2和DFF3)的scan chain是前后级的关系,但是在ICC/ICC2中可能这两个寄存器离的比较远,这样的情况,就会导致寄存器SI(scan in)端的走线很乱,加重design的congestion issue。而经过scan chain reorder之后,使得走线变得有序。

                                          

经过了scan chain reorder之后,设计的走线会变得有序,大大缓解绕线资源。通过飞线图我们可以直观地看出对比。

                                           

下面给出一个scandef文件的实例作为参考,其中包括:

                                          

在如图的一条scan chain中,+FLOATING中的寄存器单元是可以进行reorder的,软件可以对他们进行走线优化,而+ORDERED 中的是不能做reorder的。

正常情况 scan chain连接是无序的,若无需进行optimize_dft, 则icc_shell>place_opt   -continue_on_missing_scandef

若需要进行optimize_dft,则icc_shell>read_def design_data/ORCA_TOP.scandef  读入scandef文件后,

icc_shell>report_scan_chain,此时发现与开始报告的不同,设计中已经读入了scan chain

                                                  

在读入了scandef文件后,在最后的place_opt命令里带上-optimize_dft的选项即可对扫面链进行优化。同时,ICC不仅支持place过程的scan chain reordering,也支持clock_opt阶段的scan chain reordering。所以在place阶段用了scan chain reordering之后,务必在clock_opt阶段继续做进一步的优化,减少hold violation的数量。

 

·Power Setup

功耗优化:芯片的整体功耗分为动态功耗(dynamic) 和静态功耗(Static Powers),又称漏电流功耗(Leakage Power)

其中动态功耗又分为:

·标准单元内部功耗(Internal Power),即短路功耗,即上下PMOS和NMOS同时导通时的功耗。这部分的计算是嵌入library库文件内部,通过标准单元的input transition和output load来查表得到的。

·Switch power,即开关功耗。动态功耗和data的翻转率(TR),静态概率(SP),电压,负载电容相关。这一部分为互连线(net)上的dynamic功耗,这部分的计算通过将所有net上每个翻转周期的功耗乘以其翻转率并相加得到。

在Power Setup中,主要进行优化的是开关功耗,为了优化动态功耗,ICC通常会读入SAIF文件(ICC只识别SAIF文件,可将VCD文件转化为SAIF文件后使用)。Saif文件记录cell和net的switching activity(翻转活动),即记录了上述的翻转率。

·SAIF文件:即switching activity interchange format,开关行为内部交换格式文件,用于仿真器和功耗分析之间交换信息的ASCII文件(美国标准信息交换码文件)。

 ·VCD文件,即value change dump 文件,它也是一个ASCII文件,文件中包括了一个设计中所选择变量值的变化信息,这些信息通过在仿真testbench中使用“VCD系统函数”得到。

平均功耗分析,分3种情况:

(1)假如有波形文件:最理想的情况是能提供后仿产生的VCD/SAIF文件,通过read_vcd/read_saif将真实的翻转率反标到Net上,然后通过report_switching_activity检查反标率,最后report_power报功耗值。

(2)人为设置翻转率:根据经验值,通过set_switching_activity/set_case_analysis来设置register,clock gate以及memory/blackbox的翻转率,这个经验是从以往项目的仿真得到的,然后通过以下类似下面的命令设置:

reset_switching_activity (重置之前设置的翻转率)
set_switching_activity [get_pins -of_object [all_registers]]   -toggle_rate 0.5   -static_probability 0.5    -base_clock * (设置register的翻转率)
set_switching_activity   -type black_boxes    -toggle_rate 0.1    -static_probability 0.5    -base_clock *    -hierarchy (设置blockboxs上的翻转率)
set_switching_activity   -toggle_rate 0.5    -static_probability 0.5    -base_clock * [remove_from_collection [all_inputs] [get_port -filter "is_clock_used_as_clock == true"]] (设置Input上的翻转率)
set_switching_activity [get_pins -of_object [get_cells -hierarchical * -filter "ref_name =~ *ICG*"]]    -toggle_rate 0.5 -static_probability 0.5    -base_clock * (设置clock gate上的翻转率)
set_case_analysis 1 [get_ports *reset*] (使reset信号不翻转,准静态信号)
set_switching_activity    -toggle_rate 0    -static_probability 1    -base_clock * [get_port *reset*] 

(3)使用默认翻转率:最不济的方式就是使用工具默认的翻转率了,通过下面3个变量可以设定。

set_app_var power_default_toggle_rate 0.5 (默认值为 0.1)
set_app_var power_default_static_probability 0.5 (默认值为0.5)
set_app_var power_default_toggle_rate_reference_clock fastest (默认值related)

具体的翻转率的计算以及SAIF文件转换等内荣可以参考https://www.cnblogs.com/IClearner/p/6898463.html(出处 http://www.cnblogs.com/IClearner/ ,作者:IC_learner)

读入SAIF文件后,使用ICC的LPP(low power placement)功能,ICC在布局阶段会挪动一些cell,缩短高翻转率的net的长度,降低net上的电容,从而降低与之相连的cell的动态功耗。如下图中,将高翻转率0.8的net长度缩短,以降低动态功耗。

Icc_shell>set_optimize_pre_cts_power_options -low_power_placement true

                                                                           

 

静态功耗是指逻辑门在不切换时消耗的功耗,其主要由源极到漏极亚阈值泄漏电流引起的,即逻辑门未完全关闭。因此,静态功耗通常称为泄漏功耗leakage power。

每个标准单元的leakage都集成在其library库文件(.lib)中,因此计算leakage power只需在制定条件下将design中所有的标准单元(包括各种Macro)的leakage值相加即可。

单元门的阈值电压和漏电功耗(静态功耗)有如下图所示的关系:

                                 

静态功耗与阈值电压呈指数关系。

阈值电压Vt越高的单元,它的漏电功耗越低,但门延迟越长,也就是速度慢;

阈值电压Vt越低的单元,它的漏电功耗越高,但门延迟越短,也就是速度快。

为了满足时序的要求,关键路径中使用低阈值电压的单元(low Vt cells),以减少单元门的延迟,改善路径的时序。而为了减少静态功耗,在非关键路径中使用高阈值电压的单元(high Vt cells),以降低静态功耗。设计者根据设计需求选用不用阈值电压的Cell,取得性能和功耗的折中。

指定多阈值电压约束:icc_shell>set_multi_vth_constraint

指定scenario用于进行静态功耗的优化:icc_shell>set_scenario_options   -leakage_power true

 

关于低功耗设计在lab2010中只提及saif文件的读入,更多的内容在http://www.cnblogs.com/IClearner/ IC_learner低功耗设计入门中讲解了很多,比如门级功耗优化技术GLPO:Gate-level power opt等,据我所了解还有多电源多电压技术,Multi supply Multi Voltage(MSMV)划分为不同电压域(Voltage Area),也被称为Power Domain的技术。我也还在学习,并且我在跟着lab做的时候都是参考这位大佬的博客内容对lab进行理解的。于是自己也写一下博客记录一下。

 

最后开始布局,整个placement阶段进行标准单元的摆放命令其实就是place_opt ,但整个placement过程基于Timing Driven和Congestion Driven以及Power Optimization进行,不同的条件下placement的结果和质量,也是不一样的。placement的好坏,直接决定了时钟树的质量和绕线,最终体现为影响芯片的性能。

                           

Timing-driven placement会将拥有时序关系的标准单元放置在接近的位置以减少连线上的RC

                                

较小的timing违例可以在后续步骤中进行修复和优化,而在placement阶段不能出现太大的congestion违例。

 

place_opt进行以下四个部分,当然这都是软件自己完成的。

                                                                                                        

命令:Icc_shell>place_opt   -area_recovery   -congestion  -optimize_dft   -power

其中,-area_recovery可以减小非关键路径的单元尺寸,帮助减少congestion和power ,-optimize_dft 和 -power只有当DFT和powery优化的时候需要

-congestion 选项为设计已知congestion比较严重(如第一次使用未带选项进行place_opt发现congestion较严重),或者在布局规划(floorplan)中使用了 “high effort”算法(set_fp_placement_strategy  -congestion_effort high)时需要。

                                                              

·Initial placement (Coarse placement)

这个步骤就是通常我们所说的Coarse placement。将标准单元粗略摆放好,此时不考虑overlap问题。

·Auto High Fanout Synthesis(AHFS)

这个步骤将design中高扇出的点(时钟信号,reset信号等除外),进行解high fanout操作,优化时序。所以用来做placement的constraint,请务必将其中那些不必要的ideal network移除。

·Logic Optimization

该步骤根据我们添加的选项进行优化,这个过程主要有cell sizing, moving, net spitting, gate cloning, buffer insertion和area recovery这些小步骤组成。

·Placement Legalization

进行legalization操作,将所有的标准单元放置在row上,并且保证所有的cell处于legal的状态,即不存在overlap或者不在对应的row上。

                                            

place_opt过后,标准单元应该被正确地摆放在row上,进行设计后的报告

icc_shell>report_congestion -grc_based -by_layer -routing_stage global -search_repair
                    report_design -physical
                    report_qor
                    report_power

分析报告,如果有不满足或者可以更优化的部分,可以使用如psynopt ( -area_recovery  -power)命令在在原有基础上做增量优化。此时设计中最好不要存在Setup的违反,可以存在Max Cap/tran、hold、Min Cap的违反。

保存设计 icc_shell>save_mw_cel -as ORCA_placed    placement阶段结束

  • 8
    点赞
  • 129
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数字后端placement and routing设计流程是指在数字集成电路设计中,根据电路功能和性能要求,进行电路元件的布局与连线的规划的过程。 首先,进行placement布局)设计。这一步骤主要是根据电路的功能要求和外界环境限制,将电路元件(如逻辑门、存储单元等)放置在芯片的物理位置上。布局设计要考虑元件之间的连线长度、面积利用率、功耗等因素,通过优化布局,提高电路性能。根据布局设计规则,利用电路设计工具,将元件按照最佳的位置布置在芯片上。 接下来,进行routing(连线)设计。这一步骤主要是通过连线规划,将布局好的电路元件按照要求进行连线。连线设计要考虑信号的传输延迟、功耗、噪声等因素,通过选择合适的连线路径和优化连线规则,提高电路的性能。根据布局设计的结果,利用电路设计工具,进行连线规划和布线。在连线设计中,还需要考虑场效应管、传输门等互连管道的使用,以及信号完整性和功耗优化等问题。 最后,进行验证和优化。完成设计后,需要进行电路功能、时序和可靠性等方面的验证。通过仿真和测试等手段,检查设计是否满足功能和性能要求。如果发现问题,需要进行优化,如调整布局、改进连线规划等。直到验证结果符合要求,才能进入后续的制造和生产过程。 总之,数字后端placement and routing设计流程是一个综合考虑电路功能、性能和制约因素的过程,通过布局设计和连线规划,优化电路的性能,最终得到满足要求的数字集成电路设计。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值