利用perl写了个自动生成verilog例化脚本,原理就是利用正则表达式疯狂匹配就可以🌝,O(∩_∩)O。
- 对两种端口定义都能自带生成例化模板。
- 切记一定要在代码没有语法错误的情况下使用!切记一定要在代码没有语法错误的情况下使用!切记一定要在代码没有语法错误的情况下使用!
其他可以使用,需要perl安装环境,去官网安装,perl官网。
测试模块
module TestModuleOne#(
parameter PARA1 = 123,parameter PARA2 = 123)
(
input aport1,
input aport2,
input aport3,aport4,aport5,aport6,
input [PARA1-1:0] aport7,
output [PARA2-1:0] aport8,aport9,aport10
);
endmodule
module TestModuleTwo
(
input bport1,
input bport2,
input bport3,bport4,bport5,bport6,
input [99-1:0] bport7,
output [99-1:0] bport8,bport9,bport10
);
endmodule
测试结果
可以在源码1-5行修改空格的个数,参考上图,自己根据需要修改空格数。
使用方法
- 假设inst.pl,里面是例化脚本源码, test.v是需要例化的verilog代码
- 在命令行输入以下命令
inst.pl < test.v
就可以看到例化模块的文件,叫moduleinstance.v,若想直接打印到控制台,将7行用#注释掉即可。
例化脚本源码
$table = 4;
$paradefinterval = 4;
$parainstinterval = 4;
$wireinterval = 4;
$portinterval = 10;
open STDIN,'<:encoding(GB2312)';
open STDOUT,'>:encoding(GB2312)',"moduleinstance.v";
$flagmc = 0;
while($_ = <>)
{
chomp $_;
$line = $_;
while($line)
{
if(($line =~/^([^\/]*)\/\/(.*)/)&&$find_other) #首先匹配//
{
$str.=${
1};
last;
}elsif(($line =~/^([^\/]*)\/\*(.*)/)&&$find_other) #首次匹配/*
{
$str.=${
1};
$rest = ${
2};
if($rest=~/(.*)\*\/(.*)/) #本行匹配到*/
{
$line = ${
2};
$find_other = 1;
}
else #需要在其他行匹配到*/
{
$find_other = 0;
last;
}
}elsif(!$find_other)
{
#print "$line two\n";
if($line=~/(.*)\*\/(.*)/) #本行匹配到*/
{
$line = ${
2};
$find_other =