層次化設計研究論文

時間:2022-10-11 11:11:00

導語:層次化設計研究論文一文來源于網友上傳,不代表本站觀點,若需要原創文章可咨詢客服老師,歡迎參考。

層次化設計研究論文

摘要研究了層次設計中如何達到時序收斂。從層次化設計的流程分析,介紹如何人為地選擇并且調整一些布局布線方面的問題從而使得設計更能實現時序收斂。最后以圖文及數據相結合的方式舉例說明了層次化設計時序收斂的可行性。

關鍵詞層次化設計;收斂性;模塊布局;時鐘優化;延時分配;大型設計

1引言

如今一般的后端設計是采用把網表打散,把所有的邏輯單元看作是一個層次上,層次關系不用考慮,一起進行設計,優化。這樣設計的好處是邏輯關系比較簡單,在做優化的時候,可以對邏輯單元直接處理,所有的物理單元都是可見的。但是,隨著現在設計越來越復雜,單元越來越多,現在的單層次的EDA工具的承載能力遭到了挑戰。由于設計的龐大,使得后端設計所花費的時間越來越長,于是出現了層次化設計流程。

層次化設計流程是指把設計對象分成多個模塊分層次設計,在設計的過程中,要考慮層次之間的關系,頂層模塊和底層模塊的關系,層次內部的優化等等。最終,在各個模塊達到其各自設計要求的同時,滿足頂層的設計要求。

2層次化設計的背景

2.1層次化設計的優勢

(1)大多數原因是設計規模的龐大。很大的一個設計就需要考慮層次化。

(2)層次化設計可以給一個模塊里的設計單元一些約束,使他們可以在一個區域內布局布線。這種約束性給某些特殊的設計帶來方便,比如說:多電壓設計。隨著現在對低功耗的要求越來越廣泛,設計者一般會對不同的模塊進行低功耗的考慮。不同模塊會有不同的供電電壓。這樣,層次化設計可以對這些不同的模塊單獨進行功耗分析和設計。

(3)層次化設計有時候也是應項目進行的情況可以采取的一個方法。一般來說,一個大型的設計會分幾個小組分別設計幾個模塊。幾個模塊的進度有可能不一樣。后端設計一般不會等到所有的模塊完成了以后才進行。一般來說,可以對部分沒有完成的模塊估計一個大小,時序。然后把這些模塊當作是BlackBox(黑盒)放到頂層進行后端設計。這時候,我們采取的也是層次化設計。

(4)層次化設計也是一種設計流程的選擇。一個模塊的單元如果約束在一起,其內部的優化可以更方便。芯片的各個模塊能有效地控制單元固有的離散性,從而最大限度地減少時序或擁塞的變化。

2.2層次化設計常見問題

(1)由于有層次化的劃分,模塊之間及與頂層的關系是不透明的。和平面設計不同,頂層的優化不能進入到模塊內部,這樣,有可能造成優化的限制。

(2)層次化設計對邏輯的要求比較嚴格,改變邏輯的時候要注意對層次化的影響。比如,如果在布線的時候,需要穿越某些模塊,那需要在這些模塊中新增加邏輯連線。所以,邏輯的更新要和布局布線同步。

(3)層次化設計中,模塊內部優化所需要的約束條件是通過在頂層的分析中得到的,而頂層的分析又是基于模塊內部的情況得出的。所以,這是個反復的過程。層次化設計要注意反復優化時應該遵循收斂原則。最后的結果應該是頂層的時序得到滿足,模塊的時序也得到滿足。

3層次化設計流程

(1)層次化分塊。在讀入的網表文件中,前端的設計者會按照功能創建一些模塊。在層次化設計中的初始,就要對這些模塊進行分析,有些模塊需要打散并入到頂層,有些大的模塊需要保留,當作一個子module進行分層處理。

(2)層次化放置單元。把子模塊里的單元集中放在子模塊里。

(3)如果timing有問題,做一下簡單的優化,比如說修復一些DRC的violation(cap,transition,fanout),插入/刪除/更換一些緩存器。

(4)Power的處理。power會采取網格狀的模式,同時會做power的分析,做完之后preroute(preroute指對電源線的連接)可以先不要做。

(5)時鐘的規劃。現在工具已經可以提供一種由下而上的時鐘規劃。利用工具提供的方法做完時鐘規劃后,可以得到一個初步的時鐘優化,同時會得到一個優化的結果,就是指頂層的時鐘的skew能被優化到什么結果,底層的時鐘優化的目標是是么。當然這個只是初步得到的結果,可以做個參考。如果得到的skew很差,那就需要重新考慮模塊的布局了。

(6)模塊化的布線。接下來就可以為產生接口的位置及產生的子模快做準備了。接口的位置是通過布線來得到的。工具會對整個設計進行布線,這樣的布線是指globalroute。子模塊內部的布線是首要考慮的,接下來是接口的布線,最后是頂層的布線。而端口的位置就是通過接口的連線在子模快邊界的交點的位置產生的。由于是global的route,交點不是在wiretrack上,所以,最后接口的實際位置將會稍微偏離globalroute。

(7)把模塊變成軟模塊并且產生接口位置,同時把電源線復制到底層。

(8)為模塊產生時序的模型。由于軟模塊內部的信息頂層是看不到的,所有要通過ilm(記錄了子模塊接口的時序信息的模型)把內部的時序信息映射到頂層去。這樣在頂層做時序分析的時候就能包含整個設計的了。

(9)延時分配。這是很關鍵的一步。時序預估是通過時序分析,產生底層的時序約束,把頂層和底層的優化的目標分配好。通過實際的每個模塊的及其頂層的延時,得到各自模塊在整個延時所占的比重,然后按照要求的時鐘延時(requiredelay)進行分配。然后把得出的延時作為時序約束傳給子模塊。

(10)有了子模塊的時序約束,分別打開子模塊進行布局,優化,布線。

(11)子模快優化成功之后,轉換成硬模塊。這樣,底層將不會再被改動任何信息,最后,回到頂層做頂層的優化。

這里要注意的是,如果子模塊不能達到優化的結果,需要回到頂層,進行頂層的優化,這樣可以對底層的優化約束會降低,然后,再產生底層的約束,再做底層的優化。這應該是個收斂的過程。最后的結果會越來越好。

4層次化設計中哪些步驟需要注意得到收斂性的時序

4.1模塊分割階段

用來做層次化設計的子模塊一般是網表里的單元器件比較多的模塊,并且與其他模塊連接關系較少的模塊。原因是:由于子模塊在布局布線的時候會集中在一個區域,如果這個模塊和外界聯系比較多的化,這種集中會使得其距離外界單元比較遠,不如打散的效果好。如果有很多時序存在這個模塊和外界之間,會造成整個設計的時序比較差。

在我們沒有劃分模塊之前,我們對全局進行布局,發現模塊b和模塊c2內部連接很集中,而c1模塊內部的單元被分散在芯片的四周,說明它與其他很多模塊有連接關系,外部連接關系比內部連接關系更多。這種情況,我們一般選擇把b和c2作為層次化設計的子模塊,這樣有利于在后期能一直很好的保持設計的收斂性。

4.2模塊的布局

在產生子模塊之后,我們可以利用工具對芯片進行布局。工具會按照層次化的原則進行布局,即屬于同一模塊的會放置在同一范圍內。這時,我們需要給子模塊產生一個形狀并且給它一個位置。模塊的位置最好放置在內部單元集中放置的中心,之后,當我們把屬于這個模塊的所有單元都放置到模塊中時,我們所得到的結果將與初始的結果相匹配。

4.3模塊接口的產生

層次化設計的后期是把頂層和底層分割開來處理,所以,它們彼此的信息交流都是通過接口來進行的,而接口的物理位置是通過布線產生的。布線時,為了保證邏輯的與物理的一致性,需要遵循以下的原則:①內部的連接需要在內部完成布線。②邏輯上模塊有多少接口,在布線的時候穿過這個模塊的次數就有多少。但是,原則2給層次化設計帶來了局限性,如果遵循了這樣的原則,將迫使布線需要饒過一些模塊。為了打破這種局限性,我們允許改變模塊的邏輯,在邊界產生額外的接口,這也是為了達到布線的最優。如圖1介紹了幾種產生feedthroughpin(額外穿越邊界的接口)的情況。

