- 博客(69)
- 收藏
- 关注
原创 sdc命令——set_data_check介绍
如普通的D触发器,constrained pin D和related pin CK就是这样的检查关系。所以,工具在检查timing的时候,都是根据这种约束去检查的。有没有发现data1和data2默认的setup检查时同沿检查,而hold是data2前一个cycle的。这个正是set_data_check与普通的D触发器的timing检查不一样的地方。可也看到,这个命令可以将两个信号设置setup和hold的检查。那么,有的时候要求2个data信号也像D触发器的D和CK一样,检查它们之间的先后顺序。
2025-12-25 11:14:47
9
原创 从后端角度浅谈抗辐射设计----三模冗余(TMR)
三模冗余设计(TMR),是最常用的一种容错技术,三个模块采取相同的操作,以多数相同的输出作为表决系统的正确输出,即3取2,因为三个模块是相互独立的,而其中两个模块同时出错的概率是极小的,因此便可保证系统输出的可信度。然而这个设计也会存在面积浪费,功耗的增加,而且由于是冗余的设计,在后续进行综合或者pr的时候会被工具优化,因此需要对模块进行don’t touch设置;通过增值表得到,逻辑关系表达式为:Q=(Q1&Q2)|(Q1&Q3)|(Q2&Q3),通过工艺库的stdcell进行搭建,得到如下电路。
2025-12-15 14:37:38
67
原创 get_ccopt系列命令介绍(三)
总而言之,该命令是通过graph获取clock tree上的连接关系。通过该命令,能够方便地获取clock tree上各个cell/pin的连接关系图。下面,出个一个思考题,大家可以尝试一下: 如何判断skew group A下面,插入最少的和最多的balance cell的sink?如要获取某个pin后面sink,如果加了-skew_group选项,则会将不属于指定skew group的sink全部剔除。该命令为clock tree图形结构,获取clock tree上前后级的连接关系。
2025-12-05 17:50:20
24
原创 如何在pt中确认unconstraint path的原因?
按照优先级顺序分别是:set_disable_timing、set_false_path、set_max_delay/set_min_delay、 set_multicycle_path。1、对于端口上的timing,如对于一个in2reg的timing path,如果漏约束set_input_delay信息,工具缺少端口上的delay。因此,在报某条timing path时,如果碰到以上几个命令作用在该timing path上的某一小段,均会造成timing path无法被正确报出来。
2025-11-27 09:57:00
52
原创 TSMC 28nm EFP.Mx.S.1 DRC该如何fix
在进入小工艺设计时,芯片制造会变得异常复杂,对我们版图设计的要求也越来越高了,对应的design rule也变得繁琐起来,甚至有些drc问题在techlef中可能无法完全体现出来,只能通过calibre查pattern后才能将错显现出来。第一种:通过观察发现这些drc错基本上都是出现在FA1D1BWP7T35P140这个cell上,尝试使用size cell,可以将大部分错解掉,但是这样会浪费较多面积,提升功耗,对于density大的设计不友好,不建议采用。表2 EFP.Mx.S.1相关描述。
2025-11-11 16:22:54
81
原创 get_ccopt系列命令介绍(二)
本文给大家介绍一下get_ccopt_skew_group_delay的用法,该命令用来获取clock path上的delay值,如可以获取指定skew group指定sink的delay值。有的时候,在preCTS阶段,如果设置了一些pin上有virtual delay,在计算clock latency的时候,会将这个virtual delay计算进去。通过该命令,可以获取某个skew_group下的skew有多少,即抓取skew_group下delay最长的sink和最短的sink,计算其差值即可。
2025-11-04 13:49:08
49
原创 get_ccopt系列命令介绍
get_ccopt_property:用来获取cts阶段,clock tree上所有的参数信息,可以通过get_ccopt_property –help *获取所有参数。get_ccopt_skew_group_delay:用来获取skew group的相关信息,可以通过筛选出特定条件下skew_group的参数,如skew_group下latency最长是多少;get_ccopt_clock_tree_source_groups:获取clock tree的source group名字;
2025-10-28 14:10:59
64
原创 从数字后端角度谈谈occ电路(二)
从图中,我们可以清晰的看出,当scan_en为1时,test mode为1时,经过一系列逻辑单元后,得到clk_sel输出信号为1,同样可推算fast_clk_en = 0,slow_clk_en为1,此时clk_out输出为slow clk,符合我们预期。在该模式下,是使用slow clock进行scan shift,接着我们开始进行推导;从图中,我们根据逻辑运算可以看出,clk_sel输出信号为0,fast clk en为1,此时通过mux选择,clk out即为fast clk;
2025-10-17 10:23:37
155
原创 clock_tree debug之ctd_win(二)
总之,ctd_trace搭配get_ccopt*系列命令,基本上可以实现cts阶段的debug相关的操作,让debug clock tree的效率更上一层楼。另外,ctd_win也可以提供每个skew group下不同sink的latency分布的直方图。其实,上述的图形界面操作,本质上是通过ctd_trace实现的。另外,ctd_win也支持highlight出某个skew group下,latency最长的sink和最短的sink。同时,我们可以在ctd_win上看到所highlight的path。
2025-10-10 10:05:14
62
原创 clock_tree debug之ctd_win使用(一)
一般来讲,如果出现飞线,代表着飞线之后的sink是同时属于飞线之前的clock的。如下图所示,假如某些case下,导致clock1下reg1 latency特别长,而工具在balance的时候,由于这个latency特别长的寄存器与common reg所在的level数差不多,导致工具balance的时候,只能在clock1/clock2/clock3到common reg中的common path上插balance cell。一般来讲,ctd_win会选择clock latency最大的值,并显示上去。
2025-09-24 10:02:28
108
原创 从数字后端角度谈谈occ电路(一)
摘要:本文介绍了芯片测试中OCC(On-Chip Clock Control)电路的设计与应用。随着工艺进步,芯片制造面临Stuck-at、Bridging和Delay等故障类型,需要不同时钟频率进行测试。OCC电路通过Clock Selection、Clock Chopping Control和Clock Gating三个模块,实现ATE时钟与PLL时钟的切换控制,支持慢速时钟检测Stuck-at故障和快速时钟检测Delay故障。文章详细解析了OCC电路结构及各模块功能,包括同步单元、移位寄存器等关键组件
2025-09-12 14:19:10
301
原创 TCL脚本介绍(九)
如eof $file1,如果文件没有执行到行尾,返回结果0,如果执行到结尾,便返回1。当然,执行完读写命令后,一定要记得关闭创建的文件句柄,否则会造成资源的浪费。如:set file2 [open a w],该操作是对文件a执行写入操作。set file2 [open a a],该操作是对文件a进行追加写入操作,并不会覆盖a原有内容。#对文件a进行读取操作,并将第一行的字符信息赋值给line这个变量。#对文件a进行read操作,并将文件句柄赋值给file1这个变量。下面给大家介绍一下文件的写入操作,
2025-09-02 10:13:38
96
原创 sdc命令介绍——set_clock_latency
那么,在长tree的时候,工具便会将insertion_delay的值考虑进去,memory的clock latency也会长一些。因此,此时clock上的latency为0。但到了cts阶段,由于clocktree变真实了,工具会计算真实的clock latency,由于ocv或者clock skew的影响,timing会变差很多。有时,一些特殊的寄存器或者memory的timing很差,想要通过借clock skew的方式来修复timing的时候,可以用到set_clock_latency这个命令。
2025-08-26 15:56:48
274
原创 Power domain 划分该如何下手
假如PD1比PD3更always on的话,我们只需要插入普通buffer即可,因为PD3 on,PD1也肯定是ON,PD1 off,PD3肯定时off,PD1能cover PD3的电源情况,因此使用普通buffer也可,但是处于省电角度,我们还是使用AO buffer;在我们做多power domain时,在切分power domain时,需要谨慎,稍有不慎,就会出现congestion以及timing问题,那问题来了,我们在切分power domain时有什么考究么,今天小编就和大家一起讨论讨论。
2025-08-15 14:10:08
104
原创 如何分析clock tree spec
但是,在scan模式下,定义在FF1之后的generate clock没有了,因此FF1不再是through pin,需要和 F2/FF3/FF4进行balance。如下图,reg1在func下是产生generate clock的寄存器,但同时FF1和FF2/FF3/FF4有timing check,因此FF1需要和FF2/FF3/FF4做balance。4、默认情况下,工具还会根据逻辑,去额外创建一些skew group,而这些skew group不会和其他skew group做balance。
2025-08-08 10:10:48
123
原创 如何对某个skew group设置指定latency?
通过设置set_ccopt_property –skew_group <group_name> targer_insertion_delay <value>。该命令的解释如下:工具会尝试将该skew group下最长和最短的clock latency控制在(targer_insertion_delay – 1/2 target_skew ) ~ (targer_insertion_delay + 1/2 target_skew )。如下图所示,clock1到mux/I0之间长了1ns的buffer。
2025-07-29 13:38:17
174
原创 如何分段长tree
可以将clock1 tree上所有的cell don’t touch,update一下sdc,将clock2的信息load进来。那么,此时只要将clock1的定义去除,用delete_ccopt_clock_tree_spec将原先已经load的spec删除,然后再次创建clock tree spec,那么此时工具只会生成clock2的spec。cts之后,工具便会生成只有clock2的clock tree。那么,作为思考题,童鞋们可以试试看如何才能实现在mux I0之前长1ns的clock tree。
2025-07-17 10:32:46
330
原创 浅谈innovus Update io latency相关作用
同样我们使用update io latency,工具取launch clock latency负值反标到clock端口上,同时认为capture clock latency与launch clock latency相等,这样可以相互抵消,这样setup time slack = T – Tsetup -Tcomb – Toutput_delay,因此采用update io latency后,reg2out timing path的setup check变得真实些。图3 in2reg示意图。
2025-07-09 16:55:46
240
原创 innovus中如何设置cts参数
上面是设置cts的一般设置,如果需要对某些skew group或者某些clock tree设置不一样的参数,如需要对clk1这个clock设置不一样的inverter,可以使用。需要查询已经设置过的ccopt参数,可以使用get_ccopt_property去查询,方法和set_ccopt_property一致。言归正传,cts的设置命令是set_ccopt_property,获取命令是get_ccopt_property。另外,set_ccopt_property提供一套命令查询方法。
2025-06-17 13:15:19
307
原创 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
326
原创 在innovus中如何设置让信号线打上双孔
经过debug,我们发现从fab厂得到的tlef中缺少双孔定义,这会导致在默认设置下,工具是不会在signal线上用双孔的;为了让设计的芯片良率能得到显著提升,一般在绕线资源允许的情况下,我们会在尽可能多的signal线上打上双孔,然而在进行某个项目的时候,小编惊讶的发现,在数字的layout上一个双孔都没出现,这是为什么呢?从图中我们可以看出,使用high选项得到的via比例能高出不少,所以我们在route资源较为丰富的情况下,为了保证芯片良率,我们可以尽量使用high。图4 双孔via定义。
2025-05-20 17:18:53
320
原创 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
345
原创 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
741
原创 PR网表出现assign该如何解决
那么,通过assign net1=net2,就可以定义net1和net2的连接关系。当项目已经接近尾声,PV,STA都已经跑过,将netlist给到前端工程师进行后仿时,突然反馈到“netlist怎么还有assign”,可能没经验的朋友会有些慌张;然而这些都是候补措施,当发现前端有约束下在hier port上,我们需要及时反馈给前端,看是否可以更改约束,从而从根本上解决问题。当工具在优化过程中,可能会将module1中port2上的逻辑全部优化没了,出现如上图所示的情况,可以通过以下方式解决。
2025-04-22 13:15:30
377
原创 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
372
原创 从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
379
原创 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
1072
原创 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
391
原创 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
150
原创 TCL脚本介绍(七)
前面几篇文章介绍了TCL的一些基本用法和innovus中的指针/collection的获取的用法。同时,这两个指针也会一致,即如果b发生了变化,那么a也会变化。其好处就是,可以直接调用proc函数运行,方便脚本的阅读和编写。那么执行add的时候,tcl解释器会报错,显示没有定义变量a。一般来讲,一些常用到的功能,或者多次调用一些功能,通常都写在proc里面。如果,proc中要想包含不定数的变量,可以使用TCL内置变量args。另外,需要注意,如果没有额外声明,proc是无法调用外部变量的。
2025-02-08 10:02:52
421
原创 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
327
原创 聊聊方块电阻是什么
通过这些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
685
原创 TCL脚本(五)
如inst的各个参数、floorplan的各个参数、net的各个参数等信息。以上是dbget的一些基础用法,其核心就是通过获取不同对象的指针,进而获取更多相关联的信息。如下图,如果想要知道top下有哪些属性,可以在输入dbgettop.后,按一下tab键,innovus就会自动将其属性展现出来。dbget对象.属性1.属性2......,该命令是获取对象中属性1的属性2参数。我们可以直接用dbget来获取这个内存地址的相关属性,输入完如下图所示命令后,tab一下,就可以看到该net的相关属性了。
2025-01-08 10:17:19
409
原创 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
373
原创 面试题整理(三)
这也是我们在看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
195
原创 面试题整理(二)
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
198
原创 常见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
351
原创 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
356
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