數字IC後端設計實現之floorplan&powerplan篇

估算模塊或者chip面積

本文暫時只討論模塊級的設計。根據前端綜合release的report(含標準單元standard_cell,memory ,ip的面積信息),數字後端工程師會估算出模塊的面積。這個估算方法建議每個項目都做一個以表格形式來做統計,方便為其他項目提供參考。需要注意的是,建議將standard cell和memory的利用率分開統計,memory利用率的經驗值一般按80%來計算。

數字IC後端設計實現流程之initial design

初始化Initial模塊形狀

估算完模塊的面積後,block owner會向top負責人報告子模塊需要的大概面積,方便頂層top做partition。模塊的boundary一般都是負責top level floorplan的工程師基於全局考慮做partition後,為每個子模塊分配的形狀。比較有經驗的top負責人往往在partition時會考慮模塊實現難易程度來分配各個模塊的boundary。之所以晶元中有多邊形的模塊,主要有以下幾方面的原因:

  1. 晶元top level floorplan中有些地方top不太好利用(節省面積)
  2. 模塊的物理實現比較簡單
  3. 負責模塊的數字後端工程師能力比較強

初始化模塊floorplan可以用如下命令實現:

Initialize_floorplan

在ICC中初始化模塊形狀時,需要注意的是方形和多邊形的初始化命令是不一樣的。方形的初始化命令應該用create_floorplan來實現。

初始化命令主要包含模塊的boundary, row, track, core to die等信息,對應gui界面如下圖所示。

擺放io port

初始化模塊boundary後,所有的io port均在原點。在ICC中是需要將這些port,create出對應的terminal,擺放好它們的位置。面對成千上萬的port,很多junior engineer並不知道如何去擺放這些port,這個是新手的通病。

那麼多port,顯然我們不可能手工去create terminal 和擺放對應的port。吾愛IC社區的小編今天分享一個方法:

  1. 從netlist中利用腳本獲得所有的io port。這一步非常簡單,因為io port在net不外乎以input,output或者inout的形式出現在netlist中top module的最上面的介面聲明部分。你可以用TCL或者perl來自動獲取這些port,並寫到一個文件中。

  2. 對獲取到的io port文件,進行排序。如果某些模塊對io port的sequence有特別要求,則需要嚴格按照top的要求重新調整io port順序,否則只需要按照字母順序即可(時鐘信號建議單獨處理,擺放在port中間位置)。

  3. 根據調整後的io port sequence文件,編寫pin constraint。這步主要指定對應terminal所用的層次以及terminal之間的間距。

  4. 最後執行create_fp_pins,工具按照pin constraint來自動擺放io port。

如果需要查看擺放io port的整套腳本,可以訪問小編知識星球查看具體腳本。

擺放memory 和ip

初始化模塊形狀後,所有的macro,如memory,ip也都在原點處。如果你的模塊中有兩三百個memory,你要如何快速完成memory的擺放呢?

具體做法:

由於memory特別多,建議先讓工具擺放一遍。使用命令如下:

Set_fp_stragety -macros_on_edge on

這步主要指定擺放的方式為將memory擺放在boundary四周。默認情況下,工具會將memory擺放在中間區域。

Create_fp_placement

執行create_fp_placement後,此時memory和standard cell均已擺放好。但是我們只關心memory的位置,所以你可以將標準單元standard cell remove掉。需要特別注意的是工具擺放memory時不會考慮poly orientation,所以需要特別留意這點。關於poly orientation的相關注意事項,可以參考之前推送的文章。

有了初始的memory位置後,我們可以利用ICC中plan group來進行data flow分析,從而精細化擺放memory。

Powerplan規劃

擺放好io port和memory後,就需要進行powerplan規劃。對於一個不做power domain的模塊,它的powerplan就非常簡單,就是構建一個交叉的power mesh network即可。本文主要討論基於power domain的powerplan規劃。在做powerplan規劃之前,需要提前確定某個工藝的特定Metal Stack,從而決定block level應該要用那些層來打power。

  • Power Switch Cell供電(MTCMOS)

對於需要做power domain的設計,需要加MTCMOS。加MTCMOS需要注意以下幾點:

MTCMOS數量。關於設計中需要加多少數量的MTCMOS,小編已經推送過,各位可以參見往期文章以及知識星球上的內容。MTCMOS數量多少是基於IR Drop(動態IR Drop和靜態IR Drop結果),面積Area,繞線資源等方面tradeoff來決定的。

【機密】從此沒有難做的floorplan(數字後端設計實現floorplan篇)

