栏目分类

你的位置:天顺注册 > 业务范围 > CCOPT<四> ccopt_property

CCOPT<四> ccopt_property

发布日期:2024-08-22 13:09    点击次数:71
CCOPT本身有很多的property,之前的文章中已经介绍过了很多property;为了方便,可以把这些property都导入一个文件中以便以后查找:

图片

大约有270个property,其中大多数都不会用到,本文就捡比较重要的和比较难懂的讲讲;其他的大部分用不到,或者看help就能知道的我就不讲了。1set_ccopt_property option    这个命令有很多个参数,通过采用这些参数,可以将ccopt_property精确的应用到某个power-domain/clock-tree/skew-group上,这算是CCOPT比较重要的一个特性。例如下面的两个命令:

图片

第一个命令设置$clock专用的buffer第二个命令设置全局的buffernet_typenet_type有三种:leaf, trunk,top。下面对着三种类型进行区分:top:一个net fanout 大于routing_top_min_fanout指定的值,这个net就是top。leaf:  一个net只要连接一个sink,那就是leaf。trunk: 除了top和lef的都是trunk现实的设计中,有可能出现一个net即驱动一个sink点,又驱动其他clock logic;那这个net到底是leaf还是trunk ?  在CCOPT中,会通过插入buffer等来避免这种情况的发生。上面说到了routing_top_min_fanout这个property,每个FF算一个sink;但是对于macro等这样可能不太合理,可以设置下面的变量,将一个macro/CK当做1000个FF/CK

图片

2buffer_cells类似的还有logic_cells/inverter_cells等,本文以buffer_cells为例。通常这些参数我们都需要设置,如果不设置,CCOPT会自动在resize阶段查找相应的not don't use cell。用哪些buffer,会直接影响到最终CTS的结果,下面列举了几种因素:1.  LVT cell:  为尽可能将tree做短,建议采用LVT cell。2.  cell size: 不要用最大驱动cell,这样可能会造成EM问题,同时也会增大power;同时也不要用最小驱动cell,因为这种cell在不同corner下variation很大3. cell number: 不是说加入越多的cell精确。一方面这样会增大运行时间,另一方面不同的cell在不同的corner下变化不一样;例如BUFX12LVT在某个corner下比BUFX16HVT速度慢,但在某些corner比他速度快,这样使得CCOPT在计算的时候造成误差影响结果。4. pd: 如果有power-domain,需要把always-on buffer也加入进去3route_type这里的route_type不同于上面的net_type;route_type指的是NDR rule等。要使用route_type,必须先通过create_route_type创建一个route_type,例如:

图片

这里需要注意的是route_type中所采用的layer。这个layer必须包含在setNanoRouteMode所定义的layer范围之内。

图片

这里可能还会碰到的一个问题就是trim的问题。在某些工艺下,相邻的layer之间RC差别很大,例如route_type中采用M3/M4/M5/M6,但是M3和其他几个layer的差别很大,CCOPT会自动舍弃M3,只采用M4/M5/M6。这当然对timing有好处,但是可能的结果就是造成绕线short或者是某些net没有绕上等。可以设置下面的property来防止trim:

图片

4sink_type之前的例子中有很多涉及到sink_type的地方,这里详细解释解释:Sink_type解释auto由CCOPT决定属于哪种类型;相当于薛定谔的猫,用户无法得知这个pin的状态。throughClock会继续传播,相当于通过一个bufferstopClock在这个pin上停止传播,fix  DRV, 属于balance点;之前我们说的sink点,特指stopignoreClock 在这个pin上停止传播,fix  DRV, 和stop相比,不会balancemin和ignore类似,不怎么用exclude对clock来说看不到这个点,no  fix DRV, no blance采用through pin一般要求后面要定义一个clock才起作用。而且这个cell只能有一个output。如果有多个output,就需要采用extract_through_to:

图片

因为有多个output话,从一个input到output会有多个timing-arc,都当做through的话可能会产生问题。5skew_groups_sinks上面说到无法通过sink_type的类型获得某个pin是否属于stop类型。但是可以通过查询这个pin是否属于skew-group来获得其属性。此外还有skew_groups_ignore属性可以查看ignore pin。可能大家对相似的property有疑惑:skew_groups_active_sink,这里区别一下:skew_groups_sink: 不管有没有真实存在的路径,只要指定了,就可以通过这个属性来得到(在创建skew_group的时候可以不指定-source):

