如果有人問我,數字后端最重要的是什么,我一定回答他:是流程。
但是對於很多非后端的人來說,后端究竟干什么一直是一個模糊的概念。有些人認為可能就是跑跑flow,弄弄工具;有些人認為全是dirty work,完全手動,毫無技術含量。就我個人來說,不止一次遇到一些前端的人不僅對后端完全不懂,甚至認為RTL寫好驗證通過后一顆芯片基本就能做出來,言語之間還帶着一些蜜汁優越感......
那么后端流程究竟是什么呢?首先,后端的總體工作用一句總結就是:運用給定的輸入,在給定的時間內做出符合signoff條件的PR結果並滿足各種驗證。
下圖對數字后端流程做了大致描述。
-
輸入是整個數字后端工作的開始,也是最根本的基礎。它包含了后端流程需要的所有文件:綜合/DFT后的網表(netlist)、時序約束sdc、timing&physical等庫文件、signoff的條件和設置以及各種EDA工具所需要的工藝文件。
需要指出的是,在流程相對完善的公司,一般工程師可能並不需要過分關注Library、signoff條件或者工藝文件等東西,甚至不需要對sdc有太多了解也可以把自己的block做到收斂。但是我還是強烈建議各位養成認真了解每一個項目的好習慣。
-
Floorplan是一個后端設計最為重要的兩個部分之一(另一個為CTS)。它直接影響芯片的PPA(power, performance and area)。一個好的floorplan能夠明顯減少迭代次數,並能縮短設計周期。關於如何評價一個floorplan好壞,我們將在未來另開文章詳細解說。
就我個人觀察,新手在做floorplan的時候常常不知道從哪里下手,很多時候為了趕時間而隨便做幾個版本,然后直接扔出去跑Place,哪個版本的結果好就用哪個。這樣的結果就是很難積累經驗,也很難培養真正解決問題的能力。
-
Place,又稱PlaceOpt。主要內容是調用工具的算法對標准單元進行自動擺放。目前的主流PR工具在這方面都比較成熟,但是較新的次世代工具innovus和icc2還會遇見很多問題,需要配合EDA廠商一起慢慢完善。
-
CTS(Clock Tree Synthesis)。主要內容是根據floorplan和place的結果合理構建時鍾樹,並對有timing關系的clock進行balance。主流PR工具對於clock相對簡單的design都支持的比較好,但是對於clock domain多且結構復雜的design,想要做到一個skew,latency和power都比較理想的clock tree是工作量很大且很有技術含量的工作,因此很多大公司的項目都是單獨分出人來負責時鍾樹的構建。
需要指出的是,除了傳統的clock tree,近些年還有大量的定制化clock tree結構陸續出現並在流片后實現了比較好的效果,比如fishbone, H-tree等。本人在此方面也有過開發經驗,如果大家有興趣以后可以開一篇或者幾篇文章詳細說一說。
-
Routing,包括布線后的優化,主要是調用PR工具的算法對design中的net進行自動布線,並在布線后繼續優化timing, area和power等。對於Routing,最重要的就是能否繞通,也就是是否能夠將繞線后的drc/short降至最低甚至0。需要指出的是,這部分routing的對象不包括power,analog等特殊net,因為這些net通常有特殊的約束,因此需要設計者根據工藝、floorplan以及其他constraint自行設計。
-
Verfication,即驗證。主要包括一下幾種:
這里雖然只是簡單的列舉的verification的分類,但是實際上上面的每一個種類水都很深,大公司更是每個門類都有專門的team。但是反過來說,一旦進入到上述的某個領域且持續做很久的話就很難再跳出來,尤其是對應屆生來說,在做職業規划的時候需要好好考慮。
7. 一切都沒有問題之后,就可以signoff了,也就是我們常說tapeout。對於foundry長來說,主要需要后端提供的GDSII或者OASIS文件來制作各層的mask並逐層制造芯片。但是在實際中可能會復雜一些。Tapeout一般來說是一件各方都很重視的事情,因此在流程嚴格的公司可能會涉及各種review和check,在交付foundry廠之后通常foundry的后端team還會再做一次Physical的驗證來保證質量。在這些方面大家有過幾次流片經驗之后就會慢慢熟悉起來。