$ ./makev.pl 10000 > test.10k.v
$ time perl_5.8.8 -w testv.pl test.10k.v
LAST MODULE (Perl 5.008008): je0dhj
perl_5.8.8 -w testv.pl test.10k.v 0.01s user 0.01s system 0% cpu 11.352 total
$ time perl_5.30 -w testv.pl test.10k.v
LAST MODULE (Perl 5.030000): je0dhj
perl_5.30 -w testv.pl test.10k.v 0.01s user 0.02s system 0% cpu 26.291 total
####
!/usr/bin/perl -w
use Text::Wrap;
use strict;
my $num = shift or die "num?\n";
my @chars = ( "a" .. "z", 0 .. 9 );
for my $i (0 .. $num) {
my $name = join("", @chars[ map { rand @chars } ( 1 .. 2+int(rand(8)) )]);
my @io = map { "p${name}${_}" } (0..int(rand(100)));
my @hier = map { "m${name}${_}" } (0..int(rand(20)));
my @leaf = map { "s${name}${_}" } (0..int(rand(200)));
print "module ${name} ( ", wrap('', ' ', join(", ", @io)), "\n);\n";
print " inout $_;\n" foreach @io;
print " wire $_;\n" foreach @io;
for my $leaf (@leaf) {
my @conn = map { ".P${name}${_} (n${name}${_})" } (0..int(rand(5)));
print "$leaf u_$leaf ( ", wrap('', ' ', join(", ", @conn)), "\n);\n";
}
for my $hier (@hier) {
my @conn = map { ".p${name}${_} (n${name}${_})" } (0..int(rand(100)));
print "$hier u_$hier ( ", wrap('', ' ', join(", ", @conn)), "\n);\n";
}
print "endmodule\n\n";
}
##
##
use strict;
use File::Slurp;
my $file = shift or die "file?\n";
my $text = read_file($file);
parse_v($text);
sub parse_v {
my $text = shift;
my $name;
{
last if $text =~ /\G \s* \Z/gcmsx;
if ($text =~ /\G \s* ^ \s* module \s+ (\S+?) \s* \( \s* (.*?) \s* \) \s* ;/gcmsx) { $name = $1 }
elsif ($text =~ /\G \s* ^ \s* endmodule /gcmsx) { }
elsif ($text =~ /\G \s* ^ \s* \S+ \s+ .*? \s* ;/gcmsx) { }
else { die "ERROR: unknown syntax\n" }
redo;
}
print "LAST MODULE (Perl $]): $name\n";
}