From d5e19661bde54edf1102f201c357beb07a6d62af Mon Sep 17 00:00:00 2001 From: Wilson Snyder Date: Sat, 28 Apr 2012 13:00:44 -0400 Subject: [PATCH] Debug: Tree compare between versions; merge from dtype branch. No functional change. --- bin/verilator_difftree | 60 ++++++++++++++++++++++++++++++++++++++++-- src/V3Ast.cpp | 2 +- 2 files changed, 59 insertions(+), 3 deletions(-) diff --git a/bin/verilator_difftree b/bin/verilator_difftree index f3d8986ce..8583c2e7f 100755 --- a/bin/verilator_difftree +++ b/bin/verilator_difftree @@ -14,6 +14,19 @@ use vars qw ($Debug); #====================================================================== +# Old version 1 dump nodes with no dtypep's +our %Ver1_Non_Dtyped = map {$_ => 1} qw( + ACTIVE ALWAYS ALWAYSPOST ALWAYSPUBLIC ATTROF BEGIN BREAK CASE CASEITEM + CCALL CELL CELLINLINE CFILE CFUNC CHANGEDET CLOCKING COMMENT CONTINUE + COVERDECL COVERINC COVERTOGGLE CRETURN CSTMT DEFPARAM DISABLE DISPLAY DOT + DPIEXPORT FCLOSE FFLUSH FINAL FINISH FOPEN GENCASE GENERATE GENFOR GENIF + IF IMPLICIT INITARRAY INITIAL JUMPGO JUMPLABEL MODULE NETLIST + NOTFOUNDMODULE PACKAGE PACKAGEIMPORT PARSEREF PIN PORT PRAGMA PRIMITIVE + PSLASSERT PSLCOVER PSLDEFCLOCK PULL RANGE READMEM REPEAT RETURN SCCTOR + SCDTOR SCHDR SCIMP SCIMPHDR SCINT SCOPE SELBIT SELEXTRACT SELMINUS + SELPLUS SENGATE SENITEM SENTREE SFORMAT SFORMATF STOP SYSIGNORE SYSTEMT + TASK TASKREF TEXT TOPSCOPE TYPEDEFFWD TYPETABLE UCSTMT UDPTABLE + UDPTABLELINE UNTILSTABLE VASSERT WHILE ); #====================================================================== # main @@ -82,24 +95,67 @@ sub diff_file { my $tmp_a = "/tmp/$$.a"; my $tmp_b = "/tmp/$$.b"; - filter ($a, $tmp_a); - filter ($b, $tmp_b); + my $vera = version_from($a); + my $verb = version_from($b); + my $verCvt = (($vera < 0x3900 && $verb >= 0x3900) + || ($vera >= 0x3900 && $verb < 0x3900)); + + filter ($a, $tmp_a, $verCvt); + filter ($b, $tmp_b, $verCvt); system("diff -u $tmp_a $tmp_b"); unlink $tmp_a; unlink $tmp_b; } +sub version_from { + my $fn = shift; + # Return dump format + my $f1 = IO::File->new ($fn) or die "%Error: $! $fn,"; + while (defined (my $line=$f1->getline())) { + last if $. > 10; + return hex $1 if $line =~ /\(format (0x[0-9.]+)\)/; + } + return 1.0; +} + sub filter { my $fn1 = shift; my $fn2 = shift; + my $verCvt = shift; # Remove hex numbers before diffing my $f1 = IO::File->new ($fn1) or die "%Error: $! $fn1,"; my $f2 = IO::File->new ($fn2,"w") or die "%Error: $! $fn2,"; while (defined (my $line=$f1->getline())) { + same_line: next if $line =~ / This=/; $line =~ s/0x[a-f0-9]+/0x/g; $line =~ s///g; $line =~ s/{[a-z]*\d+}/{}/g if !$Opt_Lineno; + if ($verCvt) { + next if $line =~ /^ NETLIST/; + $line =~ s!\@dt=0x\(G?/?([^)]+)\)!$1!g; # NEW: @dt -> OLD: non @dt format + # # Below Ver1_Non_Dtyped may replace above further + if ($line =~ /: ([A-Z]+) /) { + my $type = $1; + next if $type =~ 'DTYPE'; + if ($type eq 'TYPETABLE' || $type eq 'RANGE') { + $line =~ /^(\s+\S+:) /; my $prefix = $1; + while (defined ($line=$f1->getline())) { + next if $line =~ /^\s+[a-z]/; # Table body + next if $line =~ /^${prefix}[0-9]:/; + goto same_line; + } + next; + } + if ($Ver1_Non_Dtyped{$type}) { + $line =~ s! w[0-9]+!!g; + } + } + $line =~ s!\@dt=0$!NoW!g; # NEW: dt=null -> common format + $line =~ s!\@dt=0 !NoW !g; # NEW: dt=null -> common format + $line =~ s! s?w0$! NoW!g; # OLD: no width -> common format + $line =~ s! s?w0 ! NoW !g; # OLD: no width -> common format + } print $f2 $line; } $f1->close; diff --git a/src/V3Ast.cpp b/src/V3Ast.cpp index 456c1bef4..944228a7d 100644 --- a/src/V3Ast.cpp +++ b/src/V3Ast.cpp @@ -1014,7 +1014,7 @@ void AstNode::dumpTreeFile(const string& filename, bool append) { UINFO(2,"Dumping "< logsp (V3File::new_ofstream(filename, append)); if (logsp->fail()) v3fatalSrc("Can't write "<"; + *logsp<<"Verilator Tree Dump (format 0x3800) from "; *logsp<<" to "<=9)) {