#! /usr/bin/perl -w 

############################################################
## Copyright: 2011 Integrated Sytems Laboratory, ETH Zurich
##            http://www.iis.ee.ethz.ch/~sha3
############################################################
use strict; 

# v0.2 - kgf@ee.ethz.ch - Wed Oct  5 10:32:24 CEST 2011
# - write the results to a common data file
# v0.1 - kgf@ee.ethz.ch - Tue Oct  4 17:02:05 CEST 2011
# - this will extract the information from the multiple encounter rusn

unless ($ENV{PWD}=~/(ethz|gmu)_(blake|skein|sha2|jh|keccak|groestl)\/encounter$/){
   die "Current directory is [$ENV{PWD}] not in encounter\n";
}

my $flavor= $1;
my  $alg = $2;
my $GATE=1.44; # constant 
my $FILE="gnuplot_enc_result.dat";


my $date=`date`;
chomp($date);
my %LATENCY = (
                  "ethz_sha2"    =>  67, 
                  "ethz_blake"   =>  57,
                  "ethz_groestl" =>  81, 
                  "ethz_jh"      =>  42, 
                  "ethz_keccak"  =>  24, 
                  "ethz_skein"   =>  92, 
                  "gmu_sha2"     =>  65, 
                  "gmu_blake"    =>  29, 
                  "gmu_groestl"  =>  21,
                  "gmu_jh"       =>  43,
                  "gmu_keccak"   =>  24,
                  "gmu_skein"    =>  19
              );


## determine the actual runs:
my @RUNS=`ls encounter_*.cmd`;


print<<"BUGU";

+--------------------------------------------------------------------------------------------+
| $flavor $alg     
|
| Constraints       | Achieved Results                                                       |
+---------+---------+----------+----------+-------------+-------------+----------------------+
|Clock    |Util.    | Timing   | Util     | Gate Equiv  | Throughput  | Throughput per Area  |
+---------+---------+----------+----------+-------------+-------------+----------------------+
BUGU

open (R, "> $FILE") or die "can not open $FILE for writing\n";

foreach my $r (@RUNS){
 chomp ($r);
 $r=~/encounter_(\d+\.\d+)_(\d+\.\d+)\.cmd/;
 my $clk= $1;
 my $util=$2;
 
# print "$alg $flavor $clk - $util \n";

#### Read area information 
 my $fp_file="timingReports_${clk}_${util}/${flavor}_${alg}_analyzeFP.rpt";
 open(F, "< $fp_file") or die "Can not open Floorplan file [${fp_file}]\n";

 my $area=0;
 my $density=0;
 my $instances=0;

 while (F){
   if    (/Core Area.*:\s*(\d+\.\d+)/){ $area= $1} 
   elsif (/Core Density.*:\s*(\d+\.\d+)/){ $density= $1}
   elsif (/Number of instance.*:\s*(\d+)/){ $instances= $1}
 }
 my $gates=int($area/$GATE) / 1000 ;
 close(F);

#### Read timing information 
 my $tim_file="timingReports_${clk}_${util}/${flavor}_${alg}.postroute-opt.summary";
 open(T, "< $tim_file") or die "Can not open timing report [${tim_file}]\n";

my $slack = 0;
 while (T){
   if    (/WNS .ns.:.\s*(-?\d+\.\d+)/){ $slack= $1} 
 }
 close(T);
my $timing = $clk - $slack;
my $bpc = ($alg eq "keccak") ? 1088 : 512 ; # bits per block
my $tput = $bpc / ($timing * $LATENCY{"${flavor}_${alg}"});

printf("| %3.2f ns | %5.1f %% | %5.3f ns |  %5.2f %% | %7.3f kGE | %6.3f Gb/s | %7.3f kbits/s/gate |\n", 
       $clk, $util *100, $timing, $density, $gates, $tput, (1000*$tput)/ ($area/(1000*$GATE)));

# print to file
printf R ("%7.3f %5.3f %6.3f\n",$gates, $timing,$tput);
 
}
print "+---------+---------+----------+----------+-------------+-------------+----------------------+\n";
# done with the file
close(R);

Generated on Tue Nov 22 15:16:34 CET 2011
Home