Create MTCMOS後,需要為其做好powerplan規劃,包含global vdd和local vdd的電源網路規劃。由於MTCMOS上的global power pin是底層出pin的,而global power strap是高層供下來的,所以在MTCMOS上會有很多大孔。當設計中MTCMOS過多時,可能會導致routing resource不足,從而出現short,diff net spacing等physical drc。

在規劃local vdd電源網路時,需要考慮電源網路供電路徑的電阻最小化。

  • Level shifter cell供電

在數字後端實現中,我們會經常用到Level shiftr。 Level shifter cell的power 連接是非常有講究的。實踐表明,很經常碰到level shifter區域存在特別大的IR drop問題。出現這種問題一般都是沒人認真去研究level shifter power的連接方法。Level shifter是兩條row高度的cell,其中含有VDD,VSS和VDDL(VDDH)。VDDL和VDDH是secondary power pin。在畫power時,需要將其畫成一個額外的power rail,確保每個Level shift cell secondary power pin的正常供電。

更多關於數字IC後端設計實現中secondary power pin的連接方法見往期推文。

推薦閱讀:

低功耗設計實現中secondary power pin的連接方法匯總

  • Memory供電

Memory上power ground pin一般是Metal4出pin的,所以可以用Metal5進行銜接,然後再將Metal5連接到更高層的金屬上。

需要注意的是實際晶元出來,memory上出問題的概率還是蠻大的。所以在數字後端設計實現時,需要確保memory供電足夠充足。對於一個做power domain的設計,需要在memory周圍加夠MTCMOS,打夠power strap。

  • IP供電

這裡指的IP是指SOC設計中所用到的物理phy。在給這類IP打power 時,需要查閱vendor相關文檔,整理出一個check list來。一般vendor會給出IP本身與四周其他IP的最小間距要求,與core logic區域之間的最小間距以及某電源網路路徑最大電阻的要求等等。

即使你嚴格按照了vendor要求來做floorplan和powerplan,你仍然需要將你的做法同vendor進行再次確認。做這一步目的是防止甩鍋和背鍋,老司機一定懂得。

如何qualify floorplan和powerplan?

  • verify_pg_nets來檢查

Verfy_pg_nets的結果需要認真看,主要看設計中是否存在floating pin,特別是MTCMOS是否存在floating的global vdd。對於結果報告,需要我們能夠分辨出哪些是真錯,哪些是假錯(或者說不用關心的錯誤),比如floating shape的錯誤就可以完全不用管。

  • 跑一個初始版本的DRC

這步主要用來檢查memory,ip和標準單元standard cell的poly orientation方向是否一致以及powerplan是否存在physical DRC等。

  • 人工review floorplan和powerplan

這步是小編每個項目都會去做的,也強烈推薦各位也去做這個事情。因為有的時候你現有的floorplan和powerplan可能工具分析結果並沒有大問題,但是從我們自身積累的工作經驗出發,我們可能能夠找出設計出的不足,比如某些memory的channel留得太大,channel間MTCMOS不夠,局部區域供電網路不夠robust等。一個不是很完美的floorplan和powerplan,如果你叫上兩三個資深點的工程師去review,肯定會被抓出不少毛病來的。

小編知識星球簡介:

在這裡,目前已經規劃並正著手做的事情:

  • ICC/ICC2 lab的編寫
  • 基於ARM CPU的後端實現流程(已經發布)
  • 利用ICC中CCD(Concurrent Clock Data)實現高性能模塊的設計實現(已經發布)
  • 基於ARM 四核CPU 數字後端Hierarchical Flow 實現教程(準備中)
  • 時鐘樹結構分析
  • 低功耗設計實現

  • 定期在星球布置作業題(星球已經支持布置作業功能)

在這裡,各位可以就公眾號推文的內容或者實際項目中遇到的難題提問,小編會在24小時內給予解答(也可以發表你對數字後端設計實現中某個知識點的看法,項目中遇到的難點,困惑或者職業發展規劃等)。

反正它是一個縮減版的論壇,增強了大家的互動性。更為重要的是,微信有知識星球的小程序入口。星球二維碼如下,可以掃描或者長按識別二維碼進入。目前已經有146位星球成員,感謝這146位童鞋的支持!歡迎各位鐵杆粉絲加入!終極目標是打造實現本知識星球全員年薪百萬的宏偉目標。(星球的門檻將會越來越高,有需求的朋友趁早上車)

推薦閱讀:

TAG:晶元設計 | 晶元(集成電路) | 數字IC設計 |