后端面试--每日一题(028)
假设一个设计的function SDC中有多个时钟,在scan mode下,另有一个单独的scan clock,如果functional的各个时钟树之间是不平衡的,请问如何平衡那个scan时钟?
难度:4
现在的mcmm/mmmc流程可以自动做这个事吧。
手动的话,在scanmode把各个mux设置sync pin,指定其delay(得自func report),不知道是不是这样?
mcmm 好象还不支持CTS
能否在始终delay短的时钟上加delay!
MMMC还不支持MMCTS
2楼说的手动的作法是一个可行的做法,就是在CTS spec中,同时定义function 和 DFT 的时钟,然后在scan clock里面,把MUX设为leave pin,再让它们与function clok到MUX的延迟做动态平衡。
ICC已经支持mmcts啦!
NB啊!
ICC 的哪版支持mmcts了呀?
2010.12?
在icc流程,cts时不分mode ,在clock spec file中把需要的时钟都定义出来,需要blance的设blance group,应该可以了。
貌似从10.03开始就支持了。不过还不是很理想。10.12我没试过,想来应该会有所提升吧。
顺便请教大家一个问题:
正如题目中所说,有两个mode。而function mode 中和test mode中分别有clk1(func),clk2(test)。这俩clock实际上只是频率不一样,其他的诸如source之类都是一样的,那么应该怎么处理他们比较好呢?(都写在一个clock spec file里显然不行。
我认为可以认为是一个clock,写在clock spec file里。就可以了。
实际上,cts与频率没关系,如果非要拉上点关系的话,频率影响trans time
楼上说的有道理。目前我想到的方法有两个,一个就是如楼上所说,只做一个tree。后面步骤再分开优化时序(其实我觉得完全不用管那个频率低的。)第二个就是按照mmcts的流程来。
就是一直不知道大家怎么处理这种问题,所以拿出来请教下,嘿嘿
12 楼说的没错,cts和频率无关。如果两个时钟,完全一样。那么其实你cts做两遍这个时钟也没关系的。因为在encounter里面一定会报:有一个已经被优化过了。
10楼说的,在做cts的时候开mcmmcts,我不是很理解为什么要在cts的时候开mcmm.
当然2010版本以后的icc已经支持开mcmm的cts了,不过我还是倾向于不开。原因如下:
1:我们做cts的原因是什么,是为了让skew尽量变小,这样对于setup和Hold会有好处。会让快速时钟跑的更快。同时优化holdtime的时候,所花费的面积会更少。
那么我们要分清楚,我们需要让什么样的时钟变快,需要花费什么样的面积。
我们需要让我们的fun mode下的时钟尽量快,在此情况下,让其他mode下的时钟skew尽量好,这样优化setup和Hold花费的面积就会少。
所以,优先级最高的是fun mode下的时钟。开mcmmcts,对于fun mode和dft mode下当然都会有好处,但是,正如凡事儿有利必有弊一样,他一定会损害到fun mode下的 skew。从而导致了你的fun mode的时钟跑不快。至少跑的没有只开一个Mode下的快。
所以我是不赞成开mcmmcts的。
还没有研究ICC的MMCTS,不做评论
有一家英国公司AZURO,做CTS很牛,早就支持MMCTS了,而且可以设定优先级,防止function CTS变坏。
同样的设计,用他们做出来的CTS,insertion delay比Encounter的小1/3,clock buf少1/3以上
请问下小编你说的把mux设为leave pin,那么这里的leave pin是什么意思呢 ?
应该是LEAF pin 吧,呵呵
请教陈总,1. 将mux的的scan clock input端设成leaf pin,然后与func clock到mux的delay做动态平衡,在encounter中是把spec用dynamicMacroModel来设置吗?
DynamicMacroModel refMUX/func_A pin MUX/scan_B offset 0
2.如果在spec中写成如下:
AutoCTSRootPin func_clk
...
AutoCTSRootPin scan_clk
...
PreservePin
+ MUX/scan_B
将mux的scan clock input端设置成preserver pin,在spec中先定义func clock,后定义scan clock,这样顺序来做cts可以吗?或者说这种preserve pin做法和动态平衡有什么差异呢?
谢谢陈总先。
1)正确
2)没试过,好像要先做func_clk,再preservePin做scan_clk
如果是多个func clock,都在mux之前balance delay,但是这几个func clock不是同一个group里面的。这样在mux之后的scan clock delay在不同mux(func1/scan,func2/scan...)并不一样,可能skew会大。这样scan clock会有timing问题,该如何解决呢?谢谢陈总。
setup可以通過降速解決,hold要加luckup latch
请问在ICC里面怎么实现同样的功能呢谢谢
请问他们都是通过什么手法做CTS啊?不可能是常规途径吧--
good thing , thanks