网表到了ICC后,存在无法移除的dont_touch属性,影响了ICC对一些DRC的修复。
report_constraint命令报告后,可以清楚的看到一些 dont_touch 的 net,使得工具无法修复这些 net 的max_fanout、max_transition 和 max_capacitance。
例如,report_constraint报告出来 net_A具有 dont_touch 属性,使得 net_A 的扇出和转换时间均违例。
奇怪之处是 get_attribute net_A dont_touch 报告 net_A 并不具有 dont_touch 属性,并且其他一些移除属性的命令均无法正常的去除 net_A 的 dont_touch 属性。
--------------------------------
在上面链接的博客中找到" implicit dont_touch ",文中说明工具中存在explicit dont_touch 和 implicit dont_touch两种情况。前者可以使用相关的属性获取和属性移除等命令进行操作,而后者则无法进行操作。
在 Design Compiler User Guide 2010.03.pdf 的 209 页也找到 ”implicit dont_touch“,但是DC guide的内容不能提供解决方法。
-----------------------------------
1. 在进行CTS后,我将 report_constraint 命令报告的相关 dont_touch net全部记录下来。
2. 重新开始ICC flow,发现在 CTS 之前,这些 net 全部不具有 implicit dont_touch 属性。
3. 为了避免 implicit dont_touch 对优化的影响, 我必须在 CTS 之前就将这些 high fanout全部优化。
键入优化命令 compile_clock_tree -high_fanout_net net_A,但是ICC运行该命令后,report_net_fanout net_A 依然显示 net_A 的扇出没有变化。
和其他工程师沟通后,ta 建议 使用 insert_buffer net_A BUFCLKHD。
最后,运行 compile_clock_tree -high_fanout_net net_A,扇出问题得到解决。
--------------------------------------
ta 表示可能是 generated clock 定义在 hierarchical pin 造成这种 dont_touch 的问题。
在 ICC 和 PT 中均会存在相关的警告,告诉用户 hierarchical pin 上存在 generated clock。那么,结合相关的情况,以后请不要讲时钟定义在 hierarchical pin。