课程总览与目标
Routing主要关注的两个问题:①处理DRC问题;②到这一步,timing应该是可被接受的,但总会有个别path还有violation存在,就在这一步处理;
route_opt命令组成
Routing的core command 为route_opt,执行route_opt时,工具会做三步内容:①Global routing;②Track assignment;③Detail Routing;如上图;
在做完route_opt后,理论上所有的net都会连起来,不会存在开路的情况;
在做route_opt时,工具还同时会做一些优化策略:①timing、area、power;②Buffer DRC优化;③物理DRC优化;等;
第一步:Global Route-GR
GR会把所有的net分配到具体的金属层以及G-cell中,GR使用一种G-link的方式,得到的是一种虚拟的走线,如上第二张图,只是一根虚拟的线将需要连接的cell连起来,没有实际的宽度,但会记录net的具体走线信息(metal/G-cell等);因此在GR之后Metal traces并未创建;
如果两个连线之间有congestion区域,GR会从旁边绕开进行走线,避开该区域,同时绕线的长度会最小化;GR也会避开PG及blockage位置;
第二步:Track Assignment-TA
TA会将每根net分配到特定的track上并且创建实际的metal trace;在创建metal trace时,TA会根据每层metal 的Prefered direction参考走线方向进行布线,并会优化via的数量;
值得注意的是,TA不会check 物理DRC,因此在TA后会出现DRC问题;
第三步:Detail Routing
Detail routing会针对上述出现的物理DRC问题,进行修复;上图简单列举了几个例子:
①Notch spacing:如上图,显然在同一层不应该出现横纵两个方向的metal trace方向;
②不太明白;
③对于不同宽度的线,宽线和细线之间的spacing也是不一样的,具体的space和工艺相关;
④保证net spacing均匀,不要忽大忽小;
对于相同rule的violation,如果二者离的也很近的话,工具在报告中会将violation合并成一个;
随堂提问
Routing Flow
Routing前状态检查
在进行routing前,需要进行状态检查,基本和前面的步骤一样,检查前面几步是否完成,检查timing/congestion/logic DRC等;
具体设置检查
前面检查完一些流程后,我们还要对一些具体的内容进行检查,检查设计是否已经准备好做routing了,检查是否还存在ideal net(应该在CTS后全部消除);
我们可以用check_physical_design来检查上述的ideal net是否消除;需要注意,一定要检查一遍Prefered_routing_direction参考布线方向是不是设置了,否则后面会出现很多问题;
Routing Setup
包含Common option、global option、detail option等;
设置多线程运行
可以自定义使用的CPU核心数,用来提高性能;
采用Arnoldi延时算法
前面CTS中也提到过,默认情况下,工具使用的是Elmore算法,我们需要手动改为Arnoldi算法,该算法对net delay的计算精度更高;
Routing command选项
对应前面GUI界面设置的option,一共有四种:common、global、track、detail option;相对应的report也是一样;
Common options设置
common option可以用来控制前面说的route_opt的三步过程中的一些设置,相关的一些设置如上图;值得注意的是,这里我们可以设置双倍via,以提高良率,并降低via的电阻,减小延时;
操作命令:首先将所有的common option先初始化为默认值,然后再打开redundant_via_insertion;
Global options设置
Global options的设置只会影响global routing那一步;一般来说都是用的默认设置,如有有需要在进行修改,命令也是先恢复默认值再设置参数;
Track options设置
Track options的设置很简单,只会影响track assignment的控制,选项也只有两项,timing driven/crosstalk driven,一般情况下默认即可;
Detail route options设置
Detail route options的设置用来控制detail route,控制选项如上,一般来说,当我们前面选择了双倍via后,这里建议开启via and wire opt;
Antenna:天线效应,后面会详细说明;
Antenna Violations天线效应
天线效应:当我们将栅极引出pin后,后续在金属层的刻蚀过程中会形成一些带电粒子,随着与栅极相连接的金属面积不断增大,电荷发生积累,到达极限时就会击穿栅氧层,从而损伤功能,因此栅极上面连接的金属层面积是有上限的,即Antenna Rule,这个rule由工艺厂商提供,我们在做routing时将Antenna Rule source进来即可;
计算公式:如上图,不进行深入探讨;
天线效应的修复
Routing对于天线效应的修复主要是通过layer jumping来实现,如上图,通过金属层跳层后,与gate直连的金属面积大大降低;
命令操作:首先将工艺厂商提供的antenna rule source进来,然后在进行detail_options时,加上-antenna true,打开antenna fix功能即可;但需要主要,routing阶段修复antenna只会执行一次,主要是为了兼顾run time,完成后可能还会存在一些antenna violation,后续在chip finish阶段在进行修复;
改变参考绕线方向
如上图所示的情景:在两块blockage中间存在一个可以布线的channel,位于M4,该channel两侧存在两个需要连线的cell,但是该channel与M4的参考布线方向垂直,默认情况下,工具是不会从该channel布线的,而是会从两侧的blockage绕过去布线,这样就会使线长增大,延时增加,同时影响了blockage周围的congestion;
此时,要想让工具从中间直接穿过去布线,就需要改变该区域的参考布线方向,通过create_route_guide & -switch_preferred_direction 指定一个区域,改变该区域的参考布线方向,然后工具就会直接穿过布线了;
定义routing Blockages
需要注意的是,我们在routing中定义blockage时,用的名称必须是blockage layer名称,而不是TF文件中的名称,如上图的案例:metal1Blockage/via1Blockage;
双倍Via设置
如上图,我们在设置双倍via时,可以直接读取TF文件中的via definition,然后得到一个优化的via mapping table;当然,也可以自己定义via的属性;
我们可以在common_options & route_options设置,设置完成后,我们就可以执行RVI(redundanr via insertion)了;
优先route Clock Net
如果前面的clock_opt没有把clock net route的话,那么在routing阶段我们要先把clock net布线;当然,一般情况下,在CTS阶段就已经做好clk net route 了;
基本的Zroute flow
这里的Zroute 和route类似,是ICC最新的一种绕线引擎;
基本的步骤就是先进行setup,然后看clk net有没有route,没有就补上;然后就是route signals,最后就是opt优化;
核心command:route_opt
核心command:route_opt 及后面跟的一些命令选项;一般说来,我们在第一遍做route_opt时,只做initial_route_only,只对signal net进行绕线,做完以后所有的signal net将全部连接;但由于只做了signal net route,做完后肯定会产生一些timing及逻辑/物理DRC相关的violation,后续需要进一步优化;
Post Route优化举例
优化时,我们也有多种选项,可以针对功耗进行优化;如果存在DRC,也可以切换timing与logic DRC的优先级,因为工具默认timing是第一优先级的;如果有特定的优化需求,如size/hold time/wire等,都有针对性优化的命令选项;
双倍via插入report
在插入双倍via后,Zroute会产生一个转换报告,我们可以查看每一层metal的via转换率及整个设计的转换率等;
我们也可以通过report_design -physical来得到routing summary;
物理DRC violation检查
前面我们做完核心route_opt -initial route only及opt优化后,会产生一些DRC问题,在此我们对物理DRC进行check,命令:verify_zrt_route;check后如发现存在问题,①我们可以用route_zrt_detail -incremental直接对物理DRC进行修复,注意,这里的-incremental含义是基于前面的route_opt后的结果进行修复的,②如果一遍不行,我们也可以设置fix interation修复次数,让工具多运行几次进行fix;route_zrt_detail -incremental是route后对物理DRC修复的常用命令;
③另外,更有效地方法是通过error id,定位到相应的shape,将有DRC问题的net remove掉,然后再重新进行route,这种方法更加有效;
如果上述三种都无法修复物理DRC(通常最后都是short问题),那么最后就只能人工去看layout到底是什么原因;
verify_zrt_route命令分析
verify_zrt_route命令只会检查signal and clock routing的物理DRC问题,并不会检查PG net及用户自定义的wire shape存在的问题;
零星timing violation修复
前面我们提过,Routing阶段主要关注的问题有两个:一是DRC问题,这个我们前面几页讲了如何check及fix;
二是零星存在部分path的timing问题,我们可以通过report_constraint -all命令结合focul_opt(可以查一下manpage)命令来进行修复;首先,用report_constraint -all命令抓出所有存在violation的path,得到这些path的endpoint并输出一个文件,然后focul_opt可以读取该文件,然后对setup、hold及DRC进行修复;
功能ECO
我们说的ECO,一般有两种类型:根据Placement是否fixed可以分成两种;
同样的,根据ECO的目的不同也可以分为两种:Function ECO,这种一般是芯片的某些功能没有达到要求而进行ECO,这种ECO基本对应Freeze silicon ECO,由于所有的cell都已经fix了,因此只能通过前面留下来的一些冗余cell进行ECO;另一种是利用ECO来fix timing,一般在PT阶段进行ECO,称为PT ECO,对应Non-freeze silicon ECO,由于cell并未进行fix,因此允许新加一些cell进去进行ECO,然后 重新做ECO place & route;
注意,ECO都是在Routing后进行的;
Non-Freeze ECO flow
Non-Freeze ECO流程,一般我们做完routing后,如果function/时序没有满足要求,可以利用ECO流程修复function时序;
首先用Star RC抽取routing后的RC寄生参数,给到PT工具进行静态时序分析,利用PT工具进行时序分析,得到write_change文件,将该文件存为ECO.tcl;
然后,将ECO.tcl文件重新source到PR工具中,update design,再做一遍STA,看是否满足时序要求;
最后,重新做ECO后的placement & routing;
Freeze ECO
对于Freeze ECO,我们在placement后,就需要将spare cell引进来(只是需要在placement后引入spare cell);
如果netlist中存在spare cell,那么我们可以直接用这些spare cell,首先给这些cell打上标签,然后将这些cell均匀的分散在整个layout上,再做后面的eco placement;
如果netlist中不存在spare cell,我们只能在placement后插入spare cell;
需要告诉工具,set_dont_touch这些spare cell,并对这些cell位置设置soft_fixed,可以轻微的挪动;
Protecting spare cell
前面说过,对于spare cell需要dont_touch,以防止ICC在优化时移除这些未连接的cell;同时要将这些cell设置为soft fixed,目的是为了防止coarse placement时被移动,而在CTS & Routing时又要可以进行轻微移动;
Freeze ECO flow
对于Freeze ECO flow,我们在routing后,dump导出一份Post-PR netlist(注意,这里导出的netlist已经是前面插入了spare cell的netlist并spread & dont_touch & soft_fixed) ,然后经过用户修改后,得到ECO netlist,再将ECO netlist导入到PR中,重新做ECO后的placement & routing;
ECO Route command
如上图,ECO route和正常的route执行的步骤基本类似;
全文Summary
Summary;