深亞微米設(shè)計(jì)中的靜態(tài)時(shí)序分析方法
對于今天的深亞微米設(shè)計(jì)來說,最棘手的問題莫過于時(shí)序收斂了。因此,準(zhǔn)確的時(shí)序校驗(yàn)變得比以前更為重要。隨著設(shè)計(jì)規(guī)模和復(fù)雜度的增大,使用繁雜的電路仿真進(jìn)行制造前的時(shí)序校驗(yàn)已不切實(shí)際。取而代之的是基于靜態(tài)時(shí)序分析(STA)的時(shí)序終止(timing sign-off)法,STA估測最壞情況下的電路特性,而與電路的輸入模式無關(guān)。STA通過包含物理電路節(jié)點(diǎn)和加權(quán)邊緣(weighted edge)的時(shí)序圖描述電路,加權(quán)邊緣通過信號延遲描述這些節(jié)點(diǎn)間的信號傳輸情況。然后,STA計(jì)算出網(wǎng)絡(luò)的理論延遲以確定電路中最長或“臨界”路徑。 節(jié)點(diǎn)間的邏輯關(guān)系通??珊雎?,由此造成的延遲稱為網(wǎng)絡(luò)的拓?fù)溲舆t。一般來說,忽略邏輯信息無傷大局,因?yàn)樵谠O(shè)計(jì)充分的電路中,拓?fù)溲舆t給出的上限比較接近實(shí)際的******延遲。但是這個(gè)上限的精確度依賴于計(jì)算信號延遲所用的模型精確度。 盡量接近實(shí)際 在STA中,晶體管級的建??煞抡孀罱咏杵?a >器件的性能,其結(jié)果也是最精確的。但這種仿真非常耗時(shí),因而常將器件的行為抽象為更高級的邏輯門或單元,在ASIC設(shè)計(jì)中尤其如此。邏輯門通過以下方法進(jìn)行預(yù)先描述:針對不同負(fù)載情況和輸入組合來精確仿真邏輯門行為,然后將延遲作為負(fù)載電容和輸入跳變時(shí)間等參數(shù)的函數(shù)來儲存。 器件尺寸不斷減小,互連延遲現(xiàn)象又普遍存在,于是90年代初我們不得不重新考慮這一傳統(tǒng)方案。隨著深亞微米技術(shù)的出現(xiàn),邏輯門不再只驅(qū)動純?nèi)菪载?fù)載,長導(dǎo)線也帶有分布式RC互連特征。 由于無法預(yù)先描述所有可能的RC負(fù)載組合,門延遲不得不通過負(fù)載的“有效電容”近似值來分析。除了門延遲被描述為一個(gè)有效容性負(fù)載的函數(shù)外,長RC互連延遲也必須在時(shí)序圖中單獨(dú)表示。為了計(jì)算由數(shù)百個(gè)電容和電阻組成的互連電路延遲,模型級縮減技術(shù)(model-order reduction technique)采用時(shí)間常數(shù)近似法,以簡單的解析形式描繪相關(guān)的傳輸特征。雖然由長RC互聯(lián)效應(yīng)引起的這些變化對延遲建模和計(jì)算有重大影響,但用于STA的技術(shù)和運(yùn)算仍然適用。 棘手的耦合問題 不幸的是,不斷縮小的IC特征尺寸使RC互連延遲呈現(xiàn)增加的趨勢。單個(gè)芯片的處理能力越強(qiáng),就越需在較小的空間內(nèi)集成并互連更多的邏輯門。這將加大布局和布線的復(fù)雜度,使得線路更加擁擠。為了容納下所有這些連線,金屬互連的寬度必須不斷減少,同時(shí)金屬層數(shù)卻不斷增加。由于金屬阻抗與其寬度成反比,人們開始采用改變金屬連線橫截面長寬比的方法來控制阻抗(從而將RC互連延遲限定在合理范圍內(nèi))。 由于線寬減小了,導(dǎo)線由短粗變?yōu)榧?xì)長以控制阻抗。長寬比的改變又加劇了相鄰連線間電氣特性的相互影響,這要用鄰線間的耦合電容進(jìn)行建模。另外,由于IC金屬互連層數(shù)不斷增加,較高金屬層到基底層的距離也在不斷減小,從而減小了對地的電容量。 乍看起來,這種方法似乎無懈可擊,但稍加分析就會發(fā)現(xiàn),它會引起很多嚴(yán)重問題。在STA中,某一特定路徑的延遲是這樣計(jì)算的:從輸入開始,經(jīng)過該路徑上所有門直至初級輸出,將所有延遲累加起來。但當(dāng)互連路徑與相鄰連線間存在強(qiáng)耦合時(shí),計(jì)算門延遲的方法還能如此簡單嗎?電容通過晶體管或金屬阻抗充電和放電是導(dǎo)致集成電路延遲的主要因素,當(dāng)非線性源(這是邏輯門的電氣表述)為通過電阻網(wǎng)絡(luò)接地的電容充電時(shí),精確計(jì)算延遲就比較困難。然而,由于電容耦合現(xiàn)象普遍存在,電容另一端連接的是互連線,線上信號變化也無法預(yù)測。 如果認(rèn)為只要計(jì)算一個(gè)門的固定延遲,并將多個(gè)門延遲累加就可得出路徑延遲,這一想法顯然過于幼稚。這也正是在STA中難以解決耦合電容不斷增加問題的癥結(jié)所在?,F(xiàn)在,執(zhí)行STA的延遲建模問題和算法已密不可分。 分析鄰線 讓我們考慮邏輯門驅(qū)動互連線的情況。一根互連線一般與幾根鄰線耦合,由于我們關(guān)注的是鄰線對門/線延遲的影響,我們稱這根互連線為“受害線”。需要解決的問題是:這些受害線的存在對靜態(tài)時(shí)序分析的方法有何影響?我們知道這一影響是由大量相關(guān)效應(yīng)決定的,因此可以將這些問題分解,然后逐個(gè)分析。 首先,可以觀察受害線與鄰線的間距,并判斷它是否會引起受害線特性的變化,這就必須量化間距的影響??墒褂锰崛」ぞ咴诤侠碚`差范圍內(nèi)計(jì)算出受害線與鄰線間的耦合電容。對于每一根鄰線,耦合電容在整個(gè)電容中所占的比重決定了是否有必要考慮鄰線的影響。接下來,要確定這些控制電容另一端的鄰線作用。如果是空閑線,就根本沒有問題??梢哉J(rèn)為這些耦合電容與接地電容沒有區(qū)別。然而這并不十分精確,因?yàn)榕c空閑線耦合并不完全等同于純粹接地耦合。但由于鄰線總電容遠(yuǎn)遠(yuǎn)大于單個(gè)耦合電容,可以將它近似看作接地節(jié)點(diǎn)。 但是,受害線的鄰線不會總處于空閑狀態(tài),實(shí)際上可能會頻繁地跳變。應(yīng)該確定被分析線在跳變時(shí),其鄰線是否也在跳變。 但這并不是解決問題的最后一步。有可能某些鄰線在跳變,但卻與受害線完全無關(guān)。 當(dāng)受害線在鄰線跳變之前完成了所有跳變,或受害線在此之后才進(jìn)行跳變時(shí),就會出現(xiàn)這種情景。無論哪種情況,為便于計(jì)算受害線延遲都可以認(rèn)為這些鄰線是空閑的。 那么鄰線跳變何時(shí)會影響受害線的延遲呢?當(dāng)鄰線通過耦合電容從或向正在跳變的受害線輸入或輸出電流時(shí)。如果鄰線的跳變方向與受害線相反,它們就會吸納電流,并因而增加受害線的延遲?;蛘?,若鄰線與受害線以相同方向跳變,受害線延遲就會減小。由于通過電容的電流依賴于電壓的變化率,所以鄰線的跳變速度十分重要。跳變得越快,對受害線的影響就越嚴(yán)重。 從上面的討論可以看出,為了決定受害線的延遲,至少應(yīng)解決下列問題:受害線跳變時(shí)鄰線是否也在跳變?如果是,速率多少? “雞生蛋”問題 但是,在討論中我們忽略了一個(gè)重要問題。由于無法仿真電路的所有可能模式,STA是在不考慮電路輸入模式的情況下進(jìn)行的。這意味著我們不可能精確判斷出哪條線路正在跳變及何時(shí)跳變。我們能知道的僅是某一信號可能發(fā)生跳變的時(shí)間段。這一時(shí)間段是由某一信號到達(dá)的最早和最遲時(shí)間表示的。在STA中,通常這一信息在受害線輸入端是已知的,我們也希望能確定鄰線的時(shí)間段。為了得到確切的信息,比如“鄰線可能在1.2ns和1.5ns期間跳變”,我們必須精確計(jì)算出與鄰線相連的門延遲。但是這些門有可能耦合到其它相鄰門,所以需要分析它們的鄰近門,以確定其到達(dá)時(shí)間,而這一分析過程是否會停止在某處仍是未知數(shù)。 遺憾的是,受害線的鄰線到達(dá)時(shí)間極有可能與受害線本身的延遲有關(guān)。即使在沒有物理連接環(huán)的情況下,耦合也會在電路中引起“反饋環(huán)”。這就產(chǎn)生了“雞生蛋、蛋生雞”的問題,導(dǎo)致在STA中無法傳播受害信號。因此無法保證能找到最長路徑,也不可能在制造前完成時(shí)序分析。 還有些問題值得一提。由于容性耦合引起的問題越來越嚴(yán)重,設(shè)計(jì)者已經(jīng)花了幾年時(shí)間解決這一問題。在此期間一直用STA進(jìn)行時(shí)序分析,而由此制造出的芯片也可以工作并能滿足時(shí)序要求。那么問題在哪兒? 過去,常用方法是將耦合電容作為接地電容,用“米勒系數(shù)”衡量。這一衡量值可以有效地表示受害線應(yīng)充電或放電的容值。假設(shè)受害線在從0至Vdd的跳變過程中為一特定電容充電,且鄰線以相同速率發(fā)生了反向跳變,我們就很容易確定受害線充入的電量是接地情況下的兩倍。米勒系數(shù)之所以得到普遍應(yīng)用,是因?yàn)樗梢宰屛覀冊诓恍薷幕蚝苌傩薷牡那闆r下繼續(xù)執(zhí)行STA。電容增加導(dǎo)致了受害線延遲的增加,這似乎就是受害線所受的影響了。但是,很容易看出如果鄰線的跳變速率與受害線不一樣,這一方法將會導(dǎo)致極大錯(cuò)誤。 更為重要的是,研究表明這一“2x”法也不是受害線延遲的上限。除跳變速率外,其它重要因素,如受害線驅(qū)動(門)阻抗和互連阻抗等,都被忽略了。 一種解決方案 在得出一個(gè)方案之前,我們應(yīng)明確所要追求的目標(biāo)。我們已反復(fù)強(qiáng)調(diào)STA進(jìn)行的是與輸入模式無關(guān)的分析,所以每一信號的到達(dá)時(shí)間段都覆蓋所有可能的模式。比如,我們可以說某一特定信號可在“最早1.2ns”和“最遲1.5ns”跳變。只有當(dāng)耦合存在時(shí),確定信號到達(dá)時(shí)間的類似范圍才是合理的。 特別地,我們應(yīng)確定電路中的每一信號在所有可能輸入到達(dá)時(shí)間和耦合作用情況下的最早和最遲到達(dá)時(shí)間。信號跳變時(shí)間范圍在STA中也稱為“到達(dá)時(shí)間窗口”。到達(dá)時(shí)間窗口由最早和最遲到達(dá)時(shí)間以及跳變速率(或信號邊沿跳變時(shí)間)組成,如圖所示。如果已知一根鄰線的到達(dá)時(shí)間窗口,就可以確定它是否與受害線的到達(dá)時(shí)間重疊。我們可以精確劃定這些存在“雞生蛋”問題的窗口。 從最壞情況著手不失為一項(xiàng)可行的方案。最壞情況是指:如果不知道鄰線的時(shí)序窗口,就假定其窗口與受害線窗口有重疊。由于我們不知道該鄰線何時(shí)跳變,可能在STA過程的后期才知道,我們就假設(shè)這一鄰線會對受害線造成******的影響。若我們有辦法計(jì)算這一******影響,這對STA意謂著什么呢?在傳播信號跳變時(shí)間(或到達(dá)時(shí)間窗口)時(shí),我們對跳變時(shí)間進(jìn)行了悲觀的假設(shè)。再回到關(guān)于信號跳變時(shí)間的含義,“受害線可在1.2ns和1.5ns之間發(fā)生跳變”現(xiàn)在意味著無論哪個(gè)鄰線何時(shí)跳變,這些數(shù)字都將是受害線實(shí)際跳變時(shí)間的界限。 “實(shí)際”跳變時(shí)間范圍可能介于1.3ns和1.4ns之間。 我們應(yīng)注意到悲觀的假設(shè)僅對于最遲到達(dá)時(shí)間才有真正意義。前面曾提到,如果跳變方向相同,鄰線可能會減小受害線的延遲。如果要推導(dǎo)出最早到達(dá)時(shí)間,“悲觀”假設(shè)應(yīng)考慮耦合引起的延遲減小,進(jìn)而找到最早的跳變時(shí)間。到達(dá)時(shí)間上限對電路的保持和競爭情況會產(chǎn)生影響,在多數(shù)情況下,這里的STA界限與最壞情況的路徑延遲同等重要。 關(guān)鍵時(shí)刻 用這種方法計(jì)算出的到達(dá)時(shí)間可能會過于悲觀。假定影響受害線延遲的鄰線在現(xiàn)實(shí)中可能會暫時(shí)與受害線隔離。一種建議方案是多次運(yùn)行STA以反復(fù)減小悲觀因素。在第二次運(yùn)行中,如果發(fā)現(xiàn)鄰線與受害線不重疊,受害線的延遲就會減小,受害線輸出的到達(dá)時(shí)間窗口也將縮小。這就是耦合時(shí)序分析(TACO)的中心思想,TACO是靜態(tài)時(shí)序分析工具中用于確定耦合效應(yīng)的一種算法。 我們前面提到該方案可用于確定到達(dá)時(shí)間的界限。為了確定最早和最遲到達(dá)時(shí)間,我們必需先確定在有鄰線跳變情況下受害線的延遲界限。為了確定鄰線跳變所帶來的******影響,我們必須根據(jù)受害線“排列”鄰線。這樣,即使我們知道鄰線的時(shí)序窗口,還是要確定鄰線何時(shí)跳變才會對受害線產(chǎn)生******影響。不必涉及具體的算法,就可以較容易地計(jì)算出在RC耦合線路中最壞和最好情況下的跳變延遲。 在STA中,由于從最壞的假設(shè)著手(最寬的時(shí)序窗口),我們可以確保時(shí)序窗口在以后的STA運(yùn)行中只會縮小。窗口縮小意味著延遲和到達(dá)時(shí)間的差距更近。這一方法的優(yōu)勢在于如果認(rèn)為運(yùn)行STA太浪費(fèi)時(shí)間,可以隨時(shí)停止,并可得出時(shí)序窗口的界限。在實(shí)際應(yīng)用中,我們發(fā)現(xiàn)運(yùn)行STA的次數(shù)無須超過兩次,因?yàn)榈谝淮蔚a(chǎn)生的悲觀估算會在第二次運(yùn)行中得到充分校正。 盡管串?dāng)_電容的普遍存在引發(fā)了新的設(shè)計(jì)問題,但對傳統(tǒng)STA稍作修改,就可進(jìn)行制造前的時(shí)序分析。 |