第一章 簡介
在最近這幾年,電路中的電晶體數量已進入超大型積體電路(VLSI)時代,而 在單一晶片中電晶體的個數已經超過十萬個以上,當設計者面對如此龐大的電路 與複雜的線路,已經無法使用人工去處理電路規劃與測試等工作,因此唯一的解 決方式便是利用電腦等這些計算機輔助設計(Computer-Aided Design,CAD)工具 來幫忙驗證及設計。
藉著 CAD 工具的幫助,在設計超大型積體電路時,可以先在圖形介面的終端 機前作電晶體層次的實體設計,然後利用先前設計出來的小區塊電路再組合而成 大區塊的電路,直到完成整個設計為止。也可使用高階硬體描述語言藉由合成器 完成電路設計,有效的使用高階硬體描述語言作為電路的設計的基礎,大大的降 低設計與驗證的時間。
當高階硬體描述語言被廣泛使用之後,電路設計者就更需要計算機輔助設計 工具來幫助完成晶片的設計,且隨著單一系統晶片(System-on-Chip , SoC)時代 的來臨,晶片設計就變的更複雜,而為了解決所增加的設計複雜性,於是矽智財 (SIP)模組就被廣泛的使用,導致晶片內的矽智財模組可能是由許多不同公司或 不同部門所提供,相對地矽智財模組的整合對於發展單一系統晶片而言是一個相 當重要的關鍵,所以設計出一套可應用於單一系統晶片的計算機輔助設計工具便 是非常重要的。
計算機輔助設計工具分成前段(Front-end)和後段(Back-end)兩部份,前段 的設計流程主要是電路的合成及功能性的驗證等等,而後段的設計流程則是屬於
經由這套設計流程就可以讓晶片設計者能夠更快完成晶片的設計及驗證之工 作。圖 1.1 為簡單的傳統實體設計流程圖。
圖 1.1 傳統的實體設計流程
傳統的實體設計流程中,每一階段都有一個主要考慮的重點,在板面規劃階 段主要是思考如何讓晶片設計獲得最小的面積;而整體繞線階段需考慮腳位(pin) 連接且所使用之連接線段是最短的,使得內部連接傳遞延遲(Interconnection Delay)變少,讓晶片的效能更好;最後細部繞線階段會根據整體繞線所得的結 果,實際去完成每一條繞線,同時須避免在同一區域浪費太多空間。但是在初期 時,因為晶片設計較簡單且電晶體的個數較少,因此當時的晶片設計者大多都只 考慮晶片設計的功能是否正確,並不會去考慮面積及速度等其它方面的限制。
但是當晶片設計進入到深次微米 (Deep- Submircon , DSM)及單一系統晶片 的整合時,由於晶片製程技術的進步及效能的提升,造成現今的晶片設計需考慮 更多其他方面的限制,因此各種新的實體設計流程就相繼被提出,雖然基本流程
整體繞線 ( Global Routing )
細部繞線 ( Detailed Routing )
分割
( Partition )
板面規劃
( Floorplan )
仍與之前大同小異,但是流程中每一階段主要考慮的重點已經改變,在板面規劃 階段不只需要考慮面積,晶片效能、可繞性也要列入考慮;而在整體繞線階段也 不只需要考慮繞線的長度,可能也必須考慮速度的要求及繞線的擁擠程度;在細 部繞線階段,就可能必須考慮關於線路干擾(Crosstalk)的問題。面對如此不 同的問題,所以必須提出一套新的流程來解決,圖 1.2 為單一系統晶片的實體設 計流程圖。
圖 1.2 單一系統晶片的實體設計流程圖
隨著單一系統晶片時代的來臨,矽智財(SIP)模組被廣泛地應用在現今的晶 片設計中,導致晶片內的矽智財模組可能由許多不同公司或不同部門所提供,對 於發展單一系統晶片而言,將所有矽智財模組整合至單一晶片中是一件相當重要 的事情,同時也造成單一系統晶片內的板面規劃(floorplan)變的比以往更加重 要。另外由於電路複雜度高,客戶需求的功能多樣化( 如高效能、低功率…等),
造成整個設計流程所需的時間變長。所謂好的開始就是成功的 一半,身為流程 第一步的板面規劃自然就身負讓產品早點上市的重任。有鑒於上面兩個原因,就
面積、速度、可繞性
速度、擁擠程度
線路干擾 整體繞線
( Global Routing )
細部繞線 ( Detail Routing )
板面規劃
( Floorplan )
實體設計流程 問題需求
板面規劃問題分[1][2]為可分割與不可分割[3] [4] [5] [6] [7] [8] [9]
[10] [11][12][13] [14] (slicing and non-slicing)兩種,由於可分割問題只 適用於特殊的例子,所以本篇論文所討論的是在各種不同需求下去解決不可分割 板面規劃問題,所採用的資料表示方法為雙重界限串列(Double-Bound-List, 簡 稱 DBL,為使用方便之後將使用簡稱)[26],DBL 表示法具有目前幾個熱門表示法 (如 sequence pair [7]、O-tree [9]、B*-tree [11]、CBL [12]、TCG [13]及 SCP [14]等)之優點,例如 DBL 表示法符合 P-admissible 特性的需求、可以直接 從 DBL 表示法中得知總面積和鄰近關係,另外 DBL 表示法只需使用少量記憶體,
且也符合一對一對應之關係。除了使用 DBL 表示法外,本篇論文也對應左下靠緊 板面規劃(Left-Bottom(LB) Compact Floorplan)發展一種儲存其輪廓的資料結 構,藉著使用這兩個資料結構,可以更有效率的去搜尋較佳的板面規劃。
以往討論板面規劃多是以晶片面積為主要考量,但是隨著晶片製程技術進步 晶片越做越小,面積的問題已不如以往那麼重要,近期的研究中取而代之的考量 有高效能、低功率…等。不過更令人在意的是可繞性考量,這是由於在過多的考 量背後,容易造成日後繞線(Routing)的程序花費過多的時間,間接影響產品出 產的時間。所以本論文的成本函式和演算流程將不是單純的以面積為單一目的,
將會加入各種因子,透過這些改變,使得板面規劃可以達成各種使用者的需求。
最後實驗結果將顯示新的方法可以達成各種需求。
在接下來的章節中,第二章將描述板面規劃問題與介紹相關研究,第三章說 明如何用階層式階梯輪廓結構表示左下靠緊板面規劃的輪廓,第四章是介紹 DBL 表示法以及其操作方法,第五章則解釋如何使用 DBL 執行模擬退火式板面規劃演 算法,以及說明成本函式的估算,包括面積、繞線長度估算與可繞性估算等成本 因子,第六章是實驗結果,第七章為結論與未來方向。
第二章 板面規劃問題介紹
本章將介紹板面規劃問題的相關知識,包括問題定義、相關研究還有重要的 理論介紹。
2.1 板面規劃之簡介
板面規劃是實體設計流程中的一部份。系統單晶片時代的來臨,模組化設計 的概念已成為晶片設計方式的主流。所謂的模組化設計即是利用已設計好的電路 模組將其組合成積體電路的晶片。而板面規劃的主要目的就是將所有電路模組擺 置於晶片中在不重疊的情況下同時讓晶片能達到最佳化,如:面積最佳化、效能 最佳化或是熱能最佳化等。
隨著製程技術的進步,單一晶片所能容納的電晶體數已達到上千萬顆,使得 單晶片系統成為可行的,也使得傳統的電子設計自動化工具需做另一次的改革。
就板面規劃來說,最大的不同莫過於傳統的電路區塊均是固定長寬的硬體區塊 (Hard block),然而現今的電路區塊已出現了不固定長度的軟體區塊(Soft block),也就代表著在相等面積下,區塊之長寬比可在某一範圍內變化,這也為 現今板面規劃軟體帶來更多的考量因素。
由於因單一晶片內之電路過於龐大且複雜,若不分割成若干個小電路而要電 腦一次處理如此龐大複雜的電路,那所消費之資源與時間是不可言喻的,也就是 若將電路分割成數個較小的電路來處理,那無論是時間或資源均可降低,此一做 法之最大缺點就是電路無法得到最佳化,因其最佳化之結果可能因分割而被破
板面規劃問題基本上可以看成一個幾何圖形的排列圖形,下面一節將定義板 面規劃問題,其實這個問題就有如一個拼圖的問題。
2.2 問題定義
板面規劃問題即定義使用者所輸入模組在晶片上的位置,其實可以將每個模 組看成一個個矩形區塊,通常根據所輸入的模組性質不同可以分為硬體區塊 (hard block)也就是其長度及寬度固定但可以旋轉 90 度,另外還有一種為軟體 區塊(soft block)也就是面積固定但長度和寬度可任意變動,目標就是要決定這 些區塊的位置和長寬且互相不重疊,詳細問題定義如下:
假設有 n 個矩形區塊 b1,b2,b3,……,bn要放置在 x 軸與 y 軸平面上,而 每一個區塊 bi都有一組屬於自己的長度和寬度(hi , wi),因此一個板面規 劃即可以定義成 P={(xi , yi) | 0<xi , 0<yi , 1≦i≦n},(xi , yi)為區塊 bI在板面規劃中的左下角座標位置,且所有區塊不可重疊,若區塊若屬於 硬體區塊則要決定擺置方向,若屬於軟體區塊,則須先決定長度和寬度,
因為在區塊面積不變的情況下可能會有很多不同組合的長度和寬度,所以 若為軟體區塊就必須先決定長度和寬度。
擺好這些矩形的位置後,再透過成本函式運算即可判斷這個板面規劃的好 壞,由於其中變化很多,板面規劃問題已經被歸類為非多項式困難問題(N-P hard problem),其時間複雜度隨個數的指數或以上成長,以下有個簡單的範例:假設 有二個區塊分別為區塊 a 和區塊 b(如圖 2.1(a))要放置在平面上,區塊 a 的長 度、寬度及面積分別為 2、5 和 10,而區塊 b 的長度、寬度及面積分別為 4、 6 和 24,如果此二區塊皆屬於硬體區塊則它們的板面規劃就有 16 個(如圖 2.2(b)),但是若皆為軟體區塊(soft block),則區塊 a 的長度和寬度就有(1,10) (2,5) (5,2) (10,1)四種組合,區塊 b 的長度和寬度就有(1,24) (2,12) (3,8)
(4,6) (6,4) (8,3) (12,2) (24,1)八種組合,因此區塊 a 和區塊 b 的板面規劃 總共就有 128 種。
(a)區塊 a 和區塊 b
(b) 16 個板面規劃 圖 2.1 二個區塊之板面規劃
由以上簡單的例中可看到單單只有兩有個區塊就有 128 個板面規劃,如果區 塊數目變多或軟體區塊數目增加,則板面規劃的數目變化會無可限量,另外成本 函式也會包含許多變數,造成更多變化,因此一個優良的區塊板面規劃表示法,
必須可以減少搜尋的次數減少,使得搜尋時只找比較有希望的板面規劃,就可得 到所要求最小成本的板面規劃,也就是說縮小答案空間,且保證這個答案空間的 答案為較好的,只要搜尋這個縮小後的空間,就可得到需要的答案。
2.3 可分割板面規劃
所謂可分割板面規劃是指一個矩形經由遞迴方式做水平或垂直切割,且每次 切割都可一分為二而不會損毀到內部之電路區塊(如圖 2.2),及電路區塊不可置 於切割線上。
圖 2.2 可分割板面規劃
原則上可分割的板面規劃屬於較有規律的,因此可以用簡單的資料結構很完 整的表示,Otten [1]是第一個提出使用二元樹當基礎架構來表示可分割板面規 劃,之後 Wong 和 Liu [2]提出一個標準化的 Polish 表示法來改善二元樹的表示 法,基本上使用二元樹表示可分割板面規劃已是一種共識。
在[2]中,Wong 與 Liu 將葉節點設為電路區塊,中間點代表切割方式,其中
“ * ”代表垂直切割,“ + ”號代表水平切割,如圖 2.3 所示,依此觀念將一 電路區塊表示成二元樹,如圖 2.4(a)所示,第一個切割邊為區塊 6 與區塊 2 相 鄰的垂直線,切割完畢後,整個電路區塊可分成左右兩個區塊,再將左邊的電路 區塊做水平切割,將可得到 Polish 表示法中二元樹所需的樹葉,依此類推,最 後可得圖 2.4(b)的 Polish 二元樹,最後再以後序(Post Order)表示法寫出 16+35*2+74 +**,此即為 Polish 表示法。
圖 2.3 切割符號功能示意圖
6
1 3 5
2 4
7
* +
1 6
*
+ +
* 2 7 4
3 5
(a) (b)
圖 2.4 可切割之電路區塊與相對應之 Polish 二元樹
所需注意的是 Polish 表示法與實際的板面規劃之間的關係並非是一對一的 對映,如圖 2.5(b)(c)所示,兩者所對應之電路區塊均為 2.5(a),XXXXXXXX
1
3
2
4
*
1 *
+ 4
3 2
*
1
* +
4
3 2
A B A
+B
* =
= B A
A B
基本上這些演算法有以下好處:
1. 把焦點縮小在可分割的板面規劃裡,所以搜尋速度極快。
2. 資料結構都簡單且皆可完全對應到相對的板面規劃。
3. 對於軟體區塊的彈性可以完全的發揮。
雖然 Wong 和 Liu 提出一良好的改善方法,但在真實電路中可分割的電路只 佔極少數,大部份的電路均是不可分割的電路,下一節將討論不可分割的情況,
不可分割的板面規劃就沒這麼規律性了,所以出現了各種五花八門的資料結構。
2.4 不可分割之板面規劃
若每次切割都無法一分為二或會損毀到內部之區塊就稱為不可分割板面規 劃 (如圖 2.6)。但是板面規劃的基本問題在於如何表示區塊之間彼此的幾何關 係,因為板面規劃的表示法不只決定運算的複雜性同時也影響處理不同限制的板 面規劃問題之彈性,也因如此,許多研究均致力發展一個效率高、有彈性且有效 的板面規劃設計表示法。雖然可分割板面規劃有較多的優點,如表示法的個數較 少及執行板面規劃設計時間較快,但是目前大部分的晶片設計幾乎都是不可分割 之板面規劃,且對於處理面積最佳化而言不可分割板面規劃比可分割板面規劃的 效率更高。
圖 2.6 不可分割板面規劃
近 來 有 許 多 學 者 提 出 關 於 不 可 分 割 板 面 規 劃 的 表 示 法 , 如 序 列 對 映 (sequence pair ,SP) [7]、O-tree [9]、B*-tree [11]、DBL[26]均為不可分割 板面規劃問題中的代表。
2.4.1 序列對映(Sequence Pair)表示法
在[7]中,Murata et al.提出一表示法能將板面規劃表示之個數從未知數變 成已知數,即將不可分割板面規劃問題的答案空間縮小了,提出了一個規則把不 可分割板面規劃規則化,所使用的每一序列對映皆由兩組序列(Γ+,Γ-)所組合 而成的,每一組序列均代表著電路區塊於晶片上的位置的相對關係,所代表之意 義如下:
(...
x
i...x
j...,...x
i...x
j...) :x 在
ix 的左方
j(...
x
j...x
i...,...x
i...x
j...) :x 在
ix 的下方
j由(Γ+,Γ-)中可得知所有區塊間的相對關係,也知此可建構出區塊間的水平關 係圖GH( EV, )與垂直關係圖
G
V( EV
, ),若圖 2.7(a)為電路區塊,則圖 2.7(b)與 2.7(c)所示則代表其水平關係圖與垂直關係圖,藉由此二種關係圖可找出其最長 路徑,進而得到板面規下晶片的大小。另外還有定義 P-admissible 表示法,所 謂 P-admissible 表示法需滿足以下四個需求:(1).表示法的個數是有限的;(2).每個表示法可對應到一個板面規劃;(3).在多項式時間(polynomial time)內即 可將表示法轉換成板面規劃和完成成本的估算;(4).成本估算最小的表示法即可 轉成最佳的板面規劃。
a
f c
d e f
(a) 電路區塊
c d
e f
a
b
s t
c d
e f
a
b
s t
(b) 水平關係圖 (c) 垂直關係圖 圖 2.7 序列對映之板面規劃與關係圖
2.4.2 O-樹(O-tree)表示法
在[9]中,Guo et al.是第一個提出以樹為基礎架構的表示法稱為 O-tree,
對於要尋找幾合圖形之板面規劃問題簡化為資料結構中“樹”之問題,可以使用 樹中較少之運算(刪除、插入和交換)即可得到所有表示法,並且所有的運算都可 以直接在 O-樹上完成,雖然其運算很容易但樹節點的邊複雜度太大,通常會導 致運算變的很複雜,且造成結構無法掌握,答案空間過於龐大,此為最大之缺點。
在圖 2.7 中則表示了部份 O-tree 之表示法。
(a) 水平搜尋 (b) 水平 O-樹表示法 圖 2.8 O-樹表示法
圖 2.8(a)中的黑點是表示 O-樹的樹根(root),是從最左下角的區塊開始搜 尋,序列紀錄只要是往右走即在序列中記錄一個 0 和此區塊名稱,若往左走即往 回走只需在序列中紀錄一個 1,按照此原則即可得到序列,接著根據序列,只要 遇到 0 即往下走且將區塊名稱當成子節點,遇到 1 即往上走回到父節點,就可得 到水平 O-樹表示法(如圖 2.9.(b))。而序列對映與 O-樹表示法相比較則所需的 儲存空間較少,但無法由表示表得知區塊的幾合關係,且不符合 P-admissible 定義。
2.4.3 B*-樹(B*-tree)表示法
在[11]中,Chang et al.提出以二元樹為基礎的樹狀表示法稱為 B*-樹,此 表示法主要是改進 O-樹的邊複雜度且表示法的個數也比較少,而與序列對映表 示法一樣也需做向左與向下的壓縮的動作。每一組 B*-樹表示法需使用兩個樹狀 圖(水平樹狀圖(Horizontal B*-tree)與垂直樹狀圖(Vertical B*-tree))來表 示,以圖 2.9 為例,首先要對電路區塊做水平搜尋與垂直搜尋,而無論是水平搜 尋或是垂直搜尋均是以最左下方之電路區塊為樹根,再以一種類似深先搜尋(DFS)
a b d c
e f
1 0
root
a d e
b c f
0 1
1 1
1 1
0 0
0 0
a i j k b c d
e
f g
h l
a i j
k b c d
e
f g
h l
a b
f c
h
g d
e
i j
k l
(a) 水平搜尋 (b) 水平樹狀圖
a i j
k b c d
e
f g
h l
a i j
k b c d
e
f g
h l
a b
f c
h
g d
e
i j
k l
(c) 垂直搜尋 (d) 垂直樹狀圖 圖 2.9 B*-樹表示法
因 B*-樹是以樹為基礎架構,所以只需較少的運算即可,且與相同是樹狀結 構的 O-樹相比較,O-樹在插入與刪除節點時之時間複雜度為 O(n),而 B*-樹只 需 O(1),但與 B*-樹有著相同的問題:就是無法直接從表示法得知區塊間之幾合 關係及無法符合 P-admissible 之定義。
2.4.4 資料結構比較
在本節介紹了許多的板面規劃表示法後,最後將其所有特性以表格方式做一 完整性之比較。
表示法型態 表示法 相鄰 插入 刪除
序列式 SP - - -
圖形式 B*-tree - O(1) O(m) 序列-圖形式 O-tree O(1) O(m) O(m)
表 2.1 運算執行時間比較表 (m:表示區塊的個數)
表示法 型態
表示法 表示法個數
1 對 1 之 對應
P-admissible
從表示法得知相 鄰關係 序列式 SP O((m!)2) 是 是 否 圖形式 B*-tree O(m!22m-2/m1.5) 否 否 否 序列-
圖形式
O-tree O(m!22m-2/m1.5) 否 否 是
表 2.2 結構特性比較表 (m:表示區塊的個數)
表示法型態 比較項目 節點 邊 序列 總和 序列 SP X X 2m(log m) 2m(log m) 圖形 B*-tree 2m 4m X 6m 序列加
圖形
O-tree 2m 2m2 2m+m(log m) 2m2+4m+m(log m)
在這節所介紹的這幾種先前學者所研究出來的方法都是以縮小板面規劃的 面積為主,這些表示法都是相當傑出且巧妙地以簡單的資料結構如序列、樹等,
來對應到板面規劃中各區塊間複雜的二維關係,接著藉著這些資料結構的不斷改 變來搜尋最佳的結果。
上述的方法在改變資料結構的速度都很快,甚至有些操作只要 O(1),由這 些快速的改變,就可以在短時間內搜尋很多的答案,從這些文章的實驗結果中可 以看出在翻出大量的結果下是可以得到很小的面積。不過學者們為了使資料表示 法簡單化,會將複雜的二元關係減少很多,造成有很多無意義的答案會被翻出 來,譬如兩個相鄰區塊中間沒有阻礙物卻有很大的空隙,或是兩個區塊是互相重 疊的,這些答案都不是需要的,如圖 2.10 使用 B*-tree 所表示的二元樹所對應 的板面規劃,由於結構的關係模組 9、5、6 和 3 還可移動的範圍相當大,這種答 案是屬於無意義的答案。但是由於計算面積所需要時間並不長,在加上資料結構 翻動答案相當快之下,浪費在這些無意義答案的時間無傷大雅。
在本章的第一節有提到,目前的板面規劃所需要的成本計算不止有晶片面 積,還有其他的因素要考慮到,包括晶片效能、可繞性等,這些因素的成本計算 就不是像面積如此的簡單了,若耗太多時間在無意義無用的答案中算複雜的成本 估算將會非常沒有效率,因此剔除掉這些無意義的答案是一個很重要的課題。
在第三章將提到左下緊密(LB compact)的板面規劃,這種板面規劃被認定為 有意義的答案,本篇論文的目標即是在每一次表示法變動後所對應的板面規劃皆 為這種左下靠緊的型態。
(a)不佳的板面規劃 (b) 對應的 B*-tree 圖 2.10 B*-tree 對應到一個無意義的答案
2.5 板面規劃成本介紹
在本論文一開始即提到目前對板面規劃演算法的要求已趨向多元化,因此評 估一個板面規劃所需的成本已不是單純的算面積而已了,以下將介紹幾種比較常 建的板面規劃成本以及其估算的方法:
1.晶片面積(area) : 為最基本的成本,顧名思義就是代表模組的區塊 所圍成區域的面積大小,估算的方法有兩類一種是最直接的把每個區塊的 位置座標定義出來後求其水平最大和垂直最大得到面積值,如 O-tree[9]
與 B*-tree[11]表示法 皆使用類似的方法,另外一種則不計算區塊的位 置,而是用區塊間的鄰近關係來估算出大概面積。如序列對映表示法建立 垂直與水平關係圖求的面積,大致來講前者的方法速度較慢但由於已算出 各模組的實際位置,所以是真實的面積,後者速度較快但只是估算值與實
7
0
1
4 8
9 5
2 3
6
2.晶片效能(performance) : 由於在板面規劃階段只能知道區塊和連 線接腳的位置,詳細的電路特性甚至連線如何走向都屬於未知,因此評估 晶片效能大多是以預估的連線長度來判定,又因為還未連線所以用一些連 線模型(wire length modal )來猜測連線狀況,以下列出常用的連線模型 如圖 2.12,其中點與點的距離皆為曼哈頓距離(Manhattan distance),即 其垂直距離加上水平距離的和,這類資料常見於[22][23][24]這類教科書 中。第一種是半圓周線長模型(semi-perimeter method),其估算的方法為 將要連線的各接點圍成一矩形,連線長度即取此矩形周長的一半,如圖 2.11(a) ; 第二種方法為完全圖模型(complete graph method),方法為將 每個接點視為圖形的節點連成完全圖形(complete graph),而連接邊權重 則為各節點距離,然後將所有邊的權重加起來乘二後再除以節點個數,如 圖 2.11(b) ; 第三種方式為鏈條模型(chain method),即由前所提圖形中 得 一 貫 穿 全 圖 路 徑 的 長 , 如 圖 2.11(c) ; 第 四 種 為 起 始 - 終 點 方 式 (source-to-sink method),即為設定其中一接點為起點,其他視為終點,
長度即為起點到各終點距離的和,如圖 2.11(d) ; 第五種為史丹尼樹模型 (Steiner tree),此種方法比較複雜,步驟是先利用演算法得到史丹尼點 (Steiner point),史丹尼點就是在空白地方多加節點,原本的路徑藉由經 過這個節點分支後可以減少線長,建立史丹尼點找線長及為史丹尼模型,
如圖 2.11(e) ; 最後一種方法是最小生成樹法,即為建立像方法二一樣的 圖形後用最小生成樹找出路徑的線長,如圖 2.11(f)。通常晶片的效能都是 決定於關鍵路徑(critical path),所以通常藉由線長模型算出線長後,還 會找出最長線的長度當作是效能的代表值。
(a) 半圓周模型 (b) 完全圖模型 (c) 鏈條模型 線長 : 4+7=11 線長 : 35x2/4 = 17.5 線長 : 14
(d) 起始-終點模型 (e) 史丹尼樹模型 (f) 最小生成樹模型 線長 : 17 線長 : 12 線長 : 13
圖 2.11 各種線長模型
以上這幾種線長估算方法各有利弊,畢竟是估算值模型,面對各種型態 連線總會有些不準或很準,大致比較常用的是半圓周模型,因為算法較簡 單,既然都不準,不如就取估算方式簡單且快速的,本文即採用此模型。
另外有不少其他的板面規劃演算法以最小生成樹模型的線長為比較,所以 本文的成本中也會有最小生成樹模型供選擇。
3.可繞性(routability) : 可繞性代表這個板面規劃在未來繞線時是 否容易繞線,通常會用擁擠度(congestion)來表示,若是擁擠度高表示太 擠了可能未來沒有資源供多餘的線經過,由於板面規劃階段並不了解實際 連線所走的路徑與經過的區域,所以大多是由機率來估算擁擠度。這類問
提到 Yang et al. 對於由上而下擺置的問題估算擁擠度的策略,這是一種 稱為格狀(Grid based)分析的方法,首先將整個電路切割成一個個的小格 子(Grid,格子的多寡由使用者定義,但太多的格子會造成程式執行速度降 低),再以每個格子為基礎去計算其內在繞線需求(internal routing demand)和外部繞線需求(external routing demand)如圖 2.12 所示。
圖 2.12 格狀擁擠度分析
這兩種繞線估算算值定義如下 :
內部繞線需求: 如圖 2.12(b),在連線資料找出終點和起點皆在這 個方格內的連線線段,每個格子內部繞線需求為這類線段數目。
外部繞線需求: 如圖 2.12(b)所示,外部連線是起點和終點各在不 同的格子的連線,由於在板面規劃階段無法得知線段繞線的路徑,所以 無法得知這些跨格子的連線會經過哪些格子。因此,只能用機率的眼光 去看這些線段可能經過格子的機會。機率的設定如圖 2.13 所示,由 A 到 B 則將兩點間的格子取出,又因為 B 在 A 的右下方所以設定方向只能 往右或往下,然後用兩個方向各一半的機率來計算,即可算出每條連線 經過格子的機率。
a c
b d
e f h
g
(a) 電路分成多個小格 (b) 將(a)中的格子放大,格子內部 為內部連線,格子外外部連線
放大
圖 2.13 外部連線擁擠度估算
基本上擁擠度的估算都是很抽象的,所以這些機率設定都是見仁見 智,本篇論文所提的演算法也將會計算擁擠值,所採用的估算方法也是類 似於格狀分析的方法,估算機率是採取[27]對全域繞線問題中估算擁擠度 的策略,詳細步驟將在 5.3.3 說明。
以上即是常見的板面規劃成本的種類,當然還有另外其他成本的類型如散熱 成本估算、耗電成本估算等,不過這些成本在目前的板面規劃問題中還並不常 見,本論文不予討論,在第五章將定義所用的成本函式,其中將會包面積、效能 與可繞性(擁擠度)三種成本因子。
1.0 0.5
0.5
0.25 0.5 1.0 0.5
0.25
0.5
(a) 由 端 點 A 連 線 到 B,且 A,B 各 在 不 同 的 格 子 內
(b) 這 條 連 線 經 由 格 子 的 機 率
A
B
A
B
第三章 左下靠緊板面規劃之輪廓管理:
階層式階梯輪廓結構(Hierarchical Stair Contour)
從第二章介紹的許多板面規劃問題解決方法中可以發現,通常在面對板面規 劃問題時,常因使用的表示法無法掌握實際板面規劃的形狀而造成如 2.4.4 中所 提到的困擾,造成搜尋板面規劃時很沒有效率,因此若能詳細管理其實際輪廓的 形狀將很有幫助。但是受限於板面規劃的形狀多樣性,其矩形區塊構成之直角多 邊形輪廓並不容易做存取動作,但是當板面規劃左下緊密(LB compact)的限制 時,可以把矩形區塊構成之直角多邊形輪廓畫成類似階梯狀的規則形式。
本章將介紹如何用一個有向圖形資料結構來存取這種階梯形輪廓,並且用一 個遞迴階層式的演算法來維持並更新這個圖形結構,而且藉由這個圖形還可以對 板面規劃中空白空間做一個管理的動作。
3.1 左下緊密板面規劃
在前一章 2、3 節中介紹了許多針對板面規劃的表示法,這些表示法出發點 皆希望表示板面規劃中各區塊的鄰近關係,但是板面規劃中的區塊不但處於二度 空間且每個區塊又有自己的長寬大小,想要確實紀錄其鄰近關係並不容易。基本 上鄰近關係可分為兩種 : 真實鄰近關係(real adjacent )與虛擬鄰近關係 (virtual adjacent r) 。真實鄰近關係即兩個區塊是互相貼緊的,而虛擬鄰近 關係則為兩個關係有「可能」會互相貼緊。如圖 3.1 所示,對於區塊 B1 來說 B3 與 B8 屬於真實鄰近關係,也就是它們是實際貼緊 B1;B2、B4 與 B5 則和 B1 有虛 擬的鄰近關係,沒貼緊 B1 但和 B1 間沒有任何障礙物,經過移動就可以與 B1 貼 緊,也可以說 B1 對於 B4 和 B5 是互相為可見(visible)的關係,像 B7 與 B6 和 B1 之間就沒有任何的鄰近關係,因為和 B1 間有障礙物,並無可能貼緊到 B1,就
像由 B7 因為有人擋住而看不到 B1 為不可見。大致而言,虛擬關係較沒規則化,
這可以從區塊 B5 和 B1 的虛擬關係可看出,B5 和 B1 間沒有障礙物,虛擬鄰近成 立,但 B4 則有可能阻擋到 B5 要和 B1 貼近,假設 B4 往下與 B1 貼近則 B5 就不可 能貼到 B1 了,這樣關係相當模糊不清且兩者的關係還要牽動第三者的情況,並 不好釐清且管理。
圖 3.1 B1 和其他區塊的鄰近關係 : 實際鄰近:B3,B8 ; 虛擬鄰近:B2,B4,B5 ; 沒有鄰近關係: B6,B7
由於虛擬鄰近很模糊地表示區塊的實際狀況,所以通常不希望板面規劃中的 區塊有虛擬鄰近的情況發生。但天不從人願,由於板面規劃中區塊的座標沒有任 何限制,可以天馬行空的任意隨意擺置,因此一些非常不佳且不願看到的板面規 劃有可能會出現。如圖 3.2 即為這類不佳的板面規劃,這是一個任意擺置的板面 規劃,圖中的雙箭頭連線代表更區塊間的鄰近關係,可以看出其區塊間的鄰近關 係皆屬於虛擬鄰近,大部分區塊間過於鬆散,造成整個板面規劃所佔的面積(虛 線圍出的面積)過大,空白無用的區域也過大,在做板面規劃時應該要避免擺成 如此的情況。
B1
B5
B8
B6 B2
B3
B4
E1 E2
E3
E4 E5
E6
B7
11
11 00 11
33 44
55 66
77 88
99 10 10 22
圖 3.2 任意擺置的板面規劃
通常比較希望的是如圖 3.3 所示的緊密(compact)板面規劃,每個區塊都緊 密的連在一起,鄰近關係也都屬於真實鄰近容易掌握,空白的地方較少。以經驗 來看,可以認定最小面積的板面規劃一定是緊密板面規劃,所以基本上無論是之 前提到的任何一種表示法,在取得各區塊的鄰近關係後,都會做一個壓縮 (packing)的動作,把可能有虛擬鄰近關係鬆散如圖 3.2 的板面規劃轉成緊密的 板面規劃。
11
11 11
33
44 55 88 22
66 00
10 10
77 99
圖 3.3 緊密板面規劃
不過把一個隨意擺的板面規劃轉成緊密的板面規劃這個程序相當耗費資源 與執行時間,尤其若要壓成最小面積的狀態。這個動作相當於在二維空間移動區 塊,與板面規劃問題的複雜度幾乎是一樣的,此問題也可歸類於非多項式困難問 題(NP hard problem)。為了簡化這個問題,通常都是取在緊密規劃中的子集合 左下緊密板面規劃(LB(Left-Bottom) compact floorplan)作為壓縮的目標來減 少問題困難度,這種壓縮稱為左下壓縮(LB compact)。圖 3.4 即為一個左下緊密 板面規劃,可以看出相鄰關係皆為真實相鄰且面積也不會撐的太大。
77 99 22
11 11 33 44
55 66
88 10 10
00
圖 3.4 左下緊密板面規劃
左下緊密板面規劃的想法與名詞出現於[9]中,Guo et al.在解釋其發展的 板面規劃表示法 O-樹所提到的,正如其名所代表的板面規劃中的每個區塊都是 向左下方也就是座標點的原點( 0,0)靠緊的,其定義如下:
板面規劃中任一個區塊在水平方向無法向左移動,在垂直方向無法向 下移動,則此板面規劃即為左下緊密板面規劃。圖 3.5.a 中可以看出有些 區塊可以向左及向下壓縮,因此並不是左下緊密板面規劃,而圖 3.5.b 沒
(a)非左下緊密板面規劃 (b)左下緊密板面規劃 圖 3.5 緊密板面規劃分類
基本上左下緊密規劃的觀念有點類似於日常生活的經驗,通常如果要塞東西 到有限空間時如要搬傢俱進房間,都會先搬需放在比較深地方的傢俱,日後要再 搬其他傢俱進去就不會被前面放的傢俱擋住路,這樣可以使定位好的傢俱不用再 挪動。在做左下壓縮就有如這種搬傢俱的感覺,只是把家裡的牆壁當成二維空間 的 X 軸與 Y 軸,簡單來說左下方是房間方向,右上方是門口。和單純的將鬆散的 板面規劃轉化壓縮成緊密板面規劃相比,將其壓成左下緊密板面規劃顯然較有規 則性。
以下列出左下緊密板面規劃的幾項好處:
1. 充分利用空間,板面規劃整體面積較小。
2. 空白空間被區塊完全圍起來,比較好管理與掌握。
3. 區塊間的鄰近關係皆為真實鄰近,關係較為規則化,對於要表示板 面規劃的資料結構較為方便。
4. 和轉成緊密板面規劃比較,轉成左下緊密板面規劃較有規則性
由前述說明可了解在[9]中 Guo et al.定義在其演算法中只接受左下緊密的 板面規劃為合法的板面規劃是很有益處的,本篇論文也將做如此的定義,但要達
成左下緊密的板面規劃依然要付出不少成本,在[9]中採用的策略為利用水平與 垂直兩類型的 O-tree 的互相轉換以達成目標,雖然轉換很快但由於換的次數無 法預估,所以有時需大量的時間才能完成。在本論文中,採取藉由管理階層式階 梯形輪廓來達到左下靠緊目標的策略,以下將做詳細介紹。
3.2 階層式階梯輪廓的資料結構
左下緊密板面規劃輪廓類似階梯狀,可以用一個有向圖形為基礎的資料結 構 :階層式階梯輪廓(Hierarchical stair contour)來做控制。
3.2.1 階層式階梯輪廓的基本型態
階層式階梯輪廓有四種基本型態分別為緊密階梯型(compact stair)、下方 凹陷階梯型(bottom hollow stair)、左方凹陷階梯型(left hollow stair)與左 下方凹陷階梯型(left-bottom hollow stair),如圖 3.6 所示。
(a)緊密階梯型 (b)下方凹陷階梯型
(c)左方凹陷階梯型 (d)左下方凹陷階梯型 圖 3.6 左下緊密板面規劃輪廓類型
針對這四種類型,可以用一有向圖形來表示,這個有向圖形定義如下:
節點: 每一個區塊,另外加上代表最左的節點 L,與最下的節點 B 邊 : 當兩個區塊有「可能」造成一個 L 型角落(L corner),則兩個 區塊間會有一條連接邊。
圖 3.7 即將四種類型的階梯輪廓以上述的有向圖形來表示,大致的感覺是一個串 列代表一層的階梯。第一類緊密階梯型,即是由輪廓的左上方開始依次序將在輪 廓上的區塊連結起來,由於階梯中間都沒有凹陷空隙,所以只有一層階梯用一個 串列<L→1→2→4→B>表示,如圖 3.7(a);第二類下方凹陷階梯型,在階梯中有 凹陷的地方,這時候利用個雙層串列來控制,由於區塊是左下靠緊,凹陷的地方 一定是被兩個區塊所圍住,如圖 3.7(b)下方凹陷的地方即被區塊 1 與區塊 3 所 圍住,在有向圖形中這個凹陷即會表示在節點 1 到 3 的中間,會有一個子階梯被 存在其中,這個圖形就有如兩層串列,另外為了要能表示父子階梯的關係,必須 在子階梯尾巴的地方多花一個兩區塊間不為 L 型角落的連結,如圖 3.7(b)中區 塊 2 與 3 的連線,這兩個區塊成一個轉 90 度的 L 角落,造成<L→1→3→B>為父 階梯在<1→3>間的<1→2→3>代表藏在其中的子階梯;第三類為左方凹陷階梯 型,和第二類類似,創造出來的有向圖形類似於第二類,唯一不同的是由於凹陷 在左方,所以不為 L 型角落的連結落在子階梯開頭的地方,如圖 3.7(c)區塊 1 與區塊 2 之間的連結,這個角落呈現將 L 角落轉 270 度的情況,造成<L→1→3
→B>為父階梯在<1→3>間的<1→2→3>代表藏在其中的子階梯;最後第四類左下 方凹陷,是第二類下方與第三類左方凹陷的合體,其子階梯的頭尾皆有個異於 L 角落的連結,如圖 3.7(d)中區塊 1 與區塊 2 間的連結還有區塊 3 與區塊 4 的連 結所造成的角落,區塊 1 與區塊 2 連結的 L 角落如同左方凹陷型態中旋轉 270 度的 L 角落,而區塊 3 與區塊 4 的 L 角落如同下方凹陷型態中旋轉 90 度的 L 角 落,造成<L→1→4→B>為父階梯,在<1→4>間的<1→2→3→4>代表藏在其中的子 階梯;。總和來說,這個有向圖形是使用一個串列來代表一層階梯,再利用經過 旋轉的 L 角落連結,來維持父階梯與子階梯的聯繫,如此就可利用父子階梯的聯
繫,階層式的方式來取得各層的角落。
1
2
4 3
L
L 1 2 4 B
B 1
2
4 3
L
1
2
4 3
L
L L 1 1 2 2 4 4 B B
B
1
2
3 L
B 1
2
3 L
B
1
2
3 B
L 1
2
3 B
L
(a)緊密階梯型(單層串列) (b)下方凹陷階梯型(雙層串列)
2 1
3 L
B 1
2
3 B
L
2 1
3 L
B 2
1
3 L
B 1
2
3 B
L 1
2 3
L 4 B
2 1
3
4 L
B 1
2 3
L 4 B
2 1
3
4 L
B 2
1
3
4 L
B (c)左方凹陷階梯型(雙層串列) (d)左下方凹陷階梯型(雙層串列)
圖 3.7 使用有向圖形表示階梯輪廓
3.2.2 複雜結構的階層式階梯輪廓
從上一節階層式階梯輪廓的結構的幾個基本型態,可以將各種複雜的輪廓圖 形兜成有向圖形,如圖 3.8 的例子。
旋轉 90 度的 L 角落 正常的 L 角落
旋轉 270 度的 L 角落 旋轉 90 度的
旋轉 270 度
11
11 00 11
33 44
55 66
77 88
99 10 10 22
L
B
L 10 9 7 B
5 6 4 0
3
8 11
L 10 9 7 B
5 6 4 0
3
8 11
(a) 左下緊密板面規劃 (b) 階層式階梯輪廓結構 圖 3.8 複雜的階層式階梯輪廓結構
在圖 3.8(a)這板面規劃中,其輪廓可以用三層串列來表示如圖 3.8 (b),第 一層為<L→10→9→7→B>;藏身在第一層中的第二層有兩個,分別是在<L→10>
中的子階梯< L→5→6→4→0→10 >以及在<9→7>間的子階梯<9→8→11→7>;藏 在第二層的第三層階梯,有在第二層<6→4>中的子階梯<6→3→4>。整個階層式 的架構就此組成。至此可以確定無論是任何左下板面規劃構成的複雜輪廓,都可 以用階層式階梯輪廓來表示,下節將說明當輪廓有所變動時,要如何維持這個階 層式架構。
由以上的介紹,可知道這些階梯式輪廓都是有階層性的,而且可以用一個簡 單的有向圖形來做存取,下一節將說明如何使用這個結構,還有當輪廓有所變動 時應該如何去更新資料結構。
3.3 階層式階梯輪廓的基本運算
本節將介紹如何去使用上一節提到的階梯式輪廓,儲存階梯式輪廓的目標即
希望板面規劃能隨時保持左下緊密的狀態,所以對階梯式輪廓的操作即如何讓一 還未放置的區塊放入以階梯式輪廓儲存的板面規劃中,並且使得其成左下緊密的 狀態,最後還要讓區塊融入階梯式輪廓的資料結構裡。假設有一個新的區塊要加 入階梯式輪廓結構裡,需要經過以下三個步驟 :
步驟 1 : 由上而下階層式地找尋定位的 L 角落:
利用階梯式輪廓內父子階梯的關係,由上到下的去搜尋每層的階 梯,首先第一層如圖 3.9(a)起點為 L 終點為 B,串列的階梯為<L→1→3
→B>,有 3 個 L 角落分別為<L→1>、<1→3>與<3→B>,假設若再選擇<1
→3>這個 L 角落則可發現其中起點 1 終點 3 含有子輪廓<1→2→3>,此 為第二層如圖 3.9(b),第二層有<1→2>與<2→3>兩個 L 角落可以選擇,
其中<2→3>為旋轉 90 度的 L 角落不能選擇,最後則選擇<1→2>的 L 角 落,這個過程即是由上而下(Top-down)搜尋的方式,在實際上演算法可 以用遞迴程式法實作。
1
2
3 L
B 1
2
3 L
B
1
2
3 B
L 1
2
3 B
L
1
2
3 L
B 1
2
3 L
B
1
2
3 B
L 1
2
3 B
L
(a) 第一層階梯輪廓<L→1→3→B> (b)第二層階梯輪廓<1→2→3>
圖 3.9 由上而下階層式地找尋定位的 L 角落
延續上依步驟,在階梯式輪廓裡的各個 L 角落總共可分成兩種,其 一為直實 L 角落(real L -corner),表這個 L 角落沒有包含子階梯輪廓 在其中,如圖 3.9(a)中<1→2>即為此類;另一為虛擬 L 角落,即其中包 含有一子階梯輪廓在其中,如圖 3.9(b)的<1→3>屬於此種。
當由上而下階層式搜尋階梯時,要可以一直階層搜尋條件為區塊在 虛擬 L 角落且可以滑進子階梯,如圖 3.9(a)到圖 3.9 (b)一般。相反地,
停止搜尋且定位區塊的位置則有兩種情況,第一種為區塊停在真實 L 角落如圖 3.10(a)所示;而另一情況為區塊雖停在虛擬 L 角落上卻無法 進入子階梯中,如圖 3.10(b)一般,新進的區塊無法再往左往下移動,
在實際實作時只要依照階梯凹陷型態即可判斷,下方凹陷即判斷區塊的 寬和造成虛擬 L 角落的兩區塊間水平距離即可,如圖 3.10(b),其餘型 態皆與此類似,左方凹陷判斷區塊的高和區塊間的垂直距離,左下凹陷 則水平垂直與區塊寬高皆考慮。
1
2 3 4
1 2 4 B
L 1
2 3
L B
1
2
3 1
2
3
(a)區塊在真實 L 角落上 (b)區塊在虛擬角落上且無法 往下往左移動
圖 3.10 區塊定位的條件
步驟 3 :由下而上階層式地更新階梯式輪廓結構
基本上更新階梯式輪廓的順序,與搜尋 L 角落的順序相反,但也是 階層式的方法,為了簡單起見先分成單層輪廓與多層輪廓更新,其中
多層為單層的延伸,在此先說明單層更新的步驟。
單層階梯式輪廓更新: 當一新的區塊在單層的階梯定位後,可分為 四種情形;其一,區塊定位後,不會產生任何凹陷的情況,如圖 3.11(a);
其次,區塊定位後會產生一左方凹陷的情況,如圖 3.11(b);另一,區 塊定位後會產生下方凹陷的情況,如圖 3.11(c);最後一種為區塊定位 後,產生一左凹和一右凹陷的情況,如圖 3.11(d)。
(c) (d)
圖 3.11 新區塊放入單層階梯輪廓的情形
以上這四種情形更新的步驟接相同,這邊取最具代表的情況四做為 範例,假設一區塊 N 要放入一單層階梯式輪廓中且其為第四種情況時,
如圖 3.12(a),則這個單層階梯式輪廓更新的步驟如下:
步驟 1 : 找出這個單層階梯輪廓的起始點與終點 :
即確定這一層的起終點,如圖 3.12(a)的起點為 L 終點為 B。
步驟 2 : 確定哪些本來在輪廓上的區塊要改變指向新進區塊 N:
有兩種區塊會指向新進區塊 N:其一,與新進區塊 N 左邊相鄰 的區塊要改指向新進區塊 N,如圖 3.12(b)的區塊 2 會指向 N;其
(a) (b)
始對階梯輪廓作追蹤直到接觸到停止線,接觸到停止線的區塊即需 增加一個連接邊指向區塊 N,如圖 3.12(b)由區塊 N 造出停止線,
然後從 L 點開始追蹤找到停止線在區塊 1,則區塊 1 建造指向 N 的 連接邊。
步驟 3 : 確定新進區塊 N 要指向的區塊:
與步驟二類似,新進區塊 N 需指向的區塊也有兩類: 其一,新 進區塊 N 需指向與其下邊相鄰的區塊,如圖 3.12(c)的區塊 N 會指 向區塊 3;其次,則是先由新進區塊 N 的右邊垂直畫一條停止線,
然後由與區塊 N 下邊相鄰的區塊開始對階梯輪廓作追蹤直到接觸 到停止線,區塊 N 需增加一條連接邊指向接觸到停止線的區塊,如 圖 3.12(c)由區塊 N 造出停止線,然後從區塊 3 點開始追蹤找到停 止線在 B,則區塊 N 建造指向 B 的連接邊。
0 1
2 3
N
4 L
B
L 1 2 3 4 B
N 0
0 1
2 3
N
4 L
B
L 1 2 3 4 B
N 0
0 1
2 3
N
4 L
B
L 1 2 3 4 B
N 0 0
1 2
3
N
4 L
B
L 1 2 3 4 B
N 0
0 1
2 3
N
4 L
B
L 1 2 3 4 B
N 0
0 1
2 3
N
4 L
B
L 1 2 3 4 B
N 0
(a) 步驟 1:起點為 L,終點為 B (b)步驟 2:指向 N 的區塊
4 3 2 0
1
N L
B
L 1 2 3 4 B
New 0
0 1
2 3
N
4 L
B
L 1
2 3 4
B New
0
4 3 2 0
1
N L
B
L 1 2 3 4 B
New 0
4 3 2 0
1
N L
B
L 1 2 3 4 B
New 0
0 1
2 3
N
4 L
B
L 1
2 3 4
B New
0
0 1
2 3
N
4 L
B
L 1
2 3 4
B New
0
(c)步驟 3:N 指向的區塊 (d)完成更新 圖 3.12 單層階梯式輪廓更新
圖 3.12(d)表示完成加入區塊 N 後,單層階梯式輪廓的情形,可以 發現區塊 N 產生了兩個凹陷而出現了兩個子輪廓分別是,<0→1→2→N>
與<N→3→4→8>,其他區塊放入情形也類似只是由區塊畫出的停止線不 同,產生出的凹陷子輪廓不同而已。
接下來說明當區塊放入多層的階梯式輪廓時的更新,由於是多層所 以需各別各層做更新,更新的順序與搜尋 L 角落的順序相反,針對各層 有 3 個步驟:
步驟 1 : 確認這一層的起點與終點。
步驟 2 : 若為最內層,則以不超過最內層為原則,先對最內層為 準做單層更新。
步驟 3 : 由起點和終點判定新進區塊在這層的狀況,若新進區塊 超越這層則將這層分割且回溯父階梯輪廓到到步驟 1;若狀況為新進區 塊無超越此層,則把新進區塊在這層的部份分割出來,然後以這部份在 這層做單層的輪廓更新。以圖 3.13 為例,一新進區塊 N 放入多層階梯 式輪廓的內層如圖 3.13(a)所示。在更新的時候,層與層的順序與放入 時顛倒,所以更新的第一層為放入的最後一層。
更新的第一層為子階梯輪廓<0→1→2→3>,如圖 3.13(b)所示,確 定階梯輪廓層級後實行上述的步驟,首先確認此層階梯輪廓起始為 0 終點為 3;其次第二步由於此層為最內層,需對針此層做單層的更新,
新進區塊在此層有如單層的狀況 2(圖 3.13(b)所示),只是由於限於在 此層更新所以無法找到 L 與區塊 N 做連結,更新後得到區塊 1 連接到 N 與區塊 N 連接到 2 的連接線;接下來為第三步驟,可以由作為起終點的
和到區塊 3 的連接邊打斷,然後由區塊 N 連結到區塊 3,本來<0→1→2
→3>的階梯輪廓被切割為<未知→0→1→N>與<N→2→3>其中有「未知」
是因在這層還找到,由於區塊超過這層所以需繼續往父層更新。
更新的第二層為最外層<L→0→3→B>,如圖 3.13(c)所示,其中<0
→3>已被打斷,但由於需使整層完整易於實作,所以假設還存在; 確定 階梯輪廓層級後執行上述的三步驟,首先確認此層階梯輪廓起始為 L 終點為 B;其次由與本層不為最內層,所以不執行; 接下來第三步驟,
可以由作為起終點的 L 和 B 發現此層為最外層,任何區塊應都在最外層 之內,應此判定區塊無超越此層級,如此須把新進區塊在這層的部份分 割出來,然後以這部份在這層做單層的輪廓更新,即將區塊 N 分成如圖 3.13(c)一樣,然後把斜線部份再這一層級作單層的更新,結果可以使 L 產生一新連接邊連向區塊 N,而區塊 N 會指向區塊 3,最後由於區塊 無超越此層則更新結束,圖 3.13(d)展示最後更新的結果。
從最後更新結果(圖 3.13(d)所示)可看出整個多層輪廓的變化,被 區塊 N 橫跨的層級,就像是被切成了兩半一樣,在圖 3.13(a)中原本函 在<0→3>內的子階梯輪廓<0→1→2→3>被區塊 N 切成了<0→1→N>和<N
→2→3>,<0→3>也被<0→N→3>取代掉。由此可知,多層階梯輪廓的更 新就是把舊的階梯輪廓作分割,被超越的層級就會被切割,而沒被超越 的層級除剛好新的區塊還在之中的以外皆不會改變。
L
B 0
3 2
1
N
0 3 B
1 2
N L
L
B 0
3 2
1
N L
B 0
3 2
1
N
0 3 B
1 2
N
L 0 3 B
1 2
N L
N
0
3 2
1 L
B
0 3 B
1 2 N
L
N
0
3 2
1 L
B N
0
3 2
1 L
B
0 3 B
1 2 N
L
(a)新進區塊 N 放入多層輪廓 (b)新進區塊超越內部 第一層<0→1→2→3>
0 3 B
1 2
N L
0
3 2
1
N L
B
0 3 B
1 2
N
L 0 3 B
1 2
N L
0
3 2
1
N L
B 0
3 2
1
N L
B
0
3 2
1 N L
B B 0
3 B
1 2
N L
0
3 2
1 N L
B 0
3 2
1 N L
B B 0
3 B
1 2
N L
0
3 B
1 2
N L
(c)新進區塊在外層<L→0→3>以內 (d)完成更新 如圖 3.13 多層階梯式輪廓更新
以上三步驟即當一區塊放入階梯式輪廓時所做的步驟,由於為階層式且相當 有規律性,所以本論文以遞迴式的演算法來實作,如圖 3.14,其中參數 Block 表示要放入的區塊,以程序來說,第一個層級一定是從 L 到 B 開始,先是找在層 級中適合的 L 角落,若定位的 L 角落可使 Block 定位則停止,若不行則以此 L 角落為新層級的起終點遞迴代入函式再找。區塊定位好了後,開始更新輪廓,由 於順序剛好與找定位相反所以剛好在遞迴時回傳的時候執行,先檢查 Block 是否
圖 3.14 在階層階梯式輪廓中放入區塊的演算法
3.4 左下靠緊板面規劃之空白區域管理
在做板面規劃時,常常會看到在各區塊間有填不滿的空間如圖 3.15(a)的斜 線區域,若可以善用空白區域如圖 3.15(b)將區塊 11 塞到空白的地方,則可以 輕鬆的縮小板面規劃的面積。但是要做到如此的動作,勢必要可以管理空白區 域,非常巧地,在上節介紹在階層階梯式輪廓中放入區塊動作時,可以在中間穿 插空白管理的策略。
當區塊階層式地在尋找適合的 L 角落時,確定區塊定位停止搜尋有兩個條 main
begin
Block_assign(L,B);
end
Algorithm bool Block_assign (start,end) begin
Get fit L corner ; if( Block position) begin
set next start and end point from back and abut;
update ═ Block_assign ( next start ,next end);
end
if( update ═ false) return false;
if( overall the level) begin
separate the level;
return true;
end
partition block;
modify contour on single level;
return true end
件,其一為遇到的 L 角落為真實 L 角落,如圖 3.10(a);另一為遇到的 L 角落為 虛擬角落且區塊放不下 L 角落的凹陷,如圖 3.10(b)。再第二的狀況中,放入的 結果會造成區塊把凹陷出口處塞住,這個凹陷成為了填不滿的空白空間,這個凹 陷即那虛擬 L 角落包含的子輪廓,只要把子輪廓存起來即可代表這個空白空間。
圖 3.15(c)為一個例子,當區塊 3 要放到區塊 5 與區塊 2 的虛擬 L 角落上,放入 後把凹陷擋住了,因此把<5→2>間的子輪廓<5→1→2>存起來當作空白區域存起 來,在新的階層階梯式輪廓結構中這一段也會消失如圖 3.15(d) 。
1
11 5 3 4
6
7 8
2 9 1
11 5 3 4
6
7 8
2 9 1 5 11 3 4
6
7 8
2 9
1 5 11 3 4 6
7 8
2 9
(a)板面規劃中的空白區域 (b)使用空白區域: 移動區塊 11
1 5 3
7 2
L 5 2 7 B
1
1 5 3
7 2
L
2 7
B 5
3
藉著儲存<5→1→2>這個資料就可以達成從圖 3.15(a)變成 3.15(b)的動 作,也就是區塊 11 找到<1→2>這個 L 角落並移到這個角落。空白空間的儲存不 只是這類被區塊圍住的空白區域,還有被外圍框起來的空白地方,如圖 3.15(a) 中叫外面的區塊 6、3、4、9 和 11 與虛線框中間的斜線區域,其管理的方式更容 易,因為就是最外圍輪廓的階層階梯式輪廓所造成的 L 角落。
有能力管理空白區域是階層式階梯輪廓一個很大的優點,可以讓使用者完全 充分掌握板面規劃的狀況,使得各種針對板面規劃的運算變得更順暢及更有效 率,下一節將對階層式階梯輪廓做一簡單的討論與結論。
3.5 階層式階梯輪廓的討論
在本章前幾節中,介紹了階層式階梯輪廓的定義、操作與應用(管理空白空 間),由其中可知階層式階梯輪廓是一個簡單且直覺的想法,其實在[5]中 Guo et al.介紹 O-tree 時,在壓縮(packing)板面規劃步驟時就有類似的概念,只是當 時所提的只有記錄最外層的輪廓,用一條串列來儲存,所以無法做到完全的左下 緊密,O-tree 是利用不斷轉換兩種二元樹來達成左下緊密板面規劃的。
階層式階梯輪廓為一有向圖形,節點所需的儲存空間即為區塊數目,連接邊 方面,若單純的以圖形結構來看,每個節點都可能互相連結則所需空間高達區塊 數目的平方,但由於階層式階梯輪廓的有向圖形是有規則的,必須符合父子輪廓 的結構,另外每次有用到當輪廓的節點又只有屬於邊際的區塊,因此所用的連接 邊其實並不多,最多也只是為區塊數目的整數倍。
較令人在意的是階層式階梯輪廓在放入新區塊和更新輪廓所需的複雜度,說 穿了就是階梯輪廓的階層數,以及使用遞迴程式規劃時,在過多的遞迴下可能付
出的空間成本。基本上,階層數目是依照情況而定,最糟的情況是有一個很深的 凹陷,而一個新進區塊掉入這個凹陷下,基本上這類凹陷並不是太多,以實作過 的 49 個區塊為例,凹陷大多是 3、4 層,當然很深的凹陷還是會出現的,不過出 現的頻率並不是很多。其實若遇到凹陷過於深的情況,可以依情形停止遞迴去設 定區塊定位,以免系統無法負荷遞迴產生的空間,不過如此無法做到完全左下緊 密。解決方法是在 DBL 建立時則以一虛擬區塊代替,即可使運作正常,整個方法 是相當有彈性。
原則上,階層式階梯輪廓在空間複雜度與操作的時間複雜度的表現都是依情 況而定,但是以每次板面規劃都是左下緊密的好處還有可以記錄中間空白區域的 好處來比較,使用階層結構可說是划算的交易。
第四章 左下靠緊板面規劃表示法 :
雙重界限串列表示法(Double Bound List,DBL)
本章將介紹本論文提的板面規劃演算法中所使用的表示法: 雙重界限串列 表示法(DBL),這是 Wun 在[26]中所提的類似樹狀結構的板面規劃表示法,原則 上只對應左下靠緊板面規劃,在[26]中提到 DBL 表示法符合 P-admissible 特性 的需求、可以直接從 DBL 表示法中得知總面積和鄰近關係,另外 DBL 表示法只需 使用少量記憶體,且也符合一對一對應之關係。
緊接著本章幾節將介紹 DBL 的操作以及其意義,以及介紹如何利用前章所提 階層式階梯輪廓去初始板面規劃及其代表的 DBL,在最後則會拿 DBL 和之前所提 的表示法做比較。
4.1 DBL 的介紹
在第三章介紹了左下板面規劃的意義及其輪廓的存取,可以知道維持左下緊 密的板面規劃是必須的,在本論文中板面規劃演算法就是維持每一次皆為左下緊 密,因此所使用的表示法必須要能表現左下緊密規劃各區塊的鄰近關係,本論文 所採用 DBL[26]表示法,其想法是起源於鄰近關係圖形 (adjacent relation graph) [17] 的應用。
鄰近關係圖形為記錄一板面規劃中各區塊間鄰近關係的圖形,其資料結構圖 形定義如下 :
節點 : 每個區塊。
邊 : 各區塊的鄰近關係,可分為垂直鄰近與水平鄰近。
如圖 4.1 即為一左下緊密板面規劃與其鄰近關係圖形。
7 9 1 2
11 3 4
5 6
8 10
0
77 99 11 22
11 11 33 44
55 66
88 10 10
00
0
1 2 3 4
7 8 9 10 6
5
11 0
1 2 3 4
7 8 9 10 6
5
11
(a)左下緊密板面規劃 (b)代表的鄰近關係圖形 圖 4.1 板面規劃與其鄰近關係圖形
由圖 4.1 可感覺到這個鄰近關係圖形每個節點的邊似乎多了點,圖 4.1(b) 中的 0 號節點最為明顯,總共有 8 個邊,其實在大部分的情況下鄰近關係圖形中 節點的邊都是很多的,甚至逼近到節點數的平方,也就是空間複雜度為 O(n2)。
因為這個原因,直接拿鄰近關係圖形當表示法並不是很恰當的,DBL 表示法即是 以這裡為出發點,想辦法去簡化鄰近關係圖形的邊,並且能維持鄰近關係圖可以 表示相鄰關係的特性。
其實在鄰近關係圖中許多邊都存有一種遞移的性質,以圖 4.1(b)中邊最多 的節點 0 來說,其右邊鄰近關係有連到節點 7、8、9、10 四個節點,而這四個被 連接的節點之間還有邊聯繫,其實可以利用這個互相的關係來減少邊的使用,整 個策略就如同 0 可以只要指到 10 和 7,然後其他的節點藉由 10 和 7 之間的邊來 取得,像 8 就由和 7 連結的邊取得,9 則是和 8 有連結,10 又連到 9,若在加上 個方向讓他們可以做搜尋,那就算 10 只接兩個邊,也可以找到有 4 個鄰近的節 點,如圖 4.2。