目录
Congestion 问题怎么解决?
1、RTL阶段
一般是由大的MUX、大的Crossbar造成的,解决方法是将设计拆分,大模块分成小模块;
2、PR阶段
跟Congestion相关的主要包括以下几个部分:宏单元、标准单元、Power Mesh。
1、宏单元与宏单元之间
当相邻的两个Macro距离很近时,由其是Memory,多个Memory的数据线和地址线在狭窄的空间内无法找到足够的布线通道,通常会发生Congestion。
解决办法:调整Macro的位置、摆放方向,注意出Pin的方向,为出pin的区域留出足够的空间,避免产生狭窄的通道。另外当多个Memory共用相同的数据线或者地址线时,可以调整它们的位置,使它们的Pin对齐,这样连线会比较规整,对Congestion有帮助。
2、宏单元与标准单元之间
标准单元不能离宏单元太近,宏单元周围要放置Placement Blockage。由其注意Macro出Pin的方向一定要留出channel,否则Macro离std太近不容易出Pin。另外要注意之前摆放宏单元的规则,注意尽量靠近角、边,给中间的标准单元一个连续的区域。
3、标准单元与标准单元之间
可以分为两种情况:
3.1局部高密度标准单元引起的congestion
大量的绕线通过高密度标准单元区域时,有时候会发生局部的较为严重的congestion。
解决办法:为了解决局部congestion,我们通常会借助partialblockage降低局部区域的标准单元密度。Partial blockage是placement blockage的一种,是某一区域设定标准单元的利用率。有时候用partialblockage,并不能有效的解决congestion,这时候可以用blockage array来解决此类congestion。Blockage array是用“blockage阵列”的方式,控制congestion区域的标准单元的在区域内成条状分布:一方面降低了密度,另一方面预留出了布线通道。
3.2局部高密度pin cell导致的congestion
在数字逻辑设计中,如果某些模块用了大量的高密度pin标准单元(如AOI、OAI等),这些标准单元会有很多的互联关系,这样就会导致在有限的空间内,存在大量的绕线,从而发生congestion。
解决方案:
1)在逻辑综合中,禁用这些高密度pin的标准单元,这样综合出的网表中就不会有这些单元了,或者用DC的高级功能—DCG来解Congestion;
2)有针对性的降低此种标准单元的密度,如在ICC里,可以对这些标准单元设置keep_out_margin。通过此种方法,可以有效的削弱congestion;
3)对于层次性(Hier)设计而言,如果拥塞基本发生在某个模块内部,那么可以单独针对该模块设置Plangroup,并设置它的利用率,可以通过尝试找出既不会有太大Congestion,又不会太浪费面积的参数设置,如下图所示: