IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 【python脚本】生成RTL dummy文件 -> 正文阅读

[Python知识库]【python脚本】生成RTL dummy文件

前言

模块接口确定后,定层互连或者环境集成,有时会需要提供dummy文件;

效果

[xiaotu@xiaotu-eda ~/my_work/gen_dummy]$gen_dummy -f flow_proc.v
.//gen_dummy is working
1.生成dummy文件
2.生成dummy文件,输出信号tie0
选择你要进行的操作:1

生成的文件:

?

[xiaotu@xiaotu-eda ~/my_work/gen_dummy]$gen_dummy -f flow_proc.v
.//gen_dummy is working
1.生成dummy文件
2.生成dummy文件,输出信号tie0
选择你要进行的操作:2

?生成两种模式,一种是纯粹的定层,一种是将输出tie0的;

代码实现

#!/usr/bin/python
#-*-coding:utf-8-*-

###############################################################
## Name       : rtl_file_sys
## Author     : xiaotu
## Time       : 2021-07-06 11:11:19
## Description:
## 
## 
###############################################################

import sys
import os
import re
import argparse
import math

signal_list = []
class Signal:
    name_width = 1
    widh_width = 1
    def __init__(self, name, module, type="wire", port="none", width = ""):
        self.name   = name
        self.module = module
        self.type   = type
        self.port   = port
        self.width  = width
        Signal.name_width  = max(Signal.name_width, len(name))
        Signal.widh_width  = max(Signal.widh_width, len(width))

    def __str__(self):
        str = "Class Signal\n"
        str = str + "    name   : %s\n" % self.name
        str = str + "    module : %s\n" % self.module
        str = str + "    type   : %s\n" % self.type
        str = str + "    port   : %s\n" % self.port
        str = str + "    width  : %s\n" % self.width
        str = str + "    max name_width = %s\n" % Signal.name_width
        return str

def sys_rtl_file(file):
    with open (file, "r") as rtl:
        handle = rtl.readlines()
        module= "none"
        for line in handle:
            re0 = re.match(r"module\s+(\w+)", line)
            re1 = re.search(r"(input|output|wire|reg)\s*(wire|reg)*\s*(\[.*\])?\s*([,\w]+)\s*", line)
            type = "wire"
            port = "none"
            width = ""
            if re0:
                module = re0.group(1)
            if re1:
                if re1.group(3):
                    width = re1.group(3)
                if re.match(r"input|output", re1.group(1)):
                    port = re1.group(1).strip()
                else:
                    type = re1.group(1).strip()
                if re1.group(2):
                    type = re1.group(2).strip()
                for sig in re1.group(4).split(r"\s*,\s*"):
                    name = sig.strip(",")
                    s = Signal(name, module, type, port, width)
                    signal_list.append(s)
    for sig in signal_list:
        print(sig)

def input_args_proc():
    global rtl_file 
    global module_name
    parser = argparse.ArgumentParser(description="argparse info")
    parser.add_argument('-o', action='store_true', default=False, help='open this script')
    parser.add_argument('-f', help='input rtl.v')
    result = parser.parse_args()
    if result.o == True:
        os.system("gvim %s" % __file__)
        sys.exit(0)
    rtl_file = result.f
    (module_name, extension) = os.path.splitext(rtl_file)

def gen_title():
    title_list = []
    user = os.popen('whoami').readline()
    date = os.popen('date "+%Y-%m-%d %H:%M:%S"').readline()
    name = module_name + "_dummy"

    title_list.append("//#############################################################")
    title_list.append("// Name       :" + name.strip())
    title_list.append("// Author     :" + user.strip())
    title_list.append("// Time       :" + date.strip())
    title_list.append("// Description:")
    title_list.append("// ")
    title_list.append("// ")
    title_list.append("//#############################################################")
    title_list.append("")
    return title_list

def write_list(list, file = ""):
    if file == "":
        for line in list:
            print(line + "\n")
    else:
        with open(file, "w") as handle:
            for line in list:
                handle.write(line + "\n")

def gen_dummy():
	global module_name
    dummy_list = gen_title()
    dummy_list.append("module %s(" % module_name)
    dummy_list.append("    //output port")
    input_list  = []
    input_declare_list = []
    output_list = []
    output_declare_list = []
    for sig in signal_list:
        if sig.port == "input":
            input_list.append("    " + sig.name + ",")
            input_declare_list.append("input  " + sig.width.ljust(Signal.widh_width) + " " + sig.name + ";")
        if sig.port == "output":
            output_list.append("    " + sig.name + ",")
            output_declare_list.append("output " + sig.width.ljust(Signal.widh_width) + " " + sig.name + ";")
    input_list[-1] = re.sub(r",", "", input_list[-1])
    dummy_list.extend(output_list)
    dummy_list.append("    //input port")
    dummy_list.extend(input_list)
    dummy_list.append(");")
    dummy_list.append("")
    dummy_list.extend(output_declare_list)
    dummy_list.append("")
    dummy_list.extend(input_declare_list)
    dummy_list.append("")
    dummy_list.append("endmodule")

    write_list(dummy_list, module_name + "_dummy.v")

def gen_dummy_with_tie0():
	global module_name
    dummy_list = gen_title()
    dummy_list.append("module %s(" % module_name)
    dummy_list.append("    //output port")
    input_list  = []
    input_declare_list = []
    output_list = []
    output_declare_list = []
    output_tie0_list = []
    for sig in signal_list:
        if sig.port == "input":
            input_list.append("    " + sig.name + ",")
            input_declare_list.append("input  " + sig.width.ljust(Signal.widh_width) + " " + sig.name + ";")
        if sig.port == "output":
            output_list.append("    " + sig.name + ",")
            output_declare_list.append("output " + sig.width.ljust(Signal.widh_width) + " " + sig.name + ";")
            tie = "1'b0"
            if sig.width != "":
                part = re.sub(r"\[", "", sig.width)
                part = re.sub(r"\]", "", part)
                (part1, part2) = part.split(":")
                wd1 = part1.strip()
                wd2 = part2.strip()
                wd  = "(%s-%s+1)" % (wd1, wd2)
                tie = "{(%s){1'b0}}" % wd
            output_tie0_list.append("assign " + sig.name.ljust(Signal.name_width) + " = " + tie + ";")
    input_list[-1] = re.sub(r",", "", input_list[-1])
    dummy_list.extend(output_list)
    dummy_list.append("    //input port")
    dummy_list.extend(input_list)
    dummy_list.append(");")
    dummy_list.append("")
    dummy_list.extend(output_declare_list)
    dummy_list.append("")
    dummy_list.extend(input_declare_list)
    dummy_list.append("")
    dummy_list.extend(output_tie0_list)
    dummy_list.append("")
    dummy_list.append("endmodule")    

    write_list(dummy_list, module_name + "_dummy.v")


def main():
    global rtl_file
    print("%s is working" % __file__)
    input_args_proc()
    sys_rtl_file(rtl_file)
    gen_title()
    sel = input('''1.生成dummy文件
2.生成dummy文件,输出信号tie0
选择你要进行的操作:''')
    if sel == 1:
        gen_dummy()
    if sel == 2:
        gen_dummy_with_tie0()

if __name__ == "__main__":
    main()

?

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-07-10 14:30:21  更:2021-07-10 14:31:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/3 13:14:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码