第四章 左下靠緊板面規劃表示法 :
4.4 初始以 DBL 表示法為基礎之板面規劃
如圖 4.5(c)(d)一般建立 Gh 和 Gv 圖形後,再依照資料結構中常見的圖形最 長路徑搜尋,對 Gh 和 Gv 找出最長路徑,Gh 的最長路徑為 S→0→7→T,Gv 的最 長路徑為 S→7→8→9→10→T,這些在 Gv 與 Gh 的最長路徑上的區塊定義為關鍵 區塊(critical block),如圖 4.5(e)這些關鍵區塊決定了整個板面規劃面積大 小,這類區塊的鬆動值即設為 0,其他的區塊則是依其所屬的路徑來和最長路徑 上差距來算鬆動值,如圖 4.6 想找區塊 6 的垂直鬆動值即為 :
最長路徑的權重值-區塊所在路徑權重值 = (H7+H8+H9+H10) –(H0+H3+H6) 算出來的鬆動值感覺起來也就是區塊 6 還可移動的距離。
1
0 11 3 4
5 6
7 8
9 10 1 2
1
11 0 11
0 3 3 4 4 5
5 6 6
7 7 8 8
9 9 10 10 2
2
圖 4.6 鬆動值估算與關鍵區塊
Gh 與 Gv 這兩個圖形除了用來算鬆動值,也可以用來像循序配對組合一樣算 板面規劃的面積,代表水平關係的 Gh 算出的最長路徑代表整個板面規劃的寬,
代表垂直關係的 Gv 算出的最長路徑代表整個板面規劃的寬。
劃,並且建立其代表的 DBL。由於 DBL 為針對左下緊密板面規劃的表示法,而階 層階梯式輪廓也是完全由左下緊密板面規劃變化出來的,所以這兩個資料結構是 可以合作的,在更新結構時也可同時進行。
以階層式階梯輪廓初始化 DBL 上的板面規劃的步驟如下 : 步驟 1 : 設定初始輪廓:
建立階梯式輪廓的第一個<L→B>,且為了使初始板面規劃外觀趨近 於正方形,需設定一個板面規劃的大概範圍,使區塊盡量在這範圍內擺 置,範圍定為(0,0,
Limit
,Limit
)如圖 4.7,其中Limit
定義如下:Limit
= 1.5×所有區塊面積的總和
L B
L B
L
B L
B ( Limit,Limit )
圖 4.7 初始輪廓
步驟 2 : 選擇一還未擺置的區塊 B:
選擇的優先順序是有彈性地,以經驗來看,先選大的區塊來放會比 較好,這與平常大家在搬家一樣,大的東西先放,小的東西找空間塞。
步驟 3 : 以階梯式輪廓為基準,階層式的找尋適合的 L 角落給區塊 B 定位。
階層式搜尋階梯式輪廓的方法在上節有介紹,不再贅述,另外在同 一層中選擇 L 角落時,由經驗法則,要選 L 角落含子輪廓較多的,這表 示這個 L 角落有很多往內塞的空間,還有盡量要讓區塊落在步驟 1 中所
更新階梯式輪廓的方式,在上節提過是由下往上的方式,其實仔細 想想在更新階梯輪廓時追蹤過的區塊,即有可能會因為新放入區塊而改 變 DBL 連接邊的區塊,因此只要在放入區塊演算法中更新輪廓的地方加 入對目標層所有區塊更新 DBL 連接邊,圖 4.8 即改進圖 3.14 在階層階 梯式輪廓中放入區塊的演算法,虛線框出的部份即加入更新 DBL 的函 式。
圖 4.8 在階梯輪廓中放入區塊時更新 DBL 的演算法
步驟 5 : 若還有未擺置的區塊則回步驟 2,否則結束。
由以上 5 個步驟,即可建立一個左下緊密且面積較小的初始板面規劃,雖然最佳 板面規劃不一定是面積小,但畢竟在面積這個要求下為一個好的初始,未來搜尋 最佳化板面規劃會較快。
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;
Set DBL edge for this level if( overall the level) begin
separate the level;
return true;
end
partition block;
modify contour on single level;
return true end