- 博客(50)
- 收藏
- 关注
原创 CTS阶段的sink type的定义
另外,sdc也可以对clock tree spec产生影响,如对某个pin设置了set_clock_sense -stop_propagation,那么工具便在创建clock tree spec,自动对该pin设置ignore。如果有一些特殊需求,需要将某个pin与其他sink做balance,则将该pin定义stop pin,将将该pin加入到需要做balance的skew group中。stop pin:工具考虑这个pin为clock 的sink,并作balance,并停止后续的trace。
2025-06-04 09:41:35
27
原创 在innovus中如何设置让信号线打上双孔
经过debug,我们发现从fab厂得到的tlef中缺少双孔定义,这会导致在默认设置下,工具是不会在signal线上用双孔的;为了让设计的芯片良率能得到显著提升,一般在绕线资源允许的情况下,我们会在尽可能多的signal线上打上双孔,然而在进行某个项目的时候,小编惊讶的发现,在数字的layout上一个双孔都没出现,这是为什么呢?从图中我们可以看出,使用high选项得到的via比例能高出不少,所以我们在route资源较为丰富的情况下,为了保证芯片良率,我们可以尽量使用high。图4 双孔via定义。
2025-05-20 17:18:53
62
原创 Early clock flow
另外,使用ecf,在palce阶段进行clock tree cluster。这是因为,place阶段进行clustering,让工具提前能够看到congestion的问题从而进行优化,这要比在cts优化congestion的效果好很多。下图是ecf的基本流程,先进行initial place,快速将std cell迅速铺开,然后进行faster clock clustering和虚拟balace,再通过ccopt ideal mode进行useful skew修timing。
2025-05-08 16:31:02
98
原创 setup和hold互卡问题剖析
当然,在不同corner下出现setup和hold互卡的情况也是最常见的。那么,一段timing path,如果launch clock latency为10ns,capture clock latency也为10ns,它们之间并没有common path,Data latency为1ns,Clock period为5ns。在计算setup时,launch path的ocv一般都是乘一个大于1的系数,假设是1.2,capture path的derate取0.8。这就变成了setup和hold互卡的情况了。
2025-04-27 15:25:02
103
原创 PR网表出现assign该如何解决
那么,通过assign net1=net2,就可以定义net1和net2的连接关系。当项目已经接近尾声,PV,STA都已经跑过,将netlist给到前端工程师进行后仿时,突然反馈到“netlist怎么还有assign”,可能没经验的朋友会有些慌张;然而这些都是候补措施,当发现前端有约束下在hier port上,我们需要及时反馈给前端,看是否可以更改约束,从而从根本上解决问题。当工具在优化过程中,可能会将module1中port2上的逻辑全部优化没了,出现如上图所示的情况,可以通过以下方式解决。
2025-04-22 13:15:30
133
原创 clock min pulse width检查
高电平脉宽 = clock fall edge到达FF/CK的时间 - clock rise edge到达FF/CK的时间;低电平脉宽 = 下一T clock rise edge到达FF/CK的时间 - clock fall edge到达FF/CK的时间。而required pulse width是根据FF/CK处的transition,根据查找表计算得到的。为什么clock transition越大,会导致required pulse width越大呢?5、 降低clock上的串扰。
2025-03-31 14:34:06
101
原创 从inverter出发了解layout是什么
作为一个数字后端工程师,虽然我们没必要对layout进行十分复杂的处理,但是不意味着我们不需要懂layout,对layout内容有一个较为清晰的理解,这对于我们后期debug lvs以及erc是很有帮助的,话不多说,我们直接进入今天的正题,通过数字最基本单元inverter来增强我们对版图的理解吧!PMOS和NMOS的gate是short在一起,作为input端;从上往下看,首先是p-sub层,这层在layout中一般是不会显示出来的(默认都是以p-sub作为底),因此该层跳过;图2 CMOS器件图。
2025-03-22 14:06:23
83
原创 Clock tree上top、trunk、leaf net含义
Innvovus将clock tree上的net分为了3类。Trunk net指没有连接到sink的net,leaf net指与sink相连的net。Top net指从trunk net细分出来的。如set_ccopt_property routing_top_min_fanout 100,指该net连接的sink的阈值大于100,都升级为top。由于clock的信号翻转特别快,所以clock特别容易有EM且容易产生cross talk。因此,需要对clock net设置ndr rule。
2025-03-12 13:50:25
183
原创 Skew group含义
如果skew很大,大概率是两个寄存器之间没有做balance,可能其中有一个reg被设上了ignore pin。如果一个寄存器存在于skew group1、2、3,skew group1、2的rank为0,skew group3的rank为1。那么这个寄存器只会和skew group3下的其他寄存器做balance,不会和skew group1和2下的寄存器做balance。当然,有些时候工具会额外创建一些skew group,目的是为了把一些特殊的寄存器放在这个skew group单独做balance。
2025-03-08 09:58:43
112
原创 TCL脚本介绍(八)
如下图所示的一个情况,innovus在优化时,认为该generate clock定义的buffer不合理,因此将generate clock改定义到reg的Q端,同时,在reg的q端clone了一堆buffer用来解fanout。将PR用不到的命令注释掉。相对于综合来说,有很多设置是不需要的,如set_clock_latency,set_wire_load_mode等,没看过的童鞋可以先看一下。因为,这些net一般是穿插在其他主命令下的,另外这些命令中经常会带有方括号[],有可能会出现漏抓或者错抓的情况。
2025-02-20 14:18:06
71
原创 TCL脚本介绍(七)
前面几篇文章介绍了TCL的一些基本用法和innovus中的指针/collection的获取的用法。同时,这两个指针也会一致,即如果b发生了变化,那么a也会变化。其好处就是,可以直接调用proc函数运行,方便脚本的阅读和编写。那么执行add的时候,tcl解释器会报错,显示没有定义变量a。一般来讲,一些常用到的功能,或者多次调用一些功能,通常都写在proc里面。如果,proc中要想包含不定数的变量,可以使用TCL内置变量args。另外,需要注意,如果没有额外声明,proc是无法调用外部变量的。
2025-02-08 10:02:52
221
原创 TCL脚本(六)
可以使用-if选项。如下面的案例,便可以获得所有的clock属性的net。get_db和dbget一样,都可以获取各个参数。但是,dbget只能从指针中获取参数,而get_db可以从collection命令中获取一些参数值。如get_pins、get_nets等相关collection参数,get_db可以从其产生的collection再次获取细分的属性。另外,get_db也是支持通配符,正则表达,取反等相关操作的。本文主要和大家讲一下innovus中另外一个collection获取命令——get_db。
2025-01-23 13:27:48
101
原创 聊聊方块电阻是什么
通过这些metal的方块电阻,我们可以在做floorplan的时候,对整体power mesh布局方式(比如走几层金属,金属的宽度和长度,DVDD DVSS之间的距离等等)以及esd clamp的距离(drc rule中有明确规定)有较为超前的把控,避免后期因为ir-drop太高,抗esd能力较差而重新返工。而横截面积S=W * H ,其中W为导体宽度,H为导体高度,因此 R = ρ * L / (W * H),而我们常聊到的方块电阻则是当L=W是得到的Rsq = ρ / H;
2025-01-17 09:39:59
276
原创 TCL脚本(五)
如inst的各个参数、floorplan的各个参数、net的各个参数等信息。以上是dbget的一些基础用法,其核心就是通过获取不同对象的指针,进而获取更多相关联的信息。如下图,如果想要知道top下有哪些属性,可以在输入dbgettop.后,按一下tab键,innovus就会自动将其属性展现出来。dbget对象.属性1.属性2......,该命令是获取对象中属性1的属性2参数。我们可以直接用dbget来获取这个内存地址的相关属性,输入完如下图所示命令后,tab一下,就可以看到该net的相关属性了。
2025-01-08 10:17:19
156
原创 TCL脚本(四)
regexp {[a-z]+([0-9]+)[a-z]+([0-9]+)} output num1 num2,便可以得到output为abc1990def0520,num1为1990,num2为0520。[abc]^d],此时看到匹配框里面有一个],但是由于其之后跟了一个^,]便当作文本处理即abc]d。regexp {[a-z]+} {123abc456} output,便可将abc赋值给output。用法:regexp {匹配项} {待匹配字符} {匹配内容}。下面通过简单的例子,和大家讲解一下。
2025-01-02 10:02:57
259
原创 面试题整理(三)
这也是我们在看lvs报告的时候,会发现很多工具根据版图抽出来的netlist中net名字与pr后的netlist对不上。那么在lvs检查的时候,工具会去检查device A和device B连线的polygon。如果不给port打上text,那么在跑lvs的时候,工具只会检查到device C连了一个polygon,并不会检查到device C与port A有连接关系。所以,需要对PR工具产生的GDS进行merge操作,将std cell或者一些macro底层的gds信息给merge进来,才能跑drc。
2024-12-09 14:17:04
169
原创 面试题整理(二)
d.根据place后的结果,若出现congestion,需要进行部分调整,如针对congestion较严重部分打上partial blockage,降低density,针对一些无用区域,需打上hard blockage。L=N*P/i+X,其中N为两个macro相对的pin的数量,P为layer的pitch值,i为使用的layer的层次,而X为两根power线以及两侧spacing距离;在传统工艺下(40nm以上),macro是可以进行旋转的,但是到40nm后,需要保持poly方向一致,就不能进行旋转;
2024-12-03 10:44:55
157
原创 常见Physical Only Cell有哪些?
工作原理以TieHI为例:由于NMOS的Gate与Drain层短接在一起,可以得到Vg=Vd,即Vds=Vgs,则可推导处Vds>Vgs-Vtn(Vg为gate电压,Vd为drain电压,Vds为drain对source电压,Vgs为gate对source电压,Vth为阈值电压),此时NMOS工作在饱和区,可以当作是开关闭合状态,也可以把NMOS器件当成直导线,因此PMOS的gate接低电平,使得PMOS导通,从而输出为VDD(高电平);TieCell:钳位电压单元,如图6所示,图7所示;
2024-11-26 11:12:07
253
原创 Tcl脚本介绍(二)
另外,如果需要对文本进行更强大的处理,推荐大家使用正则表达式,后续会给大家介绍正则表达式相关内容。需要注意的是,append生成的新文本,不会在2个旧文本之间插入空格。如果$str1在$str2之前,返回-1;如果$str1在$str2之后,返回1。查找$a字符串出现在$b的第一个位置,默认0是第一个位置。#将字符串中某些字段取出来,默认从0开始,最后一个字段为end。string index abcd 1,结果为b。如string cd abcd,返回结果为2。如果相等返回1,否则返回0。
2024-11-20 17:06:14
284
原创 Tcl脚本介绍(二)
另外,如果需要对文本进行更强大的处理,推荐大家使用正则表达式,后续会给大家介绍正则表达式相关内容。需要注意的是,append生成的新文本,不会在2个旧文本之间插入空格。如果$str1在$str2之前,返回-1;如果$str1在$str2之后,返回1。查找$a字符串出现在$b的第一个位置,默认0是第一个位置。#将字符串中某些字段取出来,默认从0开始,最后一个字段为end。string index abcd 1,结果为b。如string cd abcd,返回结果为2。如果相等返回1,否则返回0。
2024-11-13 09:33:13
356
原创 EM是什么?如何修复EM violation?
在相同的电流下,或者说相同数量的电子移动情况下,由于金属线太窄或者太长,大大增加了发生碰撞的金属原子百分比。这么做,可以在相同数量电子移动的情况下,降低发生碰撞的金属原子百分比,从而降低电迁移发生的程度。b.降低drive cell的驱动能力,cell驱动能力越大,cell内部并联的mos管数量也就越多,所以导致电流也就越大。如果金属导体内的电流越大,意味着移动的电子数也就越多。通过减少金属线上的电流,也可以减少发生移动的电子数量,从而降低电子与金属发生碰撞的概率,降低发生碰撞的金属原子百分比。
2024-11-11 09:59:26
847
原创 Timing修复的几种方法之setup
可以看一下floorplan是否合理,或者看一下congestion严重区域是否存在cell density过高的情况,或者局部多pin cell density太高,或者是pg过于密集,影响绕线等。b. SI影响,我们需要在report_timing的时候,将SI的影响打开,检查一下timing报告中是否有net受到SI影响很大。那么这种情况,肯定是前端那边的问题,要么是约束下错了。如果,path是真实存在的,但就是因为data path过长,其latency远大于1个phase_shift。
2024-11-04 15:24:10
517
原创 Tcl脚本介绍(一)
有的时候,需要输出一个带空格的字段,就必须要使用””,如puts “Great Wall”,就不能写成puts Great Wall,否则tcl解释器会将Wall这个字符写到Great这个句柄当中。如2<5这个成立,那么得到的结果就是1,反之为0。应很多粉丝的要求,小编在此开一个介绍tcl脚本的系列专题,结合数字后端的核心eda工具innovus,给大家讲一讲tcl的门道。我们发现a前面多了个$,这个符号是变量置换符号,它会将变量a的值5给取出来,然后再执行5+2等于7,再将7赋值给b。
2024-11-01 16:27:06
412
原创 浅谈setup & hold timing到底是什么
由于延迟的存在,在CLK到达高电平时,TG1和TG4不会立刻关闭,需要经过2td(CLK到达C的时间)后,C’=0,C=1时,TG1和TG4才会完全关闭,TG2和TG3也会开启,如果在2td这段时间内出现数据变化,由于TG1还未完全关闭,这样变化的数据就会传输下去,从而导致我们输出的数据是错误的;从图6中可以看出,假如要让D信号正确传输下去,我们需要保证在C’处于高电平时,Q1’’不能处于X态(必须得到0或1),若不能满足此情况,则Q1’’的X态会在C变为高电平后,传输下去,从而导致输出结果处于亚稳态;
2024-10-22 09:26:23
1436
原创 Endcap作用及其摆放规则
而我们在布局布线时,为了减少面积的浪费,每两个相邻的row中的cell摆放方向都是沿着x轴进行折叠的。而此时, EndCap处于MX状态时,可以看到std cell 的Nwell处于 Endcap的上边。此处的-topEdge是指endcap处于R0时,std cell nwell处于endcap之上,应采用的endcap cell。那么,有的童鞋会问,为什么block附近摆放的endcap是完全相反的?因此,-right_edge便采用nwell在右侧的endcap,即CAPL类型的endcap。
2024-10-21 14:50:31
624
原创 D触发器构成及原理
当CLK=1的状态下,CLK1=0,CLK2=1,FF1处于锁存状态,所以无论D发生什么样的变化,Q1都保持原状不变;当CLK由1跳变为0时, CLK1=1,CLK2=0, FF1解除锁存状态,D值可以传递到Q1端,但是Q2已经处于锁存状态了,所以Q1值传递不到Q2处,Q端保持原来状态不变。当CLK=1时,CLK1=0,CLK2=1,FF1处于锁存状态,Q1保持原来状态不变;然而由于锁存器在EN=1下,Q=D,若D不稳定,产生毛刺的话,毛刺会被传输下去,因此使用D锁存器无法完全避免毛刺。
2024-10-15 13:51:21
1136
原创 Library介绍(四)
timing主要包括cell的input pin到output pin的rise delay和fall delay。图2定义了buffer output pin的相关参数,即buffer Z端的功能和internal power相关信息。图1定义了buffer的一些基本属性、 leakage power值和input pin的相关信息。接下来,我们再看一下时序单元的timing arc是啥样的,以寄存器为例。图5定义了D pin的相关信息和CK到Q的hold timing arc。#小编是一个入行多年的。
2024-10-08 15:42:26
753
原创 Library介绍(三)
那么,便可以通过k库的方式,通过k factor,便可根据tt_1.2v_25c lib生成tt_1.1v_25c的lib。压摆值(slew)是基于库中指定的测量阈值点,通常是根据转换时间(transition time)来定义的,大多数上一代的库都使用10%和90%作为slew的测量阈值点。那么,如果将tt_1.1v_125c的库k到tt_1.2v_115c时,我们可以知道Δprocess= 0 ,kvolt = -0.042,ktemp = 0.0012。即上文所说的k库的参数(见图6)。
2024-09-30 09:03:33
2509
原创 Library介绍(二)
约束时序弧包括setup timing arc、hold timing arc、recovery timing arc、removal timing arc和width timing arc等。其中,combination timing arc主要分为以下三种类型,正单边(如buffer),负单边(如inverter)和非单边类型,见图1。正单边类型,即input信号由0跳转到1时,output信号也由0跳转至1的情况。负单边类型,即input信号由0跳转到1时,output信号由1跳转至0的情况。
2024-09-29 10:42:51
1551
原创 Library介绍(一)
如果选择match_footpring,那么工具根据需要,可以将相同footprint,且替换和被替换的cell具有相同数量和名字的输入和输出端口。通过set_operating_conditions –library 进行设置,表示该design使用了那一个library的参数进行timing、功耗等计算。像buffer的foot print为SCC_BUF(图4),那么工具将SCC_BUF一类的cell都当成同一类型的cell,可以进行swap操作。主要包含了库的版本、日期和注释。
2024-09-27 13:25:41
1052
原创 Postmask eco flow – pr工具相关操作(innovus)
一般在进行postmask eco时,我们是不会动到base layer的,所以是不可以引入新的cell,只能使用预留的spare cell来修改电路,因此它进行修改范围比较局限,一般只会对逻辑进行修改,动到的cell较少;当然eco并不是万能的,不是前端想怎么改就怎么改的,毕竟地方就那么点,想大改功能,仿佛是天方夜谭,这个时候需要我们后端工程师与他们进行battle了,不过也得配合他们去不断改进eco方案(这个过程相当痛苦,小编刚经历过。e. 指定绕线层次,进行ecoRoute。
2024-09-26 13:13:43
1455
原创 跑lvs出现soft connect怎么处理?
如果有soft connect的话,lvs是没法pass的,会发现很多一堆std cell连接了错误的ground信号。那么这个时候,如果设计中涉及2个以上ground时,便可以往这个方向来debug。这里小编提供2种解决方法。第一种,按照图1所示,如果VSS和AVSS最终就是要接到一起的。为了过lvs,可以在VSS或者AVSS下方打上PSUB2,将这两个net的soft connect断开,如图2所示。如图1所示,VSS和AVSS都接到了p+上,它们通过psub便有了soft connect。
2024-09-24 13:58:14
1796
2
原创 viewict小工具使用
上图是ict文件对alpa这一层的描述,里面包含了min_space,min_width,height,thickness,方块电阻等信息。本文给大家介绍一个小工具,能够将ict文件图形化显示的方法。如上图,可以很直观地看到不同金属的厚度,如顶层的alpa_inter为厚金属,可以很明显地看出其厚度要远大于其他金属层的厚度。工程师,本身对编程方面比较感兴趣,在数字后端的脚本、flow上比较擅长,可以为大家提供答疑咨询服务。工具便可以根据ict里面的信息产生qrcTechfile。#小编是一个入行多年的。
2024-09-23 13:19:41
1039
原创 Innovus跑到中途想要更换library怎么办?
其实,每次保存的innovus database里面都有专门存放这些数据的文件。有的小伙伴在跑innovus时,可能会碰到library更新等问题。但此时,place已经跑完了,又不想重新跑,怎么办呢?比如,我们要更新一下lib文件,那么可以到对应的dat文件下的viewDefinition.tcl,去更新一下相应文件。工程师,本身对编程方面比较感兴趣,在数字后端的脚本、flow上比较擅长,可以为大家提供答疑咨询服务。另外,像一些global的设置,都放在*.globals文件下。#小编是一个入行多年的。
2024-09-19 13:20:30
1337
原创 综合时如何计算net delay?
那么,根据上述计算方法,假设一个buffer后面drive了5个cell,那么fanout就是5,根据查找表便可以计算得到net长度为3.5,电阻为3.5*2=7,电容为3.5*1=3.5,面积为0.02*3.5=0.07。有了上面的计算值,也便得到了net的RC。一般,互连线的连接结构有以下三种模型,为了方便理解,图中红色的线代表的net其含有RC,黑色的线的R&C为0。top:该模式下,所有hierarchy下的net都应采用top module下的wire load model,具体如图4所示。
2024-09-18 10:04:12
1939
原创 clock gate为什么不直接使用与门来搭建?
小编想说的是,方案是是可行的。enable1在latch高电平产生的glitch都会被过滤掉,而enable1在latch低电平产生的glitch虽然能经过latch到达enable2处,但是此时由于AND是高电平生效,所以enable2的glitch依然传达不到output clock中。因此,通过这个设计,就可以规避掉glitch的问题。另外,由于AND是在高电平生效的,如果此时enable信号有glitch,那么便会导致output clock也会产生glitch,而这是不被允许的,会导致电路失效。
2024-09-14 15:56:21
1280
原创 Clock Tree为什么要用inverter进行生长?
根据clock定义,我们可以获得clock的波形图如下,其为一个周期为10ns,上升沿分别在0ns、10ns,下降沿在5ns的一个clock。知道了脉宽的概念,那么为什么会有最小脉宽的问题呢?如果,我们采用特殊的clock buffer,foundry会特地将pmos做大一些,确保pmos导通速度和nmos一致,那么也可以做到clock信号经过ck buffer后脉宽不发生改变。我们知道,clock信号有最小脉宽的要求,当clock信号无法满足最小脉宽时,其便不能够准确地发出信号了。
2024-09-13 15:28:39
826
原创 为什么先进工艺需要check那么多corner?
那么hold slack = launch clock path delay + data path delay - capture_clock_path_delay = -capture_clock_path_delay,也就是说,capture clock path delay越大,hold越难满足。而且,我们在设计的时候,一般clock频率都会过约,所以是有较大的margin的。有的foundry还会对rc的取值范围进行了约束,如cworst_T,采用的是1.5 sigma的取值范围。
2024-09-12 15:26:29
1432
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人