前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用Python解决Verilog网表转CDL大小写重名的问题

用Python解决Verilog网表转CDL大小写重名的问题

作者头像
ExASIC
发布2021-12-20 19:52:55
9980
发布2021-12-20 19:52:55
举报
文章被收录于专栏:ExASICExASIC

在用calibre v2lvs把APR网表转CDL时是不是经常遇到下图的情况?这是CDL不区分大小写的原因。最常见的解决方法就是写脚本替换。

我们注意到log里warning非常有规律:Duplicate port/net name "xxx" found in module "xxx",这样我们可以用正则提取net和module名字。

代码语言:javascript
复制
dup = {}
for line in log:
    # Warning: Duplicate port/net name "N528" found in module "frc_pat_test_1" while doing case-insensitive lookup
    m = re.search(r'Duplicate\sport\/net\sname\s\"(n\d+)\"\sfound\sin\smodule\s\"(.*)\"', line)
    if m:
        module = m[2]
        net = m[1]
        dup[net] = module

把结果缓存在字典里:

代码语言:javascript
复制
dup = {
"n57": "module1",
"n59": "module1",
"n105": "module2",
"n106": "module2",
...
}

对dup里的net->module逐个处理。读入verilog网表,找到有重名的module,进行查找替换。

  • 在写正则表达式时,可以直接用变量来拼接,动态组成正则。
  • 用标志mark来标记module的开头和结束,限定查找替换的范围。
代码语言:javascript
复制
netlist = open('digital_top_pr_phy.v', 'r').readlines()

for net in dup:
    print("process {} in {}...".format(net, dup[net]))

    mark = 0    
    for line in netlist:
        if mark == 0 and re.search(r'module\s'+ dup[net], line):
            mark = 1
            print("found module " + dup[net])
        if mark == 1 and re.search(r'endmodule', line):
            mark = 0
            print("found end of module " + dup[net])
        # replace
        if mark == 1:
            # rename net

接下来进行net重命名。在verilog网表中可能出现的几种情况:

  • n1,
  • n1
  • n1);
  • wire n1;
  • .A(n1),
  • .A(n1));
  • { n1,
  • n1}),
  • n1}));
  • ...

总结下来,都有一个特点:verilog的net前后总是有空格、小括号、逗号、大括号等特殊字符,我们可以用\W来表示。

代码语言:javascript
复制
netlist[i] = re.sub(r'(\W)' + net + r'(\W)', r'\1' + net + r'_\2', line)

最后,把替换后的网表写到文件里,再用calibre v2lvs跑一下,看到下面的log就OK了。

代码语言:javascript
复制
# v2lvs log
Running /xxx/eda/mentor/calibre/pkgs/icv/pvt/v2lvs -tcl v2lvs.tcl

Info: Creating Spice Library Database ...
Info: Creating Design Database ...
Info: Converting Design ...

当然有一个环节不能遗漏:重命名的新网表要与原网表做一下LEC。

分享让工作更轻松

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-12-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ExASIC 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档