Congestion修复实例及脚本分享-加Blockage array/keepout margin

电子说

1.3w人已加入

描述

  分享一个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脚本:

 

set site_height [get_attribute [get_core_area] tile_height]

set site_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 -type hard -snap litho -prefix checkerboard_blkg



set ALL_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分布的非常均匀:

脚本

  审核编辑:汤梓红

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分