【效率提升-Perl脚本】根据Verilog文件自动生成tb文件

文章目录

  • Verilog端口文件(仅做示范用)
  • 对应的tb文件
  • 相应代码

在数字IC设计过程中,根据顶层生成testbench时存在很多重复性工作,因此为了提高工作效率,特地开发此脚本。
相应的python脚本见链接: 【效率提升—Python脚本】根据Verilog文件自动生成tb文件

Verilog端口文件(仅做示范用)

在这里插入图片描述

对应的tb文件

在这里插入图片描述

相应代码

use strict;
open R_FILE,"w_ctl.v" or die "can't open file:$!";
open W_FILE,"> tb.v" or die "can't touch tb file:$!";
my @in;
my @in_reg;
my @ou;
my @ou_wire;
my @par;
my $mo;
while(<R_FILE>){if(/module\s+(\w+)/){$mo=$1;}elsif(/(parameter\s+\w+\s?=\s?\d+)/){push(@par,$1);}elsif(/input\s+(\[\S+:\d+\])?\s+(\w+)/){push(@in_reg,$1);push(@in,$2);}elsif(/output\s+\S*?(\[\S+:\d+\])?\s+(\w+)/){push(@ou_wire,$1);push(@ou,$2);}else{next;}
}
print W_FILE "`timescale 1ns/1ps\n";
print W_FILE "module tb_$mo();\n\n";
foreach(@par){print W_FILE "$_\n";
}
print W_FILE "\n";
foreach(0..$#in_reg){print W_FILE "reg\t\t$in_reg[$_]\t$in[$_];\n";
}
foreach(0..$#ou_wire){print W_FILE "wire\t\t$ou_wire[$_]\t$ou[$_];\n";
}
print W_FILE "\n";
print W_FILE "initial begin\n";
foreach(@in){print W_FILE "\t$_='d0;\n";
}
foreach(@in){if(/rst_n/){print W_FILE "\t#100\t$_=1'b1;\n";}else{next;}
}
print W_FILE "end\n\n";
foreach(@in){if(/clk$/){  print W_FILE "always #2.5 $_=~$_;\n";}else{next;}
}
print W_FILE "//this is auto-inst\n";
print W_FILE "$mo\tU_$mo(\n";
print W_FILE "\t//input signal\n";
foreach(@in){print W_FILE "\t.$_($_),\n";
}
print W_FILE "\t//output signal\n";
foreach(0..$#ou-1){print W_FILE "\t.$ou[$_]($ou[$_]),\n";}
print W_FILE "\t.$ou[-1]($ou[-1]));\n\n";
print W_FILE "endmodule";
close R_FILE;
close W_FILE;

学习更多IC知识,请关注
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/61945.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Postgresql15安装插件madlib2.0

madlib2.0简介 Apache MADlib madlib使用指南 MADlib: Main Page madlib安装 Installation Guide - Apache MADlib - Apache Software Foundation 准备 cmake 3.5.2及以上版本python3.9postgresql15&#xff0c;源码编译时必须指定 –with-pythonpostgresql插件plpython3u 源…

Java算法_ LRU 缓存(LeetCode_Hot100)

题目描述&#xff1a;请你设计并实现一个满足 LRU &#xff08;最近最少使用&#xff09; 缓存 约束的数据结构。 获得更多&#xff1f;算法思路:代码文档&#xff0c;算法解析的私得。 运行效果 完整代码 import java.util.HashMap; import java.util.Map;/*** 2 * Author: L…

gitee分支合并

合并dev分支到master&#xff08;合并到主分支&#xff09; git checkout master git merge dev //这里的dev表示你的分支名称 git push //推送到远程仓库 效果如下图 不报错就表示推送成功了&#xff0c;希望能帮助各位小伙伴

ruby send call 的简单使用

refer: ruby on rails - What does .call do? - Stack Overflow Ruby使用call 可以调用方法或者proc m 12.method("") # > method gets the method defined in the Fixnum instance # m.class # > Methodm.call(3) #> 15 # 3 is passed inside the…

测试设计规范:优秀实践的全面指南

测试设计规范是一个定义了与测试项目相关的测试条件、详细的测试方法和高级测试用例的文档。它确定了要运行哪些测试套件和测试用例&#xff0c;以及要跳过哪些。 使用测试设计规范&#xff0c;可以简化对当前测试周期的理解。这个文档回答了像“我们在做什么?”&#xff0c;…

每日一学:什么是 Harbor ?

目录 什么是 Harbor &#xff1f; 一、Harbor 的优势 二、Harbor 架构构成 三、Core services 这是 Harbor 的核心功能 什么是 Harbor &#xff1f; Harbor 是 VMware 公司开源的企业级 Docker Registry 项目&#xff0c;其目标是帮助用户迅速搭建一个企业级的 Docker Reg…

一百五十一、Kettle——Linux上安装的kettle8.2开启carte服务

一、目的 kettle8.2在Linux上安装好可以启动界面、并且可以连接MySQL、Hive、ClickHouse等数据库后&#xff0c;准备在Linux上启动kettle的carte服务 二、实施步骤 &#xff08;一&#xff09;carte服务文件路径 kettle的Linux运行的carte服务文件是carte.sh &#xff08;二…

【MFC】10.MFC六大机制:RTTI(运行时类型识别),动态创建机制,窗口切分,子类化-笔记

运行时类信息&#xff08;RTTI&#xff09; C: ##是拼接 #是替换成字符串 // RTTI.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include <iostream> #include <afxwin.h>#ifdef _DEBUG #define new DEBUG_NEW #endifCWinApp th…

pytest fixture 高级使用

一、fixture中调用fixture 举例&#xff1a; 输出&#xff1a; 说明&#xff1a;登录fixture 作为参数传递到登出方法中&#xff0c;登录方法的返回值就可以被登出方法使用 二、在fixture中多参数的传递&#xff08;通过被调用函数传参&#xff09; 举例&#xff1a; 输出&a…

开源力量再现,国产操作系统商业化的全新探索

文章目录 1. 开源运动的兴起2. 开源力量的推动3. 国产操作系统的崭露头角3.1 国产操作系统有哪些 4.国产操作系统的商业化探索5.开源力量对国产操作系统商业化的推动 操作系统作为连接硬件、中间件、数据库、应用软件的纽带&#xff0c;被认为是软件技术体系中最核心的基础软件…

bye 我的博客网站

Bye&#x1f64b;&#x1f64b;&#x1f64b;&#xff0c;我的博客网站。在我的服务器上运行了9个月之久的博客网站要和大家Bye了。 背景 可能很多人不知道我的这个博客网站的存在&#xff0c;好吧&#xff0c;最后一次展示它了&#xff0c;博客网站地址在这里&#xff0c;它…

vs2022+qt6.24+Cef编译

1.QCefView源码下载地址 https://github.com/cefview/qcefview2.目录层级关系如下&#xff1a; 3.下载CefViewCore git pull --regit pull --recurse-submodules上面命令失败直接用下面的命令 git clone gitgithub.com:CefView/CefViewCore.git4.编译QCefView准备工作 a.准…