今天吾爱IC社区小编给大家分享下数字IC后端设计实现innovus中关于update_names和changeInstName在PR中的具体使用方法。
update_names
1)为了避免和verilog语法保留的一些关键词,比如input,output这些,是不允许存在叫这类名字的wire等。如果有这样的input,那么通过下面的命令会自动把input改成input_1。
innovus> update_names -verilog
这个类似写tcl脚本,你如果定义一个变量叫for ,while,break,那么就会有冲突,认错的情况。
innovus> update_names -restricted {[ ]} -replace_str “_”
innovus> update_names -nocase -net
innovus> update_names -nocase -inst
比如两条net分别是"NET_ABC" 和"net_abc",这个在RC抽取会报它们是同一条net。通过上面的命令后工具会自动给这两条net加上一个数字后缀,比如"_1 和_2"。
同理instance工具也是这么处理的。
4)修改design名字
innovus> update_names -design -map {abcreg xyzreg}
修改后我们可以通过下面的命令来确认是否更改成功。
innovus> dbGet top.name
@innovus> get_db designs .name #In CUI
5)更改设计中子模块module的名字
innovus> update_names -change_modules design_dual_rank_synchronizer_9 -local -map {design_dual_rank_synchronizer_9 new}
通过上述命令工具会把原来的design_dual_rank_synchronizer_9这个module名改成 new。这里需要改的名字写在map选项即可。
changeInstName
语法: changeInstName -inst instName -newBasename baseName
innovus > changeInstName -inst ff12 -newBaseName ff123
innovus > changeInstName -inst Top/subtop/ff12 -newBaseName ff123
思考题:上次命令执行后,新的instance名字(full_name)叫什么?
最后分享一个把设计中instance名字带“:”符号的instance进行重命名的小脚本。
通过这个脚本大家又可以来练习foreach,dbGet,lindex,split这些tcl脚本的基本使用方法。对于数字IC后端工程师,需要慢慢学会看懂脚本,学会抄脚本,最后会自己改脚本写一些小脚本。
foreach i [dbGet top.insts.name :] {
set newInst “[lindex [split [lindex [split $i “/”] end] “:”] 0][lindex [split [lindex [split $i “/”] end] “:”] 1]”;
changeInstName -inst $i -newBaseName $newInst
#Puts $newInst;
}