由布線產生接口的流程是:先對模塊內部進行布線,然后對接口的連接進行布線,最后是頂層的連接進行布線。這樣做的優點是我們在前期就能預估到整個設計是不是能完成布線。如果只是對接口進行布線的話,很有可能接口的位置不好從而影響了內部的布線。而接口的位置一旦決定下來,修改起來就難了。所以,我們在產生接口之前就考慮好模塊內部的布線,這樣能保證后期的結果也是可行的。有一種情況在布線的時候要特別注意,對于相貼邊的模塊,在貼邊處不要放置單獨的接口。這樣的接口會導致頂層的布線無法通過模塊與外界相連。因為層次化設計的后期就是把模塊做成硬模塊,底層頂層分別進行詳細的布線,優化。彼此獨立。所以,在頂層,將會把底層的模塊全部屏蔽,布線將不允許穿過子模塊。這樣,圖示中的接口在布線中會遇到很大的困難。所以,即使有與外界沒有連接關系的接口,我們也不要把它們放到貼邊的位置,因為很有可能在ECO的階段,設計者會為這些端口加上連接關系。在貼邊處的端口永遠都要遵循一一對應的關系。

4.4模塊時鐘信息的傳遞

在一般時鐘優化中,我們主要考慮的是UsefulClockSkew。所謂UsefulClockSkew,就是通過調整各級觸發器的時鐘延遲(ClockLatency,從時鐘起始點到每個觸發器時鐘輸入端口的延遲),來調整前后流水級的路徑需求時間(RequireTime),以滿足盡量小的時鐘周期要求。所以一般我們對時鐘skew的優化的目標是所有的sink端口的時鐘延時盡量保持一致,這樣時鐘對時序的影響能降低到最小,使我們在邏輯綜合和布局階段的分析大致準確。在平面設計中,所有的sink端口由上而下進行平衡其延時。先把所有的sink端口進行分組,按照就近原則,按照電容的一個閾值進行合并成組,在同組的sink端上層插入緩存器,然后,以緩存器為sink端口,按照同樣的原則再往上層插入緩存器,一層一層往上遞推,建立時鐘樹。

如此建立的時鐘樹能保證所有的sink端口是比較平衡的。當然在選擇組的時候會考慮一些其他的因素,比如gatedclock,generatedclock,hardmacro的時鐘端口。如果僅靠分組的情況不能平衡,比如有些組離時鐘端口的距離差別很大,還需要對各個不同的組插入不同的緩存器。

在層次化設計中,由于每個模塊的內部設計沒有完成,我們需要完成由下而上的時鐘設計是違反了層次化設計的規則的。一般我們會假設模塊內部所有的sink端口的最大和最小延時是多少,然后把信息加在模塊的時鐘端口上,這樣在頂層,我們可以得到整個設計的時鐘延時信息,從而可以在頂層對標準單元模塊及層次化模塊都能優化。當然,我們在估計模塊內部的sink端口的延時時,我們需要考慮的是優化后的結果,也就是內部如果優化以后,可以得到的最大和最小延時,這個估計的結果也是設計者要在內部進行優化的目標。這樣就做到了時鐘的層次化分離,如圖2所示。

4.5模塊時序分配

接口的物理信息產生以后,最重要的將是產生每個模塊的時序約束。頂層的時序約束是由前端綜合的結果及設計者的要求提出的,但是子模塊的時序是在頂層對整個設計的時序分析后產生的。通過整個設計的層次化分析,主要把延時在各個模塊內部進行分配,把優化的指標分配到每個模塊中。延時分配在層次化設計中是很重要的方案,目的是通過各個模塊的努力使整個設計的時序達到要求。它的大致原理是先得到通過模塊端口的最差路徑,得到這條路徑在每個模塊及頂層的延時,然后用requiretime(時序如果達到要求需要的延時)減去頂層的延時(因為我們在分配的時候假設頂層的延時是不變的,也就是我們不把頂層的優化考慮進去)乘以本模塊延時占整個模塊延時的比例。時序分配之后,再把分配后的延時作為接口的輸入延時和輸出延時。分配之后的延時使得各個模塊內部看到整個路徑的延時變小,也就是其他模塊為他分擔了一部分優化的難度,分擔多少要看它自身本來有多少延時。各個模塊按照分配后的結果進行優化之后,如果每個模塊的時序都達到要求,那么整個芯片的時序將達到要求。

