分享一個Congestion的示例與解決這個Congestion用的2種方法以及對應的效果。
下面的一個Design有一個Macro的pin density非常高,有高達1萬個Pin,每層都有出Pin,且Pin基本上都是一個Track放一個,因此在它周圍非常容易產生Congestion問題。
什么控制都不加,默認Place的Cell分布以及Congestion挺好的:
Place congestion:
可是到了CTS之后發現Cell的擺放有很大的變化,Cell全部堆在了靠近Macro出pin的地方:
局部放大圖(可以看到很多Buffer/inverter),density非常高:
CTS階段的congestion也變差很多:
這個是對應的cell density分布圖:
嘗試了2種解決方案,都是有效的,這里分享一下兩種方法以及對應的腳本。
方案1:加Hard placement blockage array
方案1: 在Place之前,在Macro周圍要出Pin的地方創建Hard placement blockage array:
對應的tcl腳本:
setsite_height [get_attribute [get_core_area] tile_height] setsite_width [get_attribute [get_core_area] tile_width] create_placement_blockage_array -coordinate "$core_llx$core_lly$core_urx[expr $core_lly+2000]"-method checker -spacing 10 -height $site_height-width 4 -typehard -snap litho -prefix checkerboard_blkg setALL_bbox [get_attribute [get_cells xxx/u_ra_m/u_sim_rram_multix4] bbox] # remove placement blockage overlapped with analog macro remove_placement_blockage [get_placement_blockage -within "$ALL_bbox"]
創建Hard placement blockage array的tcl proc分享
方案1的結果:
CTS之后可以看到Cell的分布散開了挺多,但是彼此之間還是有點擁擠的:
CTS的congestion改善非常多,除了局部有黃色的Congestion(overflow=6的1個,overflow=5的33個)之外其他地方都是可以接受的,如果把blockage的間距和尺寸再減小一點的話會改善更多。
方案2: 加Keepout margin
由于方案1的Cell在hard placement blockage之間的Cell擁擠程度還是蠻高的,所以想到了方案2:在Place之后給Macro周圍的Cell加Keepout margin,然后做優化,CTS的時候也會避免把它們靠的太近。
對應的腳本見知識星球
方案2的結果:
CTS之后的Congestion結果:
可以看到Congestion已經有了很大的改善,這種已經可以接受了。
對應Cell density的分布:
在Macro周圍Cell的分布,可以看到Cell分布的非常均勻:
審核編輯:湯梓紅
-
Cell
+關注
關注
0文章
19瀏覽量
17360 -
design
+關注
關注
0文章
158瀏覽量
45747 -
腳本
+關注
關注
1文章
391瀏覽量
14896 -
CTS
+關注
關注
0文章
35瀏覽量
14120
原文標題:Congestion修復實例及腳本分享 - 加Blockage array/keepout margin
文章出處:【微信號:集成電路設計及EDA教程,微信公眾號:集成電路設計及EDA教程】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論