EETOP 创芯网论坛 (原名:电子顶级开发网)

标题: 如何减小时钟树 [打印本页]

作者: 糖糖123    时间: 2018-6-5 16:32
标题: 如何减小时钟树
求教,除了设置max_fanout,max_transition,max_skew,以及调用合适的BUFFER,还有什么方法可减小时钟树,如图: ( , 下载次数: 169 )
作者: sgj821    时间: 2018-6-5 16:56
可以用fishbone做tree
作者: bruce0729    时间: 2018-6-5 19:31
减小时钟树,是说想要减小longest path吗?还是只是少塞一些buffer?
作者: sdlyyuxi    时间: 2018-6-5 20:12
1. 用inverter替换buffer长时钟树;2. 长时钟树的cell list中添加些小driven length的cell;
3. 用ccopt引擎长时钟树;
作者: 糖糖123    时间: 2018-6-6 09:52
回复 3# bruce0729


   减小longestpath
作者: 糖糖123    时间: 2018-6-6 10:06
本帖最后由 糖糖123 于 2018-6-6 10:13 编辑

回复 4# sdlyyuxi


   你好,我有几个疑问 1、是直接在cts后找到长路径添加,还是cts之前的cell list中加?2、第三点不懂。谢谢
作者: bruce0729    时间: 2018-6-6 10:16
回复 5# 糖糖123


可以从timing report中,把长得最长的path拿出来分析一下,先看看是什么原因导致这么长,是因为sink的距离太远,导致塞了很多INV、BUFF去解drv?还是说是因为时钟树没有长平?也可以从timing path中分析,塞进去的INV、BUFF是为什么塞进去的,能不能少塞一些进去?
作者: 糖糖123    时间: 2018-6-6 10:43
回复 7# bruce0729
我看了下最长的path,相对来说并没有插入太多BUFFER和INVENTER如图 ( , 下载次数: 168 )   ,sink单元太多,还有就是要少塞BUFFER的话,除了设置transition,还有其他手工干预的吗?
作者: sdlyyuxi    时间: 2018-6-6 11:55
回复 6# 糖糖123
我是以减小整个时钟树cell的面积或平均的insertion delay的角度提的上述几点建议:
1. 在CTS前指定CTS用到的cell list时,添加inverter,另外工具一般有选项,指定CTS时是用inverter还是buffer或者都用。相对于buffer,用inverter的面积和delay都更小。
2. ccopt(Clock Concurrent Optimization),CTS时balance sink的insertion delay变得不再重要,这样应该能省掉一些cell,至于对longest path的影响,你自己可以试试。


另外,楼主最好把你要剪短longest path的初衷说下,有利于发散思维,让别人能提供更多的解决方法!
作者: 糖糖123    时间: 2018-6-6 12:50
回复 9# sdlyyuxi


  是要要求面积和功耗等方面较小。还有就是一般是BUFFER和INVENTER都用,试了如果只用其中一个时钟树会更长。
作者: 糖糖123    时间: 2018-6-6 17:07
回复 2# sgj821


   没有用过,又比较急,能否请教一下
作者: bruce0729    时间: 2018-6-6 21:46
回复 8# 糖糖123


   sink数量比较多,而且分的比较散的话,可以试试看设一些placement constraint,让工具在做placement的时候,尽量不太远,这样或许还有些效果
作者: xingyun620    时间: 2018-6-7 11:25
cts确实比较复杂但是太重要了,说下个人经验:
1. 保证cts的sdc是正确的,比如clock的定义,case_analysis之类的;
2. tree上用ck cell,保证rise和fall的对称性,对skew有好处;
3. 合适的constrain,比如max_transition太大会导致transition压不下去,太小导致cts area面积增加,tree过长等;
4. 分析report,结合longest path, shortest path, 看clock tree structure report,分析有没有balance conflicts,有没有设置错误的balance point等;
5. 结合layout,看是不是floorplan的原因;
6. tree上换用推力强的cell等。

从你的report看,skew都崩了,检查下是不是有冲突的balance点。比如某个reg在某个clock下是balance sink点,在另一个clock下穿过去了之类的,导致无法balance。
作者: 糖糖123    时间: 2018-6-7 14:54
回复 13# xingyun620


   一个时钟树的sink单元太多了,去check每个reg的话不太容易呀
作者: xingyun620    时间: 2018-6-8 09:55


   
回复  xingyun620


   一个时钟树的sink单元太多了,去check每个reg的话不太容易呀
糖糖123 发表于 2018-6-7 14:54



你的summary report不是报出来longest path, shortest path了吗?仔细比较比较,配合structure report分析。看看longest path上有没有ICG或者reg(后面定义一个generated clock)之类的穿过去了 。也要注意一下path上面有没有较大的transition vio或者fanout violation,可能有dont buffer net,导致transition没解。
作者: xingyun666666    时间: 2018-6-8 13:42
回复 13# xingyun620

