Line 1... |
Line 1... |
#!/usr/bin/perl -w
|
#!/usr/bin/perl -w
|
use strict;
|
use strict;
|
use warnings;
|
use warnings;
|
use List::Util 'shuffle';
|
use List::Util 'shuffle';
|
require "widget.pl";
|
require "widget.pl";
|
|
require "traffic_pattern.pl";
|
|
|
|
|
use constant SIM_RAM_GEN => 0;
|
use constant SIM_RAM_GEN => 0;
|
|
|
use constant JTAG_STATIC_INDEX => 124;
|
use constant JTAG_STATIC_INDEX => 124;
|
Line 41... |
Line 42... |
my ($ctrl_reset, $noc_reset,$jtag_intfc)=@_;
|
my ($ctrl_reset, $noc_reset,$jtag_intfc)=@_;
|
my $reset_vector= (($ctrl_reset & 0x1) << 1) + ($noc_reset & 0x1);
|
my $reset_vector= (($ctrl_reset & 0x1) << 1) + ($noc_reset & 0x1);
|
my $cmd = "sh $jtag_intfc \" -n ".JTAG_DONE_RESET_INDEX." -d I:1,D:2:$reset_vector,I:0 \" ";
|
my $cmd = "sh $jtag_intfc \" -n ".JTAG_DONE_RESET_INDEX." -d I:1,D:2:$reset_vector,I:0 \" ";
|
#print "$cmd\n";
|
#print "$cmd\n";
|
return $cmd;
|
return $cmd;
|
|
|
}
|
}
|
|
|
sub set_time_limit_cmd {
|
sub set_time_limit_cmd {
|
my ($time_limit,$jtag_intfc)=@_;
|
my ($time_limit,$jtag_intfc)=@_;
|
my $hex = sprintf("0x%X", $time_limit);
|
my $hex = sprintf("0x%X", $time_limit);
|
my $cmd = "sh $jtag_intfc \" -n ".JTAG_COUNTER_INDEX." -d I:1,D:".CLK_CNTw.":$hex,I:0 \" ";
|
my $cmd = "sh $jtag_intfc \" -n ".JTAG_COUNTER_INDEX." -d I:1,D:".CLK_CNTw.":$hex,I:0 \" ";
|
print "$cmd\n";
|
#print "$cmd\n";
|
return $cmd;
|
return $cmd;
|
}
|
}
|
|
|
|
|
sub help {
|
sub help {
|
Line 70... |
Line 70... |
|
|
}
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
sub random_dest_gen {
|
sub random_dest_gen {
|
my $n=shift;
|
my $n=shift;
|
my @c=(0..$n-1);
|
my @c=(0..$n-1);
|
my @o;
|
my @o;
|
for (my $i=0; $i<$n; $i++){
|
for (my $i=0; $i<$n; $i++){
|
Line 100... |
Line 97... |
#print "\n$cmd \n $stdout";
|
#print "\n$cmd \n $stdout";
|
return $exit;
|
return $exit;
|
}
|
}
|
|
|
|
|
sub synthetic_destination{
|
|
my($traffic,$x,$y,$xn,$yn,$line_num,$rnd)=@_;
|
|
my $dest_x;
|
|
my $dest_y;
|
|
my $xw = log2($xn);
|
|
my $yw = log2($yn);
|
|
|
|
if( $traffic eq "transposed 1"){
|
|
$dest_x= $xn-$y-1;
|
|
$dest_y= $yn-$x-1;
|
|
|
|
} elsif( $traffic eq "transposed 2"){
|
|
|
|
$dest_x = $y;
|
|
$dest_y = $x;
|
|
} elsif( $traffic eq "bit reverse"){
|
|
my $joint_addr= ($x << log2($xn))+$y;
|
|
my $reverse_addr=0;
|
|
my $pos=0;
|
|
for(my $i=0; $i<($xw+$yw); $i++){#reverse the address
|
|
$pos= ((($xw+$yw)-1)-$i);
|
|
$reverse_addr|= (($joint_addr >> $pos) & 0x01) << $i;
|
|
# reverse_addr[i] = joint_addr [((Xw+Yw)-1)-i];
|
|
}
|
|
$dest_x = $reverse_addr>>$yw;
|
|
$dest_y = $reverse_addr&(0xFF>> (8-$yw));
|
|
} elsif( $traffic eq "bit complement") {
|
|
|
|
$dest_x = (~$x) &(0xFF>> (8-$xw));
|
|
$dest_y = (~$y) &(0xFF>> (8-$yw));
|
|
|
|
|
|
}elsif( $traffic eq "tornado") {
|
|
|
|
#[(x+(k/2-1)) mod k, (y+(k/2-1)) mod k],
|
|
$dest_x = (($x + (($xn/2)-1))%$xn);
|
|
$dest_y = (($y + (($yn/2)-1))%$yn);
|
|
}elsif( $traffic eq "random") {
|
|
#my $num=($y * $xn) + $x;
|
|
|
|
my $xc=$xn * $yn;
|
|
my @randoms=@{$rnd};
|
|
my $num=($y * $xn) + $x;
|
|
my $dest = @{$randoms[$num]}[$line_num-1];
|
|
#print "$num:$dest, "; # \@{ \$randoms\[$num\]\}\[$line_num\]";
|
|
$dest_x = $dest % $xn;
|
|
$dest_y = $dest / $xn;
|
|
|
|
} else{#off
|
|
print "***********************************$traffic is not defined*******************************************\n";
|
|
$dest_x= $x;
|
|
$dest_y= $y;
|
|
|
|
}
|
|
|
|
return ($dest_x,$dest_y);
|
|
|
|
|
sub synthetic_destination{
|
|
my($self,$sample,$traffic,$endp,$line_num,$rnd)=@_;
|
|
return pck_dst_gen ($self,$sample,$traffic,$endp,$line_num,$rnd);
|
}
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
sub gen_synthetic_traffic_ram_line{
|
sub gen_synthetic_traffic_ram_line{
|
my ($emulate, $x, $y, $sample,$ratio ,$line_num,$rnd)=@_;
|
my ($emulate, $endp, $sample,$ratio ,$line_num,$rnd)=@_;
|
|
|
|
my ($topology, $T1, $T2, $T3, $V, $Fpay) = get_sample_emulation_param($emulate,$sample);
|
|
my ($NE, $NR, $RAw, $EAw, $Fw) = get_topology_info_sub ($topology, $T1, $T2, $T3, $V, $Fpay);
|
|
|
|
|
|
|
my $ref=$emulate->object_get_attribute("$sample","noc_info");
|
|
my %noc_info= %$ref;
|
|
my $xn=$noc_info{NX};
|
|
my $yn=$noc_info{NY};
|
|
my $traffic=$emulate->object_get_attribute($sample,"traffic");
|
|
|
|
|
my $traffic=$emulate->object_get_attribute($sample,"traffic");
|
|
|
my $pck_num_to_send=$emulate->object_get_attribute($sample,"PCK_NUM_LIMIT");
|
my $pck_num_to_send=$emulate->object_get_attribute($sample,"PCK_NUM_LIMIT");
|
my $pck_size=$emulate->object_get_attribute($sample,"PCK_SIZE");
|
my $pck_size=$emulate->object_get_attribute($sample,"PCK_SIZE");
|
my $pck_class_in=0;
|
my $pck_class_in=0;
|
|
|
|
|
if($line_num==0){ #first ram line shows how many times the ram content must be read
|
if($line_num==0){ #first ram line shows how many times the ram content must be read
|
#In random traffic each node sends 2 packets to other NC-1 nodes for (pck_num_to_send/2) times
|
#In random traffic each node sends 2 packets to other NC-1 nodes for (pck_num_to_send/2) times
|
my $ram_cnt= ($traffic eq 'random')? ($pck_num_to_send/(2*(($xn * $yn)-1)))+1:0 ;
|
my $ram_cnt= ($traffic eq 'random')? ($pck_num_to_send/(2*($NE-1)))+1:0 ;
|
return (0,$ram_cnt);
|
return (0,$ram_cnt);
|
|
|
}
|
}
|
return (0,0) if($line_num>1 && $traffic ne 'random');
|
return (0,0) if($line_num>1 && $traffic ne 'random');
|
return (0,0) if( $line_num>= $xn * $yn);
|
return (0,0) if( $line_num>= $NE);
|
|
|
|
|
|
|
#assign {pck_num_to_send_in,ratio_in, pck_size_in,dest_x_in, dest_y_in,pck_class_in, last_adr_in}= q_a;
|
#assign {pck_num_to_send_in,ratio_in, pck_size_in,dest_x_in, dest_y_in,pck_class_in, last_adr_in}= q_a;
|
my $last_adr = ( $traffic ne 'random') ? 1 :
|
my $last_adr = ( $traffic ne 'random') ? 1 :
|
($line_num ==($xn * $yn)-1)? 1 :0;
|
($line_num ==$NE-1)? 1 :0;
|
|
|
my ($dest_x, $dest_y)=synthetic_destination($traffic,$x,$y,$xn,$yn,$line_num,$rnd);
|
my $dest_e_addr=synthetic_destination($emulate,$sample,$traffic,$endp,$line_num,$rnd);
|
|
#print "$endp->$dest_e_addr\n";
|
|
|
my $vs= ( $traffic eq 'random')? 2 : $pck_num_to_send;
|
my $vs= ( $traffic eq 'random')? 2 : $pck_num_to_send;
|
$vs=($vs << 2 )+ ($ratio >>5) ;
|
$vs=($vs << 2 )+ ($ratio >>5) ;
|
|
|
my $vl= ($ratio %32);
|
my $vl= ($ratio %32);
|
$vl=($vl << PCK_SIZw )+$pck_size;
|
$vl=($vl << PCK_SIZw )+$pck_size;
|
$vl=($vl << MAXXw )+$dest_x;
|
$vl=($vl << MAX_EAw )+$dest_e_addr;
|
$vl=($vl << MAXYw )+$dest_y;
|
|
$vl=($vl << MAXCw )+$pck_class_in;
|
$vl=($vl << MAXCw )+$pck_class_in;
|
$vl=($vl << 1 )+$last_adr;
|
$vl=($vl << 1 )+$last_adr;
|
|
|
return ($vs,$vl);
|
return ($vs,$vl);
|
|
|
|
|
|
|
|
|
|
|
}
|
}
|
|
|
|
|
|
|
|
|
|
|
sub generate_synthetic_traffic_ram{
|
sub generate_synthetic_traffic_ram{
|
my ($emulate,$x,$y,$sample,$ratio , $file,$rnd,$num)=@_;
|
my ($emulate,$endp,$sample,$ratio , $file,$rnd)=@_;
|
|
|
my $line_num;
|
my $line_num;
|
my $line_value;
|
my $line_value;
|
my $ram;
|
my $ram;
|
if(SIM_RAM_GEN){
|
if(SIM_RAM_GEN){
|
my $ext= sprintf("%02u.txt",$num);
|
my $ext= sprintf("%02u.txt",$endp);
|
open( $ram, '>', "$ENV{'PRONOC_WORK'}/emulate/ram".$ext) || die "Can not create: \"$ENV{'PRONOC_WORK'}/emulate/ram.$ext\" $!";
|
open( $ram, '>', "$ENV{'PRONOC_WORK'}/emulate/ram".$ext) || die "Can not create: \"$ENV{'PRONOC_WORK'}/emulate/ram.$ext\" $!";
|
}
|
}
|
for ($line_num= 0; $line_num<RAM_SIZE; $line_num++ ) {
|
for ($line_num= 0; $line_num<RAM_SIZE; $line_num++ ) {
|
my ($value_s,$value_l)=gen_synthetic_traffic_ram_line ($emulate, $x, $y, $sample, $ratio ,$line_num,$rnd);
|
my ($value_s,$value_l)=gen_synthetic_traffic_ram_line ($emulate, $endp, $sample, $ratio ,$line_num,$rnd);
|
|
|
|
|
#printf ("\n%08x\t",$value_s);
|
#printf ("\n%08x\t",$value_s);
|
#printf ("%08x\t",$value_l);
|
#printf ("%08x\t",$value_l);
|
if(SIM_RAM_GEN){
|
if(SIM_RAM_GEN){
|
Line 269... |
Line 203... |
|
|
|
|
|
|
sub generate_emulator_ram {
|
sub generate_emulator_ram {
|
my ($emulate, $sample,$ratio_in,$info)=@_;
|
my ($emulate, $sample,$ratio_in,$info)=@_;
|
my $ref=$emulate->object_get_attribute($sample,"noc_info");
|
my ($topology, $T1, $T2, $T3, $V, $Fpay) = get_sample_emulation_param($emulate,$sample);
|
my %noc_info= %$ref;
|
my ($NE, $NR, $RAw, $EAw, $Fw) = get_topology_info_sub ($topology, $T1, $T2, $T3, $V, $Fpay);
|
my $C=$noc_info{C};
|
|
my $xn=$noc_info{NX};
|
|
my $yn=$noc_info{NY};
|
|
my $xc=$xn*$yn;
|
my $rnd=random_dest_gen($NE); # generate a matrix of sudo random number
|
my $rnd=random_dest_gen($xc); # generate a matrix of sudo random number
|
|
my $traffic=$emulate->object_get_attribute($sample,"traffic");
|
my $traffic=$emulate->object_get_attribute($sample,"traffic");
|
my @traffics=("tornado", "transposed 1", "transposed 2", "bit reverse", "bit complement","random", "hot spot" );
|
my @traffics=("tornado", "transposed 1", "transposed 2", "bit reverse", "bit complement","random", "hot spot", "shuffle", "neighbor", "bit rotation" );
|
|
|
if ( !defined $xn || $xn!~ /\s*\d+\b/ ){ add_info($info,"programe_pck_gens:invalid X value\n"); help(); return 0;}
|
#if ( !defined $xn || $xn!~ /\s*\d+\b/ ){ add_info($info,"programe_pck_gens:invalid X value\n"); help(); return 0;}
|
if ( !defined $yn || $yn!~ /\s*\d+\b/ ){ add_info($info,"programe_pck_gens:invalid Y value\n"); help(); return 0;}
|
#if ( !defined $yn || $yn!~ /\s*\d+\b/ ){ add_info($info,"programe_pck_gens:invalid Y value\n"); help(); return 0;}
|
if ( !grep( /^$traffic$/, @traffics ) ){add_info($info,"programe_pck_gens:$traffic is an invalid Traffic name\n"); help(); return 0;}
|
if ( !grep( /^$traffic$/, @traffics ) ){add_info($info,"programe_pck_gens:$traffic is an invalid Traffic name\n"); help(); return 0;}
|
if ( $xn <2 || $xn >16 ){ add_info($info,"programe_pck_gens:invalid X value: ($xn). should be between 2 and 16 \n"); help(); return 0;}
|
if ( $EAw >8 ){ add_info($info,"programe_pck_gens:invalid EAw value: ($EAw). should be between 1 and 8 \n"); help(); return 0;}
|
if ( $yn <2 || $yn >16 ){ add_info($info,"programe_pck_gens:invalid Y value:($yn). should be between 2 and 16 \n"); help(); return 0;}
|
#if ( $yn <2 || $yn >16 ){ add_info($info,"programe_pck_gens:invalid Y value:($yn). should be between 2 and 16 \n"); help(); return 0;}
|
#open file pointer
|
#open file pointer
|
#open(my $file, '>', RAM_BIN_FILE) || die "Can not create: \">lib/emulate/emulate_ram.bin\" $!";
|
#open(my $file, '>', RAM_BIN_FILE) || die "Can not create: \">lib/emulate/emulate_ram.bin\" $!";
|
open(my $file, '>', "$ENV{'PRONOC_WORK'}/emulate/emulate_ram.bin") || die "Can not create: \"$ENV{'PRONOC_WORK'}/emulate/emulate_ram.bin\" $!";
|
open(my $file, '>', "$ENV{'PRONOC_WORK'}/emulate/emulate_ram.bin") || die "Can not create: \"$ENV{'PRONOC_WORK'}/emulate/emulate_ram.bin\" $!";
|
|
|
#generate each node ram data
|
#generate each node ram data
|
for (my $y=0; $y<$yn; $y=$y+1){
|
for (my $endp=0; $endp<$NE; $endp++){
|
for (my $x=0; $x<$xn; $x=$x+1){
|
#print "generate_synthetic_traffic_ram($emulate,$endp,$sample,$ratio_in, $file,$rnd);\n";
|
my $num=($y * $xn) + $x;
|
generate_synthetic_traffic_ram($emulate,$endp,$sample,$ratio_in, $file,$rnd);
|
generate_synthetic_traffic_ram($emulate,$x,$y,$sample,$ratio_in, $file,$rnd,$num);
|
|
|
|
}
|
|
}
|
}
|
close($file);
|
close($file);
|
return 1;
|
return 1;
|
|
|
}
|
}
|
Line 312... |
Line 242... |
|
|
}
|
}
|
|
|
#reset the FPGA board
|
#reset the FPGA board
|
#run_cmd_in_back_ground("quartus_stp -t ./lib/tcl/mem.tcl reset");
|
#run_cmd_in_back_ground("quartus_stp -t ./lib/tcl/mem.tcl reset");
|
|
#print "#reset both noc and jtag\n";
|
return 0 if(run_cmd_update_info(reset_cmd(1,1,$jtag_intfc),$info)); #reset both noc and jtag
|
return 0 if(run_cmd_update_info(reset_cmd(1,1,$jtag_intfc),$info)); #reset both noc and jtag
|
|
#print "#enable jtag keep noc in reset\n";
|
return 0 if(run_cmd_update_info(reset_cmd(0,1,$jtag_intfc),$info)); #enable jtag keep noc in reset
|
return 0 if(run_cmd_update_info(reset_cmd(0,1,$jtag_intfc),$info)); #enable jtag keep noc in reset
|
|
#print "#set time limit\n";
|
#set time limit
|
#set time limit
|
my $time_limit = $emulate->object_get_attribute($sample,"SIM_CLOCK_LIMIT");
|
my $time_limit = $emulate->object_get_attribute($sample,"SIM_CLOCK_LIMIT");
|
return 0 if(run_cmd_update_info(set_time_limit_cmd($time_limit,$jtag_intfc),$info));
|
return 0 if(run_cmd_update_info(set_time_limit_cmd($time_limit,$jtag_intfc),$info));
|
|
|
|
|
Line 359... |
Line 292... |
return hex($s);
|
return hex($s);
|
}
|
}
|
|
|
|
|
sub read_statistic_mem {
|
sub read_statistic_mem {
|
my($yn,$xn,$jtag_intfc,$info)=@_;
|
my($NE,$jtag_intfc,$info)=@_;
|
my %results;
|
my %results;
|
my $sum_of_latency=0;
|
my $sum_of_latency=0;
|
my $sum_of_pck=0;
|
my $sum_of_pck=0;
|
my $total_router=0;
|
my $total_router=0;
|
for (my $y=0; $y<$yn; $y=$y+1){
|
for (my $num=0; $num<$NE; $num++){
|
for (my $x=0; $x<$xn; $x=$x+1){
|
|
my $num=($y * $xn) + $x;
|
|
my $read_addr=($num * STATISTIC_NUM);
|
my $read_addr=($num * STATISTIC_NUM);
|
|
|
my $sent_pck_addr= sprintf ("%X",$read_addr);
|
my $sent_pck_addr= sprintf ("%X",$read_addr);
|
my $got_pck_addr = sprintf ("%X",$read_addr+1);
|
my $got_pck_addr = sprintf ("%X",$read_addr+1);
|
my $latency_addr = sprintf ("%X",$read_addr+2);
|
my $latency_addr = sprintf ("%X",$read_addr+2);
|
Line 384... |
Line 316... |
|
|
$sum_of_latency+=$results{$num}{latency};
|
$sum_of_latency+=$results{$num}{latency};
|
$sum_of_pck+=$results{$num}{got_pck};
|
$sum_of_pck+=$results{$num}{got_pck};
|
$total_router++ if($results{$num}{sent_pck}>0);
|
$total_router++ if($results{$num}{sent_pck}>0);
|
#$i=$i+2;
|
#$i=$i+2;
|
}}
|
}
|
|
|
|
|
|
|
add_info($info, "\n");
|
add_info($info, "\n");
|
|
|
Line 396... |
Line 328... |
|
|
}
|
}
|
|
|
|
|
sub read_statistic_mem_fast {
|
sub read_statistic_mem_fast {
|
my($yn,$xn,$jtag_intfc,$info)=@_;
|
my($NE,$jtag_intfc,$info)=@_;
|
my %results;
|
my %results;
|
my $sum_of_latency=0;
|
my $sum_of_latency=0;
|
my $sum_of_pck=0;
|
my $sum_of_pck=0;
|
my $total_router=0;
|
my $total_router=0;
|
#read static memory
|
#read static memory
|
my $end= STATISTIC_NUM * 8 *$yn * $xn;
|
my $end= STATISTIC_NUM * 8 *$NE;
|
$end=sprintf ("%X",$end);
|
$end=sprintf ("%X",$end);
|
my $cmd= "sh $jtag_intfc \"-n ".JTAG_STATIC_INDEX." -w 8 -r -s 0 -e $end\"";
|
my $cmd= "sh $jtag_intfc \"-n ".JTAG_STATIC_INDEX." -w 8 -r -s 0 -e $end\"";
|
#print "$cmd\n";
|
#print "$cmd\n";
|
my ($result,$exit,$stderr) = run_cmd_in_back_ground_get_stdout($cmd);
|
my ($result,$exit,$stderr) = run_cmd_in_back_ground_get_stdout($cmd);
|
if($exit){
|
if($exit){
|
Line 421... |
Line 353... |
#print "$data[0]\n";
|
#print "$data[0]\n";
|
|
|
|
|
|
|
|
|
for (my $y=0; $y<$yn; $y=$y+1){
|
for (my $endp=0; $endp<$NE; $endp=$endp+1){
|
for (my $x=0; $x<$xn; $x=$x+1){
|
|
my $num=($y * $xn) + $x;
|
my $num=$endp;
|
my $read_addr=($num * STATISTIC_NUM);
|
my $read_addr=($num * STATISTIC_NUM);
|
|
|
my $sent_pck_addr= $read_addr;
|
my $sent_pck_addr= $read_addr;
|
my $got_pck_addr = $read_addr+1;
|
my $got_pck_addr = $read_addr+1;
|
my $latency_addr = $read_addr+2;
|
my $latency_addr = $read_addr+2;
|
Line 436... |
Line 368... |
$results{$num}{sent_pck}=hex($data[$sent_pck_addr]);
|
$results{$num}{sent_pck}=hex($data[$sent_pck_addr]);
|
$results{$num}{got_pck}=hex($data[$got_pck_addr]);
|
$results{$num}{got_pck}=hex($data[$got_pck_addr]);
|
$results{$num}{latency}=hex($data[$latency_addr]);
|
$results{$num}{latency}=hex($data[$latency_addr]);
|
$results{$num}{worst_latency}=hex($data[$worst_latency_addr]);
|
$results{$num}{worst_latency}=hex($data[$worst_latency_addr]);
|
#add_info($info, "$num, ");
|
#add_info($info, "$num, ");
|
|
#print "$results{$num}{sent_pck}=hex($data[$sent_pck_addr]);\n";
|
|
|
$sum_of_latency+=$results{$num}{latency};
|
$sum_of_latency+=$results{$num}{latency};
|
$sum_of_pck+=$results{$num}{got_pck};
|
$sum_of_pck+=$results{$num}{got_pck};
|
$total_router++ if($results{$num}{sent_pck}>0);
|
$total_router++ if($results{$num}{sent_pck}>0);
|
#$i=$i+2;
|
#$i=$i+2;
|
}}
|
}
|
|
|
|
|
|
|
#add_info($info, "\n");
|
#add_info($info, "\n");
|
|
|
Line 455... |
Line 388... |
|
|
|
|
sub read_pack_gen{
|
sub read_pack_gen{
|
my ($emulate,$sample,$info,$jtag_intfc,$ratio_in)= @_;
|
my ($emulate,$sample,$info,$jtag_intfc,$ratio_in)= @_;
|
my $ref=$emulate->object_get_attribute($sample,"noc_info");
|
my $ref=$emulate->object_get_attribute($sample,"noc_info");
|
my %noc_info= %$ref;
|
my ($topology, $T1, $T2, $T3, $V, $Fpay) = get_sample_emulation_param($emulate,$sample);
|
my $xn=$noc_info{NX};
|
my ($NE, $NR, $RAw, $EAw, $Fw) = get_topology_info_sub ($topology, $T1, $T2, $T3, $V, $Fpay);
|
my $yn=$noc_info{NY};
|
|
#wait for done
|
#wait for done
|
add_info($info, "wait for done\n");
|
add_info($info, "wait for done\n");
|
my $done=0;
|
my $done=0;
|
my $counter=0;
|
my $counter=0;
|
while ($done ==0){
|
while ($done ==0){
|
Line 496... |
Line 428... |
}
|
}
|
|
|
add_info($info,"Done is asserted\nStart reading statistic data from cores:\n\t");
|
add_info($info,"Done is asserted\nStart reading statistic data from cores:\n\t");
|
#print" Done is asserted\n";
|
#print" Done is asserted\n";
|
#my $i=0;
|
#my $i=0;
|
#my ($results_ref,$sum_of_latency,$sum_of_pck,$total_router)= read_statistic_mem($yn,$xn,$jtag_intfc,$info);
|
#my ($results_ref,$sum_of_latency,$sum_of_pck,$total_router)= read_statistic_mem($NE,$jtag_intfc,$info);
|
my ($results_ref,$sum_of_latency,$sum_of_pck,$total_router)= read_statistic_mem_fast($yn,$xn,$jtag_intfc,$info);
|
my ($results_ref,$sum_of_latency,$sum_of_pck,$total_router)= read_statistic_mem_fast($NE,$jtag_intfc,$info);
|
my %results=%$results_ref;
|
my %results=%$results_ref;
|
|
|
|
|
foreach my $p (sort keys %results){
|
foreach my $p (sort keys %results){
|
update_result($emulate,$sample,"packet_rsvd_result",$ratio_in,$p,$results{$p}{got_pck} );
|
update_result($emulate,$sample,"packet_rsvd_result",$ratio_in,$p,$results{$p}{got_pck} );
|