本文主要是介绍Congestion的解决方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
congestion是与绕线好坏直接挂钩的参数,如何分析和解决congestion问题可以通过整体和局部两个方向入手。
一,整体
1.floorplan
模块的形状或floorplan导致的core内摆放standard cell的区域呈现整体或局部长宽比例失调的长方形,容易造成单一方向绕线资源紧张,需要调整模块形状或者sram的摆放。
2.power plan
过多占用绕线层做power plan或者strap下加过量的power via可能造成power mesh附近的绕线问题,需要调整power mesh的密度和power via array的数量。
3.综合
初始利用率高可以先用dcg/dct去综合根据综合时序结果再去迭代调整die size(利用率高到综合的时序都无法收敛的时候扩大面积是最容易的)。
如果是约束严苛导致的place利用率激增,可以通过开放lvt,禁用大驱动cell,放松transition约束等方法。
第三种可能是网表中使用了过多AOI/OAI cell导致pin density过高,这类问题统一设cell padding(也叫keepout)。
create_keepout_margin -outer {0.14 0 0 0.14} [get_flat_cells -filter "ref_name =~ *AOI* ll *OAI*"]
4.tech file
常见的tech file问题来自via定义“ContactCode”,设置“is default contact = 1”,让绕线使用多种via。
二,局部
1.core区
处理办法通常设置module padding或instance padding(keepout margin)来解决,如果问题出现在power mesh附近且power plan无法让步,那就在power mesh下做与power mesh等宽的partial blockage array。
2.sram相关
这类可以分为,sram上,sram与core区之间,sram之间的channel里。
sram上,先分析congestion原因,是channel里cell过多造成的,还是sram出pin方向错误引起的,亦或是floorplan不合理让sram上走了大量信号线,进而调整channel里cell数量,sram方向,sram位置。
sram与core区之间,通常出现在sram上走线比较多,相邻core区pin density或cell density过高的情况,通常会在sram靠近core区的边上加soft blockage、partial blockage array(如图1)、hard blockage array(如图2),partial blockage加array的原因是大块的采用partial blockage可能造成局部利用率高的情况,虽然整体符合partial设置的比例局部却没有达到预期的效果,hard blockage array的效果与其类似。
图1.partial blockage array脚本示例
图2.hard blockage array脚本示例
channel里有严重的congestion一般会先检查sram的出pin的方向,然后加soft blockage限制channel里cell的数量,也可以加宽channel增加绕线资源。
在解决办法上除了加keepout和五花八门的blockage以外,工具也提供了很多option直接过间接的能解决congestion问题。
#优化high density区域,但会消耗更多run time
set_app_option -name place.legalize.stream_place -value true
set_app_option -name place.legalize.stream_effort_limit -value 300
#优化cong的effort
set_app_options -name place_opt.place.congestion_effort -value high
set_app_options -name place_opt.final_place.effort -value high
#打开 pin density aware
set_app_options -name place.coarse.pin_density_aware -value true
set_app_options -name place.legalize.optimize_pin_access_using_cell_spacing -value true
#降低利用率
set_app_options -name opt_area.effort -value high
#使用two pass flow在initial_place阶段可以对时序和congestion都有改善,但不适用于SPG flow,因为SPG flow跳过initial_place阶段。
set_app_options -name place_opt.initial_drc.global_route_based -value true
set_app_options -name place_opt.initial_place.two_pass -value true
这篇关于Congestion的解决方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!