ICG結(jié)構(gòu)知識
延伸閱讀:淺談icg cell
ICG timing check?的瓶頸
在不人工干預的情況下,tool默認會嘗試把reg1的CK pin和Reg2的CK pin做平。但是靜態(tài)時序分析時,reg1→ICG也會做時序check;所以,ICG會天然存在一個很大的clock skew,導致建立時間違例。
如何解決呢?
在place階段,在ICG的CK pin設(shè)置一個負的latency,這個負的latency的值可以大概等于CTS之后T3的delay大?。贿@樣就可以讓tool在給reg1的CK pin的樹長識別時,會盡力將T1(即reg1的launch path)做短至少T3(ICG→reg2的時鐘樹長度)的大小。Place階段工具也會考慮時鐘樹skew引入的時序問題,讓某些cell盡可能的靠近和不要在path上過多插入delay。
Innovus命令:
set_cloCK_latency??-0.300 [get_pins ICG/CK]
在CTS階段,在Reg1的CK pin上設(shè)置一個insert delay,這就是所謂的floating pin,這個insert delay的值大概也等于CTS后T3(ICG→reg2的時鐘樹長度)的大小。
Innovus命令:
set_ccopt_property insertion_delay 0.300 -pin??reg1/CK
在timing path中為何ICG的delay跟一個組合邏輯似的
延伸閱讀:深談latch 的 timing check
如下圖所示,ICG在reg2icg的timing path中只體現(xiàn)一個組合邏輯的delay。其實icg就是一個組合邏輯。
芯片工作時,時鐘電平本身一直在高低變化,因為晶振不會停止振動;但ICG的ENABLE信號是固定在高電平1(開啟模塊時鐘)或者低電平0(關(guān)斷模塊時鐘)。ICG的兩個輸入端一個是ENABLE信號,一個是clock信號,因為ENABLE的電平是固定的(例如固定在高電平1),所以每個時鐘周期內(nèi)鎖存器向后面輸出的信號一直是固定的(信號電平等于ENABLE 信號電平),ICG的delay大概就是一個鎖存器環(huán)路的delay(結(jié)合鎖存器結(jié)構(gòu)一看便知)。
為何在timing path中ICG一般不體現(xiàn)timing borrow
ICG可以是latch + AND組成;或reg + AND組成??隙ㄒ靡粋€時序器件,因為ICG的ENABLE信號是上一級reg產(chǎn)生的,這樣就和ICG組成了兩級同步電路,可以規(guī)避亞穩(wěn)態(tài)的風險。
為什們ICG一般用latch + AND組合,而不是reg + AND組合呢?我個人理解,一方面latch的面積更小,功耗更低;另一方面,ICG上很容易有建立時間違例,latch有半個時鐘周期的timing borrow可以用,可以作為ICG時序瓶頸的“緊急鑰匙”。
那為什么ICG 的timing borrow一般不打開呢?因為如果打開了,ICG就由邊沿觸發(fā)check變成電平觸發(fā)check,采集到亞穩(wěn)態(tài)的概率增大,可能導致clock信號不穩(wěn)定,影響電路狀態(tài)。
在INNOVUS中怎么打開ICG timing check的timing borrow: