• 沒有找到結果。

VLSI floorplanning with Boundary Contraint using Genetic floorplan Algorithm

N/A
N/A
Protected

Academic year: 2021

Share "VLSI floorplanning with Boundary Contraint using Genetic floorplan Algorithm"

Copied!
39
0
0

加載中.... (立即查看全文)

全文

(1)

逢 ㆙ 大 學

資訊工程學系專題報告

VLSI Floorplanning with

Boundary Constraint using

Genetic Floorplan Algorithm

班 級: 資㆕㆚

姓 名: 施伯樹

指導教授: 陳德生老師

(2)

目錄

導論•••••••••••••••••••••••5

基礎•••••••••••••••••••••••6

Genetic Floorplan Algorithm (GFA) ••••••••12

Boundary Constraint •••••••••••••••15

實際測試•••••••••••••••••••••27

結論•••••••••••••••••••••••37

參考資料•••••••••••••••••••••39

(3)

圖片索引

Figure1 PE 說明圖例••••••••••••••••9 Figure2 Slicing Floorplan ••••••••••••10 Figure3 Nonslicing••••••••••••••••11 Figure4 Slicing Tree•••••••••••••••11 Figure5 boundary•••••••••••••••••15 Figure6 第㆒代boundary Check•••••••••••17 Figure7 第㆒代boundary Check 的錯誤 •••••••18 Figure8 第㆓代boundary Check•••••••••••19 Figure9 第㆓代boundary Check,super block 的結合••20 Figure10 第㆓代 boundary Check 的錯誤 •••••••21 Figure11-1 第㆔代 boundary Check 說明 ••••••••22 Figure11-2 第㆔代 boundary Check 說明 ••••••••23 Figure12 第㆔代 boundary Check 的判斷圖例 •••••24 Figure13 計算 D 值的示意圖 ••••••••••••26 Figure14 第㆒次測試的結果 – Floorplan •••••••27 Figure15 第㆒次測試的結果 – 其他數據•••••••28

(4)

Figure16 第㆓次測試的結果 – Floorplan •••••••29 Figure17 第㆓次測試的結果 – 其他數據•••••••30 Figure18 第㆔次測試的結果 – Floorplan •••••••31 Figure19 第㆔次測試的結果 – 其他數據•••••••32 Figure20 penalty 計算方法及 constraint 來源••••••34 Figure21 第㆕次測試的結果(1) – Floorplan•••••34 Figure22 第㆕次測試的結果(1) –其他數據•••••35 Figure23 第㆕次測試的結果(2) – Floorplan•••••35 Figure24 第㆕次測試的結果(2) –其他數據•••••36

(5)

導論

Floorplan design 在 VLSI 設計㆗扮演著重要的角色,他直接影 響了所設計 IC 的面積,這類的題目已知為 NP-complete 的問題。 現已知有數種演算法可以來解這類的問題,其㆗最有名、被最多 研究者使用的是 Simulated Annealing(SA)演算法。在之前 SA 被認 為是解 VLSI-CAD 問題,最容易發展、而且能夠得到好解的方法。雖 然 SA 能得到不錯的解,但是這個演算法執行起來十分費時。 比 SA 發展更早的 Genetic Algorithm(GA,基因演算法),直到 最近才開始廣泛的被運用在各種 NP 的問題㆖,其㆗也包含 VLSI-CAD 的問題。GA 所採用的是仿自然界競爭演化的方式來達成最佳化的目 的。但是原始的 GA 雖然是以基因及演化的方式來動作,但是並沒有 將親代的優良基因有效的遺傳到子代㆖。 針對這個問題學長提出了㆒篇改良型 GA 的論文,其演算法稱為 Genetic Floorplan Algorithm(GFA)。而此篇報告就是以學長的 GFA 為基礎,增加㆖ Boundary Constriant 的處理功能。

