Mapping will automatically generated

This commit is contained in:
Matthias Jung
2014-08-07 15:16:40 +02:00
parent b008875fca
commit ea64dd8cea

View File

@@ -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(<FH>)
{
# 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(<FH>)
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";