icc 加了set_fix_hold 后不收敛
时间:10-02
整理:3721RD
点击:
设计是多时钟的,designer的时钟关系设计的比较乱,部分时钟间有相位要求。我后端实现发现:
case1:设置min_library ss.db -min_version ss.db,时钟综合是设置set_fix_hold [all_clocks] , 再route,icc可以顺利跑完。
case2:设置min_library为 ss.db -min_version ff.db,时钟综合是 不设置set_fix_hold [all_clocks] , 再route,icc可以顺利跑完,有Hold violation。
case3:设置min_library为 ss.db -min_version ff.db,时钟综合是设置set_fix_hold [all_clocks] , 再route,icc 会跑死,violation 几十万个。
想问,case3的min_library设置方式是标准正确的icc设置吧,?以前同事设置的是case1方式,min_library都是ss。
case1:设置min_library ss.db -min_version ss.db,时钟综合是设置set_fix_hold [all_clocks] , 再route,icc可以顺利跑完。
case2:设置min_library为 ss.db -min_version ff.db,时钟综合是 不设置set_fix_hold [all_clocks] , 再route,icc可以顺利跑完,有Hold violation。
case3:设置min_library为 ss.db -min_version ff.db,时钟综合是设置set_fix_hold [all_clocks] , 再route,icc 会跑死,violation 几十万个。
想问,case3的min_library设置方式是标准正确的icc设置吧,?以前同事设置的是case1方式,min_library都是ss。
第一种正确,
第二种因为没有fix hold,所以可以顺利跑出来
第三种错误,因为不能max lib 和min lib 要一样的。 芯片不可能同时工作的两种PVT下面的。
首先要确认下各个时钟之间是不是可以false path的?false path的标准就是看看时钟之间的数据有没有做同步的处理。
然后set_fix_hold的命令,可以在cts之后,进行route再加上去,看一下cts之后时钟之间的hold情况有多差。
一般如果时钟树之间skew比较大, 也就是cts的效果很差,就会导致hold很难满足。所以也需要看你你的cts的各个时钟之间的balance做的怎样。