做物理设计,会并行跑很多的run,测试不同的floorplan,不同的流程,不同的参数,或者不同的app option。哎,版本太多,我不知道这两个版本有啥区别了?
有时候还会遇到昨天的版本跑的好好的,今天的版本忽然WNS变成了-1ns……
有时候还会遇到一样的环境,这个模块好的不要不要的,那个模块的ppa却坏的一塌糊涂,脚本明明是一样的嘛……
怎么debug?
一般来说,除了检查环境,脚本和log,我们也会对比app option,看看是不是app option设置的问题。
ICC2提供了专门命令来对比不同的run的app option
compare_app_options
怎么用?分两步。先写出app option,再对比
icc2_shell (run1)> write_app_options -output run1.app_option
icc2_shell (run2)> write_app_options -output run2.app_option
icc2_shell > compare_app_options
-previous_data run1.app_option
-current_data run2.app_option
结果如下:
Changes in: Block Value Status Previous Current
--------------------------------------------- ---------- ------------ ------------
route.detail.use_wide_wire_to_port basic true
route.global.macro_boundary_track_utilization basic 80 10
这里有2个app option不一致。
谁动了我的app option?
我勒个去,这个app option怎么设成true了?我明明没有动他啊。谁动的?哪个是凶手?
然后查脚本,翻log,还是没有找到哪里设置的?
不急,report_app_options来帮你。
从2018.06-SP4起,report_app_options可以报出来app option是在哪个文件的第几行设置的。
icc2_shell> report_app_options time.enable_io_path_groups
****************************************
Version: O-2018.06-SP4
****************************************
time.enable_io_path_groups bool true -- false block normal /home/test1.tcl:3
原来这个app option是在test1.tcl的第3行设置的
如果嫌log长,想关掉这个新功能,可以加个选项-revert