跟老驴一起学PR | init_design

2020-11-06 13:31:18 浏览数 (1)

设好了《跟老驴一起学PR | 数据的输入》文中提到的一坨init_XX 变量之后,下一步就是执行init_design. 在innovus 中saveDesign 会写出一个.globals 的文件,在这个文件中有控制变量跟这一坨init_XX 变量。执行init_design 命令,会发生:

  • 数据读入;
  • 数据解析及绑定;
  • 数据质量检查。

数据读入


在Innovus log 里扒拉了一下,数据的读书顺序是:

  • read_mmmc 读入viewDefinition 文件;
  • read_physical 读入tlef 跟lef;
  • read_netlist 读入网表;
  • read_power_intent 读入CPF 或1801 文件。

数据解析及绑定


Innovus 文档中并没有写init_design 背后的过程,Genus 文档正好有这部分,从逻辑上看Innovus init_design 的过程应该类似:

  • Power Domain Creation: 如果是多电压域设计,解析了CPF 或1801 文件后,工具会将设计跟power Domain 做绑定;
  • Power Domain Binding to Delay Corners, 如果是多电压域设计,不同的Power Domain 可能需要link 到不同的library 上去做优化,对于这种情况在create_delay_corner 时会将不同的power domain 关联到不同的library_set 上,如:create_delay_corner -name LVBABA -timing_condition { lib_set_1 PD1@lib_set_2 PD2@lib_set_3 }; 在init_design 的这一步工具会将对应的library 跟power domain 绑定好。
  • Power Domain Object Processing, 将library 跟对应的power domain 绑定好之后,工具会去解析对应的low power rules 以确定需要用到的low Power cells 如:State retention, iso cells, level shifters.
  • Loading of Libraries, 读入所有active analysis view 所需要的库文件。
  • Timing Constraint Loading, 读入SDC 文件。

数据质量检查


init_design 会做一系列的数据检查:

  • 检查lib 跟lef 一致性,如:某个cell 在LEF 里有在timing lib 里没有,工具会报ENCSYC-2 的警告;
  • 做netlist check, 如:检查设计中是否有unresolved 的instance; 检查设计是否unique;
  • SDC check, 如:是否有不支持的非SDC 命令,是否有找不到的object, Object 类型是否错误,StartPoint 跟EndPoint 是否有效等。此外要特别注意这几个SDC 命令:set_ideal_network, 在综合时不想优化某些high fanout net 通常都会将其设成ideal 但是到了PR 阶段,就必须要将这些ideal 拿掉让工具去做buffering; set_propagated_clock 在CTS 之前如果设了这个命令,会阻止工具对时序逻辑做优化;set_dont_use, set_dont_touch, 要确保每一个设定都有据可依;set_clock_uncertainty, 在PR 的每个阶段uncertainty 的值都可能不同,所以最好在flow 中run 相应的优化命令之前先将uncertainty reset 掉再设置对应stage 所需的uncertainty 值;
  • Extraction 文件检查,要确保QRC 跟LEF 对应,要确保routing layer count, widths, spacings, pitches 都保持一致,要确保RC 抽取的温度正确等;
  • Innovus 不依赖lib cell 的footprint 而是function 定义来确定哪些cell 功能相等,init_design 会识别库中可用的组合逻辑、时序逻辑、buffer, inverter, Delay cell 等,可以用命令check_footprint 做更详细的检查。

做PR 应该跟做综合一样,在开始优化之前一定要清干净输入数据的所有问题,除了init_design 做的check 之前,最好用check_timing 跟check_design 做更详细的检查。

  • check_design 可check :
  • check_timing 会报如下内容:

0 人点赞