3.4 MacroPlacement:記憶體巨塊的放置難題#
標準單元是整齊的積木,macro 卻是巨石。嵌入式 SRAM、暫存器檔、PLL、類比 IP,這些巨塊(macro)動輒佔去 core 面積的百分之三四十,尺寸互異、不可細分、還有各自的 pin 位置與金屬遮擋。它們擺在哪裡,幾乎決定了其餘所有邏輯的命運。Macro placement 因此被公認為實體設計中最依賴專家直覺的問題之一——也是 OpenROAD 社群多年攻堅、與學術研究深度互動的戰場。
為什麼難#
Macro placement 難在三個層次。第一,它是組合最佳化問題:與標準單元可以連續擺放不同,macro 是少數幾十個大型矩形的不重疊排布,搜尋空間離散而巨大。第二,評估函數昂貴:要判斷一種排布好不好,得同時考慮線長、時序、擁塞,而這些指標在 macro 擺定、單元 placement 完成之前都是未知數——你是在為一個尚未發生的未來下注。第三,還有一堆難以形式化的行規:macro 之間要留通道讓繞線穿越、不能把 macro 擺成「口袋」困住熱點、power strap 要能穿過、hard macro 的 pin 朝向要與預期繞線方向一致。這些規則在書上很難窮舉,卻是老工程師看了搖頭的地方。
在 OpenROAD 中,這個問題由 mpl2 引擎處理。mpl2 的血統可以追溯到 1980 年代的經典方法:simulated annealing(模擬退火)——由 Kirkpatrick 等人在 1983 年從統計力學借來的最佳化思想,以「接受偶爾變差的解」來逃離局部最佳。mpl2 以退火為骨架,配合大量針對 macro 的領域啟發式:層次化地先把 macro 分組(cluster)、對大 macro 先行排布、評估函數中線長與通道需求的加權。近年它更吸收了學術研究 AutoDMP 的成果——UCSD 團隊以 AutoTuner 框架對 mpl2 的數十個參數做貝葉斯最佳化,用機器學習自動搜尋退火參數組合,在多個設計上超越了人工調參。這是「老工程師的直覺被寫成可調參數、再被演算法自動調校」的完整案例,也是 DARPA 最初那個「把專家知識自動化」願望的直接兌現。
在 ORFS 中實際操作#
ORFS 的 floorplan 階段會自動執行 macro placement(若設計含 macro)。以一個含 SRAM 的設計為例,config.mk 中常見的調整:
export MPL2_GEDGE_MARGIN = 2 # macro 與 core 邊界的間距(site 數)
export TNS_END_PERCENT = 100 # 時序驅動排布時考慮的時徑比例
想細看 mpl2 的行為,可以直接在 OpenROAD 腳本中呼叫:
# 假設 LEF/DEF 與約束已載入,且網表中含 macro
global_placement -skip_nesterov # 先不做單元(略)
macro_placement -halo_width 2 -halo_height 2
-halo_width 與 -halo_height 為 macro 加上「光環」——禁止其他 cell 靠近的緩衝區,給 pin 繞線與電源軌留出呼吸空間。實務上,工程師也常用「手動 + 自動混合」策略:用 place_pin 與 place_inst 把關鍵 macro 固定在架構師指定的大位置,再讓工具處理其餘:
place_inst -name u_sram0 -origin {50.0 50.0} -orient R0
與 placement 引擎的分工#
mpl2 之後,設計交給 placement 引擎群:gpl(global placement)把數萬到數百萬個標準單元以連續鬆散的方式鋪開,採用 ePlace 系演算法——把細胞視為帶電粒子、以靜電勢能類比線長,用數值方法求平衡態;接著 detailed placement 把 cell 對齊到 row,dpo 做單元級的重排最佳化(交換、翻轉、填充以縮短線長與降低擁塞)。這個「macro 先定、單元後至」的次序不是偶然:macro 面積巨大且不可移動,若先放單元再放 macro,所有單元都得讓路重來。層次決定流程,流程反映物理。
從直覺到科學#
Macro placement 的歷史,濃縮了 EDA 方法論的演進:1980 年代退火用物理學對抗組合爆炸,1990 年代分層與啟發式管理規模,2010 年代 dataflow 分析讓工具理解設計意圖,2020 年代機器學習接手了參數調校——甚至更進一步,Google 2021 年發表於 Nature 的強化學習 placement 研究直接挑戰了這個問題本身,引發學界長期論戰。無論最終哪條路線勝出,趨勢是一致的:過去靠十年經驗累積的判斷,正在被拆解成可測量的目標函數與可搜尋的參數空間。
對學習者而言,最好的入門方式就是實驗:拿 ORFS 內含 macro 的測試設計,改變 halo、參數與 utilization,觀察線長、時序與 DRC 的連鎖反應。開源工具讓這種實驗的成本趨近於零——而每一次這樣的實驗,都是在把 macro placement 從手藝變成科學的道路上,多鋪一塊磚。