后端面试--每日一题(070)
What is difference between HFN buffer tree and CTS?
大扇出net的buffer tree和CTS在时序和做法上的区别
难度:3
我不太懂..随便说说.
是在DC的时候把high fan out的net设成ideal_network或者don't touch,使之在综合的时候不要加大量buffer,等APR的时候,真正知道RC信息以后再做吗?
至于clock, 当你设clock的时候,工具已经默认是ideal_network了吧.
HFN插入的buffer tree主要是为了解决DRC问题,这个其实没有硬性的规定,因为fan out值过大会导致transition,capacitance值较大,所以会导致timing的DRC问题,HFN目的是为了确保transition,capacitance的值在合理的范围内。或者说如果驱动单元的驱动能力是无限大的话,完全就没有必要做HFN synthesis。
CTS的buffer tree是为了保证design的clock能够平整,CTS的buffer tree是针对整个设计的,而HFN是针对特殊的net。
PR工具在place部分做HFN synthesis,在CTS之前,但是不对clock做HFN synthesis。clock buffer tree在CTS完成。
楼上高解~受益匪浅!
我感觉HFN的目的是为了让transition和capacitor满足设计约束;
CTS是为了保证clock skew满足时序;
在具体实现上,两者目的不一样,最终解决方法也不一样吧。
HFN在实现的过程中会设置一个high fanout的阈值,达到该阈值的被认作high fanout,然后对其进行优化,以满足设计要求;
而CTS实现的过程是以clock skew为目标,同时也会考虑buffer的驱动,进行时钟数的均衡处理。
每天坐等涛哥一题
EDA tool 對這兩種tree做法的差別在於, clock tree buffer tree 的fanout 通常會在最後一級buffer , 而high fanout tree 主要是解transition, 所以fanout load會就附近的buffer接,所以解timing要用high fanout buffer tree, 不然可能在一個fanout 就在driver旁, 用CTS tree的話就會接在最後一級, 這樣就會多了不必要的latency.
HFNS 主要是解决transition , fanout , cap 等drc violation, 对skew不care,比较粗糙,
说实在的,如果是异步reset等timing 不care的, 不做也行,
cts主要解决skew和latency的问题,比HFNS 更细致的要求高,
buffer tree和clock tree的共同点是它们都是解决high fanout net的问题,只不过要求不同而已。
buffer tree要求满足max trans/fanout/cap,有时还要满足setup/hold timing
clock tree不但要满足上面的所有要求,还有skew,max/min latency的要求
做法上大不相同,
一般,buffer tree在时序优化时自动就做了 (以后别再问怎么用CTS来做reset tree了)
clock tree有专门的命令,因为它的做法与data path的做法太不一样了
受益了,膜拜!
不过 到底HFN 到底是在place_opt 的时候做还是在compile_clock_tree -high_fanout_net里面做,
各个公司还不太一样的,
有的喜欢在place_opt的时候做掉算了,就剩下clock nets , 在CTS的时候做
有的 先set_ideal_network [get_nets reset] -no_prop ,
然后在 CTS的时候 compile_clock_tree -high_fanout_nets reset_net
edi就是写个HFN 到 CTS spec里面,然后再做clock tree
究竟有啥区别和好处,我想很小 ,大家也可以讨论下,
我喜欢place的时候做完算了,
以前有点混淆,现在明白了
以前,工具对buffer tree处理不好时,是有借用CTS的
如果现在还用的话,是不是说明这家公司的技术太保守了?
不知道, 也许做过比较的吧, 用CTS的方法做HFN 也没啥关系,
反过来就不行了,
正在学习中,谢谢
学习了啊···长知识啊···
陈小编,我今年毕业,准备做后端,请问去哪些公司做后端比较好啊,望大神指点啊!
学习了,好题目。
看每日一题,大神的看每日一题,大神的光辉庇护我面试顺利
这两个在Encounter里调用的是同一个引擎。
理论上,ck spec里把skew放的很宽松,就变成了buffer tree。
实际上,就算这么干了,工具的引擎还是会把Skew收的很小
spec文件内容:
#Clock Section
#
AutoCTSRootPinclk_125M
Period
8000ps
MaxDelay8000ps
MinDelay0ps
MaxSkew4000ps
SinkMaxTran400ps
BufMaxTran400ps
ObstructionNO
DetailReportYES
PadBufAfterGateNO
LevelBalancedNO
RouteClkNetNO
PostOptYES
OptAddBufferNO
OptAddBufferLimit50
NoGatingNO
Buffer HDR_CLKBUF_12 HDR_CLKBUF_16 HDR_CLKBUF_2 HDR_CLKBUF_3 HDR_CLKBUF_4 HDR_CLKBUF_6 HDR_CLKBUF_8
END
在哪里定义HFN呢,上网找了半天没有看见响应的语法,求指导下
我们的做法是在place之后,cts之前解,使用的命令是create_buffer_tree,不知道和compile_clock_tree 有什么区别。
你的这种方法能把DRV修到什么程度?