4. 分析report,结合longest path, shortest path, 看clock tree structure report,分析有没有balance conflicts,有没有设置错误的balance point等;从你的report看,skew都崩了,检查下是不是有冲突的balance点。比如某个reg在某个clock下是balance sink点,在另一个clock下穿过去了之类的,导致无法balance,ICG或者reg(后面定义一个generated clock)之类的穿过去了 。
5. 结合layout,看是不是floorplan的原因;
   

师哥,你好,我有点疑问:
对于第4条,怎么会发生reg在某个clock下是balance sink点,在另一个clock下穿过去了?ICG和gener reg(DIV)就是throught pin啊?无论是在fun clock还是scan clock 下。不太懂诶
对于第5条,由于floorplan的原因,可以举个例子吗?感觉很抽象
作者: xingyun666666    时间: 2018-6-8 13:44
回复 4# sdlyyuxi


   请问,为什么要在长时钟树的cell list中添加些小driven length的cell,我觉得这样会引起DRC问题,而且引起插了很多inv。不是要用一些中间推力的INV?
作者: xingyun620    时间: 2018-6-8 14:08
回复 16# xingyun666666

客气了。
比较常见的是func和scan下某一个reg 有balance 冲突,比如func和scan都能看到某一个reg,func下在reg后定义了一个gen clock,那func下就会穿过去;但是scan会把这个reg当sink点,导致工具无法做到balance。icg是都会穿过去,但我有次遇到把它当sink点的....原因未知,后来设了non stop pin.
floorplan的话,我也没遇到特殊的问题,但是place的结果肯定是会影响cts的。

inverter确实一般用中间driving能力的,但是对于垫delay的地方,可以只用driving能力稍弱的,减少inverter乱跳现象。
作者: xingyun666666    时间: 2018-6-8 16:33
回复 18# xingyun620

比较常见的是func和scan下某一个reg 有balance 冲突,比如func和scan都能看到某一个reg,func下在reg后定义了一个gen clock,那func下就会穿过去;但是scan会把这个reg当sink点,导致工具无法做到balance。icg是都会穿过去,但我有次遇到把它当sink点的....原因未知,后来设了non stop pin.
floorplan的话,我也没遇到特殊的问题,但是place的结果肯定是会影响cts的。

inverter确实一般用中间driving能力的,但是对于垫delay的地方,可以只用driving能力稍弱的,减少inverter乱跳现象。

我的疑问是:func和scan都能看到某一个reg,func下在reg后定义了一个gen clock,那func下就会穿过去;但是scan会把这个reg当sink点,导致工具无法做到balance。这个影响的应该只是scan tree?所以我在长scan  tree时,把这个reg设置成no stop pin?
另外,减少inverter乱跳现象,这个不理解,好晕哦
作者: 糖糖123    时间: 2018-6-8 16:57
回复 19# xingyun666666


   请问怎么定义这个general clk,而且设计中似乎没有插入scan tree。
作者: xingyun620    时间: 2018-6-8 17:20
回复 19# xingyun666666

嗯,scan下设置ignore pin
有的时候工具为了balance,需要垫delay,当你给的inverter list都比较快的时候,它需要垫较多的inverter才能满足balance,并且在layout里上下或者左右乱跳,以达到增加的delay值。
记得icc有个-delay_insertion_only option,指定它垫delay用的inverter。
作者: xingyun666666    时间: 2018-6-15 10:05
回复 21# xingyun620


   师哥,我在做CTS时,clock tree上有MUX,DIV,ICG,我应该怎么入手分析tree的结构?
作者: aoooo    时间: 2021-5-12 15:42


   
xingyun620 发表于 2018-6-7 11:25
cts确实比较复杂但是太重要了,说下个人经验:
1. 保证cts的sdc是正确的,比如clock的定义,case_analysis ...


大佬 !!

作者: aoooo    时间: 2021-5-12 15:47


   
xingyun620 发表于 2018-6-7 11:25
cts确实比较复杂但是太重要了,说下个人经验:
1. 保证cts的sdc是正确的,比如clock的定义,case_analysis ...


大佬我想问下第二条   tree上用 ck cell  就能保证rais 和  fail的对称性吗  普通的buffer 的rais 和 fail不对称吗  保证对称的要求是什么  delay小吗?

作者: 摘星的你    时间: 2022-6-7 16:59


   
xingyun666666 发表于 2018-6-15 10:05
回复 21# xingyun620


前辈你好,现在你肯定有了新的认识了吧,我目前也对这一块有点茫然,能抽空简要分享一下吗?


作者: 青花瓷    时间: 2023-10-27 16:53
这个clock tree summary 是在哪里看的




欢迎光临 EETOP 创芯网论坛 (原名:电子顶级开发网) (https://bbs.eetop.cn/) Powered by Discuz! X3.5