背景
本文基于innovus工具討論?;赽lock level的設(shè)計(jì)進(jìn)行時(shí)序分析,如果在SDC和flow腳本中對(duì)clock 沒(méi)有設(shè)置source clock latency 和network ?clock latency,在ccopt之前clock模式是ideal的,所有的clock latency都是按照0計(jì)算。
當(dāng)cts完成之后,clock模式切換為propagate ,工具會(huì)計(jì)算到達(dá)每個(gè)sink 點(diǎn)的clock latency 長(zhǎng)度,但是工具依然看不到IO port上的clock latency信息。此時(shí)如果依然將IO port的clock latency視為ideal模式,則對(duì)于in2reg path,從block level看到的時(shí)序?qū)?huì)樂(lè)觀很多;對(duì)于reg2out path從block level看到的時(shí)序?qū)?huì)悲觀很多。無(wú)論是樂(lè)觀還是悲觀,block level看到的IO時(shí)序?qū)⒑蛅op level看到的該path的時(shí)序產(chǎn)生巨大的gap,可能導(dǎo)致相關(guān)時(shí)序path很難收斂,迭代成本會(huì)很高。
update_io_latency
為了解決這個(gè)問(wèn)題,可以在時(shí)鐘樹(shù)綜合完成后使用update_io_latency去刷新IO port上的clock latency。
在user guide中,描述了update_io_latency命令主要有兩個(gè)作用:一是時(shí)鐘樹(shù)綜合完成后自動(dòng)去平衡IO port和block core之間的clock latency,二是讓pre cts和post cte階段的clock skew盡可能接近。第二個(gè)作用是第一個(gè)作用的結(jié)果,第一個(gè)作用是通過(guò)將實(shí)際的clock的平均latency標(biāo)定到IO port上實(shí)現(xiàn)的,如下圖的log所示。
從block內(nèi)部來(lái)說(shuō)這么做的好處是:pre cts和post cte階段的clock skew盡可能接近。
從top level來(lái)說(shuō)這么做的好處是:讓top level和block level看到的該IO path的時(shí)序盡可能接近,及時(shí)發(fā)現(xiàn)時(shí)序問(wèn)題并進(jìn)行修復(fù),防止問(wèn)題被掩蓋導(dǎo)致后期迭代。
Input delay
我以前認(rèn)為input delay應(yīng)該是應(yīng)包括下圖中的Tco,Trace Delay以及不在圖中的Tskew;其中Tco是寄存器的內(nèi)部數(shù)據(jù)傳播延遲,Trace Delay是寄存器間的組合邏輯延遲,Tskew就是額外設(shè)想的可能的前后級(jí)寄存器間的clock skew。但實(shí)際上,input delay和output delay應(yīng)該是不會(huì)體現(xiàn)Tskew信息。對(duì)于IO path,Clock skew引入的偏差可以通過(guò)加大uncertain體現(xiàn),時(shí)鐘樹(shù)長(zhǎng)好后可以使用update_io_latency來(lái)體現(xiàn)。
Top level如何體現(xiàn)sub block內(nèi)部的clock latency
傳統(tǒng)方法是使用insertion_delay ,將top level設(shè)置的insertion_delay 和sub block內(nèi)部的update_io_latency自動(dòng)設(shè)置的source clock latency保持一致,這樣基本能使得top level和block level看到的IO timing接近。
set_ccopt_property?sink_type?stop?-pin [get_pins
CK]
set_ccopt_property?insertion_delay?-pin [get_pins
CK] 0.53