后端一般在什么情况下,比较适合设置group_path来优化timing?
请问,后端,一般在什么情况下,比较适合设置group_path来去优化timing?
顶一顶
什么时候都适合
一般都只是在placement前设置group path吗?我的意思是遇到哪种timing问题,会考虑设置group path? 有些不是也适合设置grouppath,设置了也没用
我之前做PT时发现setup的violation比较难修,且都是到macro的,这种到cell到macro的path就用group path设置下,之后就比较好修里。一点拙见,请指教
是group_path -throughtmacro的data pin吗?还是-tomacro的data pin?
C家的是这样设:http://bbs.eetop.cn/thread-473398-1-1.html
S家设是为了改变两个Cost:Max Delay Cost(修改compile_log_format可以打出来)和Endpoint TNS Cost
借楼问,如果是icc,一般对IO的Timing怎么处理,假如place后IO没有violation,cts后冒出violation,比如reg2out,全是因为launch path 的propagated delay 为tree的长度,而capture path的propagated delay为0,一般怎么设置此类假错呢?
我记得陈涛小编之前说设置一个virtual clock,跟real clock同频同相,把这个delay加到virtual clock上,但是我有个疑问:如果各output port的delay约束本身就各不相同呢?那用这样的设置也好麻烦啊,需要对每个port都单独指定?感谢!
IO timing 的处理有两种方法
1.cts后,在每个clock上加上负的clock latency,用来抵消clock latency,以近似得到io准确的timing,即近似得到launch latency和capture latency都为0的理想情况下的timing
2.如果一个clock port对应多个长度的异步clock,如果在clock port上加latency来抵消则没法兼顾所有长度的clock,所以需要virtual clock,将io timing constrain定义在不同的virtual clock上,然后给不同的virtual clock加上正的io latency,这样也可以近似得到launch latency=capture latency (正值)的 io timing
您好,我大概明白您说的原理,我的疑惑是:
假如有一个clk_A,对每一个output port,关于这个clk的set_output_delay的值都不一样,那创建virtual clock,似乎也要对每个port去加上tree的长度吧?那如果有成千上万个port呢?
也就是说:
如果 output_delay的值设的都一样,create一个virtual clock之后,可以
set_output_delay -clock clk_A_v value [all_outputs]
如果都不一样呢?是不是需要每个port单独设置了?
不知道有没有理解错,感谢指导!
你跑两轮,第一轮跑完CTS后把每个寄存器的network latency(通常可以通过attribute得到)记录到一个文件里,然后再从DCG/preCTS开始走,把每个寄存器的network latency标上去就可以了。perfectly correlated.
之前比较难修的path 的endpoint都是macro的date pin,所以都是-to
定义output delay的本意是满足timing buget的要求,所以每个output port都有其对应时钟的output delay约束,这个约束对于top2down的设计流程来说,每个port都有特定的output delay,因为这是top根据模块之间的talk来预估的。如果是down2top的设计流程,每个port上的约束是over constrain即用悲观的方式来约束,给top留够足够的margain,这时候加output delay是采用时钟周期百分比的方式加的(如60% cycle),所以output port delay的添加与port数量没关系,是设计方式要求的。
前面的两种方法
第一种 设置output delay: set_output_delay -clock [get_clock clk_a] value [get_portsport_a]
设置latency : set_clock_latency -source [get_ports clk_a] value
第二种 设置output delay: create_clock -name clk_v -period xxx(virtual clock)
set_clock_group -name aaa -asynchronous -group {clk_a clk_v} (将virtual clock和clk_a 同步)
set_output_delay -clock [get_clock clk_v] value [get_portsport_a] (将output delay定义在virtual 上)
set_clock_latency -source [get_ports clk_v] value (给virtual clock加上latency)
非常感谢解答!
膜拜前辈,看了您之前的帖子,其实就是:越critical 反而设置越小的weight?这与我之前的认识正好相反!您举的例子是in-to-reg和reg-toreg,假如不管IO的timing,只是想优化掉design中的reg to reg的path呢?也是把reg to reg中最critical的设置更小的weight?相对不critical的反而要设置更大的weight?
关于IO的timing path,就是先跑一次cts,然后取得latency值,然后在重新做place,此时通过virtual clock设置上latency?不知道是不是这样的flow?
关于IO的timing path,就是先跑一次cts,然后取得latency值,然后在重新做place,此时通过virtual clock设置上latency?不知道是不是这样的flow?
没有什么 virtual clock,都是普通 clock。ps:直接试试会更有体会...
place的时候,clock不是ideal的吗?
ideal的意思是,延时不是计算得到的。并不代表它只能是0。参见ideal_network定义
其实就是在placement时设置latency给IO的path,让工具基于一个正常的约束来优化placement时关于IO的timing 吧?