前文《跟老驴一起学 pr | innovus 输入》阐述了 innovus 所需要的输入数据有哪些,今天来学习如何将这些数据读入 innovus. 以前熟悉的工具,不论是综合、formal 还是 sta 读入数据大多都是 read_xxx 命令读入,思维定势之前以为 innovus 也是用一坨 read_xxx 的命令读入,然而并不是。
在 innovus 中预定义了一坨 init_xxx 的变量,用户需要将对应输入文件指定给对应的变量,然后执行 init_design 工具就会将所有文件依次读入,对于 verilog netlist 老驴扒拉了几个 flow 关键的 init 变量有:
init_design_settop, 这个变量默认值是 1,意思是要求客户指定当前设计的 top 名字给变量 init_top_cell; 如果将该变量设成 0, 则让工具自己识别 top. 建议,用默认值,用户自己指定 top.
init_lef_file, 将 tech-lef + other lefs 指定给这个变量,这里有个问题,如果某个 lef file 在 init_design 之前没加上,要增量读入该怎么办?在 innovus common ui 中用命令: read_physical -add_lefs xx 可以增量读入 lef.
init_mmmc_file, 指定 viewdefinition.tcl, viewdefinition 中的 library_set 指定了所有要用的 library, rc_corner 指定了对应的 qrc file, constraint_mode 指定了 sdc 文件。
init_verilog, 指定网表文件。
init_pwr_net, 指定 global power nets.
init_gnd_net, 指定 global ground nets.
init_cpf_file, 如果是多电压域设计,用于指定 cpf 文件,如果 power intent 是用 1801 描述的,则不能用该变量指定 1801 文件,需要用命令 read_power_intent -1801 $1801_file 读入,如果在 viewdefinition 中用到了 power domain 则应该在 init_design 之前读入,init_design 之后再执行 commit_power_intent. read_power_intent 这个命令的使用方式跟 genus 一致,在 genus 中多了一步 apply_power_intent, 用于将设计跟 power domain 绑定,commit_power_intent 用于插入 low power cell.
至此,所有输入文件都指定完毕,执行 init_design 就会将对应文件读入,init_design 读取文件的顺序还没看,按照逻辑猜测一下读入顺序:library -> tech-lef -> lef -> qrc -> cpf -> netlist -> sdc.
除了上面那一坨指定输入文件的 init_xxx 变量之外,还有一坨用于控制输入过程的 init_ooo 变量:
init_design_netlisttype, 用于指定 netlist 的 format 是 verilog 还是 oa, 老驴目前只学习 verilog 部分,所有 oa 相关的都忽略掉。
init_ignore_pgpin_polarity_check, 用于指定一个 leaf cell pin name 的 list, 告诉工具在 globalnetconnect 或在 cpf 中 connect supply net 时忽略极性检查 . 这货好像对 1801 flow 没用,正好这周一解了个相关的问题,当时遇到的问题是 1801 flow, 在 commit_power_intent 时工具报 error: impdb-1220 跟 warn: impdb-1278, 对于这种问题在 innovus 中先用命令 dbget [dbget top.nets.name pmd0_vdd -p].ispwr 来检查工具将对应的 supply net 认成了什么。在老驴遇到的 case 中,是在 1801 中用 connect_supply_net 要将一个 analog ground 连到一个 analog ip 上,但是在 1801 中只定义了 supply net 并没有指定该 net 用于 ground 所以工具将其认成了 power. 解的办法是在 1801 中为其 create 一个 supply set 并将其指定为 ground.
init_verilog_tolerate_port_mismatch, 这个变量默认值是 0, 不能容忍 module 定义的 port 比实例化时的 port 少,如果将其设为 1 工具在解析 netlist 时如果发现 module 的 port 比实例化时的 port 少,工具会在 module 上创建一个 port, 老驴以为这个变量在设计脏的时候特别有用。
init_lef_check_mask_shifts, 用于检查 tech-lef 和 macro sections 中 fixedmask 跟 layermaskshift 是否冲突,该变量默认值是 off 就是不检查,如果设为 on 工具发现冲突会报错并停掉,如果设为 bypass 工具发现冲突只报错不停止,其实老驴还不知道 fixedmask 跟 layermaskshift 在不同工艺中有多重要,先放到这里,万一以后发现重要呢,方便找。
init_import_mode, 用于指定 setimportmode 的 option, 如 set init_import_mode {-discardfloatingvnets true -keepemptymodule true},此处留个问题:是不是默认 innovus 会将 empty module 删掉?如果是,那综合 netlist 中有没有 empty module 应该都无所谓吧?如果是,为什么有的后端一定要求把 empty module 删掉?
init_design_uniquify, 控制 innovus 解析 netlist 时是否做 uniquify, 既然 innovus 要求 netlist 是 unique 的,那为毛不把该变量的默认值设为 1?
光敏传感器的组成_光敏传感器应用
全屋智能风头正盛 华为、海尔各执一派
系统低功耗模拟组件的设计技术
华为AscendD2拆解图赏
海信新风空调获全球001号SMART HOME认证证书
小白学PR——数据的输入
友达光电与乐金显示器专利纠纷获胜:法院裁定乐金显示器全数侵犯
ryzen对比intel天梯图_ryzen与intel对比测试
客益电子推出系列4-20mA DAC接口芯片
无功补偿是什么,为什么要进行无功补偿?
锂电池的等效电路模型
基础卡尔曼滤波
微软云端解决方案为全球化发展提供基础设施支撑
iOS11 Beta2不稳定 iPad升级iOS11很卡怎么办?苹果官方iOS11降级iOS10教程
web前端开发工程师的前景怎么样
智能手机如何在摄像头和折叠屏中自救
民用无人机应用场景愈发多元 政策加持未来市场或持续增长
贾跃亭的电动汽车公司将通过合并的方式挂牌上市
多功能蜂蜜检测仪器产品介绍
XR技术会给UX/UI的领域发展带来什么?