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