图片

skew_groups_active_sink: 创建skew_group的时候需要指定-source,且source到sink点之间存在真实的路径且没有被ignore pin等设置block住。带Active的要求比较高关于skew-group,之前还有一点需要注意:不支持*号。例如下面的不可以

图片

可以采用下面的方式,注意这里只能用"",不能用{}:

图片

6update_io_latency经常我们通过report_timing查看,会发现他的CLK是从负的开始的。这是为什么呢?如果是做block,如何正确反映block内部CTS的长短,使得block上面的IO timing看起来更合理;并且能够通过在TOP上Balance不同的clock ? 这些都和update_io_latency有关。在preCTS阶段,clock属于ideal的,但是很可能用户在clock上面设置了latency,我们假定为3ns(大多数情况下没有设置,为0ns)。在CTS完成之后,clock从ideal变为propagated。这个clock的delay从3ns变成4ns。此时对于I2R 和R2O的IO路径就会产生问题:因为外部的clock仍然是ideal的,而且还是原来的3ns,这样对I2R的slack变得乐观,R2O的path变得悲观,使得timing不准确。为了去掉这种情况,就需要update io latency,将多余的1ns设置成soure latency。设置成source latency之后,我们就会看到clock都是从负值开始的。

图片

所以我们在做CTS前,需要把clock设置成ideal,而不是propagated,如果原来的clock是propagated,这种update io latency的步骤就不会发生在这个clock上面 (或者通过设置下面的变量:)

图片

7opt_ignore可能某些clock已经完成,不再做这个clock,或者某些clock先做,有三种方法:更改spec,只留下想要做的clock创建只包含这个clock的新的sdc和新的analysis_view,然后产生新的spec采用opt_ignore,例如:

图片

通过这个设置,即使source的spec里面有其他的A这个clock,也不会做任何的buffer等8primary_delay_cornerprimary_delay_corner指CCOPT以哪个delay_corner为准做CTS。比如说

图片

设置125的情况和设置成m40下的BUFFER的数目,delay等都有所不同。如果不设置CCOPT 会自动选择一个(默认是比较快的corner?)。可以通过log里面查找“primary_delay_corner” 关键字来查看用的是哪些corner9allow_resize_of_dont_touch_cells默认为true,代表CCOPT会size dont-touch cell。所以如果需要设置size-only,可以将这些cell设置为don't touch就可以了。通过

图片

或者dbSet命理将其设置为sizeOnly在CCOPT中并不起作用。10auto_limit_insertion_delay_*之前讲到用target_skew来控制useful-skew,这里讲讲如何控制最大的insertion-delay (ID)。注意这里的ID 不是

图片

中的意思,而是指

图片

中的意思。在理解本节之前,需要理解之前讲过的CCOPT的三步骤:

图片

为了简单理解,我这里举个例子:

图片

首先看第一个变量:

图片

这个变量用于控制后面所有的insert_delay的基准值。下面说的基准值都以该值为false为参考。true: 采用的是clustering之后的max-ID,1nsfalse: 采用的是balancing之后的max-ID, 1.5ns其次看第二个变量:

图片

指做完implementation之后,所有group的最大的ID不能超过2ns+0.3=2.3ns

图片

指做完implementation之后,SGA的最大ID不超过1.5+0.3 = 1.8ns注意这个变量要比下面的factor的优先级高最后看第三个变量:

图片

指做完implementation之后,所有Group的最大ID不能超过2ns*1.2=2.4ns

图片

值做完implementation之后,SGA的最大ID不能超过1.5*1.2=1.8ns注意上面这些变量只控制max-ID,至于控制最小ID的property,是个隐藏变量,我这里就不说了。上面提到了控制最大ID,还有类似的property:

图片

等这些同样控制着最大ID,这里我也不甚了解,大家也没必要去知道,留给RnD吧。

图片

下几节开始准备讲讲SI/OCV等timing相关知识。关于从floorplna->place->CTS->route 就现在就讲这么多了。基本的用法看看help应该就能了解。还不清楚的可以提出来共同学习学习。 本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。

上一篇:抖音短视频剪辑剪映制作方法.ppt
下一篇:一张图:波罗的海指数因海岬型船运价上涨连续第二天上涨