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