后端在floorplan階段,如何擺放macro是一個(gè)很重要的問題。如果采用層次化設(shè)計(jì)募书,對于每一個(gè)block來說都需要在block內(nèi)部把所分配的macro擺好。如果某一個(gè)block里的macro很多测蹲,又很大莹捡,std cell再多一些,utilization就會(huì)很大扣甲,相應(yīng)的這個(gè)block的floorplan就比較難做篮赢,而其他block的utilization很小,這樣的design就不太好文捶。我們總是希望所有的block都能有差不多的utilization荷逞,平均且充分地利用芯片的每一塊面積媒咳,這就需要在block劃分初期就做好預(yù)估粹排。
這個(gè)問題需要前端與后端協(xié)調(diào)配合,block的劃分是需要前端提供帶有hierarchical結(jié)構(gòu)的netlist涩澡,然而前端在做hierarchical的綜合的時(shí)候顽耳,并不會(huì)過多考慮后端物理層面的信息,因此可能綜合出的netlist各個(gè)block物理上不是那么均衡妙同。當(dāng)然射富,這種netlist也是可以物理實(shí)現(xiàn)的,只是對于有些要求比較高的design來說粥帚,最后出來的芯片性能可能會(huì)有所不足胰耗。這個(gè)時(shí)候后端工程師就可以反饋,比如說芒涡,把某個(gè)block的某個(gè)macro綜合到另一個(gè)block里去柴灯,或者兩個(gè)block就直接merge變?yōu)榫C合成一個(gè)block卖漫。收到反饋以后,前端工程師就可以重新綜合赠群,再給我們新的netlist來做物理實(shí)現(xiàn)羊始。
以上這個(gè)過程可能需要迭代幾次才能達(dá)到最佳效果,但這樣會(huì)需要花費(fèi)很多時(shí)間查描,導(dǎo)致芯片設(shè)計(jì)周期變長突委。一種更快速的方案是,前端首先綜合出flatten的netlist冬三,就是不帶任何hierarchical信息的匀油,出這種netlist的速度應(yīng)該相對快一點(diǎn)。后端拿到flatten的netlist之后长豁,就知道了macro以及有關(guān)的std cell的面積了钧唐,這樣后端就可以直接通過這些物理信息和邏輯信息來劃分block,再把分配好的結(jié)果給前端匠襟,前端就可以參考這樣的分配來做hierarchical層級(jí)钝侠。不管是flatten的綜合還是hierarchical的綜合,出來的cell的count或area是差不多的酸舍,因此后端在拿到hierarchical的netlist之后帅韧,做出來的block物理情況應(yīng)該也與之前用flatten netlist的預(yù)估差不多。
有一個(gè)可能疑惑的地方是啃勉,這里前端給的netlist永遠(yuǎn)是總的芯片的所有的netlist忽舟,不管是flatten還是帶hierarchical結(jié)構(gòu)的netlist都是一個(gè)file。我們后端也會(huì)做netlist的劃分淮阐,不過是根據(jù)前端給的那份netlist切割成好多個(gè)netlist給不同的block來用叮阅,相當(dāng)于把一個(gè)文件變成多個(gè)文件,每個(gè)block拿一個(gè)泣特,分割的依據(jù)是總的netlist的hierarchical結(jié)構(gòu)浩姥。
有的時(shí)候資本家覺得上面的方法還是慢,并且還想追求比較好的芯片性能状您,就有人想出了更為討巧的辦法勒叠。這個(gè)方法犧牲了一定的準(zhǔn)確度,但大大提高了速度膏孟。就是說前端在綜合之前就把ip和所用macro的信息提供給后端眯分,而后專門有工程師來利用大數(shù)據(jù)機(jī)器學(xué)習(xí)的方法預(yù)估出每個(gè)ip相關(guān)的std cell的area和count。沒錯(cuò)柒桑,機(jī)器學(xué)習(xí)也應(yīng)用到芯片領(lǐng)域了弊决,一個(gè)ip在之前的芯片中用的越多,樣本量就越大魁淳,學(xué)習(xí)的效果就越好飘诗。后端就可以根據(jù)這一份預(yù)估的結(jié)果來進(jìn)行block劃分傅联,然后把劃分結(jié)果反饋給前端,前端就可以直接按這個(gè)方案綜合疚察,綜合次數(shù)最少僅需一次蒸走!芯片設(shè)計(jì)周期大大縮短,但相應(yīng)的劃分的準(zhǔn)確度也較難保證貌嫡。
這是我發(fā)表的第20篇文章比驻。微信公眾號(hào):偉醬的芯片后端之路