#!/usr/bin/perl # # Read in Verilog, and pretty-print the module instantiaions. # open(INPUT, $ARGV[0]) || die "$ARGV[0]: $!"; while () { if (s/([\/\w]+)\s+(\w+)\(//) { # Parse a module instantiation. ($module, $instance) = ($1, $2); $args = $_; while ($args !~ /\)\s*;/) { $args .= ; } # Parse the bindings in $args. %bindings = (); $clocked = 0; while ($args =~ s/[.](\w+)\s*\(([^)]+)\)//) { if ($1 eq 'clk') { $clocked = 1; } else { $bindings{$1} = $2; } } # Rebuild the instantiation. $line = "$module $instance("; $tline = $comma = 0; if ($clocked) { $line .= ".clk(clk)"; $tline++; $comma = 1; } foreach $pad (sort keys %bindings) { $line .= ", " if $comma; # No comma before first $comma = 1; # Need comma next time through. if (++$tline > 4) { $line .= "\n "; $tline = 1; } $line .= "\.$pad\($bindings{$pad})"; } $_ = "$line);\n"; # Fall through to output it. } print $_; }