后端在floorplan階段,如何擺放macro是一個很重要的問題。如果采用層次化設計,對于每一個block來說都需要在block內部把所分配的macro擺好。
如果某一個block里的macro很多,又很大,std cell再多一些,utilization就會很大,相應的這個block的floorplan就比較難做,而其他block的utilization很小,這樣的design就不太好。
我們總是希望所有的block都能有差不多的utilization,平均且充分地利用芯片的每一塊面積,這就需要在block劃分初期就做好預估。
這個問題需要前端與后端協調配合,block的劃分是需要前端提供帶有hierarchical結構的netlist,然而前端在做hierarchical的綜合的時候,并不會過多考慮后端物理層面的信息,因此可能綜合出的netlist各個block物理上不是那么均衡。
當然,這種netlist也是可以物理實現的,只是對于有些要求比較高的design來說,最后出來的芯片性能可能會有所不足。
這個時候后端工程師就可以反饋,比如說,把某個block的某個macro綜合到另一個block里去,或者兩個block就直接merge變為綜合成一個block。收到反饋以后,前端工程師就可以重新綜合,再給我們新的netlist來做物理實現。
以上這個過程可能需要迭代幾次才能達到最佳效果,但這樣會需要花費很多時間,導致芯片設計周期變長。一種更快速的方案是,前端首先綜合出flatten的netlist,就是不帶任何hierarchical信息的,出這種netlist的速度應該相對快一點。
后端拿到flatten的netlist之后,就知道了macro以及有關的std cell的面積了,這樣后端就可以直接通過這些物理信息和邏輯信息來劃分block,再把分配好的結果給前端,前端就可以參考這樣的分配來做hierarchical層級。
不管是flatten的綜合還是hierarchical的綜合,出來的cell的count或area是差不多的,因此后端在拿到hierarchical的netlist之后,做出來的block物理情況應該也與之前用flatten netlist的預估差不多。
有一個可能疑惑的地方是,這里前端給的netlist永遠是總的芯片的所有的netlist,不管是flatten還是帶hierarchical結構的netlist都是一個file。
我們后端也會做netlist的劃分,不過是根據前端給的那份netlist切割成好多個netlist給不同的block來用,相當于把一個文件變成多個文件,每個block拿一個,分割的依據是總的netlist的hierarchical結構。
有的時候資本家覺得上面的方法還是慢,并且還想追求比較好的芯片性能,就有人想出了更為討巧的辦法。這個方法犧牲了一定的準確度,但大大提高了速度。
就是說前端在綜合之前就把ip和所用macro的信息提供給后端,而后專門有工程師來利用大數據機器學習的方法預估出每個ip相關的std cell的area和count。
沒錯,機器學習也應用到芯片領域了,一個ip在之前的芯片中用的越多,樣本量就越大,學習的效果就越好。
后端就可以根據這一份預估的結果來進行block劃分,然后把劃分結果反饋給前端,前端就可以直接按這個方案綜合,綜合次數最少僅需一次!芯片設計周期大大縮短,但相應的劃分的準確度也較難保證。
-
芯片設計
+關注
關注
15文章
1005瀏覽量
54817 -
STD
+關注
關注
0文章
36瀏覽量
14345 -
機器學習
+關注
關注
66文章
8381瀏覽量
132431
發布評論請先 登錄
相關推薦
評論