diff --git a/dram/resources/scripts/analyse_trace.pl b/dram/resources/scripts/analyse_trace.pl index d4242f6a..8061c8ba 100644 --- a/dram/resources/scripts/analyse_trace.pl +++ b/dram/resources/scripts/analyse_trace.pl @@ -1,16 +1,27 @@ #!/usr/bin/perl +use List::Util 'max'; use warnings; use strict; -my $filename = shift || die; +my $filename = shift || die("Please provide a input STL file"); + +my $numberOfRows = 16384; +my $numberOfBanks = 8; +my $numberOfColumns = 1024; + +my $numberOfRowBits = log($numberOfRows)/log(2); +my $numberOfBankBits = log($numberOfBanks)/log(2); +my $numberOfColumnBits = log($numberOfColumns)/log(2); open(FH, "$filename"); -my @activity_counter; +my @activityCounter; +my @mapping; for(my $i = 0; $i < 32; $i++) { - $activity_counter[$i] = 0; + $activityCounter[$i] = 0; + $mapping[$i] = "X"; } my $old_address = "00000000000000000000000000000000"; @@ -18,7 +29,7 @@ my $old_address = "00000000000000000000000000000000"; while() { # Get the adress: - $_ =~ /\d+:\s+\w+\s+0x([\w\d]+)/; + $_ =~ /\d+:\s+\w+\s+0x([\w\d]+)\s*[\d\w]*/; my $address = $1; $address = sprintf( "%032b", hex( $address ) ); @@ -30,15 +41,73 @@ while() if($new ne $old) { - $activity_counter[31-$i]++; + $activityCounter[31-$i]++; } } $old_address = $address; } -for(my $i = 0; $i < 32; $i++) +# Print bit numbers: +print "Bits\t"; +for(my $i = 31; $i >= 0; $i--) { - print $i.":".$activity_counter[$i]."\n"; + print $i."\t"; } +#Print Activity +print "\nActivity\t"; +for(my $i = 31; $i >= 0; $i--) +{ + print $activityCounter[$i]."\t"; +} + +#Print relative Activity +print "\nPercent\t"; +my $sum = 0; +for(my $i = 31; $i >= 0; $i--) +{ + $sum = $sum + $activityCounter[$i]; +} +for(my $i = 31; $i >= 0; $i--) +{ + my $string = $activityCounter[$i]/$sum."\t"; + $string =~ s/\./,/g; + print $string; +} + +#Search Bank Locations +for(my $i = 0; $i < $numberOfBankBits; $i++) +{ + my $maximum = max(@activityCounter); + my ($index) = grep $activityCounter[$_] == $maximum , 0.. $#activityCounter; + $mapping[$index] = "B$i"; + $activityCounter[$index] = -1; +} + +#Search Column Locations +for(my $i = 0; $i < $numberOfColumnBits; $i++) +{ + my $maximum = max(@activityCounter); + my ($index) = grep $activityCounter[$_] == $maximum , 0.. $#activityCounter; + $mapping[$index] = "C$i"; + $activityCounter[$index] = -1; +} + +#Search Row Locations +for(my $i = 0; $i < $numberOfRowBits; $i++) +{ + my $maximum = max(@activityCounter); + my ($index) = grep $activityCounter[$_] == $maximum , 0.. $#activityCounter; + $mapping[$index] = "R$i"; + $activityCounter[$index] = -1; +} + +#Print final mapping +print "\nMapping\t"; +my $maximum = max(@activityCounter); +for(my $i = 31; $i >= 0; $i--) +{ + print $mapping[$i]."\t"; +} +print "\n";