知识星球【芯冰乐】入口
前几篇推文已经和大家讲了tcl的基本用法和正则表达式的用法、以及dbget的一些基本用法。下面和大家就实际项目中碰到问题,进行tcl脚本实操。
PR用到的sdc往往都是进行处理过的。相对于综合来说,有很多设置是不需要的,如set_clock_latency,set_wire_load_mode等,没看过的童鞋可以先看一下这篇文章。
因此,需要对sdc文件中这些命令进行筛选。将PR用不到的命令注释掉。此外,对sdc中出现的net或者inst,需要设置size only。否则,工具在优化的时候,可能会将这些inst给优化掉。
如下图所示的一个情况,innovus在优化时,认为该generate clock定义的buffer不合理,因此将generate clock改定义到reg的Q端,同时,在reg的q端clone了一堆buffer用来解fanout。由于foundation flow会在每个阶段重新读入sdc,所以导致工具在cts之后重新优化了sdc被新读入的sdc给覆盖掉。那么会导致clone_buffer1和clone_buffer2之后的register的CK端没有clock。失去了时序约束。因此,需要在sdc下约束的cell上面设置sizeOnly或者dontTouch属性。