Congestion問題怎么解決?



參考文章: http://www.52-ic.com/1029.html

Congestion 問題怎么解決?

1、RTL階段

一般是由大的MUX、大的Crossbar造成的,解決方法是將設計拆分,大模塊分成小模塊;
對於大扇入的MUX,可以通過級聯MUX優化走線問題;對於大扇出,例如一個FSM驅動多個block,可以通過復制這個FSM來優化走線問題。

2、PR階段

跟Congestion相關的主要包括以下幾個部分:宏單元、標准單元、Power Mesh。

1、宏單元與宏單元之間

當相鄰的兩個Macro距離很近時,由其是Memory,多個Memory的數據線和地址線在狹窄的空間內無法找到足夠的布線通道,通常會發生Congestion。
解決辦法:
(a)加大宏單元的間距,可以設置placer_soft_keepout_channel_width,讓工具在較小的channel間放置soft blockage
(b)調整Macro的位置、擺放方向,注意出Pin的方向,為出pin的區域留出足夠的空間,避免產生狹窄的通道。
(c)另外當多個Memory共用相同的數據線或者地址線時,可以調整它們的位置,使它們的Pin對齊,這樣連線會比較規整,對Congestion有幫助,即相關的macros進行group。

2、宏單元與標准單元之間

(a)標准單元不能離宏單元太近,宏單元周圍要放置Placement Blockage。可以設置physopt_hard_keepout_distance在宏單元四周放置hard blockage,或者create_placement_blockage -name -type -bbox
(b)由其注意Macro出Pin的方向一定要留出channel,否則Macro離std太近不容易出Pin。可以使用命令set_keepout_margin -type hard -outer {10 0 10 0} RAM
(c)另外要注意之前擺放宏單元的規則,注意盡量靠近角、邊,給中間的標准單元一個連續的區域。

3、標准單元與標准單元之間

可以分為兩種情況:

3.1局部高密度標准單元引起的congestion

大量的繞線通過高密度標准單元區域時,有時候會發生局部的較為嚴重的congestion。

解決辦法:
(a)為了解決局部congestion,我們通常會借助partialblockage降低局部區域的標准單元密度。Partial blockage是placement blockage的一種,是某一區域設定標准單元的利用率。有時候用partialblockage,並不能有效的解決congestion,這時候可以用blockage array來解決此類congestion。Blockage array是用“blockage陣列”的方式,控制congestion區域的標准單元的在區域內成條狀分布:一方面降低了密度,另一方面預留出了布線通道。create_placement_blockage -name -type -bbox
(b)限制阻塞區域的placement的密度:set_congestion_options -max_util 0.4 -coordinate {x1 y1 x2 y2}

3.2局部高密度pin cell導致的congestion

在數字邏輯設計中,如果某些模塊用了大量的高密度pin標准單元(如AOI、OAI等),這些標准單元會有很多的互聯關系,這樣就會導致在有限的空間內,存在大量的繞線,從而發生congestion。
解決方案:

1)在邏輯綜合中,禁用這些高密度pin的標准單元,這樣綜合出的網表中就不會有這些單元了,或者用DC的高級功能—DCG來解Congestion;

2)有針對性的降低此種標准單元的密度,如在ICC里,可以對這些標准單元設置keep_out_margin。通過此種方法,可以有效的削弱congestion;

3)對於層次性(Hier)設計而言,如果擁塞基本發生在某個模塊內部,那么可以單獨針對該模塊設置Plangroup,並設置它的利用率,可以通過嘗試找出既不會有太大Congestion,又不會太浪費面積的參數設置。

4)當然除了3)之外,某些含有很多AOI、OAI單元的模塊而言,也可以用RelativePlacement的方法來解決,因為這些模塊大多是datapath,完成某類復雜數學運算的單元,其中大部分的datapath都有規律可循,如果讓PR工具自己做Placement,擺放可能比較亂,且利用率也比較低,如果用手工分析擺放的方式,那么利用率甚至可以大於95%,且不會有Congestion,因為單元擺放比較規整,走線也都很規整。不過這種方式比較耗時,手工成分非常高,現在也有一些研究用人工智能、機器學習(ML)方式來自動做Relative Placement的。

4、Power Mesh與標准單元之間

數字IC版圖設計中如果PowerMesh打的太多,下方還放置的有標准單元,那么在出Pin的地方可能會存在Congestion
解決方案:
1、減少power,不要打太多,根據以往經驗和IR-drop分析的結果,可以在IR-drop滿足的情況下,減少Power Mesh,不用占用太多布線資源。

2、另外可以在布局之前設置讓軟件在Power下面不要放太多單元,設置partial blockage,partial density control。如下圖所示,可以非常清晰的看到,大部分的擁塞都發生在Power Mesh附近,這可以通過對Power Mesh設置partial blockage來解決。set_pnet_options -partial {metal2 metal3} set_pnet_options -complete {metal2 metal3}

5、Power Mesh與宏單元之間

這種情況可能不多見,如果出現了多半也是恰巧在Macro出Pin的地方上方有Strap。這種情況要注意,由於Memory這類Macro外邊要做Macro的PGRing,Memory里面的PG網絡也非常密集,有如Rail一般,都需要連到Macro的PG Ring上,且如果上方有Strap的話也會連上去。對於出Pin的地方如果有Strap,因為Strap會通過Via一路打到M1或者M2層的Rail上,那么這些地方可以說路都被封死了,Macro當然就很難出Pin了。
解決方案:

(1)調整電源地規划方案。
(2)如果設計中有很大的擁塞,需要趕快解決。在Floorplan階段也沒有必要把設計中的擁塞全部降到0,因為此時軟件只是快速做了一個參考布局方案而已,並非實際的布局,所以某些擁塞並沒有完全解決,它們可以在后續的布局階段解決。由於ICC允許可以不沿着格點布線(即Zroute模式),所以在布線階段也會解決一部分擁塞。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM