DSMA :distributed multi-scenario analysis
在修时序的过程中,dsma的flow中最重要的指令是fix_eco_timing,下面讲讲如何使用这个指令修时序 。
在开始修setup的时候用:
fix_eco_timing -type setup -method size_cell -cell_type {combinational sequential} \
-slack_lesser_than 0.0 -setup_margin 0.0 -hold_margin 0.0? -verbose
这里是进行正常的修setup,setup在工具中一般是通过size_cell来修的。
修hold:
fix_eco_timing -type hold -methods {insert_buffer size_cell} -cell_type {combinational sequential}? -buffer_list {BUFX2 DLYX2} -slack_lesser_than 0 -setup_margin 0.0 -hold_margin 0.0 -verbose
修hold一般使用插buffer的方式多一点,后期可以把size_cell选项删掉。
每次修完用report_global_timing报时序,并查看详细的setup hold时序报告。
如果修不动,有哪些情况:
1.可能就是setup_margin或者 hold_margin太紧了,可以适当调松,调成负值是调松,再在工具里多修几轮setup和hold。
2.修hold的时候用的delay cell用的阈值比较高,它对setup太敏感了,如果后期使用,尽量用LVT的delay cell。其他的cell同理尽可能用低阈值的cell。
3.用-crosstalk报cell的串扰,串扰会使setup和hold一同变差,可以把串扰的位置抓出来单独处理。(size_cell,跳层,ndr,插buffer修trans)
4.有的寄存器用的HVT的cell,他对setup的影响很大,换成LVT会好很多(后期修不动的情况)
5.垫树,看前后级是否可以借,如果launch没用cdb的cell,那么说明树已经是最短,只能垫长来运用skew修时序,垫长也要看report_timing -from 看end点是否有margin,有就可以垫长。
5.在后期setup hold互卡的时候,如果不管hold,只修setup,而又都是最高驱动低阈值,可以使用-methods {remove_buffer}这个选项修setup,删去多余的buffer。
6.如果要指定只修reg2reg上面的可以选则-path_selection_options {-delay_type max -group reg2reg -max_path 10000 -nworst 500 }