????????布圖規劃(floorplan)與布局(place)在芯片設計中占據著重要的地位,它的合理與否直接關系到芯片的時序收斂、布線通暢、電源穩定以及良品率。所以在整個芯片設計中,從布圖規劃到完成布局一般需要占據整個物理實施1/3的時間。
????????芯片設計中,在布圖規劃后需要進行電源設計;對于較小的芯片,它的過程是建立一些簡單的電源網線,因此,電源設計常常被認為是布圖規劃所捎帶的一部分工作。隨著芯片的尺寸增大,電源設計也更為復雜,它已不僅僅局限于“網格”設計,擬稱它為“電源(地)規劃”則更能反映出當代設計的實際情況。因此,在物理實施的過程中,從數據輸入到時鐘樹綜合之前,內容上可分成三大項內容,即布圖規劃、電源規劃和布局。其中布局又稱標準單元放置,它實際上包括對I/O單元的排序放置、大模塊(block)放置和標準單元放置的規劃。而布圖規劃與電源規劃和布局三項任務通常是連續進行的,但在工程中往往是穿插反復進行。?
一、布圖規劃概述
????????布圖規劃開始時,首先要準備好各種基本設計數據和相應的物理庫、時序庫文件,并輸人到布圖規劃的工具環境中來,為其后的布局和布線做好準備。需要準備的文件如下:
- 設計網表,一般是門級網表,如chip_design.v
- 設計約束文件,包括時序約束文件,如chip_design.sdc
- 物理庫文件,一般是LEF文件
- 時序庫文件,一般是LIB文件
- I/O文件,一般是I/O的約束文件
- 布圖要求文件
????????布圖規劃的主要內容包含了對芯片大小(die size)的規劃、芯片設計輸入輸出(I/O)單元的規劃、大量硬核或模塊(hard core, block)的規劃等。在某些不規則的設計中,需要對布線通道進行一些特殊的設置,這些參數的設定也是布圖規劃中的組成部分。在一些較為復雜的超大規模集成電路設計中,為了盡量減少時鐘信號線的偏差、提高芯片的性能,在布局之前便需要對時鐘網絡進行規劃,此時的時鐘網絡分布與普通的時鐘樹不同,它也是布圖規劃的重要組成部分。可見,布圖規劃的內容是對芯片內部結構的完整規劃與設計。
???????布圖規劃的主要內容為:
- 確定芯片的面積。出于成本的考慮,芯片的面積越小,每張硅片(wafer)上產出的裸片(die)數量將增大,從而平均到每個芯片上的成本會降低,但是如果布圖規劃設定的裸片面積太小,則會造成擁塞程度高,難以布線,從而會導致長周期的設計迭代,一個合理的面積設定是在保證布線的同時盡量節約產品成本,所以布局的最初目標是估計芯片面積的大小。
- 確保時序的收斂。在數字集成電路設計中,所有的工作都是在時鐘節拍的控制下完成,所以從一個寄存器到達另外一個寄存器的路徑長短決定了芯片的性能。在芯片設計的布圖規劃階段,設計者就要考慮到最終芯片是否能滿足設計的標準時序約束(SDC)的要求,實現時序的收斂,滿足芯片所需要實現的性能,因此在布圖規劃階段需要對芯片的延遲進行預估。
- 保證芯片的穩定。芯片能穩定地工作是芯片價值的重要組成部分,芯片輸入輸出單元的靜電保護和輸入輸出單元的供電設計都是保證芯片輸人輸出穩定的重要條件。電源規劃也是保證芯片內部電源分布均勻、供電充足、芯片工作穩定的必要條件。
- ?滿足布線的要求。布圖規劃與布局完成了芯片的器件擺放,而芯片功能的實現需要將所有的器件按照要求連線,故布圖規劃的目的是為了方便走線,在保證布線通暢的同時,盡量縮短走線的長度,也即減小互連線的延遲,從而有效地提高芯片的性能。這耑要設計者對邏輯設計及其功能有一定的了解,如各個模塊之間的連接關系、數據通路結構等,一個好的布圖規劃和一個差的布圖規劃在時序上的差別甚大。
二、I /O單元的規劃
1、I /O 單元的類型和布局
????????作為連接芯片內部信號與封裝管腳的橋梁,I /O 單元的分配要綜合考慮印制板走線、封裝形式、供電情況以及內部模塊結構,從而保證信號從芯片內部傳遞到外部時其路徑最短,同時要求從I/O單元關鍵引線到封裝點時,避免信號交叉,方便封裝基板的制作,減少基板上的走線層數,從而降低封裝的成本。當芯片為通用芯片時,需要參考現有的類似芯片的封裝形式,從而方便產品的應用,如果芯片是專用于某個設計,則芯片的封裝可以以印制板走線為基礎,從而確定I /O 單元的位置。
????????I /O 單元可分大致為信號接口和電源兩種類型,信號I /O 單元的關鍵是選擇驅動的大小,而電源I /O單元需要重點考慮的是供電電源的數量計算和擺放。I /O 單元的類型有:數字輸入單元、數字輸出單元、數字雙向輸入輸出單元、靜電保護單元、給I /O 接口單元供電的單元、給芯核供電的單元、數字填充單元、模擬供電單元、模擬輸入單元、模擬輸出單元、模擬填充單元、專用輸入輸出單元、角填充單元等。在輸入輸出單元中,又分為普通輸入、帶上拉輸人、帶下拉輸入、帶施密特整形等多種類型,按照驅動能力(以0.18um為例)可以分別有1mA、2mA、4mA、6mA、8mA、12mA、16mA等。設計者需要根據實際情況選擇單元的類型以及驅動能力。在基于標準單元的數字集成電路設計中,I /O 單元都是廠家提供,工程師可以參考設計文檔,從而完成I /O 單元的選型.
????????廠家所提供的庫中,往往具有多種寬度的I /O 單元。如SMIC的0. 18um 1P6M工藝中,就有普通寬度、狹窄寬度、寬寬度3種類型。當芯片的輸入輸出單元較多,而內部邏輯單元較少且一般為I /O 單元限制型設計時,一般選用狹窄的I /O 單元;當芯片的輸入輸出單元較少,而內部邏輯單元較大時,則一般選用寬的I /O 單元。在同樣條件下狹窄型I /O 單元比寬型I /O單元的高度要高。當設計為子模塊時,I /O單元的形式為接點(pin)而不是接口(pad)。芯片設計中I /O單元為最常見下圖(b)。在ASIC設計中,為了提高利用率,每一邊的所有單元可以事先做成一塊模塊。芯片的pin和pad的物理特征和形狀與封裝中的pin和pad是不一樣的。
芯片中pin指芯片內部各子模塊或cell邏輯連接的接點;封裝中的pin指芯片封裝好后的管腳,即用戶能夠看到的管腳。IO pad是與芯片外部連接的。
? ? ? ? 此外,當芯片面積較大、芯片時序較為緊張時,則采用倒置封裝(flip chip)設計,即I /O 單元的分布不是四邊擺放,而是均勻分布在芯片的內部,讓芯片的接觸點與基板、載體、電路板相連,在相連的過程中,由于芯片的凸點是朝下連接,因此稱為倒裝。常見的如電腦中的內存條:
???????flip chip?優點在于其封裝簡單、封裝與晶片尺寸相當、成本低、便攜、芯片倒裝焊減少傳統引線的寄生電容,有利于提高頻率、改善熱特性;而其缺點為芯片裸露、還需要進行二次封裝、二次布線設計復雜。
????????在布圖規劃和布局工具中,對采用倒置封裝的面積I /O(area I/O)的擺放通過以下步驟完成:
- 在LEF技術文件中,需要用CLASS PAD和PAD SITE將I /O單元定義為特定的類型。
- 將flip chip的I /O 單元庫導入設計。
- 加載版圖規劃文件和I /O 單元設置文件。
- 放罝 flip chip 的 I/O 單元。
2、I /O單元的供電
? ? ? ? 在數模混合的標準I/O單元庫中,電源I /O 單元可以大致分為3類:
- 給模擬器件供電的I /O 單元
- 給數字器件供電的I /O 單元
- 隔離數字供電I /O 單元和模擬供電I /O 單元的隔離I /O 單元
(1)模擬器件供電
????????給模擬器件供電的I /O 單元在布局上有其特殊的要求,一般情況下,一個模擬器件采用一對供電I / O單元便可以滿足要求,如果芯片的I / O單元比較寬松,則最好使用“雙綁定”(即將die上兩個I /O 單元綁定bonding到一個焊盤上),從而保證器件的穩定工作。
(2)數字器件供電
????????數字I /O 單元也分為兩大組,一組是給I /O 單元供電,一組是給核內的標準單元供電,因此在設計I /O 單元供電時,需要計算兩組電源的數量以及其分布。
? ? ? ? 1、給核內單元供電的I /O單元的數量m 根據芯片的功耗、I /O單元的供電電壓以及供電電流來估算,公式如下:
? ? ? ? 式中,是芯片的平均功耗
? ? ? ? ? ? ? ? ?是供電I /O單元正常正常條件下的供電電壓
?????????????????是供電I /O 單元的最大電流
? ? ? ? ? ? ? ? 是調整因子,最小取1?2,域大可取5?10,根據芯片的實際情況而定
? ? ? ?2、給I /O單元供電的供電單元數量也由多種因素來決定,I /O 單元的功耗、輸出I /O 單元的驅動能力、同步開關噪聲(SSN,simultaneous switching noise; SSO, simultaneous switching output noise)等都影響了此類I /O 單元的數值,經驗做法是給I /O單元供電的單元數量與給輸出信號端口的比例為1 : (5?10)的關系,與給內核供電的I /O 單元的數量是1 : 2 的關系。?
三、延遲預估
????????在布圖規劃與布局之前,常規條件下會對芯片的時序進行理想情況下的零線負載模型(zero WLM,wire load model)做延遲分析,從而驗證當前使用的、剛綜合出來的網表是否有較好的時序(通常在邏輯綜合結束時,應當產生用零線負載模型進行延遲分析報告)。如果在理想情況下,時序已經很緊張,建立時間的實際值與要求值之差,即剩余時間(slack)比較大,則應當重新優化網表,或者從RTL代碼著手,縮短關鍵路徑的延遲。
? ? ? ? 以層次化設計為例,下面說明在布圖規劃階段的延遲預估的方法。
????????層次化設計大致可分為三個步驟:芯片頂層設計規劃、子模塊分割(partition)與實現以及芯片頂層組裝實現。層次化設計的時序預估有兩部分內容,在芯片規劃階段對整個芯片的延遲預估和時序分析以及子模塊約束的產生,子模塊約束的產生是在芯片延遲預估和時序收斂的前提下進行的。在時序預算(time budgeting)時,首先需要對整個芯片的時序進行分析,分析方法為:實驗多種布圖規劃后,根據其標準單元布局,采用靜態時序分析方法,對整個芯片的延遲做出估算,用時序違例(即負值剩余時間,negative slack)來評估哪種布圖規劃更為合理。得到時序分析的結果后對時序進行預算。
????????在層次設計時進行時序預算的方法是:首先確認穿過各個分割區域的時鐘,并產生時鐘路徑上的傳播延遲;然后確定各個分割區域的所有邊界接點,對每一分割區域的邊界接點,根據通路延遲的大小,對應其所屬的時鐘域,輸入接點生成輸入延遲(set_input_delay),輸出接點生成輸出延遲(set_output_delay)等時序約束。
????????一個輸入輸出單元可能有多條路經通過,多條路徑經過一個單點時會產生時序競爭。在處理這些多時鐘端口時,設計工具會選擇用戶指定的路徑來解決競爭問題,并且還會把該路徑設為時序預算分配中的考慮對象,可以用時序預算給出的參數選項(option)來完成路徑的選擇。
- -min:選用最小周期時間的路徑進行時序預算。
- -max:選用最大周期時間的路徑進行時序預算。
- -critical:選擇具有最壞slack值的路徑進行時序預算。
- -muilticlock:對時鐘邊沿分割區域的端口產生多輸入和輸出延遲約束。
- -normalized::用slack值與需求時間的比值進行時序預算。
- -combined :多種路徑組合進行時序預算。
????????另外,以路徑延遲(set_max_delay,set_min_delay)的約束通過一個多時鐘域端口時,
該約束與輸人輸出延遲等約束相比,具有優先權。
????????在層次化設計中,需要對時鐘樹上的延遲進行預估和分配,在芯片進行邏輯綜合時,應根據時鐘周期,計算時鐘在芯片內的延遲。在展平式設計時,布圖規劃和布局階段一般以定義的時鐘延遲和時鐘不確定性來模擬時鐘,在時鐘樹綜合階段才分析時鐘的真實屬性。但是在層次化設計中,因為在子模塊級才進行時鐘樹綜合,故在頂層布圖規劃和布局階段,需要對時鐘樹上的延遲進行預估和分配。
? ? ? ? 上圖所示的層次化設計,時鐘clk1從頂層穿過了子模塊1、子模塊2、子模塊3,最后又回到了頂層。該時鐘樹上的時鐘延遲分配主要從模塊之間的時序預估,以及時鐘樹穿過區域的面積從而確定時鐘樹上延遲的大小。clk1總的時鐘樹的延遲理想值為1.2ns,子模塊1的面積較小,且邏輯較為寬松,則時鐘樹上的延遲分配了 0. 2ns,子模塊2的面積跟子模塊3 的面積相仿,但是clk1在子模塊2中所掛接的寄存器較模塊3多,時序較為緊張,故而分配給子模塊2的時鐘樹延遲為0. 5ns,分配給子模塊3 的時鐘樹延遲為0.3ns。從頂層到子模塊1之間的時鐘延遲為0.1ns,從子模塊3 到輸出的延遲為0. 1ns,故分配的(指令)結果如下:
create_clock -name "clk1" -period 10 -waveform {0 5} [get_ports {xtall}]
set_clock_latency 1.2 [get_clocks {clk1}]
create_clock-name "sub1_clk1" -period 10 -waveform {0 5} [get_ports {module1/A}]
set_clock_latency -source 0.1 [get_clocks {sub1_clk1}]
set_clock_latency 0.2 [get_clocks {sub1_clk1}]
create_clock-name "sub2_clk1" -period 10 -waveform {0 5} [get_ports {module2/B}]
set_clock_latency -source 0.305 [get_clocks {sub1_clk1}]
set_clock_latency 0.5 [get_clocks {sub2_clk1}]
create_clock-name "sub3_clk1" -period 10 -waveform {0 5} [get_ports {module3/A}]
set_clock_latency -source 0.9 [get_clocks {sub1_clk1}]
set_clock_latency 0.3 [get_clocks {sub3_clk1}]
?????????從上面的圖中我們看出,時鐘樹上的延遲分為兩種:一種即-source定義的是從時鐘的源頭到達所定義的時鐘樹根節點的延遲;另一種則是直接對時鐘樹上延遲的定義,通過兩者來確定一個時鐘樹的延遲信息。 ??
?四、模塊布放與布線通道
????????模塊或宏模塊的布放是布圖規劃中比較繁瑣但是很重要的工作,進人納米設計技術之前,大多采用半自動布放。和I /O單元的布放方法類似,模塊的布放屬于布局,但它又是在布圖規劃階段完成的。由于占據空間很大,它們的布局完成后,電源規劃才有實際意義。當代SoC設計可以包含數百或更多個模塊,如下圖所示,這時必須借助EDA工具來實現模塊的自動布局。
????????模塊布放位置是建立在布圖規劃基礎上的,模塊布局的結果又會對前期布圖規劃的期望目標產生直接影響,其中,能否保證布線的完成是通過布線通道的分析來進行的。
????????當讀入設計數據和用戶定義芯片的面積(即die size)之后,EDA 工具根據LEF(或其他工藝文件)工藝內容中布線間距(pitch)的大小,在整個芯片內部自動生成各金厲層連續、規則的布線軌道。布線軌道(routing track)是指芯片內部專門用于布線的路徑,布線通道(routing channel)是每兩條或多條布線軌道的空間,它們的上面是不可以擺放標準單元的。在模塊(如RAM)四周通常還預留不允許擺放標準單元僅供專門布線的暈道(halo)。這是因為在基于標準單元的設計中,標準單元在布局階段完成了整個芯片內部的擺放,由于標準單元占據了底層金屬的絕大多數布線軌道,當芯片局部出現擁塞時,采用布線暈道的定義會增添更多底層的布線通道。在RAM之間預留了很多不放置標準單元的底層布線通道。當然這種預留底層布線通道的做法,解決了當前局部擁塞的問題,但也會產生其他區域的擁塞問題,因此,在布圖規劃和布局中,需要多次迭代分析,從而實現最佳效果。
????????在層次化設計中,對各個預計分割的區域之間也需要進行布線通道的定義。通道寬度估算會考慮模塊布局的拓撲約束,這些約束包括子模塊到子模塊的界限及它們之間的距離、順序和排列,以及它們的表面比率、網絡權重和子模塊隔離區。如下圖所示?。??
????????在層次化設計中,布線通道按照形狀分有典型的T 形通道和L 形通道兩種。需要通過對這兩種類型的通道進行均衡、排序以及切割等方法,從而保證模塊之間的布線通道能夠滿足芯片的布通性。當兩個子模塊在芯片內部的空間跨度比較大時,有時還需要定義直通(feedthrough)布線通道,從而滿足時序和布線的要求。由于基于行的子模塊內的布線一般比子模塊間的布線更節約布線空間,因此展平式設計可以減少布線面積。這樣,在層次化的方法中也引入了滿足基于行的布線方法,稱作無通道(charmel-less)分割法如下圖(b)所示。下圖(a)為基于布線通道的分割,下圖圖(c)為混合法。圖中每個“模塊(block)”為層次化設計中從頂層分割而成的子模塊,每個子模塊可以包含一個或多個邏輯模塊(module)。
?????????
????????當每個子模塊實現了布局布線并滿足時序要求后,可以產生自己的物理單元(LEF)和時序單元( lib或1LM),這時它就成為一個硬核模塊,它可以被看成是展平式設計中基于模塊的設計(BBD,block-based design)類型。? ?