一,dont_touch
如果设计编译的过程中如果有不能优化和移除的cell 或net,应该是该object 存在dont_touch 属性(explicit dont_touch 和implicit dont_touch)。有些object 具有implicit dont_touch ,很难确定具体原因是什么,尤其是object 上存在多个叠加的implicit dont_touch时,即使删除了dont_touch 属性,仍然可能在报告上看到dout_touch 属性。
如何debug 这些object 的dont_touch 属性:
1.使用report_dont_touch可以报告出design 中cell和net 是否具有dont_touch 属性和type,list_dont_touch_types 可以看到对dont_touch 的描述
如:report_dont_touch [get_cells pcs/C1]
2.对cell和net 的dont_touch 创建一个collection
如:get_dont_touch_cells 和get_dont_touch_nets
3.set_dont_touch保护cell,reference,design等不在优化时被remove掉
如果对一条net 设置dont_touch 属性,DC 编译器仅在该net 连接的已经mapping 的组合逻辑上设置一个implicit dont_touch,如果该net 连接的是unmaping 的cell,优化时可能将这个net remove 掉。此刻有warning 报出:warnings for dont_touch nets connected to unmapped cells (generic logic)
4.set_dont_touch_network保护clock network 在CTS后
set_dont_touch_network 属性在时钟网络的hierarchical 中传递,默认的,当遇到output port 和具有setup,hold 检查的时序逻辑cell 上时,该属性会停止。 如果使用-no_propagate option,该属性会停在任何的逻辑cell 上。其只能正向传播,与set_ideal_network 不同,set_ideal_network可以正向,反向传播属性。
如果network 有unmapped 的逻辑,则set_dont_touch_network 不能使用。
二,size_only
可以使用report_szie_only 报告出需要的cells