Placement 在 EDA 的 back-end flow 中扮演著承先啟後的角色,電路中的所有的邏輯閘、Macro (比方說來自其他人設計好的電路)要在這個階段通通擺放在 "適當" 的位置。何謂適當的位置? 這沒有標準答案,純粹看想要達到怎樣的目的。比方說,如果希望最後總連線長度 (wirelength) 要最短,適當的位置就是擺完後的結果要可以滿足這個條件。然而隨著電路的設計越來越複雜 (根據我所看過的 paper 中,不論是做怎樣的題目,在 abstract 或 introduction 以這句話作為引言的我覺得有八、九成以上...) ,要考慮的問題其實越來越多,也越來越難解決。電路設計過程中最看重的 timing 就是其中之一。
有寫過 HDL 的人應該都能深刻體會一件事:電路的 timing 正確與否決定了你會不會抓狂,在 HDL 終於寫完後,模擬的結果卻發現訊號傳遞的時間點怎樣就是不對時會讓你想砸電腦的。只要電路的 timing 不對是極有可能導致最後的結果也不正確,這時就不是成本高不高的問題,而是這 IC 能不能賣的問題了。所以業界其實很看重 timing 的結果,任何可以改善電路的方法都會面臨一個問題:timing 呢?
影響 timing 的原因有很多,比方說 wirelength、電壓、電流、電阻、訊號的強弱與否...等等,在這些因素裡 wirelength 會受到 placement 的結果所影響。因此有些研究題目就會在 placement 時把 timing 給納入考量,希望可以得到一個 timing 比較好的 placement 的結果。現在的 placer 有兩種常見的作法:force-directed 跟 analytical。
Force-directed 簡單來說就是把每一條線看成是一條彈簧,所以線越長、彈力位能越高、就會趨向把線給拉短。因此當每條彈簧彼此之間的拉力達到平衡時就是最好的結果。如果我們希望有條 wire 無論如何都短一點,那就把彈力係數設高一點,這樣只要線長只要稍微一變長就會大幅增加彈力位能,藉由這種方式來讓那條線最後的 wirelength 有較高的機率可以短一點。而 analytical 的做法就是把每條線的長度用個數學式子表示,然後去解那一堆方程式來得到最後的結果。如果想要考慮其他問題例如 timing,也是 timing 化成一堆方程式,最後也是想辦法解方程式。這兩者的差異在於 force-directed要想辦法模擬那種彈簧拉來拉去達到平衡的做法,但是普遍速度比 analytical 快很多;反之 analytical 只要想辦法把要解決的問題通通化成方程式,之後只要套個解方程式的 library 就好。
在這兩種做法中如果要計算 timing 其實都會遇到一個大問題:都還沒擺好,所以線也還沒連,怎麼算 timing? 一般來說 placement 的過程中不管哪種做法線長都是用估計的,所以 timing 當然也是用估計的。換言之怎麼估算 timing 其實就是一個要考慮問題,畢竟如果連估都估不准了,就別談 placement 完的結果到底是好還不好。所以有不少 paper 其實就是根據這點來努力。當然比較偷懶一點的就是直接用 wirelength,畢竟 wirelength 也是影響 timing 的因素之一嘛,不過這種方法因為不是直接看 timing 的結果,所以成效有限,也不一定能得到好結果。另一方面估的準當然是好事,但是如果代價是很花時間那不如不要,因為 placement 本身就是件極費時的工作,如果估算 timing 也很費時,那大概就要等到天荒地老了。舉個實例:以這一兩年比賽所公布的測資來說,一個具有100萬個 cell 要擺放的測資,現在學界的 placer 是以小時計。而 commercial tool 中公認計算 timing 結果比較好的 tool 跑一次 timing 分析其實也要以小時計,要是今天對 placement 完的結果不滿意想要重新調整時,每重新跑一次就是等到天荒地老,我想這很多人都無法接受的。
現在 timing driven placement 的研究方向有這幾種:1. 如果估算 timing 2. 如何整合進現有的 placer 的架構中 3. 如何在考慮 timing 的過程中同時考量其他議題。現在的 paper 大概都會同時著墨這三點,只是重心擺在哪一點而已
沒有留言:
張貼留言