我正在尝试开发一个脚本,该脚本接受Verilog网表的输入并为此创建一个测试平台,因此,当我们通过名称将测试平台连接到主模块时,我们会做类似的事情,
.a(a); .ext(ext); etc etc.
现在我有120个输入,可用于更大的块
`in1, in2... and some arrays like [31:0] ext; etc
我想匹配.in1的模式;并将其替换为.in1(in1);
我正在尝试
s/^\s+\.(.*)/\.$1\($1\)/g;
,它将检查以空格字符开头的字符串,然后是单个“。”。字符,然后是所有字符,并将其替换为语句行中显示的模式,
完整的代码如下:
use strict;
use warnings;
my $filename = shift;
open (my $fh , "<" , $filename) or die $!;
open (my $pr , ">" , "D:/dump/testbench.v") or die $!;
my @code;
while (my $line = <$fh>)
{
chomp $line;
@code = (@code, $line);
}
#foreach my $i (0..$#code)
#{
#print "$code[$i]\n";
#}
#
foreach my $j (0..$#code)
{
if ($code[$j] =~ /^\s+\..*/)
{
print "$code[$j]\n";
$code[$j] =~ s/^\s+\.(.*)/\.$1\($1\)/g;
print "$code[$j]\n";
}
}
foreach my $k (0..$#code)
{
print $pr "$code[$k]\n";
}
close $pr;
替换模式的作用类似于.in1;(in1;)
,而不是.in1(in1);
和.[31:0] ext;([31:0] ext;)
。
如何以更好的方式做到这一点?