微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC后端设计交流 > PT中 clock network delay(propagated)过大的问题

PT中 clock network delay(propagated)过大的问题

时间:10-02 整理:3721RD 点击:
我在做一个双通道时间交织ADC数字后台校正的模块,主时钟400M,分频产生两个相位差180度的200M时钟送给两个子通道模块,分别处理两个通道200M的数据,最后用MUX把处理后的两通道数据合成一个400M的数据输出。DC,PR(Encounter)里的时序都过了,但PT确差好远。看了一下PT的报告,里面有一个 clock network delay(propagated) 的值很大。400MHz时钟周期2.5ns, clock network delay(propagated)为0.25ns左右,还能接受。200MHz时钟周期5ns, clock network Delay(propagated) 却有2ns左右,导致PT报告里一堆Violation。我看了另一个小组一个SMIC-180nm,100MHz时钟的项目的PT报告,里面只有一个很小的Violation, 它的clock network delay(propagated) 值也只有0.5ns。
我们用的是SMIC-130nm的工艺,之前碰到时序不满足的问题,我一直是用流水线设计拆分逻辑插寄存器的办法解决的。但现在已经插到头了,好多时序违例的地方就一个减法运算或都MUX选择,不知道再怎么拆了。所以我现在的思路就是想办法把clock network delay(propagated)这个值做小。我把后端流程跑过好多次,改过DC里的clock uncertainty,PR里CTS的约束,还有CTS 后优化的clock uncertainty,还改过PR版图的面积。这个clock network delay(propagated) 确实有变化,有时大有时小的,最小的时候1.3ns左右,大的时候2.2ns左右。找不到什么规律,不知道这个主要是受什么影响,每次感觉都是撞运气。在1.3ns时,时序还违例0.5ns, 就是说如果能把这个clock network delay(propagated)做到0.8ns以内,PT的时序就能满足了。
我查了一下clock network delay(propagated),是芯片内部clock到触发器之间的延迟,这部分包括PR里做CTS时插入的BUFFER,所以就是skew太大造成的插入BUFFER太大太多。那我要做的就是要降低skew,但这个要在后端的哪一个步骤里具体怎么操作呢?
学业不精,很多不懂,但项目月底要流片,时间很紧,PT过不了,急得不行。希望大家帮我分析一下。

place时,控制FF/RAM的位置,越集中越好
CTS时,合理的clock skew/transition/latency设置

CTS后检查一下生成的clock tree,看级数是不是太多了? 如果级数太多的话,改一下时钟树的约束,MaxNumLevel设小一点。
PS:我是菜鸟,仅供参考

陈版,我的MEM/FF位置确实不集中啊,分成三块,分部在版图的上中下。这个怎么让它集中呢?我感觉是因为我的IO位置问题,因为模拟那边要我把一部分MEM输出放在TOP上,另一部分放到BOTTOM上。我是不是要去跟模拟那边商量一下,MEM的输出IO尽量放在一起?还有就是你说的CTS时注意SKEW,TRAN,LATENCY的设置。在Encounter里是不是修改下面这个CTS之前生成的Clock.ctstech文件?
我在里面找到了SKEW,和 TRAN,如果是修改这个文件, LATENCY去哪修改?还有我的这个CTS文件设置有什么不妥的地方吗?
#------------------------------------------------------------
# Clock Root: clk_400M
# Clock Name: clk_400M
# Clock Period : 2.5ns
#------------------------------------------------------------
AutoCTSRootPin clk_400M
Period2.5ns
MaxDelay2.5ns # default value
MinDelay0ns# default value
MaxSkew200ps # set_clock_uncertainty
SinkMaxTran400ps # default value
BufMaxTran400ps # default value
BufferCLKBUFX12 CLKBUFX16 CLKBUFX3 CLKBUFX4 CLKBUFX6 CLKBUFX8 CLKINVX12 CLKINVX16 CLKINVX3 CLKINVX4 CLKINVX6 CLKINVX8
NoGatingNO
DetailReportYES
#SetDPinAsSyncNO
#SetIoPinAsSync NO
#SetASyncSRPinAsSyncNO
#SetTriStEnPinAsSync NO
#SetBBoxPinAsSync NO
#RouteClkNetYES
#PostOptYES
#OptAddBufferNO
#RouteTypespecialRoute
#LeafRouteTyperegularRoute
ThroughPin
END

调整floorplan是让MEM/FF位置集中的最好办法

AutoCTSRootPin clk_400M
Period2.5ns
MaxDelay1.5ns # 依FF的个数而定
MinDelay0ns# default value
MaxSkew200ps # set_clock_uncertainty
SinkMaxTran200ps # default value
BufMaxTran200ps # default value
BufferCLKBUFX12 CLKBUFX16 CLKBUFX8 CLKINVX12 CLKINVX16 CLKINVX8
NoGatingNO
DetailReportYES
#SetDPinAsSyncNO
#SetIoPinAsSync NO
#SetASyncSRPinAsSyncNO
#SetTriStEnPinAsSync NO
#SetBBoxPinAsSync NO
RouteClkNetYES
PostOptYES
OptAddBufferYES
#RouteTypespecialRoute
#LeafRouteTyperegularRoute
ThroughPin
END

谢谢陈版,我去研究下怎么做FLOORPLAN

谢谢啊,我去看一下怎么检查CLOCK TREE的级数和修改MAXNUMLEVEL。

小编您好,看到你把ctsspec里面的transition由400-〉200变小了,这样的话,clock上的buffer级数就会越多吧,如果考虑
OCV,timing岂不是更差?但这样也有好处cell delay会变小,可能有利于clock path的delay
感觉这个需要测试它们之间的trade-off?

小编您好,看到你把ctsspec里面的transition由400-〉200变小了,这样的话,clock上的buffer级数就会越多吧,如果考虑
OCV,timing岂不是更差?但这样也有好处cell delay会变小,可能有利于clock path的delay
感觉这个需要测试它们之间的trade-off?

需要测试它们之间的trade-off



可以只使用反相器不使用buffer作为reference,latency和skew会好点

陈版,我按你帮我改的Clock.ctstech文件设置跑了一次,比我平时跑的小了一些,到1.4了。但还有0.3ns左右的SLACK,你们说的那个trade-off是什么意思啊?怎么去测试这个TRADE-OFF?

恩,好的,我试试!

加大和减小transition,看看insertion delay是否会有变化,选个你喜欢的

加大和减小transition,看看insertion delay是否会有变化,选个你喜欢的

小编前端后端通吃,还说学业不精,我等汗颜!

你好,我现在在看这个双通道时间交织ADC,请问你有一些这方面的文档没?有的话 能发我一下吗? 感激不尽

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top