后端面试--每日一题(081)
How to find out timing and physical longest path?
如何找到时序上和物理位置上最长的路径?
注意:问题不是找最timing critical path
补充:不考虑异步路径,同步里面要考虑multicycle路径
难度:4
没用过PR tool, 我想这个问题应该会涉及tool的使用, 和用脚本处理等方面.
Longest timing path: 这里讨论异步逻辑么? 如果讨论那么如何定义Timing path. 如果只讨论同步逻辑, multi-cycle 算不算? 如果算的话, 我想可以考虑: 把所有Path的timing slack和Clock cycle找出来, 然后算一下实际Path delay, 然后找到最大的. 然后和INPUT/OUTPUT DELAY STAGE的延迟比较一下.
Longest physical path: 我觉得对于同步逻辑, 第一要找到所有PATH的START/END POINT的FLOP对, 然后拿到FLOP的物理地址, 把所有FLOP对的距离算一遍.....
哈哈, 不知道有什么好办法.
这个path应该是port to port的。
那么是否可以用脚本对所有port to port的路径作单元计数和延时累加呢。可以的话这个得到的结果就是。
方法有很多,捡一个较为简单的说
longest timing path:
按照要求修改SDC,
如果要求包含multicycle path,则去掉SDC里面的multicycle path
如果要求包含async path,则去掉SDC里面的false path
改input,output delay为0
改所有clock period为同一个数值
然后report_timing
longest physical path比较麻烦,因为要考虑detour route,所以不能简单地算2个flop之间的直线距离
应该首先在现有的工具里面找现成的命令,如果没有的话,就要先把每条timing path里面的所有net找出来,逐个找到每条net的长度,之和就是这条path的physical length,然后,逐一循环
应该要把detour的情况考虑在内, 总的来说都是脚本处理的工作. 干这行很多都是体力活了.
个人想问一下:
你找出最长的路径:非关键路径,用来指示in->out的feedthrough path吗?