5實例說明

實驗目標:通過層次化設計實現時序收斂。

實驗對象:實例中的design大小為中等design,90k左右標準單元,頂層包含9個模塊。根據模塊大小,選取了其中三個作為層次化設計的子模塊。

(1)先進行模塊分割及模塊放置,然后把模塊內部的單元放置在模塊內部,這是層次化設計的基礎,開始進行層次化設計,同時,評估一下布線及時序優化的可行性。

如圖1如果按照扁平化布局,左邊的布局,根據子模塊的布局可以看出,子模塊內部的單元模塊的放置比較集中,于是,我們按照子模塊的扁平布局得到了子模塊的邊界大小及位置。然后,有了邊界的約束,產生了新的層次化的布局,如圖3所示。

一般來說,Congestion的GRC在0.5%以內,Max在5以內是可以布線成功的。時序在時鐘周期的20%以內是可以得到最后的優化的。

(2)時鐘優化。利用層次化時鐘優化的方法進行優化,可以對時鐘進行層次化處理,每個子模塊的時鐘會先得到優化,然后傳遞到頂層。如圖4所示。

(3)進行層次化布線,之后根據層次化布線產生接口。在做層次化布線時,我們看到允許產生feedthrough可以得到更好的布線長度和更小的擁擠度。如圖5所示,比較了允許產生feedthrough和不產生feedthrough的數據對比。從圖5中可以看到,產生feedthrough了以后,頂層的邏輯連線穿過了子模塊,得到了更優的布線。

(4)接口產生,我們再對模塊產生時序模型,使得在頂層也可以看到底層的電容電阻信息,在時序分析時,可以得到和接口有關的時序結果。由于接口的位置和布線稍微有些偏差,我們得到的時序分析和在層次化布線時得到的時序分析有點出入:

Timingreport:MaxSlack:-0.45TotalSlack:-18.81

(5)進行延時分配。然后分別在底層進行優化,布線。我們得到的完全可以布線及優化的結果:

模塊1:Wirelength:3482179DRCViolation=0MaxSlack=0.02

模塊2:Wirelength:1127638DRCViolation=0MaxSlack=0.43

模塊3:Wirelength:2114073DRCViolation=0MaxSlack=0.43

頂層:Wirelength:4313672DRCViolation=0MaxSlack=0.53

與層次化布線后的結果相比較,結果是有收斂性的。

6總結

層次化設計的收斂性是建立在整體的把握上。從模塊的分割到延時分配,每個環節都要做好分析和檢查,模塊的集中性需要保證,頂層和底層的信息傳遞要準確,接口的位置要和層次化布線保持基本一致,延時的分配要合理等等這些因素都會影響到層次化設計的收斂性。在這次實踐過程中,對每個環節的分析都比較全面,于是得到了比較好的結果。層次化設計中最需注意的是如何保證在前期對整體的分析在后期層次分離之后是有效的,使得整個設計的優化是收斂的,文中所提到的四個方面是一些方法,更多的方法要在更多的實踐中得到。層次化設計是大型設計不可避免需要掌握的。

參考文獻

[1]PhysicalHierarchyGenerationwithRoutingCongestionControl,Chin-ChihChang,JasonCong,Zhigang(David)Pan,andXinYuan,ISPD''''02,April7-10,2002,SanDiego,California,USA

[2]A1.5GHzThirdGenerationItanium(r)2Processor,JasonStinsonandStefanRusu,IntelCorporation,DAC2003,June2-6,2003,Anaheim,California,USA

[3]A480-MHzRISCMicro-processorina0.12umLeffCMOSTechnologywithCopperInterconnects,ChekibAkrout,JohnBialas,MilesCanada,IEEEJOURNALOFSOLID-STATECIRCUITS,VOL.33,NO.11,NOVEMBER1998

[4]Deep-submicronDesignChallengesforaDual-core64bUltraSPARCMicroprocessorImplementation,ToshinariTakayanagi,JinukLukeShin,SunMicrosystems,Inc.2004IEEEInternationalConferenceonIntegratedCircuitDesignandTechnology

[5]“TimingClosurebyDesign,"AHighFrequencyMicroprocessorDesignMethodol