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

本文介绍了一个Python脚本,用于根据Verilog模块的端口信息自动生成对应测试bench(tb)文件,以提高数字IC设计中的工作效率。脚本通过解析Verilog文件提取模块名、参数和信号,生成包含初始化和信号连接的TB代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


在数字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知识,请关注
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

er橙汁儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值