您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

用Python提取Verilog网表层次和实例化关系

时间:2021-12-22 11:27:07  来源:  作者:编程啊青

Verilog是由一个个module组成的,下面是其中一个module在网表中的样子,我只需要提取module名字、实例化关系。

module rst_filter (
    ...);
    端口声明... 
    wire定义...
    
   FUBS7T rst_n_ext_sync1_reg (.D(rst_n_ext),
       .Q(rst_n_ext_sync1),
       .T(clk));
   FUBS7T rst_n_ext_sync2_reg (.D(rst_n_ext_sync1),
       .Q(rst_n_ext_sync2),
       .T(clk));
   FUDS7T low_filter_cnt_reg_0_ (.D(n39),
       .Q(low_filter_cnt[0]),
       .R(por),
       .T(clk));
   V01S7T U3 (.A(low_filter_cnt[6]),
       .Y(n9));
   V01S7T U4 (.A(low_filter_cnt[4]),
       .Y(n15));
   AN3S7T U5 (.A(low_filter_cnt[0]),
       .B(low_filter_cnt[1]),
       .C(low_filter_cnt[2]),
       .Y(n41));
   N02S7T U6 (.A(n41),
       .B(low_filter_cnt[3]),
       .Y(n17));
   R02S7T U7 (.A(n15),
       .B(n17),
       .Y(n13));
   //...
endmodule

来观察规律:

  • 模块名的规律:module xxx (
  • 实例化的规律:xxx yyy (

所以写正则还是比较简单的。

def read_vlog.NETlist(vlog_file):
    vlog_lines = open(vlog_file, 'r').readlines()
    #get inst tree
    module_start = 0
    modules = {}
    for line in vlog_lines:
        module_start_m = re.search('modules+(w+)', line)
        inst_m         = re.search('s+(w+)s+(w+)s*(', line)
        module_end_m   = re.search('endmodule', line)
        
        if module_start_m:
            module_start = 1
            module = {}
            
            module_name = module_start_m.group(1)
            module['module_name'] = module_name


            insts = {}
            module['insts'] = insts


            modules[module_name] = module            
            
        if module_end_m:
            module_start = 0


        if inst_m:
            module_name = inst_m.group(1)
            inst_name = inst_m.group(2)
            insts[inst_name] = module_name


    return modules

数据存储结构:

modules = {
    "module1": {
        "module_name": module1,
        "module_inst": {
            "inst1": "stdcell1",
            "inst2": "stdcell2",
            ...
        }
    }
    "module2": {
        ...
    }
    "module3": {
        ...
    }
}

测试一下:

import netlistparser as nl
modules = nl.read_vlog_netlist("digital_pr.v")
print(json.dumps(modules, indent=4))

结果输出如下。是不是效果还不错!

{
    "spr_1": {
        "module_name": "spr_1",
        "insts": {
            "spr_gate806": "V01S7T",
            "spr_gate805": "V01S7T",
            "spr_gate804": "V01S7T",
            "spr_gate803": "V01S7T",
            "spr_gate802": "V01S7T",
            ...
        }
    },
    "gclk_3": {
        "module_name": "gclk_3",
        "insts": {
            "icg": "TLATNTSCAL7T"
        }
    },
    "rst_filter": {
        "module_name": "rst_filter",
        "insts": {
            "rst_n_ext_sync1_reg": "FUBS7T",
            "rst_n_ext_sync2_reg": "FUBS7T",
            "low_filter_cnt_reg_0_": "FUDS7T",
            "low_filter_cnt_reg_9_": "FUDS7T",
            ...
        }
    },
    ...
}

 

总结:

正则不难,难的是善于总结和灵活应用。定义合理的数据存储结构也是非常重要的,后续操作会简便很多。



Tags:Verilog   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
Verilog是由一个个module组成的,下面是其中一个module在网表中的样子,我只需要提取module名字、实例化关系。module rst_filter ( ...); 端口声明... wire定义......【详细内容】
2021-12-22  Tags: Verilog  点击:(216)  评论:(0)  加入收藏
▌简易百科推荐
近几年 Web3 被炒得火热,但是大部分人可能还不清楚什么是 Web3,今天就让w3cschool编程狮小师妹带你了解下 Web3 是什么?与我们熟知的 Web1 和 Web2 又有什么区别呢?web3.0什么是...【详细内容】
2022-07-15  编程狮W3Cschool    Tags:Web3.0   点击:(2)  评论:(0)  加入收藏
1、让我们一起来看下吧,直接上图。 第一眼看到是不是觉得很高逼格,暗黑画风,这很大佬。其实它就是------AidLearning。一个运行在安卓平台的linux系统,而且还包含了许多非常强大...【详细内容】
2022-07-15  IT智能化专栏    Tags:AidLearning   点击:(2)  评论:(0)  加入收藏
真正的大师,永远都怀着一颗学徒的心! 一、项目简介 今天说的这个软件是一款基于Python+vue的自动化运维、完全开源的云管理平台。二、实现功能 基于RBAC权限系统 录像回放 ...【详细内容】
2022-07-14  菜鸟程序猿    Tags:Python   点击:(3)  评论:(0)  加入收藏
前言今天笔者想和大家来聊聊python接口自动化的MySQL数据连接,废话不多说咱们直接进入主题吧。 一、什么是 PyMySQL?PyMySQL是在Python3.x版本中用于连接MySQL服务器的一个库,P...【详细内容】
2022-07-11  测试架构师百里    Tags:python   点击:(19)  评论:(0)  加入收藏
aiohttp什么是 aiohttp?一个异步的 HTTP 客户端\服务端框架,基于 asyncio 的异步模块。可用于实现异步爬虫,更快于 requests 的同步爬虫。安装pip install aiohttpaiohttp 和 r...【详细内容】
2022-07-11  VT漫步    Tags:aiohttp   点击:(15)  评论:(0)  加入收藏
今天我们学习下 Queue 的进阶用法。生产者消费者模型在并发编程中,比如爬虫,有的线程负责爬取数据,有的线程负责对爬取到的数据做处理(清洗、分类和入库)。假如他们是直接交互的,...【详细内容】
2022-07-06  VT漫步    Tags:Python Queue   点击:(34)  评论:(0)  加入收藏
继承:是面向对象编程最重要的特性之一,例如,我们每个人都从祖辈和父母那里继承了一些体貌特征,但每个人却又不同于父母,有自己独有的一些特性。在面向对象中被继承的类是父类或基...【详细内容】
2022-07-06  至尊小狸子    Tags:python   点击:(25)  评论:(0)  加入收藏
点击上方头像关注我,每周上午 09:00准时推送,每月不定期赠送技术书籍。本文1553字,阅读约需4分钟 Hi,大家好,我是CoCo。在上一篇Python自动化测试系列文章:Python自动化测试之P...【详细内容】
2022-07-05  CoCo的软件测试小栈    Tags:Python   点击:(27)  评论:(0)  加入收藏
第一种方式:res = requests.get(url, params=data, headers = headers)第二种方式:res = requests.get(url, data=data, headers = headers)注意:1.url格式入参只支持第一种方...【详细内容】
2022-07-05  独钓寒江雪之IT    Tags:Python request   点击:(19)  评论:(0)  加入收藏
什么是python类的多态python的多态,可以为不同的类实例,或者说不同的数据处理方式,提供统一的接口。用比喻的方式理解python类的多态比如,同一个苹果(统一的接口)在孩子的眼里(类实...【详细内容】
2022-07-04  写小说的程序员    Tags:python类   点击:(28)  评论:(0)  加入收藏
相关文章
    无相关信息
站内最新
站内热门
站内头条