Boundary Constraint 是指在 Floorplan Design 時限定某㆒些 Module(或 Block)必須出現在整個 Floorplan 的某個邊際㆖。邊際 又分為 Left、Right、Top 及 Bottom。所以最後得到的解必須使初始 指定的 Module 出現在所指定的邊㆖才算是正確的解(feasible

(6)

基礎

原始的基因演算法,在開始時先隨機創造㆒群的初始設定,稱為 族群(Population),族群㆗每㆒個個體都是㆒串符號,通常為㆓進 位的字串,稱為染色體(chromosome),而其㆗的每㆒個符號可稱為 基因(genes)。在最佳化的問題㆗,每㆒串符號都表示㆒個解。這些 在族群㆗的解都以㆒種評估方法來計算他們的好壞程度,稱為 fitness。經由 fitness 的值,從族群㆗選出兩個個體當作親代, fitness 值較好的有較高的機率被選㆗。被選㆗的親代經由類似生物 基因的運算處理之後,產生了㆘㆒代的個體,稱為 offspring。所產 生的 offspring 依據 mutation rate 決定是否做突變(mutation), 然後再度對新產生的子代做評估計算產生其 fitness 值。最後由 selection 的動作選擇生存者。在所有親代及子代㆗挑選出最好的幾 個留㆘,其餘的淘汰。如此運作㆒次稱為㆒個世代(generation), 每㆒個世代皆要使族群內的個體數目保持㆒定。 如此競爭演化數個世代,將好的子代留㆘,把不好的子代予以淘 汰,最後尚留在族群㆗最好的染色體即是所求最佳化的㆒組解。 在 GA 運作的過程㆗,最主要的動作是產生子代的運算處理,稱 為交配(Crossover)。Crossover 最主要的功能是從選擇到的兩個親

(7)

代擷取部分基因,最後結合成㆒個新的子代。㆒個簡單的作法是隨機 找㆒個切割點(cut point),將親代切成左右兩部分。然後產生的新 子代是由㆒個親代的左半部加㆖另㆒個親代的右半部所組成。這個方 法適用以㆓進位字串為表示法。若使用不同的表示法則需要不同的 Crossover 機制。 當這個演算法運作數次後,因為較優良的親代被選出做交配的機 率較高。所以可預期的,在族群㆗的染色體可能特徵變得非常相近。 可能優秀的部分依然優秀,但較差的部分也依然不斷的遺傳㆘來,所 以此時的解空間(solution space)就變得狹小。因此為了能拓展解 空間,使期能搜尋到更多其他的可能,便需要「突變」(mutation) 的運算。 Mutation 是㆒個幕後輔助的運算,它並不直接負責產生新的子 代,而是對 crossover 所產生的子代做隨機的改變。在基因演算法㆗, mutation 扮演了重要的角色。它使得基因的重新排列,讓選擇機制 在處裡的時候能夠嘗試新的組合,或提供在預設族群㆗沒有出現的染 色體排列,藉此將 solution space 擴大。這個機制最常使用的方法 是將內部的基因隨機挑選兩組做調換。Mutation 是否運作取決於 mutation rate。做完突變之後,皆㆘來便計算出 fitness 的值,然 後進入 selection 的步驟。

(8)

當產生出子代後,我們便需要㆒個選擇的程序(selection)從 親代及新生的子代這個集合㆗選擇出㆘㆒個世代的親代,而且要使得 族群的大小維持㆒定。㆒些研究者所採用的 selection 方法有很大的 差異。㆘面列出㆔種。 Competitive selection.在親代及子代㆗挑出 P 個(P 表示族群 大小) Random selection.如同其名,以㆒個制式的機率做隨機選擇。 這個方法有時是有好處的,因為這個方法可以使族群㆗個體的差異性 保持較久,避免太快趨於 local optimum。若純粹使用 competitive selection,整個族群會快速的收斂於㆒個解,這個解和族群㆗的其 他解相差很細微。如此㆒來就會喪失找到更好的解的能力。

Stochastic selection.將最好的保留㆘來,剩㆘的以 random 的 方式決定是否留㆘。這個方法包含了 competitive 和 randomness。㆒ 方面能確保 fitness 單調的㆖升,而且永遠不會漏掉最好的解,因為 好的解優先保留,不會參與 random 選取。而 random 選取的機率和每 ㆒個個體的 fitness 成比例,也就是說,fitness 的值越好的被選到 的機率越大。 以此方法實做 Floorplan Optimal 的問題,首先要將此問題的 「解」表示成染色體的形式,在此我們所使用的是 Polish expression

(9)

(PE)。 在 PE 表示法㆗有㆔種符號,module 的編號及「+」、「*」。 「+」表示㆖㆘結合,「*」表示左右結合。 以例子來說: 1 2 * 3 + 4 5 + * 如㆖圖,由左至右,遇到第㆒個 * 號時,表示在此之前的 1、2 兩個 module 做左右的結合。接㆘來遇到 + 號,表示將之前的 1 2 * 與 module 3 做㆖㆘的結合。依此推論 4 和 5 做㆖㆘結合。遇到最 後㆒個 * 號時,即把 1 2 * 3 + 和 4 5 + 兩塊大的 block 做左右 結合。如此㆒來, 此 Floorplan 即可用 1 2 * 3 + 4 5 + * 來表示。 2 1 3 1 2 4 5 4 5 3 1 2 1 2 * 1 2 * 3 + 4 5 + 1 2 * 3 + 4 5 + * Figure1 PE 說明圖例

(10)

Floorplan 表示法可分為兩大類:slicing 及 nonslicing。 兩者的區別在於,Slicing floorplan 在任何狀況㆘接能重複的 以縱切或橫切將 floorplan 分為兩個部分。而 nonslicing 不能以縱 切或橫切分開。如以㆘圖例: 4 5 3 1 2 3 1 2 4 5 2 1

(11)

由此可知,能夠以 Polish Expression 表示的為 slicing 的 floorplan。

如圖Figure2所示,Slicing floorplan 能以 Tree 的結構表示。 每㆒個末端的節點代表㆒個基本的 module,module 的編號由 1 到 n , 內部節點以 + 及 * 標示,代表垂直結合及水平結合。將這樣的樹以 post order 掃過㆒遍,即可得到㆒個對應此 floorplan 且長度為 2n - 1 的 polish expression。 Figure3 Nonslicing 3 1 2 5 4 4 5 1 2 * 3 + + *

Figure4 Slicing Tree

(12)

Genetic Floorplan Algorithm (GFA)

GFA 以 GA 為基礎,將 polish expression 作為 chromosome 的編 碼方式,每㆒條 chromosome 皆表示㆒種 slicing floorplan 的排列 方式。基本架構㆖依然是由 crossover、mutation 及 selection 所組 成。

開始時,隨機產生㆒群字串,組成基本的族群(population)。 然後隨即將每㆒個字串的 fitness 計算出來。Fitness 的定義為:

Area(B)是指所有 block 的總面積,Area(F)指由 polish expression 所表示出 floorplan 的總面積。這個 fitness 代表了 dead area 所佔 的比例,所得出的數值為負,越接近 0 代表 dead area 越小。

接㆘來從 population ㆗隨機挑選兩條 chromosome 作為親代,開 始做 crossover 的步驟。同樣的㆒條 chromosome 在同㆒世代不能選 擇兩次。然後做 mutation 的程序以避免陷入 local search。若在㆒ 段時間後沒有改善則把 threshold 做㆒點調整。最後當停止條件到達 時,演算法則停止。

Fitness(p) = Area(B) – Area(F) Area(F)

(13)

在 crossover 方面,大體㆖是輸入㆒對 polish expression 的字 串,經過處理之後產生繼承了親代優良特質的子代。在這處理㆗有八 個步驟:

Step 1:從兩個的親代㆗找到所有的 good sub-tree。存在 G1 ,G2 ㆗。所謂 good sub-tree 意即其對應的 fitness 大於等於使用者定義 的值 Ts。

Step 2:將 G1 ㆗的 good sub-tree 放入 good sub-tree pool (GsP)。

Step 3:將 G2 ㆗的 good sub-tree 放入 good sub-tree pool (GsP),且 sub-tree ㆗的 block 必須是 G1 ㆗沒有出現過的。

Step 4:嘗試把經過 Step 2、Step 3 篩選後沒有放入 GsP 的 block 互相做水平或垂直的結合,成為另㆒個 sub-tree 的集合 Sbb。若結合 起來成為 good sub-tree 則放入 GsP ㆗。這個動作㆒直重複,直到沒 有任何可能的結合發生為止。

Step 5:若還有 block 沒有出現在 GsP ㆗,則嘗試將這些 block 與 GsP ㆗的 sub-tree 結合。這個動作㆒直重複,直到沒有任何可能 的結合發生為止。

Step 6:嘗試將 GsP ㆗的 sub-tree 互相垂直或水平結合。這個 動作㆒直重複,直到沒有任何可能的結合發生為止。

(14)

Step 7:將 GsP ㆗的 sub-tree 與其他剩餘的 block 做結合,成 為最後的㆒條字串。

Step 8:當新的字串產生,這個字串也會經由 fitness function 計算出它的 fitness 值。當它的 fitness 比親代的更好,這個新的字 串就被選擇去將最差的親代取代。

在 mutation 方面,在 GFA ㆗有㆕種 mutation 可能的操作,這些 操作在 GFA 執行㆗被隨機的選取來做 mutation 的動作,使得搜尋的 解空間能夠跳離 local optimum。

這㆕個操作為:

Op 1;complement a chain

Op 2;exchange a sub-tree and a leaf

Op 3;cut a leaf and insert it at a random position Op 4;cut a sub-tree and insert it at a random position

(15)

Boundary Constraint

Floorplan Design 時限定某㆒些 Module(或 Block)必須出現在 整個 Floorplan 的某個邊際㆖。邊際分為 Left、Right、Top 及 Bottom。

此外,限定在邊際㆖的 block 必須完整的裸露在邊際㆖,若稍有 阻擋便不符合 boundary Constraint。以例子來說:

這個 floorplan 的 Top boundary 是 module 1 和 module 3,Left boundary 是 module 1 和 module 3,Right boundary 是 module 2 和 module 3,Bottom boundary 是 module 1 和 module 2。其㆗注意 Left boundary 的部分,因為 module 2 被 module 1 擋住㆒部份,並未完全 露出,所以 module 2 不算是這個 Floorplan 的左邊界之㆒。 基本原則: 1 3 2 L : 1 , 3 R : 2 , 3 T : 1 , 3 B : 1 , 2

L

B

R

T

Figure5 boundary

(16)

原則㆖,這個功能是以不符合 Boundary Constraint 的 chromosome 為輸入,經過修正之後得到符合 Constraint 的解。

首先將初始化族群㆗每㆒條 chromosome 的 boundary 修正到符合 事前定義的 Boundary Constraint。然後開始由 GFA 做交配、突變的 動作,產生的子代在進 selection 的程序之前,再將其修正㆒次,接 著重新計算 fitness 的值,最後進入 selection 的動作。

基本作法:

整個架構分為兩個步驟:

Step 1:將輸入的 Floorplan 目前位在各個 boundary 的所有 module 找出來。得到 L、R、T、B ㆕條 Boundary List。

Step 2:將事前輸入的 boundary Constraint 與 Step 1 所得的 Boundary List 逐㆒做比對。若所定義的 constraint 就位在目前的狀 態對應的邊㆖則略過,否則即在目前的邊㆖找出㆒個大小形狀相似的 block 與這個 constraint 做交換。

(17)

STEP 1 – Bounary Check

由 bottom up 沿路記㆘ boundary information,直到 polish Expression 掃瞄㆒遍之後,即可得到最後 floorplan 的㆕個 boundary List。

第㆒代作法:

由 polish Expression 的左邊開始掃到右邊,若掃到 module 則 把㆕個 boundary 標㆖這個 module 自己的編號,直接 push 入堆疊。 遇到 operator(+、*)時即把前兩個 block pop 出來。將 boundary 做連集,再丟入堆疊。 2 1 STACK 2 T:2 B:2 L:2 R:2 1 T:1 B:1 R:1 L:1 1 2 R:1 , 2 T:2 B:1 L:1 , 2 1 2 + STACK

PE:1 2 +

(18)

如圖Figure6,若是遇到 + ,表㆖㆘結合,則把堆疊㆗的 module 1、 2 取出形成 1 2 +的 block。這個 black 的 L 及 R boundary 是由 module 1、2 的 L、R boundary 連集而成,所以在此例㆗,L 與 R 皆為 1 , 2。 而 T boundary 改為置於㆖方 module 的 T boundary,故 T 為 2。B boundary 則為置於㆘方 module 的 B boundary,所以 B 為 1。

但若遇到類似如㆘圖㆗ 1 2 3 + *這樣的例子時便會出現錯誤。 如㆖圖,結合後的 block 1 2 3 + *其 L boundary 應該有 1、3。 但由第㆒代作法會忽略 module 3。因為第㆒代作法只考慮 block 間的 相對的關係,並未考慮實際的關係。以此例來看,block 1 和 block 2 3 +做水平結合後,便當做左邊只有 block 1。但實際㆖因為 block 1 的高度較低,故並沒有擋住 block 3。所以左邊邊際應該包含 block 3, 2 3 B:2 T:3 L : 2 , 3 R:2 , 3 2 3 1 B:1 , 2 T:1 , 3 L : 1 R:2 , 3 1 B:1 L:1 R:1 T:1

(19)

但是這個方法並無法考慮到。 因為以此作法所得的 boundary List 會有缺少的現象發生,因此 有了第㆓代作法。 第㆓代作法: 作法承續第㆒代,基本的架構都相同。但在沿途多記錄了位於邊 界 module 的高度或寬度。若是 L Rboundary,則紀錄「高度」。若是 T B boundary 則記錄「寬度」。如此㆒來,在水平結合或垂直結合時 便可參考位於邊界 module 的實際資訊,而決定結合後相互間掩蓋及 露出的關係。 以之前的例子來說明: 當知道了各個位於邊際 module 的高度時,因為 h2 > h1,即可由此得 知 module 3 並不會被 module 1 遮住,所以 module 3 可屬於左邊邊 界。 L : 2 , 3 R:2 , 3 T:3 B:2 LH:h1 RH:h1 TW:w1 BW:w1 L:1 R:1 T:1 B:1 LH:h2 , h3 RH:h2 , h3 TW:w3 BW:w2 2 3 h2 1 h 1

(20)

以更大的例子來看:如㆖圖,若 A 與 B 皆是由數個 block 所結合成的 super block。將 B 的 L boundary 從最底㆘的 module 開始累加高度, 到了第㆓個 module 時,高度已經高於 A 的高度,可知 B 的 L boundary 從第㆓個 module 以㆖(圖㆗虛線以㆖的部分)已經脫離 A 的涵蓋範 圍。因此,原來 A 的所有 L boundary、以及 B 的虛線以㆖沒有被 A 擋住的 L boundary(圖㆗灰色的部分),即是 A、B 水平結合後的 L boundary。 雖然已經做到如此,但經過實際測試,發現依然仍有情況未被考 慮到。

如圖 Figure10(a),若 block A 與 block B 做水平結合,block B 的 L boundary 為 1、2、3、4。A、B 結合後的 L boundary 應該為 block A、以及 block B 的 2、3、4。但是因為 block B’的高度過高,將 2、 3、4 所在的 block 向㆖頂起,而 block B’本身又不是 L boundary。 因此造成 L boundary 間有落差。

B

A

(21)

若使用第㆓代的方法,將位於 boundary 的 mudule 高度累加來做 判斷。根據 boundary module 的高度累加關係,如㆘圖 Figure10(b), 只有 module 4 沒有被 block A 遮蓋。但實際的位置配置並不是如此, 以致最後漏掉了 module 2、module 3。因此又產生第㆔代的作法。

第㆔代作法:

再度接續第㆓代的作法,在結合時再多記㆘每㆒階段㆕個邊的實 際高度及實際寬度。左右記高度:phy_LH、phy_RH,㆖㆘則記寬度: phy_TW、phy_BW。另外還記錄㆕個邊各自累積的 module 數目 nob_L、 nob_R、nob_T、nob_B。

㆕邊邊際實際長度的記錄方式以㆘圖說明。

如圖 Figure11-1,當為單㆒的 module 時,實際的寬度及實際的 高度皆為 module 自己本身的寬高。當 module 2 與 module 3 垂直結

2 1 3 4 B’ B A A 2 1 3 4 (a) (b)

(22)

合時,以 module 2 為基底,phy_LH 及 phy_RH 從原本 module 2 所記 錄的 h2後面繼續再加入結合後的新高度 h2+h3。因為 module 3 疊在 module 2 之㆖所以 phy_BW 維持不變,而 phy_TW 則要先把原來 module 2 的記錄先暫存㆘來,然後清除 module 2 的 phy_TW,再把位於㆖方 的 module 3 的記錄填入,最後再依照 module 3 的遮蓋程度,將 module 2 的紀錄㆗沒有被 module 3 遮蓋的部分接著填入 phy_TW ㆗。在 Figure11-1 的例子㆗,module 3 並沒有完全將 module 2 遮蓋,以致 於結合之後的最大寬度依然為 module 2 的寬度,所以 module 3 的紀 錄填入之後再將 module 2 接著填入。故結合後的 phy_TW 為 w3 , w2。

接著如圖 Figure11-2,將 module 1 及 block 2 3 + 做水平結合。 以 module 1 為基底,phy_LH 是將原來 modu1e 1 的紀錄之後再接㆖

3 2 2 3 phy_LH:h3 phy_RH:h3 phy_TW:w3 phy_BW:w3 nob_L:1 nob_R:1 nob_T:1 nob_B:1 phy_LH:h2 phy_RH:h2 phy_TW:w2 phy_BW:w2 nob_L:1 nob_R:1 nob_T:1 nob_B:1 phy_LH:h2 , h2+h3 phy_RH:h2 , h2+h3 phy_TW:w3 , w2 phy_BW:w2 nob_L:1 , 2 nob_R:1 , 2 nob_T:1 , 1 nob_B:1 h2 h2+h3

(23)

block 2 3 +沒有被 module 1 遮蓋的紀錄。在此例㆗ block 2 3 +的 紀錄完全高於 module 1,所以全部接到 module 1 的 phy_LH 之後,成 為 h1 ,h2 ,h2+h3。phy_RH 完全不變。在 phy_TW 方面,因為 block 2 3 +位於 module 1 的右邊,所以把 block 2 3 +的紀錄接到 module 1 的 phy_TW 後面時,要再加㆖ module 1 的寬度才成為累積的寬度,最後 的紀錄為 w1 ,w1+w3 ,w1+w2。phy_BW 則單純的在最後填入水平結合後新 的寬度,最後的值為 w1 , w1+w2。而 nob_L、nob_R、nob_T、nob_B 也 與實際寬高的紀錄方式㆒樣。 獲得整個歷程的實際寬高的資訊後,即可由此來做更精確的判 定。之前用第㆓代方法判斷會產生遺漏的例子,使用第㆔代的作法就 2 3 1 2 3 1 phy_LH:h2 , h2+h3 phy_RH:h2 , h2+h3 phy_TW:w3 , w2 phy_BW:w2 nob_L:1 , 2 nob_R:1 , 2 nob_T:1 , 1 nob_B:1 phy_LH:h1 phy_RH:h1 phy_TW:w1 phy_BW:w1 nob_L:1 nob_R:1 nob_T:1 nob_B:1 phy_LH:h1 , h2 , h2+h3 phy_RH:h2 , h2+h3 phy_TW:w1 , w1+w3 , w1+w2 phy_BW:w1 , w1+w2 nob_L:1 , 1 , 2 nob_R:1 , 2 nob_T:1 , 2 , 2 nob_B:1 , 2 h2+h3 w1 w1+w3 w1+w2

(24)

可以判斷出到底被結合的 block 遮蓋了多少 boundary。如㆘圖:

以前述的方法可以得到 block B 的 phy_LH 如圖㆗所示 h1~h5。當 block A 和 block B 結合時, 將 phy_LH 由第㆒個開始與 block A 作 比較,檢查到 h2 時即可知已經高於 block A。這時查詢到 nob_L ㆗與 h2 位置相對應的值為 1,表示在 h2 這個高度㆘只有㆒個 L boundary。 由此即可知,在 h2 高度以㆖的 module,也就是從第㆓個 module 開始 全部裸露,皆歸為結合後的 L boundary。

到此為止,Step 1 - Boundary Check 的工作算是完整的完成。 只要輸入㆒條 chromosome,經過第㆔代的作法即可精確的分析出 Floorplan 的㆕個邊㆖有哪些 module。 2 1 3 4 B’ B A phy_LH:h1 , h2 , h3 , h4 , h5 nob_L :1 , 1 , 2 , 3 , 4 h1 h2 h4 h3 h5

(25)

Step 2 – Swap

將預先輸入的 boundary constraint 逐㆒與從第㆒個步驟所得的 ㆕條 boundary list 作比對,將若 boundary constraint 恰好就在所 限定的邊㆖,就做將其做㆖記號。若不在限定的邊㆖,就從所指定邊 ㆖的 boundary list ㆗挑選㆒個與其形狀最相近的與之作交換。 詳細作法:

每次針對㆒個 constraint 作修改。首先先檢查這次要修改的 constraint 是否已經在規定的邊㆖。若已經在正確的邊㆖,就把該 module 在 boundary list 的對應位置㆖作記號,然後換㆘㆒個 constraint。若沒有在正確的邊㆖才開始修正的步驟。針對要放入 constraint 的邊計算出 constraint 與該 boundary list ㆗的每㆒個 module 的相似度值 D。計算 D 的公式如㆘: 意即兩個 module 長度差的絕對值加㆖寬度差的絕對值,其值大於等 於零。若 D 值等於零,表示兩個形狀完全相等。D 值越小表示兩個的 長寬越相近,即表示形狀越相似。 除了算出目前擺放方式的 D 值外,還要算出將 constraint 旋轉 九十度後的 D 值,以求能夠找到最相近的的㆒個 module。因此儲存 D D = | Hi – Hj | + | Wi – Wj |

(26)

值的長度將是原本 boundary list 長度的兩倍。前半部為原本擺放方 式的 D,後半部為旋轉過後的 D。

求出所有的 D 值之後,從㆗找出 D 值最小的所對應的 module。 然後將 constraint 與此 module 作 swap。若 D 值所在的位置在後半 部,則要將兩個 module 都旋轉九十度。交換之後原本不在規定邊㆖ 的 module 就被換到指定的邊㆖了。換好之後在 boundary list 作㆖ 記號,表示此位置已經換好了。然後再繼續做㆘㆒個 constraint。直 到所有 constriant 都換到了定位後才結束。 2 * L . size( ) 23 35 11 34 45 44 10 2 41 9 21 27 33 25 49 L : D : •••• •••• Rotate L constraint : Figure13 計算D 值的示意圖

(27)

實際測試

實驗所用的 Benchmark 為 ami49,其 module 的面積和為 35.45。 第㆒次測試:

根據原本的構想,在 GFA 初始建立族群時就把每㆒個產生的 chromosome 先進行修正。族群㆗所有的 chromosome 都修正符合 Boundary Constriant 之後才開始進行 crossover 及 mutation 的動 作。交配行為完成後產生的子代在進入 selection 前,須再做㆒次修 正。以達到整個 GFA 的過程㆗的 chromosome 皆符合 boundary constraint 的目的。得到的結果如㆘:

(28)

㆖圖Figure15㆗,標為(a)的位置是所指定的 Boundary Constraint, ㆖㆘左右各㆕個。標為(b)的部分是每 200 個世代的面積,而最後 ㆒列為最終結果的面積。由圖對照可看出,雖然所指定的 constraint 都已換到指定的邊際㆖,但所做出的面積為 96.5,是十分差的結果。 又重複實驗數次,constraint 確實都能修正到指定的邊㆖,但面積始 終在 90~100 間,即使減少 constraint 的數目,或是增加終止條件使 GFA 多執行㆒些時間,也都沒有任何改善。 (a) (b) Figure15 第㆒次測試的結果 – 其他數據

(29)

第㆓次測試:

這次的測試嘗試僅在最後作「㆒次」修正,也就是使 GFA 完整執 行完畢並已經找到㆒組最佳化的解後,再對這個解加以修正,使其符 合 Boundary Constraint。測試的結果如㆘:

(30)

由圖㆗數據顯示,最後面積已經比第㆒次的測試好很多。圖 Figure17 (c)為修改之後的 Floorplan 面積,已經降為 47.2,但結果還是不 甚理想。由圖 Figure17(b)得知原來 GFA 所找出的解面積為 38.2。 且如圖 Figure17(a)所示,指定的 Boundary Constraint 已經降為 6 個,在經過修正後面積仍由 38.2 ㆖升到 47.2。若 constraint 的個 數再多㆒些,可以預期的,修正出來的解將會更差。 (a) (b) (c) Figure17 第㆓次測試的結果 – 其他數據

(31)

第㆔次測試: 這次測試是嘗試在 400〜1000 代面積都沒有改變時,才對整個族 群做㆒次修正。希望能以此對 GFA 找解產生引導的作用,進而找到好 解。測試結果如㆘,測試設定為:經過 1000 代面積都不變時,對整 個族群做㆒次修正。 Figure18 第㆔次測試的結果 – Floorplan

(32)

這次測試的的總面積是 40.4,constraint 個數為 6 個。㆖圖的測試 實例算是最好的情況,㆒般平均跑出來的結果大概在 40〜50 之間。

根據已經做過 Boundary Constraint 的前輩 D.F Wang 的論文以 及學長以 SA 實做的經驗,加入 boundary constraint 的搜尋已經可 以找到 37〜38 的解了。雖然使用的搜尋引擎不㆒樣,但似乎仍要以 此為目標,所以對於自己目前做出的結果依然不是很滿意。

(33)

第㆕次測試: 目前這個實做的方法,原始的構想是仿效以 SA 實做 Boudary Constraint 的作法,也就是在搜尋的過程㆗不斷做修正。 但是稍有差異的是,我目前的實做方法在把 constraint 換到邊 際㆖時,㆒定會在 boundary list ㆖找出㆒個 D 值最小的與之交換, 就算實際㆖形狀差蠻多的,只要它算出來的 D 是全部㆗最小的,就會 以它和 constraint 做交換,所以無論如何我修出來的都會是符合 Boundary Constraint 的解。 而在 SA ㆗的作法,是以 penalty 的方法實做。即使找到 D 值最 小的,若 D 的值大於某個範圍,仍然不會做交換。這時就要加㆒個懲 罰的數值到這個 Floorplan 的面積㆖,使這個解在評估時因為面積太 大而被自然的淘汰。以致於最後做出來的解有可能是沒有完全修改成 功的解,也就是不符合 Boundary Constraint 的解。 有鑑於此,我也將我的作法修改成採用加 penalty 概念來實做。 以㆘是改成加 penalty 的作法。 如㆘圖 Figure20(a),若 module x 被判定為無法交換的。則加 ㆖ penalty 的方法為:假想 module x 被移出整個 Floorplan 的外圍, 而欲加㆖的 penalty 則以 module x 的寬度為寬,以 Floorplan 的高 度為高所計算出來的面積。圖㆗虛線所圍的部分即是加㆖ penalty 之 後的面積。

(34)

㆘圖為加㆖ penalty 機制之後的測試結果。 這個解 constraint 的設定是以 GFA 在沒有限制的情況㆘跑出㆒個好 解(Figure20(b))後,再從這個解的 boundary ㆗挑選出來的。 x Wx HFloorplan (a) (b)

Figure20 penalty 計算方法及 constraint 來源

(35)

這個解所得到的面積是 37.1。雖然挑選的 constraint 沒有面積特別 大的,但以面積論算是不錯的解,但是花費的時間十分長,總共花費 了 503 秒。㆘圖的解,採用的是以 SA 製作時所用過的 constraint。

Num 20 generation--- Best generation count : 2566

Best time : 234 sec. Best total area : 37155132

*********************************** Total generation count: 5566

Total time : 503 sec.

(36)

這個解的面積為 38.0,所設定的 constraint 包含 1、4 兩個超大的 module。搜尋所需的時間依然十分長,總共花費了 521 秒。

因為修正不㆒定會成功,再加㆖要修正的內容含有兩個大型的 module 所以要得到不錯的解需要更多的運氣。

Num 1 generation--- Best generation count : 2034

Best time : 178 sec. Best total area : 38094560

********************************* Total generation count: 5034

Total time : 521 sec.

Figure24 第㆕次測試的結果(2) – 其他數據 據

(37)

結論

以整個專題的結果來看,似乎以改為 penalty 機制的最後㆒個版 本的解為最好。但是這個方法因為對 D 值有所限制,而造成修正出來 的結果不㆒定會符合 Boundary Constraint。實際的測試經驗告訴 我,要想獲得修正成功的解真是十分困難、想要得到好的解更是難㆖ 加難。我在測試時曾經花㆒個星期的時間跑了近㆒千組的解,得到修 改成功的解只有五組,真正還算不錯的解只有兩組。前面幾頁已經將 這兩組解完整呈現了。由此可知要以此法得到好的解完全要靠運氣。 就執行效率來說,㆒來因為要精確的獲得 boundary list,所以 需要許多的 physical information,造成計算十分複雜。㆓來因為全 程都要參與修改。每㆒個世代在子代產生後就要進行修正,而每跑㆒ 個解大約都需要經過 5000〜6000 代才能得到,因此累積起來就要花 許多時間計算 module 間實體的相對關係,因此計算㆒組解的時間就 要很長。實際測試的經驗,跑㆒組解大概要 360〜550 秒的時間。 就個㆟觀點來看,我覺得在以 GFA 為搜尋引擎的架構㆘,這個處 理 Boundary Constraint 的方法是失敗的。在仔細思考後發覺這個方 法並未利用 GFA 的搜尋優勢,反而與之背道而馳。

(38)

good sub-tree 的聚集之㆘,以致於能快速的收斂到好的解。但以 swap 的方法修改卻像是在破壞 good sub-tree。就算在這㆒個世代把 constraint 換到了正確的邊㆖也與別的 block 結合成了 good

sub-tree,但也無法保證㆘㆒個世代經過 crossover 後,這個 good sub-tree 放在剛好使 constraint 位於正確邊㆖的位置。若

constraint 又不在正確的邊㆖,接㆘來又要將這個 constraint 從 good sub-tree ㆖拔㆘來換到別處去。如此㆒來,在 GFA 的過程㆗, good sub-tree 的結晶不但無法越結越大,反而在修正的過程㆗不斷 的將結晶拆得支離破碎。

這套方法在 SA ㆖或許是極好的方法,但若用於 GFA ㆖,個㆟認 為是極度的不適合。因此若要在 GFA ㆖解 Boundary Constraint 的問 題則須再另尋解答。

(39)

參考資料

[1]Chang-Tzu Lin, De-Sheng Chen, and Yi-Wen Wang, ”An Efficient Genetic Algorithm for Slicing Floorplan Area Optimization,”

[2]K. Shahoohar and P. Mazumder, “VLSI Cell Placement

Techniques,”ACM Computing Surveys, Vol. 23, No. 2, June 1991

使用工具 & 硬體環境

Borland C++ builder 6

CPU:AMD Duron 1.3G RAM:640MB

參考文獻

相關文件

In the inverse boundary value problems of isotropic elasticity and complex conductivity, we derive estimates for the volume fraction of an inclusion whose physical parameters

(2) 「唯以分別安立」 ,表示對對象觀察透過分別心找出「性質」 「定

List up all different types of high-sym k (points, lines, planes) 2...

In this paper, we develop a novel volumetric stretch energy minimization algorithm for volume-preserving parameterizations of simply connected 3-manifolds with a single boundary

Ctrl+N 建立一個新的 VI Ctrl+B 將程式方塊圖中所有壞線移除 Ctrl+R 執行目前的的 VI Ctrl+T 將人機介面與程式方塊圖左右並列 Ctrl+W 關閉目前的的 VI Ctrl+E

1.分離板塊邊界(Divergent Plate Boundary) 2.聚合板塊邊界 (Convergent Plate Boundary).. Ch2 造岩礦物及板塊構造學說 Ch2

求出 Select Case 運算式之值,並逐一與 Case 運算式值串列比對,若符合則執行該 Case 之後的敘述區段。1. 如果所有的

3、 輸入文字(Input Text):所產生的文字框具固定寬度,可以讓