использование perl-поиска и замены (regex) для verilog netlist - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь разработать сценарий, который принимает входной список verilog netlist и создает для этого тестовый стенд, поэтому, когда мы подключаем тестовый стенд к основному модулю по имени, мы делаем что-то вроде этого,

.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;).

как это сделать лучше?

...