拾陆楼
资深ICer,IC技术圈成员,拾陆楼知识星球与CSDN创作者
展开
-
STA:延迟为什么会有负值?
这个问题就是典型的SI问题,受SI影响,与hold 分析而言data path上的Delta delay就是负值,抵消掉cell delay,在不展开path的情况下看到的incr一栏显示的就是负值了。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?原创 2024-07-08 08:59:35 · 109 阅读 · 0 评论 -
pvt对net delay的影响
这个其实是个误区,相同RC corner情况下我们看report_delay_calculation -from -to去报告net arc看net delay时,因为不同的pvt导致driver和loader的pin cap发生变化,所以报告中能清楚看到变化和不变的数据。wire cap/total res / wire total RC没有变化(意味着spef相同,既RC corner未发生变化)pt中在同一个corner下的net的为啥在min和max的情况下读RC值是不一样的呢?原创 2024-06-04 17:21:00 · 246 阅读 · 0 评论 -
report_timing报告里的& + *等反标symbol释意
2) +代表lumped RC反标,这是set_resistance或aet_load产生的。详细信息可以看下面问答内容,如果出现别的符号就需要注意,检查reoport_annotated_parasitics -check或read_parasitic -verbose。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?(知识星球是一款付费学习平台)1) &代表spef RC反标,read_parasitic。原创 2024-02-29 14:50:33 · 384 阅读 · 0 评论 -
Report the POCV Coefficient and Derating
要显示POCV信息,包括POCV coefficient 和distance-based derating信息,需要使用report_ocvm -type pocvm命令(report_ocvm命令不需要update_timing,可以在update_timing之前执行此操作)。PT报告会默认使用3 sigma去计算报告时序,可以通过timing_pocvm_report_sigma去改变,这个option值影响报告,不需要update_timing。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?原创 2023-12-25 15:34:14 · 1067 阅读 · 0 评论 -
PT/ICC2:如何设置默认的报告精度(significant digits)
set_app_var report_default_significant_digits 4能控制report_timing的精度,对应ICC2的命令是set_app_options -list {shell.common.report_default_significant_digits 4}提问: 楼长,问下pt命令report_timing返回的数值精度是小数点后四位,为啥get_timing_path slack返回的精度是小数点后六位,怎么能让后者返回也是四位精度呢。原创 2023-12-05 15:38:56 · 428 阅读 · 0 评论 -
PT读spef报PARA-006如何解决?
我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?原创 2023-12-02 07:45:53 · 222 阅读 · 0 评论 -
PT里如何针对某个模块设置false path
如题,这个问题实际上讲的是get_cells的用法,我们要抓取某个模块内的全部cell,在ICC2里可以get_flat_cells xx/xx/module_name*,但是PT并不支持这个命令,尤其是需要将命令写到sdc里时,get_flat_xx也都不作用了。这里需要用到get_cells,举例来说,如果在PT里不想分析xx/xx/A模块内部的所有path,需要用到set_false_path命令。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?原创 2023-11-27 22:01:42 · 438 阅读 · 0 评论 -
间歇性工作的时钟波形的sdc约束怎么写
答:按照最小周期写即可,只看active的部分,至于非active部分是clock gating关断的部分,不需要理会。如下图,紫色部分波形间歇式工作,如果要写约束应该怎么写?我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?原创 2023-11-14 17:08:15 · 157 阅读 · 0 评论 -
pcie的floorplan与mbist timing violation
mbist clock时序违例,*go reg*为start points的vio,往前查,做endpoint能找到sram,每组*go reg*对应一个sram,调fp,把一组sram换到与violation path endpoint更近的位置。其原理是每组mbist controler需要放置在一起,这样相关的时序检查才能更容易met。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?原创 2023-11-08 11:24:33 · 164 阅读 · 0 评论 -
pcie对phy的skew要求
3)此时只有少数clock skew不满足要求,可以在每个sink连接的最后一级mux的输入pin上插buffer,也可以把剩余的clock 对应短的需要垫长的clock path整理在一起,分析clock path上的common point,在这里垫buffer。1)这里设计多个clock,但目标sink 只有四个,分析以后发现在sink点前有一串的mux组合,用来区分不同的clock。pcie的设计中有这样一条要求,所有但phy/tx*_clk pin的clock skew要小于skew要求。原创 2023-11-08 11:21:11 · 413 阅读 · 0 评论 -
ICC2与PT端口时序上的差别
你好,我想问一下就是之前一直遇到一个情况:INtoReg的path_group的时序报告,ICC2里launch的clock network delay(propagated)会有一个值,skew就很小。同理Reg to Out在PT也是capture的clock network delay(propagated)为0,从而出现setup的违例。但是到PT里launch的clock network delay(propagated)就会为0,skew就会很大从而出现Hold违例。原创 2023-11-08 11:07:43 · 436 阅读 · 0 评论 -
用长tree方式做等长线
1)写一个sdc,把等长线的起点设置成clock source,用于创建create_clock,至于period和waveform等参数随便写即可。然后clock_opt -from build_clock -to route_clock即可。3)在正式cts之前或之后,给自己创建的scenario长tree并don't touch。前面讲过了如何用set_data_check做等长线,这里再讲一下如何用cts的方式做。2)为该clock创建一个新mode,并创建对应的scenario。原创 2023-10-24 14:06:32 · 307 阅读 · 0 评论 -
如何用set_data_check做等长线
比如这里想限制skew在0.3ns内。常常会遇见2out的多个信号需要做等长,下面分享一个脚本。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?原创 2023-10-17 09:06:19 · 894 阅读 · 1 评论 -
后端笔试题(2)分频器波形图
我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?原创 2023-09-04 16:36:47 · 957 阅读 · 0 评论 -
解决crosstalk的方法及原理分析
NDR限制高层绕线,使用宽金属,都是增加面积来降低电阻,电阻降低后可以减小线上负载(即延迟),同样的transition也会降低(.lib output transition的查找表与input net trans和output load相关)。另外增加受扰线driver的驱动强度,降低receiver的驱动强度都是直接影响transition,减小timing window overlap的方法。C是电容,k是介电常数,受极板材料影响,S是相对面积,L是极板间距。原创 2023-09-01 13:59:39 · 1287 阅读 · 0 评论 -
Clock Domain Crossing(CDC)跨时钟域
我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?跨时钟域(CDC)指的是信号由一个时钟域进入另一个时钟域,以下图为例。● F1属于clk1时钟域● Q1属于clk1时钟域的信号● F2属于clk2时钟域● Q2属于clk2时钟域的信号● Q1对于F2来说是异步信号● Q2对于F1来说是异步信号所有连接在clk1上的时序电路是同步的,组 成clk1时钟域所有连接在clk2上的时序电路是同步的, 组成clk2时钟域。原创 2023-08-24 10:26:27 · 860 阅读 · 2 评论 -
pvt corner / rc corner
我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?原创 2023-08-18 10:39:37 · 638 阅读 · 0 评论 -
Cworst_T中的“T“代表什么意思?
t是tighten代表更紧的rc取值范围,Cworst_T采用的是1.5 sigma,而Cworst用的是3sigma,所以_T的rc比不带_T的小,但fab为了让hold保守些,只推荐setup带_T。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?原创 2023-08-21 09:36:39 · 1133 阅读 · 1 评论 -
DFT笔记 DC/AC mode与Func
DFT scan可以分为DC和AC两种,区别如下图。原创 2023-08-16 08:28:13 · 2604 阅读 · 0 评论 -
pipeline和retiming
一個简单的例子,例如我们做一個乘法器,需要20ns,但是我们要跑100M,而且每一T都有输入,这个時候我们就可以把乘法器切成两個stage,1T 算一半,总共用2T来算,但是每一T都可以有值输入,下面code中 F1,F2 就是一半的乘法运算,但是怎么切一半就是困难的地方的,pipeline是把combination 拆成多個,中间插入FF。当然,現在synthesis 进步很多了,這句话在有些时候已经不成立了,但是,大多数的时候,Retiming 还是针对pipeline 做优化。原创 2023-07-26 14:25:25 · 837 阅读 · 0 评论 -
innovus中phase shift是如何计算的?
如上图,此时endpoints的寄存器编程trailing edge采数据了,setup最短的时间差发生在CE=9ns,而LE=8ns的情况下,又因为E1是trailing edge,L1是leading edge的缘故,E1=3ns,L1=0ns,phase shift=-2。,在上图例子中,CE和LE都在0时刻,且C1和L1都是leading edge的缘故,hold检查是phase shift=0,也就是我们常说的hold是同沿检查。如下图,相同时钟“CLK_W_3”,都是leading edge。原创 2023-07-24 11:03:55 · 1057 阅读 · 0 评论 -
leading eage和trailing eage指什么?
在create clock时需要指定-waveform edge_list选项,这两个值代表一个时钟周期内时钟波形的上升沿和下降沿的时刻,我们叫这两个沿为leading edge和trailing edge,代表一个周期内波形第一次变化和第二次变化,不用-waveform选项的话,leading edge就在"0"时刻,trailing edge就在一个周期的中点,即duty cycle为50%。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?原创 2023-07-24 09:06:42 · 1198 阅读 · 1 评论 -
timing报告中的半周期现象
遇到phase shift是半个周期的问题多数是endpoint寄存器是下降沿触发的原因,举例来说,一个正向时钟周期的开始是0-1的跳变,下一个周期的开始也是如此,所以计算上升沿触发的寄存器的周期就是完整的周期值,而下降沿触发的寄存器就要在半周期也就是1-0的时候触发跳变,phase shift就是半个周期了。而ck pin的rise还是fall是固定的,这涉及寄存器是上升沿触发,还是下降沿触发。这个rise/fall指的是end/D pin和 start/Q pin。原创 2023-07-17 10:46:34 · 404 阅读 · 0 评论 -
静态时序分析: update io latency
innovus中update io latency则体现在timing报告的source insertion delay和arrival time上,所以post-CTS的报告arrival time是从负值开始的。需要注意的是block level需要设置update io latency为true,但是top level则要设false,因为top level外部没有时钟树。在ICC2中,update io latency只体现在in2reg与reg2out的timing报告里,这个功能是默认常开的。原创 2023-07-04 10:52:47 · 1139 阅读 · 0 评论 -
PT:dmsa时序与session时序有出入问题
最近遇到一个工具bug,在remote_execute {report_xxx}报告session时序前后去报告dmsa的时序会有出入,之所以发现这个问题是因为在报告session时序之前先报告了dmsa的global timing和r2r时序,然后在session时序报告后又报告了dmsa的report_constraints,结果时序violation对不上。最后解决是把dmsa报告时序命令都移到remote_execute {report_xxx}报告session时序之后。原创 2023-06-26 13:59:08 · 585 阅读 · 0 评论 -
如何看report_crpr的报告?(CRPR与SI的关系)
就像上面说的,setup非同沿检查,这部分SI的影响要保留,报告里path delay的计算已经包含这部分值了,那crpr的值不需要再计算SI的影响了,这里clock reconvergence pessimism(crpr)的值就是report_crpr里的"Static"的值,而hold同沿检查,common path上SI影响要剔除,所以crpr的值就要包含SI的影响,clock reconvergence pessimism(crpr)的值就等于report_crpr里"Dynamic"的值。原创 2023-06-14 13:05:19 · 732 阅读 · 0 评论 -
create_clock root在多个port上合理吗?
这种行为可以理解为,顶层的时钟通过多个port进入block,工具应该把他们设成一个group,如果没有就需要手动设置到一个group里。正常的做法是只定义一个root,或者定义多个时钟,然后设置成一个clock group。先说答案,合理,但最好通知前端改代码。原创 2023-06-11 15:29:41 · 286 阅读 · 2 评论 -
max delay的应用场景与常见问题
需要去掉-ignore_clock_latency option或者删除derive_clocks命令。这时候就需要reset_paths命令,或者set_max_delay -reset_path。max delay与min delay用来约束start points到endpoints点对点的路径长度,set_max_delay约束最大值,set_min_delay约束最小值。max delay的-from和-to并不局限在get_pins,get_cells和get_clocks同样可以。原创 2023-06-05 11:04:49 · 1863 阅读 · 0 评论 -
讨论func与scan分开长tree的局限性
当func clock的root都定义在mux前面,分开长tree有助于做短func tree,减少clock buffer,但当部分func clock的root定义在其他clock后面,如下图,分开长tree就会导致scan clock产生很大的skew,从而引起hold violation。debug此类问题,注意观察guide buffer的名字,这里mux后有一个"bid" buffer,其意思为分隔ignore pin,进一步检查发现后面bclk的时钟。原创 2023-05-10 18:02:45 · 877 阅读 · 3 评论 -
PT:顶层时序收敛二三事
2) 改用.v+.spef之后,随之而来的是大量的violation path的debug,例如,block内的异步时钟,block 内的分频时钟,通通在顶层是同步的,且没做分频处理的。实际上这条展开看是block内的时钟的reg2reg,如下图。我司的前端习惯综合block时把create clock做成异步,于是做顶层的STA timing signoff时只读block的.db,从来不用block的.v和.spef,最近一个项目,前端换成了调皮的老外,挖了不少坑,特此纪念。原创 2023-04-24 10:28:03 · 372 阅读 · 0 评论 -
关于近期Fix Transition Violation的反思
关于近期项目中时序收敛暴露出来的问题,写了这篇文章。原创 2023-03-15 14:35:33 · 1116 阅读 · 2 评论 -
stop pin/ignore pin/exclude pin/float pin
stop pin、ignore pin、exclude pin、float pin的区别原创 2022-12-22 13:41:06 · 4656 阅读 · 7 评论 -
POCV/SOCV 、LVF的差别
1.POCV与OCV、AOCV为了模拟片上PVT的差异带来的影响,最早提出了OCV(On Chip Variation)给每个cell都设置一个固定的derate值,来覆盖最悲观的情况,但是随着工艺发展,设计规模增大,OCV过度的悲观开始限制性能,于是又有了AOCV(Advanced On Chip Variation),用基于depth和distance的derate来取代单一的全局的derate值,但时序收敛的过程中逻辑级数depth的变化让时序分析的时间变得非常长,由此POCV诞生了。POCV原创 2022-12-13 15:10:35 · 3301 阅读 · 0 评论 -
internal power与switching power
动态功耗指输入或输出引脚跳变产生的功耗,可以分为两部分,internal power与switching power。1.功耗组成internal power分为短路功耗和内部开关功耗。短路功耗主要由pmos和nmos晶体管同时导通产生的,内部开关功耗则由输入跳变,内部电容充电产生。switching power是由输出负载的充放电引起,所以其大小与单元类型无关,只与输出电容负载,开关频率和供电电压大小有关。2.lib文件中的功耗定义当输入变化时,即使输出没有产生变化,也可能有动态功耗,原创 2022-12-05 16:12:30 · 3920 阅读 · 0 评论 -
静态时序分析—时钟偏斜(Clock Skew:Global Skew与Local Skew)
Clock Skew的分类与分析原创 2022-08-24 09:59:54 · 2471 阅读 · 3 评论 -
静态时序分析—虚拟时钟(virtual clock)与I/O延时约束
1.什么是虚拟时钟?虚拟时钟(virtual clock)是存在但没有clock source(pin/port)定义的时钟,仅作为输入输出端口延时约束的参考时钟。定义方式如下例:create_clock -name virtual_clock-period 10 -waveform {0 5} ;#虚拟时钟不需要[get_pins /get_ports],不加waveform默认50% duty cycle。所以加不加-waveform {0 5}效果是一样的。与虚拟时钟相关的端口约束为se原创 2022-11-21 16:19:15 · 3886 阅读 · 0 评论 -
静态时序分析(STA)基本概念
静态时序分析中常见概念(fasle Path,multicycle path等)原创 2022-10-25 09:36:17 · 1488 阅读 · 0 评论 -
静态时序分析—时钟延时(Clock Latency)
静态时序分析(STA)—时钟延时(Clock Latency)原创 2022-10-24 10:52:03 · 4557 阅读 · 0 评论 -
静态时序分析—脉冲宽度检查(Pulse Width Check)
min pulse width直译为“最小脉冲宽度”,脉冲宽度检查用来确保时序单元输入引脚的脉冲宽度满足最小要求。如果时钟引脚上的脉冲宽度小于指定的最小值,时钟可能没有正确的锁存数据。1.约束方式1)sdc (ICC2)set_min_pulse_width -low/-high 2.0 [get_clocks clk]2)timing library2.计算方法脉冲宽度检查分为高电平和低电平脉冲宽度检查两部分。1)高电平脉冲宽度检查close edge clock la原创 2022-10-17 12:59:18 · 5061 阅读 · 0 评论 -
静态时序分析—时序借用(Timing Borrow)
时序借用(timing borrow)又称周期窃用(cycle stealing),利用的是锁存器(latch)电平触发的特性,当锁存器信号未锁存时,锁存器进入透明状态相当于缓冲器(buffer),这里透明状态前后的时钟沿就被称为打开沿(opening edge)和关闭沿(closing edge)。在reg2reg的setup时序分析时,数据在时钟有效沿到来之前就要准备好了,但是如果使用latch的话,在latch透明状态时数据是可以晚一点到的。相当于借用了下一周期的时间,但这样会让下一级检查latc原创 2022-10-11 12:01:26 · 2731 阅读 · 0 评论