OpenCores
URL https://opencores.org/ocsvn/an-fpga-implementation-of-low-latency-noc-based-mpsoc/an-fpga-implementation-of-low-latency-noc-based-mpsoc/trunk

Subversion Repositories an-fpga-implementation-of-low-latency-noc-based-mpsoc

[/] [an-fpga-implementation-of-low-latency-noc-based-mpsoc/] [trunk/] [mpsoc/] [perl_gui/] [lib/] [perl/] [emulator.pl] - Diff between revs 45 and 48

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 45 Rev 48
Line 1... Line 1...
#! /usr/bin/perl -w
#! /usr/bin/perl -w
use Glib qw/TRUE FALSE/;
use constant::boolean;
use strict;
use strict;
use warnings;
use warnings;
 
 
use FindBin;
use FindBin;
use lib $FindBin::Bin;
use lib $FindBin::Bin;
 
 
use Gtk2;
 
use Gtk2::Ex::Graph::GD;
 
use GD::Graph::Data;
use GD::Graph::Data;
use emulator;
use emulator;
use IO::CaptureOutput qw(capture qxx qxy);
 
use GD::Graph::colour qw/:colours/;
use GD::Graph::colour qw/:colours/;
use Proc::Background;
 
use Time::HiRes qw( usleep ualarm gettimeofday tv_interval nanosleep  clock_gettime clock_getres clock_nanosleep clock stat );
 
 
 
use File::Basename;
use File::Basename;
use File::Path qw/make_path/;
use File::Path qw/make_path/;
use File::Copy;
use File::Copy;
use File::Find::Rule;
use File::Find::Rule;
Line 48... Line 44...
use constant MAX_PCK_SIZ => (2**PCK_SIZw)-1;
use constant MAX_PCK_SIZ => (2**PCK_SIZw)-1;
use constant MAX_SIM_CLKs=> 1000000000; # simulation end at if clock counter reach this number 
use constant MAX_SIM_CLKs=> 1000000000; # simulation end at if clock counter reach this number 
 
 
 
 
use constant MAX_RATIO => 1000;# 0->0 1->0.1 ...  1000->100
use constant MAX_RATIO => 1000;# 0->0 1->0.1 ...  1000->100
use constant EMULATION_RTLS => "/mpsoc/src_emulate/rtl/ , /mpsoc/src_peripheral/jtag/jtag_wb/ , /mpsoc/src_peripheral/ram/ , /mpsoc/src_noc/ ,";
 
use constant EMULATION_TOP => "/mpsoc/src_emulate/emulator_top.v";
use constant EMULATION_TOP => "/mpsoc/rtl/src_emulate/emulator_top.v";
 
 
 
 
sub get_MAX_PCK_NUM(){MAX_PCK_NUM}
sub get_MAX_PCK_NUM(){MAX_PCK_NUM}
sub get_MAX_SIM_CLKs(){MAX_SIM_CLKs}
sub get_MAX_SIM_CLKs(){MAX_SIM_CLKs}
sub get_MAX_PCK_SIZ(){MAX_PCK_SIZ}
sub get_MAX_PCK_SIZ(){MAX_PCK_SIZ}
 
 
sub check_inserted_ratios {
sub check_inserted_ratios {
                my $str=shift;
                my $str=shift;
                my @ratios;
                my @ratios;
 
 
            my @chunks=split(',',$str);
            my @chunks=split(/\s*,\s*/,$str);
            foreach my $p (@chunks){
            foreach my $p (@chunks){
                        if($p !~ /^[0-9.:,]+$/){ message_dialog ("$p has invalid character(S)" ); return undef; }
                        if($p !~ /^[0-9.:,]+$/){ message_dialog ("$p has invalid character(S)" ); return undef; }
                        my @range=split(':',$p);
                        my @range=split(':',$p);
                        my $size= scalar @range;
                        my $size= scalar @range;
                        if($size==1){ # its a number
                        if($size==1){ # its a number
Line 90... Line 86...
}
}
 
 
 
 
sub get_injection_ratios{
sub get_injection_ratios{
                my ($emulate,$atrebute1,$atrebute2)=@_;
                my ($emulate,$atrebute1,$atrebute2)=@_;
                my $box = Gtk2::HBox->new( FALSE, 0 );
                my $box =def_hbox(FALSE, 0);
                my $init=$emulate->object_get_attribute($atrebute1,$atrebute2);
                my $init=$emulate->object_get_attribute($atrebute1,$atrebute2);
                my $entry=gen_entry($init);
                my $entry=gen_entry($init);
                my $button=def_image_button("icons/right.png",'Check');
                my $button=def_image_button("icons/right.png",'Check');
                $button->signal_connect("clicked" => sub {
                $button->signal_connect("clicked" => sub {
                        my $text= $entry->get_text();
                        my $text= $entry->get_text();
Line 144... Line 140...
        my $traffics="tornado,transposed 1,transposed 2,bit reverse,bit complement,random,shuffle,bit rotation,neighbor"; #TODO hot spot for emulator
        my $traffics="tornado,transposed 1,transposed 2,bit reverse,bit complement,random,shuffle,bit rotation,neighbor"; #TODO hot spot for emulator
 
 
        #search path    
        #search path    
        my $dir = Cwd::getcwd();
        my $dir = Cwd::getcwd();
        my $open_in       = abs_path("$ENV{PRONOC_WORK}/emulate/sof");
        my $open_in       = abs_path("$ENV{PRONOC_WORK}/emulate/sof");
        attach_widget_to_table ($table,$row,gen_label_in_left("Search Path:"),gen_button_message ("Select the the Path where the verilator simulation files are located. Different NoC verilated models can be generated using Generate NoC configuration tab.","icons/help.png"),
        attach_widget_to_table ($table,$row,gen_label_in_left("Search Path:"),gen_button_message ("Select the Path where the verilator simulation files are located. Different NoC verilated models can be generated using Generate NoC configuration tab.","icons/help.png"),
        get_dir_in_object ($emulate,$sample,"sof_path",undef,'ref_set_win',1,$open_in)); $row++;
        get_dir_in_object ($emulate,$sample,"sof_path",undef,'ref_set_win',1,$open_in)); $row++;
        $open_in        = $emulate->object_get_attribute($sample,"sof_path");
        $open_in        = $emulate->object_get_attribute($sample,"sof_path");
 
 
 
 
 
 
Line 257... Line 253...
As an example defining 2,3,4:10:2 will result in (2,3,4,6,8,10) injection ratios." ;
As an example defining 2,3,4:10:2 will result in (2,3,4,6,8,10) injection ratios." ;
        my $u=get_injection_ratios ($emulate,$sample,"ratios");
        my $u=get_injection_ratios ($emulate,$sample,"ratios");
 
 
        attach_widget_to_table ($table,$row,gen_label_in_left("Injection ratios:"),gen_button_message ($l,"icons/help.png") , $u); $row++;
        attach_widget_to_table ($table,$row,gen_label_in_left("Injection ratios:"),gen_button_message ($l,"icons/help.png") , $u); $row++;
 
 
        my $scrolled_win = new Gtk2::ScrolledWindow (undef, undef);
        my $scrolled_win = add_widget_to_scrolled_win($table);
        $scrolled_win->set_policy( "automatic", "automatic" );
 
        $scrolled_win->add_with_viewport($table);
 
 
 
        my $ok = def_image_button('icons/select.png','OK');
        my $ok = def_image_button('icons/select.png','OK');
        my $mtable = def_table(10, 1, TRUE);
        my $mtable = def_table(10, 1, TRUE);
 
 
        $mtable->attach_defaults($scrolled_win,0,1,0,9);
        $mtable->attach_defaults($scrolled_win,0,1,0,9);
        $mtable-> attach ($ok , 0, 1,  9, 10,'expand','shrink',2,2);
        $mtable-> attach ($ok , 0, 1,  9, 10,'expand','shrink',2,2);
 
 
        $set_win->add ($mtable);
        add_widget_to_scrolled_win ($mtable,$set_win);
        $set_win->show_all();
        $set_win->show_all();
 
 
        $set_win ->signal_connect (destroy => sub{
        $set_win ->signal_connect (destroy => sub{
 
 
                $emulate->object_add_attribute("active_setting",undef,undef);
                $emulate->object_add_attribute("active_setting",undef,undef);
Line 283... Line 277...
                #check if sof file has been selected
                #check if sof file has been selected
                my $s=get_sof_file_full_addr($emulate,$sample);
                my $s=get_sof_file_full_addr($emulate,$sample);
                #check if injection ratios are valid
                #check if injection ratios are valid
                my $r=$emulate->object_get_attribute($sample,"ratios");
                my $r=$emulate->object_get_attribute($sample,"ratios");
                if(defined $s && defined $r) {
                if(defined $s && defined $r) {
                                $set_win->destroy;
                                $set_win->hide;
                                #$emulate->object_add_attribute("active_setting",undef,undef);
                                $emulate->object_add_attribute("active_setting",undef,undef);
                                set_gui_status($emulate,"ref",1);
                                set_gui_status($emulate,"ref",1);
                } else {
                } else {
 
 
                        if(!defined $s){
                        if(!defined $s){
                                my $m=($mode eq 'simulate') ? "Please select NoC verilated file" : "Please select sof file!";
                                my $m=($mode eq 'simulate') ? "Please select NoC verilated file" : "Please select sof file!";
Line 307... Line 301...
#####################
#####################
#               gen_widgets_column
#               gen_widgets_column
###################      
###################      
 
 
sub gen_emulation_column {
sub gen_emulation_column {
        my ($emulate,$mode, $row_num,$info,@charts)=@_;
        my ($emulate,$mode, $row_num,$info,$set_win,@charts)=@_;
        my $table=def_table($row_num,10,FALSE);
        my $table=def_table($row_num,10,FALSE);
 
        if(!defined $set_win){
 
                $set_win=def_popwin_size(40,80,"NoC configuration setting",'percent');
 
                $set_win->signal_connect (delete_event => sub {$emulate->object_add_attribute("active_setting",undef,undef); $set_win->hide_on_delete });
 
 
        my $set_win=def_popwin_size(40,80,"NoC configuration setting",'percent');
        } else{
 
                my @childs = $set_win->get_children;
 
                foreach my $c (@childs){ $c->destroy;}
 
        }
        my $scrolled_win = gen_scr_win_with_adjst ($emulate,"emulation_column");
        my $scrolled_win = gen_scr_win_with_adjst ($emulate,"emulation_column");
        $scrolled_win->add_with_viewport($table);
        add_widget_to_scrolled_win($table,$scrolled_win);
        my $row=0;
        my $row=0;
 
 
        #title  
        #title  
        my $title_l =($mode eq "simulate" ) ? "NoC Simulator" : "NoC Emulator";
        my $title_l =($mode eq "simulate" ) ? "NoC Simulator" : "NoC Emulator";
        my $title=gen_label_in_center($title_l);
        my $title=gen_label_in_center($title_l);
        $table->attach ($title , 0, 10,  $row, $row+1,'expand','shrink',2,2); $row++;
        $table->attach ($title , 0, 10,  $row, $row+1,'expand','shrink',2,2); $row++;
        my $separator = Gtk2::HSeparator->new;
        add_Hsep_to_table($table,0,10,$row);$row++;
        $table->attach ($separator , 0, 10 , $row, $row+1,'fill','fill',2,2);    $row++;
 
 
 
 
 
        my @positions=(0,1,2,3,4,5,6,7);
 
        my $col=0;
 
 
 
        my @title=("Name","Traffic", " Add/Remove "," Setting ", "Line\'s color", "Clear","Run");
        my %order;
        foreach my $t (@title){
        $order{'+/-'}=0;
                $table->attach (gen_label_in_center($title[$col]), $positions[$col], $positions[$col+1], $row, $row+1,'expand','shrink',2,2);$col++;
        $order{'Setting'}=1;
 
        $order{'Run'}=2;
 
        $order{'Name'}=3;
 
        $order{'Color'}=4;
 
        $order{'Clear'}=5;
 
        $order{'Traffic'}=6;
 
        $order{'Done'}=7;
 
 
 
        foreach my $t (sort keys %order){
 
                $table->attach (gen_label_in_center($t), $order{$t}, $order{$t}+1, $row, $row+1,'expand','shrink',2,2);
        }
        }
 
 
        my $traffics="Random,Transposed 1,Transposed 2,Tornado";
        my $traffics="Random,Transposed 1,Transposed 2,Tornado";
 
 
        $col=0;
 
        $row++;
        $row++;
        @positions=(0,2,3,4,5,6,7,8);
 
 
 
 
 
        #my $i=0;
        #my $i=0;
        my $active=$emulate->object_get_attribute("active_setting",undef);
        my $active=$emulate->object_get_attribute("active_setting",undef);
        my @samples;
        my @samples;
        @samples =$emulate->object_get_attribute_order("samples");
        @samples =$emulate->object_get_attribute_order("samples");
 
 
 
 
 
 
        foreach my $ss (@samples){
        foreach my $ss (@samples){
 
 
                $col=0;
 
                my $sample=$ss;
                my $sample=$ss;
                #my $sample="sample$i";
                #my $sample="sample$i";
                #my $n=$i;
                #my $n=$i;
 
 
                my $name=$emulate->object_get_attribute($sample,"line_name");
                my $name=$emulate->object_get_attribute($sample,"line_name");
Line 378... Line 387...
                                my ($topology, $T1, $T2, $T3, $V, $Fpay) = get_sample_emulation_param($emulate,$sample);
                                my ($topology, $T1, $T2, $T3, $V, $Fpay) = get_sample_emulation_param($emulate,$sample);
                                $emulate->object_add_attribute('noc_param','T1',$T1);
                                $emulate->object_add_attribute('noc_param','T1',$T1);
                                $emulate->object_add_attribute('noc_param','T2',$T2);
                                $emulate->object_add_attribute('noc_param','T2',$T2);
                                $emulate->object_add_attribute('noc_param','T3',$T3);
                                $emulate->object_add_attribute('noc_param','T3',$T3);
                                $emulate->object_add_attribute('noc_param','TOPOLOGY',$topology);
                                $emulate->object_add_attribute('noc_param','TOPOLOGY',$topology);
                                my $pattern=get_synthetic_traffic_pattern($emulate, $sample);
                                my $pattern="";
 
                                my $traffictype=$emulate->object_get_attribute($sample,"TRAFFIC_TYPE");
 
                                $pattern=get_synthetic_traffic_pattern($emulate, $sample) if($traffictype eq "Synthetic");
 
                                $pattern=" Custom traffic based on input file. " if($traffictype eq "Task-graph");
 
 
                                my $window = def_popwin_size(40,40,"Traffic pattern",'percent');
                                my $window = def_popwin_size(40,40,"Traffic pattern",'percent');
                                my ($outbox,$tview)= create_text();
                                my ($outbox,$tview)= create_txview();
                                show_info(\$tview,"$pattern");
                                show_info($tview,"$pattern");
                                $window->add ($outbox);
                                $window->add ($outbox);
                                $window->show_all();
                                $window->show_all();
 
 
                 });
                 });
 
 
 
 
                 $table->attach ($l, $positions[$col], $positions[$col]+1, $row, $row+1,'expand','shrink',2,2);
                 $table->attach ($l, $order{'Name'}, $order{'Name'}+1, $row, $row+1,'expand','shrink',2,2);
                 $table->attach ($traffic, $positions[$col]+1, $positions[$col+1], $row, $row+1,'expand','shrink',2,2);
                 $table->attach ($traffic, $order{'Traffic'}, $order{'Traffic'}+1, $row, $row+1,'expand','shrink',2,2);
                 $col++;
 
 
 
                } else {
                } else {
                        $l=gen_label_in_left("Define NoC configuration");
                        $l=gen_label_in_left("Define NoC configuration");
                        $l->set_markup("<span  foreground= 'red' ><b>Define NoC configuration</b></span>");
                        $l->set_markup("<span  foreground= 'red' ><b>Define NoC configuration</b></span>");
                        $table->attach ($l, $positions[$col], $positions[$col+1], $row, $row+1,'expand','shrink',2,2);$col++;
                        $table->attach ($l, $order{'Name'}, $order{'Name'}+1, $row, $row+1,'expand','shrink',2,2);
                }
                }
                #my $box=def_pack_hbox(FALSE,0,(gen_label_in_left("$i- "),$l,$set));
 
 
 
 
 
                #remove 
                #remove 
                my $remove=def_image_button("icons/cancel.png");
                my $remove=def_image_button("icons/cancel.png");
                $table->attach ($remove, $positions[$col], $positions[$col+1], $row, $row+1,'expand','shrink',2,2);$col++;
                $table->attach ($remove,$order{'+/-'},$order{'+/-'}+1, $row, $row+1,'expand','shrink',2,2);
                $remove->signal_connect("clicked"=> sub{
                $remove->signal_connect("clicked"=> sub{
                        $emulate->object_delete_attribute_order("samples",$sample);
                        $emulate->object_delete_attribute_order("samples",$sample);
                        set_gui_status($emulate,"ref",2);
                        set_gui_status($emulate,"ref",2);
                });
                });
 
 
                #setting
                #setting
                my $set=def_image_button("icons/setting.png");
                my $set=def_image_button("icons/setting.png");
                $table->attach ($set, $positions[$col], $positions[$col+1], $row, $row+1,'expand','shrink',2,2);$col++;
                $table->attach ($set, $order{'Setting'}, $order{'Setting'}+1, $row, $row+1,'expand','shrink',2,2);
 
 
 
 
                if(defined $active){#The setting windows ask for refershing so open it again
                if(defined $active){#The setting windows ask for refershing so open it again
                        get_noc_configuration($emulate,$mode,$sample,$set_win) if       ($active eq $sample);
                        get_noc_configuration($emulate,$mode,$sample,$set_win) if       ($active eq $sample);
                }
                }
Line 432... Line 444...
                if(!defined $color_num){
                if(!defined $color_num){
                        $color_num = (scalar @samples) +1;
                        $color_num = (scalar @samples) +1;
                        $emulate->object_add_attribute($sample,"color",$color_num);
                        $emulate->object_add_attribute($sample,"color",$color_num);
                }
                }
                my $color=def_colored_button("    ",$color_num);
                my $color=def_colored_button("    ",$color_num);
                $table->attach ($color, $positions[$col], $positions[$col+1], $row, $row+1,'expand','shrink',2,2);$col++;
                $table->attach ($color, $order{'Color'}, $order{'Color'}+1, $row, $row+1,'fill','fill',2,2);
 
 
 
 
 
 
                $color->signal_connect("clicked"=> sub{
                $color->signal_connect("clicked"=> sub{
                        get_color_window($emulate,$sample,"color");
                        get_color_window($emulate,$sample,"color");
                });
                });
 
 
Line 451... Line 461...
                                #print "\$emulate->object_add_attribute ($sample,$chart->{result_name}_result,undef);";
                                #print "\$emulate->object_add_attribute ($sample,$chart->{result_name}_result,undef);";
 
 
                        }
                        }
                        set_gui_status($emulate,"ref",2);
                        set_gui_status($emulate,"ref",2);
                });
                });
                $table->attach ($clear, $positions[$col], $positions[$col+1], $row, $row+1,'expand','shrink',2,2);$col++;
                $table->attach ($clear, $order{'Clear'}, $order{'Clear'}+1, $row, $row+1,'expand','shrink',2,2);
                #run/pause
                #run/pause
                my $run = def_image_button('icons/run.png',undef);
                my $run = def_image_button('icons/run.png',undef);
                $table->attach ($run, $positions[$col], $positions[$col+1], $row, $row+1,'expand','shrink',2,2);$col++;
                $table->attach ($run, $order{'Run'}, $order{'Run'}+1, $row, $row+1,'expand','shrink',2,2);
                $run->signal_connect("clicked"=> sub{
                $run->signal_connect("clicked"=> sub{
                        $emulate->object_add_attribute ($sample,"status","run");
                        $emulate->object_add_attribute ($sample,"status","run");
                        #start the emulator if it is not running        
                        #start the emulator if it is not running        
                        my $status= $emulate->object_get_attribute('status',undef);
                        my $status= $emulate->object_get_attribute('status',undef);
                        if($status ne 'run'){
                        if($status ne 'run'){
Line 469... Line 479...
                        }
                        }
 
 
                });
                });
 
 
                my $image = gen_noc_status_image($emulate,$sample);
                my $image = gen_noc_status_image($emulate,$sample);
 
                $table->attach ($image, $order{'Done'},$order{'Done'}+1, $row, $row+1,'expand','shrink',2,2);
                $table->attach ($image, $positions[$col], $positions[$col+1], $row, $row+1,'expand','shrink',2,2);
 
 
 
 
 
                $row++;
                $row++;
 
 
        }
        }
        # add new simulation
        # add new simulation
        my $add=def_image_button("icons/plus.png", );
 
        $table->attach ($add, $positions[1], $positions[2], $row, $row+1,'expand','shrink',2,2);
        my $add=def_image_button("icons/plus.png",' A_dd ',FALSE,1);
 
        $table->attach ($add, $order{'+/-'},$order{'+/-'}+2, $row, $row+1,'expand','shrink',2,2);
 
 
 
 
 
 
        $add->signal_connect("clicked"=> sub{
        $add->signal_connect("clicked"=> sub{
                my $n=$emulate->object_get_attribute("id",undef);
                my $n=$emulate->object_get_attribute("id",undef);
                $n=0 if (!defined $n);
                $n=0 if (!defined $n);
                my $sample="sample$n";
                my $sample="sample$n";
Line 494... Line 505...
                set_gui_status($emulate,"ref",1);
                set_gui_status($emulate,"ref",1);
 
 
        });
        });
 
 
 
 
 
 
        return ($scrolled_win,$set_win);
        return ($scrolled_win,$set_win);
}
}
 
 
 
 
 
 
Line 533... Line 545...
                        my $pp= do $sof_info ;
                        my $pp= do $sof_info ;
 
 
                        my $p=$pp->{'noc_param'};
                        my $p=$pp->{'noc_param'};
 
 
                        $status=0 if $@;
                        $status=0 if $@;
                        message_dialog("Error reading: $@") if $@;
                        message_dialog("Error reading: $@",'error') if $@;
                        if ($status==1){
                        if ($status==1){
                                $emulate->object_add_attribute ($sample,"noc_info",$p) ;
                                $emulate->object_add_attribute ($sample,"noc_info",$p) ;
 
 
 
 
                        }
                        }
Line 547... Line 559...
        return $status;
        return $status;
}
}
 
 
 
 
 
 
##########
 
#  run external commands
 
##########
 
 
 
sub run_cmd_in_back_ground
 
{
 
  my $command = shift;
 
  #print "\t$command\n";
 
 
 
  ### Start running the Background Job:
 
    my $proc = Proc::Background->new($command);
 
    my $PID = $proc->pid;
 
    my $start_time = $proc->start_time;
 
    my $alive = $proc->alive;
 
 
 
  ### While $alive is NOT '0', then keep checking till it is...
 
  #  *When $alive is '0', it has finished executing.
 
  while($alive ne 0)
 
  {
 
    $alive = $proc->alive;
 
 
 
    # This while loop will cause Gtk2 to conti processing events, if
 
    # there are events pending... *which there are...
 
    while (Gtk2->events_pending) {
 
      Gtk2->main_iteration;
 
    }
 
    Gtk2::Gdk->flush;
 
 
 
    usleep(1000);
 
  }
 
 
 
  my $end_time = $proc->end_time;
 
 # print "*Command Completed at $end_time, with PID = $PID\n\n";
 
 
 
  # Since the while loop has exited, the BG job has finished running:
 
  # so close the pop-up window...
 
 # $popup_window->hide;
 
 
 
  # Get the RETCODE from the Background Job using the 'wait' method
 
  my $retcode = $proc->wait;
 
  $retcode /= 256;
 
 
 
  print "\t*RETCODE == $retcode\n\n";
 
  Gtk2::Gdk->flush;
 
  ### Check if the RETCODE returned with an Error:
 
  if ($retcode ne 0) {
 
    print "Error: The Background Job ($command) returned with an Error...!\n";
 
    return 1;
 
  } else {
 
    #print "Success: The Background Job Completed Successfully...!\n";
 
    return 0;
 
  }
 
 
 
}
 
 
 
 
 
 
 
 
 
sub run_cmd_in_back_ground_get_stdout
 
{
 
        my $cmd=shift;
 
        my $exit;
 
        my ($stdout, $stderr);
 
        capture { $exit=run_cmd_in_back_ground($cmd) } \$stdout, \$stderr;
 
        return ($stdout,$exit,$stderr);
 
 
 
}
 
 
 
 
 
#############
#############
#  images
#  images
##########
##########
Line 630... Line 579...
                        my($width,$hight)=max_win_size();
                        my($width,$hight)=max_win_size();
                        my $image=($width>=1600)? "icons/hamster_l.gif":
                        my $image=($width>=1600)? "icons/hamster_l.gif":
                                  ($width>=1200)? "icons/hamster_m.gif": "icons/hamster_s.gif";
                                  ($width>=1200)? "icons/hamster_m.gif": "icons/hamster_s.gif";
 
 
                        return show_gif ($image);
                        return show_gif ($image);
                } elsif ($status eq 'programer_failed') {
                } elsif ($status eq 'programmer_failed') {
                        return show_gif ("icons/Error.png");
                        return show_gif ("icons/Error.png");
                }
                }
 
 
}
}
 
 
Line 644... Line 593...
sub gen_noc_status_image {
sub gen_noc_status_image {
        my ($emulate,$sample)=@_;
        my ($emulate,$sample)=@_;
        my   $status= $emulate->object_get_attribute ($sample,"status");
        my   $status= $emulate->object_get_attribute ($sample,"status");
         $status='' if(!defined  $status);
         $status='' if(!defined  $status);
        my $image;
        my $image;
        my $vbox = Gtk2::HBox->new (TRUE,1);
        my $box = def_hbox(TRUE,1);
        $image = Gtk2::Image->new_from_file ("icons/load.gif") if($status eq "run");
        $image = new_image_from_file ("icons/load.gif") if($status eq "run");
        $image = def_icon("icons/button_ok.png") if($status eq "done");
        $image = def_icon("icons/button_ok.png") if($status eq "done");
        $image = def_icon("icons/warning.png") if($status eq "failed");
        $image = def_icon("icons/warning.png") if($status eq "failed");
        #$image_file = "icons/load.gif" if($status eq "run");
 
 
 
        if (defined $image) {
        if (defined $image) {
                my $align = Gtk2::Alignment->new (0.5, 0.5, 0, 0);
                $box->pack_start (add_frame_to_image($image), FALSE, FALSE, 0);
        my $frame = Gtk2::Frame->new;
 
                $frame->set_shadow_type ('in');
 
                # Animation
 
                $frame->add ($image);
 
                $align->add ($frame);
 
                $vbox->pack_start ($align, FALSE, FALSE, 0);
 
        }
        }
        return $vbox;
        return $box;
 
 
}
}
 
 
 
 
############
############
Line 683... Line 625...
#       my ($stdout,$exit)=run_cmd_in_back_ground_get_stdout("$cmd");
#       my ($stdout,$exit)=run_cmd_in_back_ground_get_stdout("$cmd");
#       my @matches= ($stdout =~ /USB-Blaster.*/g);
#       my @matches= ($stdout =~ /USB-Blaster.*/g);
#       my $usb_blaster=$matches[0];
#       my $usb_blaster=$matches[0];
#       if (!defined $usb_blaster){
#       if (!defined $usb_blaster){
#               add_info($info, "jtagconfig could not find any USB blaster cable: $stdout \n");
#               add_info($info, "jtagconfig could not find any USB blaster cable: $stdout \n");
#               $emulate->object_add_attribute('status',undef,'programer_failed');
#               $emulate->object_add_attribute('status',undef,'programmer_failed');
#               set_gui_status($emulate,"ref",2);
#               set_gui_status($emulate,"ref",2);
#               #/***/
#               #/***/
#               return; 
#               return; 
#       }else{
#       }else{
#               add_info($info, "find $usb_blaster\n");
#               add_info($info, "find $usb_blaster\n");
Line 701... Line 643...
                my @ratios=@{check_inserted_ratios($r)};
                my @ratios=@{check_inserted_ratios($r)};
                #$emulate->object_add_attribute ("sample$i","status","run");                    
                #$emulate->object_add_attribute ("sample$i","status","run");                    
                my $sof=get_sof_file_full_addr($emulate,$sample);
                my $sof=get_sof_file_full_addr($emulate,$sample);
                add_info($info, "Programe FPGA device using $sof.sof\n");
                add_info($info, "Programe FPGA device using $sof.sof\n");
                my ($name,$path,$suffix) = fileparse("$sof",qr"\..[^.]*$");
                my ($name,$path,$suffix) = fileparse("$sof",qr"\..[^.]*$");
                my $programer="$path/program_device.sh";
                my $programmer="$path/program_device.sh";
                my $jtag_intfc="$path/jtag_intfc.sh";
                my $jtag_intfc="$path/jtag_intfc.sh";
                if((-f $programer)==0){
                if((-f $programmer)==0){
                        add_colored_info ($info, " Error: file  \"$programer\"  dose not exist. \n",'red');
                        add_colored_info ($info, " Error: file  \"$programmer\"  dose not exist. \n",'red');
                        $emulate->object_add_attribute('status',undef,'programer_failed');
                        $emulate->object_add_attribute('status',undef,'programmer_failed');
                        $emulate->object_add_attribute ($sample,"status","failed");
                        $emulate->object_add_attribute ($sample,"status","failed");
                        set_gui_status($emulate,"ref",2);
                        set_gui_status($emulate,"ref",2);
                        last;
                        last;
                }
                }
                if((-f $jtag_intfc)==0){
                if((-f $jtag_intfc)==0){
                        add_colored_info ($info, " Error: file  \"$jtag_intfc\"  dose not exist. \n",'red');
                        add_colored_info ($info, " Error: file  \"$jtag_intfc\"  dose not exist. \n",'red');
                        $emulate->object_add_attribute('status',undef,'programer_failed');
                        $emulate->object_add_attribute('status',undef,'programmer_failed');
                        $emulate->object_add_attribute ($sample,"status","failed");
                        $emulate->object_add_attribute ($sample,"status","failed");
                        set_gui_status($emulate,"ref",2);
                        set_gui_status($emulate,"ref",2);
                        last;
                        last;
                }
                }
                my $cmd =  "bash $programer $sof.sof";
                my $cmd =  "bash $programmer $sof.sof";
 
 
 
 
                #my $Quartus_bin=  $ENV{QUARTUS_BIN};
                #my $Quartus_bin=  $ENV{QUARTUS_BIN};
 
 
 
 
Line 730... Line 672...
                #my $output = `$cmd 2>&1 1>/dev/null`;           # either with backticks
                #my $output = `$cmd 2>&1 1>/dev/null`;           # either with backticks
 
 
                #/***/
                #/***/
                my ($stdout,$exit)=run_cmd_in_back_ground_get_stdout("$cmd");
                my ($stdout,$exit)=run_cmd_in_back_ground_get_stdout("$cmd");
                if($exit){#programming FPGA board has failed
                if($exit){#programming FPGA board has failed
                        $emulate->object_add_attribute('status',undef,'programer_failed');
                        $emulate->object_add_attribute('status',undef,'programmer_failed');
                        add_colored_info($info, "$stdout\n",'red');
                        add_colored_info($info, "$stdout\n",'red');
                        $emulate->object_add_attribute ($sample,"status","failed");
                        $emulate->object_add_attribute ($sample,"status","failed");
                        set_gui_status($emulate,"ref",2);
                        set_gui_status($emulate,"ref",2);
                        next;
                        next;
                }
                }
Line 776... Line 718...
#        process_notebook_gen
#        process_notebook_gen
##############
##############
 
 
 
 
sub process_notebook_gen{
sub process_notebook_gen{
                my ($emulate,$info,$mode,@charts)=@_;
                my ($emulate,$info,$mode,$set_win,@charts)=@_;
                my $notebook = Gtk2::Notebook->new;
                my $notebook = gen_notebook();
                $notebook->set_tab_pos ('left');
                $notebook->set_tab_pos ('left');
                $notebook->set_scrollable(TRUE);
                $notebook->set_scrollable(TRUE);
                $notebook->can_focus(FALSE);
                #$notebook->can_focus(FALSE);
 
 
 
 
                my ($page1,$set_win)=gen_emulation_column($emulate, $mode,10,$info,@charts);
                my $page1;
                $notebook->append_page ($page1,Gtk2::Label->new_with_mnemonic ("  _Run emulator  ")) if($mode eq "emulate");
                ($page1,$set_win)=gen_emulation_column($emulate, $mode,10,$info,$set_win,@charts);
                $notebook->append_page ($page1,Gtk2::Label->new_with_mnemonic ("  _Run simulator ")) if($mode eq "simulate");
                $notebook->append_page ($page1,gen_label_with_mnemonic ("  _Run emulator  ")) if($mode eq "emulate");
 
                $notebook->append_page ($page1,gen_label_with_mnemonic ("  _Run simulator ")) if($mode eq "simulate");
 
 
 
 
                my $page2=get_noc_setting_gui ($emulate,$info,$mode);
                my $page2=get_noc_setting_gui ($emulate,$info,$mode);
                my $tt=($mode eq "emulate")? "  _Generate NoC \nEmulation Model" : "  _Generate NoC \nSimulation Model" ;
                my $tt=($mode eq "emulate")? "  _Generate NoC \nEmulation Model" : "  _Generate NoC \nSimulation Model" ;
                $notebook->append_page ($page2,Gtk2::Label->new_with_mnemonic ($tt));
                $notebook->append_page ($page2,gen_label_with_mnemonic ($tt));
 
 
 
 
                #if($mode eq "simulate"){
 
                        #my $page3=gen_custom_traffic ($emulate,$info,$mode);
 
                        #$notebook->append_page ($page3,Gtk2::Label->new_with_mnemonic ("_Generate Custom\n Traffic Pattern"));
 
                #}              
 
 
 
                my $scrolled_win = new Gtk2::ScrolledWindow (undef, undef);
                my $scrolled_win = add_widget_to_scrolled_win($notebook);
                $scrolled_win->set_policy( "automatic", "automatic" );
 
                $scrolled_win->add_with_viewport($notebook);
 
                $scrolled_win->show_all;
                $scrolled_win->show_all;
                my $page_num=$emulate->object_get_attribute ("process_notebook","currentpage");
                my $page_num=$emulate->object_get_attribute ("process_notebook","currentpage");
                $notebook->set_current_page ($page_num) if(defined $page_num);
                $notebook->set_current_page ($page_num) if(defined $page_num);
                $notebook->signal_connect( 'switch-page'=> sub{
                $notebook->signal_connect( 'switch-page'=> sub{
                        $emulate->object_add_attribute ("process_notebook","currentpage",$_[2]);        #save the new pagenumber
                        $emulate->object_add_attribute ("process_notebook","currentpage",$_[2]);        #save the new pagenumber
Line 817... Line 754...
 
 
sub get_noc_setting_gui {
sub get_noc_setting_gui {
        my ($emulate,$info_text,$mode)=@_;
        my ($emulate,$info_text,$mode)=@_;
        my $table=def_table(20,10,FALSE);#      my ($row,$col,$homogeneous)=@_;
        my $table=def_table(20,10,FALSE);#      my ($row,$col,$homogeneous)=@_;
 
 
 
 
        my $scrolled_win = gen_scr_win_with_adjst ($emulate,"noc_setting_gui");
        my $scrolled_win = gen_scr_win_with_adjst ($emulate,"noc_setting_gui");
        $scrolled_win->add_with_viewport($table);
        add_widget_to_scrolled_win($table,$scrolled_win);
        my $row=noc_config ($emulate,$table);
        my $row=noc_config ($emulate,$table,$info_text);
 
 
        my($label,$param,$default,$content,$type,$info);
        my($label,$param,$default,$content,$type,$info);
        my @dirs = grep {-d} glob("../boards/*");
        my @dirs = grep {-d} glob("../boards/Altera/*");
        my $fpgas;
        my $fpgas;
        foreach my $dir (@dirs) {
        foreach my $dir (@dirs) {
                my ($name,$path,$suffix) = fileparse("$dir",qr"\..[^.]*$");
                my ($name,$path,$suffix) = fileparse("$dir",qr"\..[^.]*$");
                $default=$name;
                $default=$name;
                $fpgas= (defined $fpgas)? "$fpgas,$name" : "$name";
                $fpgas= (defined $fpgas)? "$fpgas,$name" : "$name";
Line 844... Line 782...
        else {
        else {
                @fpgainfo = (
                @fpgainfo = (
                { label=>'Pck. injector FIFO Width:', param_name=>'TIMSTMP_FIFO_NUM', type=>'Spin-button', default_val=>16, content=>"2,128,2", info=>"Packet injectors' timestamp FIFO width. In case a packet cannot be injected according to the desired injection ratio, the current system time is saved in a FIFO and then at injection time it will be read and attached to the packet. The larger FIFO width results in more accurate latency calculation." , param_parent=>'fpga_param', ref_delay=> undef},
                { label=>'Pck. injector FIFO Width:', param_name=>'TIMSTMP_FIFO_NUM', type=>'Spin-button', default_val=>16, content=>"2,128,2", info=>"Packet injectors' timestamp FIFO width. In case a packet cannot be injected according to the desired injection ratio, the current system time is saved in a FIFO and then at injection time it will be read and attached to the packet. The larger FIFO width results in more accurate latency calculation." , param_parent=>'fpga_param', ref_delay=> undef},
                { label=>'Save as:', param_name=>'SAVE_NAME', type=>"Entry", default_val=>'simulate1', content=>undef, info=>undef, param_parent=>'sim_param', ref_delay=>undef},
                { label=>'Save as:', param_name=>'SAVE_NAME', type=>"Entry", default_val=>'simulate1', content=>undef, info=>undef, param_parent=>'sim_param', ref_delay=>undef},
                { label=>"Project directory", param_name=>"BIN_DIR", type=>"DIR_path", default_val=>"$ENV{'PRONOC_WORK'}/simulate", content=>undef, info=>"Define the working directory for generating simulation executable binarry file", param_parent=>'sim_param',ref_delay=>undef },
                { label=>"Project directory", param_name=>"BIN_DIR", type=>"DIR_path", default_val=>"$ENV{'PRONOC_WORK'}/simulate", content=>undef, info=>"Define the working directory for generating simulation executable binarry file", param_parent=>'sim_param',ref_delay=>undef },
 
 
                );
                );
        }
        }
 
 
        my $coltmp=0;
        my $coltmp=0;
        foreach my $d (@fpgainfo) {
        foreach my $d (@fpgainfo) {
                ($row,$coltmp)=add_param_widget  ($emulate, $d->{label}, $d->{param_name}, $d->{default_val}, $d->{type}, $d->{content}, $d->{info}, $table,$row,undef,1, $d->{param_parent}, $d->{ref_delay});
                ($row,$coltmp)=add_param_widget  ($emulate, $d->{label}, $d->{param_name}, $d->{default_val}, $d->{type}, $d->{content}, $d->{info}, $table,$row,undef,1, $d->{param_parent}, $d->{ref_delay});
        }
        }
 
 
 
        my $maintable=def_table(20,10,FALSE);#  my ($row,$col,$homogeneous)=@_;
 
 
        my $generate = def_image_button('icons/gen.png','Gener_ate',FALSE,1);
        my $generate = def_image_button('icons/gen.png','Gener_ate',FALSE,1);
        my $diagram  = def_image_button('icons/diagram.png','Diagram');
        my $diagram  = def_image_button('icons/diagram.png','Diagram');
        $table->attach ($generate, 0,2, $row, $row+1,'expand','shrink',2,2);
        my $import   = def_image_button('icons/import.png','I_mport',FALSE,1);
        $table->attach ($diagram, 2,4, $row, $row+1,'expand','shrink',2,2);
        set_tip($import ,"Import NoC configuration from file");
 
 
 
        $maintable->attach_defaults ($scrolled_win, 0,10, 0, 9);
 
        $maintable->attach_defaults (gen_Hsep(), 0,10, 8, 9);
 
        $maintable->attach ($generate, 0,2, 9, 10,'expand','shrink',2,2);
 
        $maintable->attach ($diagram, 2,4, 9, 10,'expand','shrink',2,2);
 
        $maintable->attach ($import, 4,6, 9, 10,'expand','shrink',2,2);
 
 
 
 
    $diagram-> signal_connect("clicked" => sub{
    $diagram-> signal_connect("clicked" => sub{
        show_topology_diagram ($emulate);
        show_topology_diagram ($emulate);
    });
    });
    $generate->signal_connect ('clicked'=> sub{
    $generate->signal_connect ('clicked'=> sub{
                generate_sof_file($emulate,$info_text) if($mode eq "emulate");
                generate_sof_file($emulate,$info_text) if($mode eq "emulate");
                generate_sim_bin_file($emulate,$info_text) if($mode eq "simulate");
                generate_sim_bin_file($emulate,$info_text) if($mode eq "simulate");
 
 
        });
        });
 
 
        return $scrolled_win;
        $import-> signal_connect("clicked" => sub{
 
                import_noc_info_file($emulate,$mode);
 
        });
 
 
 
        $scrolled_win->show_all;
 
        return $maintable;
 
}
 
 
 
sub import_noc_info_file{
 
        my ($self,$mode)=@_;
 
        my $file;
 
        my $dialog = gen_file_dialog(undef,'inf');
 
 
 
        my $open_in       = ($mode ne "emulate" ) ? abs_path("$ENV{'PRONOC_WORK'}/simulate") : abs_path("$ENV{'PRONOC_WORK'}/emulate");
 
        $dialog->set_current_folder ($open_in);
 
        if ( "ok" eq $dialog->run ) {
 
                my $status=1;
 
                $file = $dialog->get_filename;
 
                my $pp= do $file ;
 
                my $p=$pp->{'noc_param'};
 
                $status=0 if $@;
 
                message_dialog("Error reading: $@") if $@;
 
                if ($status==1){
 
                        $self->object_add_attribute ("noc_param",undef,$p);
 
                        my ($name,$path,$suffix) = fileparse("$file",qr"\..[^.]*$");
 
                        my $attr1 = ($mode ne "emulate" ) ? 'sim_param' : 'fpga_param';
 
                        $self->object_add_attribute ($attr1,'SAVE_NAME',$name);
 
 
 
                        set_gui_status($self,"ref",1);
 
                }
 
        }
 
        $dialog->destroy;
}
}
 
 
##########
##########
#       generate_sof_file
#       generate_sof_file
##########
##########
Line 885... Line 865...
                message_dialog("Please define the Save as filed!");
                message_dialog("Please define the Save as filed!");
                return;
                return;
        }
        }
 
 
        #copy all noc source codes
        #copy all noc source codes
        my @files = split(/\s*,\s*/,EMULATION_RTLS);
        my @files = (
 
'/mpsoc/rtl/src_emulate/rtl/',
 
'/mpsoc/rtl/src_peripheral/jtag/jtag_wb/',
 
'/mpsoc/rtl/src_peripheral/ram/',
 
'/mpsoc/rtl/main_comp.v',
 
'/mpsoc/rtl/arbiter.v',
 
'/mpsoc/rtl/src_topolgy/',
 
'/mpsoc/rtl/src_noc/');
 
 
        my $dir = Cwd::getcwd();
        my $dir = Cwd::getcwd();
        my $project_dir   = abs_path("$dir/../../");
        my $project_dir   = abs_path("$dir/../../");
        my ($stdout,$exit)=run_cmd_in_back_ground_get_stdout("mkdir -p $target_dir/src_verilog" );
        my ($stdout,$exit)=run_cmd_in_back_ground_get_stdout("mkdir -p $target_dir/src_verilog" );
        copy_file_and_folders(\@files,$project_dir,"$target_dir/src_verilog/lib/");
        copy_file_and_folders(\@files,$project_dir,"$target_dir/src_verilog/lib/");
 
 
 
 
        #generate parameters for emulator_top.v file
        #generate parameters for emulator_top.v file
        my ($localparam, $pass_param)=gen_noc_param_v( $self);
        gen_noc_localparam_v_file($self,"$target_dir/src_verilog/lib/src_noc/");
        open(FILE,  ">$target_dir/src_verilog/noc_parameters.v") || die "Can not open: $!";
 
        print FILE $localparam;
 
        close(FILE) || die "Error closing file: $!";
 
        open(FILE,  ">$target_dir/src_verilog/pass_parameters.v") || die "Can not open: $!";
 
        print FILE $pass_param;
 
        my $fifow=$self->object_get_attribute('fpga_param','TIMSTMP_FIFO_NUM');
 
        print FILE ",.TIMSTMP_FIFO_NUM($fifow)\n";
 
        close(FILE) || die "Error closing file: $!";
 
        open(FILE,  ">$top") || die "Can not open: $!";
        open(FILE,  ">$top") || die "Can not open: $!";
        print FILE create_emulate_top($self,$name,$top);
        print FILE create_emulate_top($self,$name,$top);
        close(FILE) || die "Error closing file: $!";
        close(FILE) || die "Error closing file: $!";
        select_compiler($self,$name,$top,$target_dir,\&save_the_sof_file);
        select_compiler($self,$name,$top,$target_dir,\&save_the_sof_file);
 
 
Line 934... Line 915...
                PATTERN_VJTAG_INDEX=125,
                PATTERN_VJTAG_INDEX=125,
                COUNTER_VJTAG_INDEX=126,
                COUNTER_VJTAG_INDEX=126,
                DONE_RESET_VJTAG_INDEX=127;
                DONE_RESET_VJTAG_INDEX=127;
 
 
 
 
        //NoC parameters will be defined by user
 
        `define NOC_PARAM
 
        `include \"noc_parameters.v\"
 
 
 
        wire  reset_noc, reset_injector, reset_noc_sync, reset_injector_sync, done;
        wire  reset_noc, reset_injector, reset_noc_sync, reset_injector_sync, done;
        wire jtag_reset_injector, jtag_reset_noc;
        wire jtag_reset_injector, jtag_reset_noc;
        wire start_o;
        wire start_o;
        wire done_time_limit;
        wire done_time_limit;
Line 981... Line 960...
 
 
        //noc emulator
        //noc emulator
 
 
        noc_emulator #(
        noc_emulator #(
        .STATISTIC_VJTAG_INDEX(STATISTIC_VJTAG_INDEX),
        .STATISTIC_VJTAG_INDEX(STATISTIC_VJTAG_INDEX),
        .PATTERN_VJTAG_INDEX(PATTERN_VJTAG_INDEX),
                .PATTERN_VJTAG_INDEX(PATTERN_VJTAG_INDEX)
        `include \"pass_parameters.v\"
 
 
 
        )
        )
        noc_emulate_top
        noc_emulate_top
        (
        (
                .reset(reset_noc_sync),
                .reset(reset_noc_sync),
                .jtag_ctrl_reset(reset_injector_sync),
                .jtag_ctrl_reset(reset_injector_sync),
Line 1062... Line 1039...
                 ->name( '*.sof' )
                 ->name( '*.sof' )
                 ->in( "$target_dir" );
                 ->in( "$target_dir" );
        copy($files[0],"$sofdir/$fpga_board/$name.sof") or do {
        copy($files[0],"$sofdir/$fpga_board/$name.sof") or do {
                my $err= "Error copy($files[0] , $sofdir/$fpga_board/$name.sof";
                my $err= "Error copy($files[0] , $sofdir/$fpga_board/$name.sof";
                print "$err\n";
                print "$err\n";
                message_dialog($err);
                message_dialog($err,'error');
                return;
                return;
        };
        };
        #copy the board's programming and jtag interface files
        #copy the board's programming and jtag interface files
 
 
        my $board_name=$self->object_get_attribute('compile','board');
        my $board_name=$self->object_get_attribute('compile','board');
        #copy board jtag_intfc.sh file 
        #copy board jtag_intfc.sh file 
        copy("../boards/$board_name/jtag_intfc.sh","$sofdir/$fpga_board/jtag_intfc.sh");
        copy("../boards/Altera/$board_name/jtag_intfc.sh","$sofdir/$fpga_board/jtag_intfc.sh");
        #print "../boards/$board_name/jtag_intfc.sh","$sofdir/$fpga_board/jtag_intfc.sh\n";
        #print "../boards/$board_name/jtag_intfc.sh","$sofdir/$fpga_board/jtag_intfc.sh\n";
        #add argument run to jtag_interface file 
        #add argument run to jtag_interface file 
        my $runarg='
        my $runarg='
 
 
if [ $# -ne 0 ]
if [ $# -ne 0 ]
Line 1085... Line 1062...
 
 
 
 
 
 
 
 
        #copy board program_device.sh file 
        #copy board program_device.sh file 
        copy("../boards/$board_name/program_device.sh","$sofdir/$fpga_board/program_device.sh");
        copy("../boards/Altera/$board_name/program_device.sh","$sofdir/$fpga_board/program_device.sh");
 
 
 
 
 
 
        message_dialog("sof file has been generated successfully");
        message_dialog("sof file has been generated successfully");
}
}
Line 1122... Line 1099...
############
############
 
 
sub load_emulation {
sub load_emulation {
        my ($emulate,$info)=@_;
        my ($emulate,$info)=@_;
        my $file;
        my $file;
        my $dialog = Gtk2::FileChooserDialog->new(
        my $dialog =  gen_file_dialog (undef, 'EML');
                'Select a File', undef,
 
                'open',
 
                'gtk-cancel' => 'cancel',
 
                'gtk-ok'     => 'ok',
 
                );
 
 
 
        my $filter = Gtk2::FileFilter->new();
 
        $filter->set_name("EML");
 
        $filter->add_pattern("*.EML");
 
        $dialog->add_filter ($filter);
 
        my $dir = Cwd::getcwd();
        my $dir = Cwd::getcwd();
        $dialog->set_current_folder ("$dir/lib/emulate");
        $dialog->set_current_folder ("$dir/lib/emulate");
 
 
 
 
        if ( "ok" eq $dialog->run ) {
        if ( "ok" eq $dialog->run ) {
                $file = $dialog->get_filename;
                $file = $dialog->get_filename;
                my ($name,$path,$suffix) = fileparse("$file",qr"\..[^.]*$");
                my ($name,$path,$suffix) = fileparse("$file",qr"\..[^.]*$");
                if($suffix eq '.EML'){
                if($suffix eq '.EML'){
 
 
Line 1169... Line 1135...
        else {$results{$x}{$y}=$z;}
        else {$results{$x}{$y}=$z;}
        $self->object_add_attribute ($sample,$name,\%results);
        $self->object_add_attribute ($sample,$name,\%results);
}
}
 
 
 
 
sub capture_cores_data {
 
        my ($data,$text)=@_;
 
        my %result;
 
        my @q =split  (/Core/,$text);
 
        my $i=0;
 
        foreach my $p (@q){
 
                if ($i!=0){
 
                        my @d = split (/[^0-9. ]/,$p);
 
                        my $n=  $d[0];
 
                        my $val = capture_number_after("$data",$p);
 
                        $result{remove_all_white_spaces($n)}=remove_all_white_spaces($val);
 
                }
 
                $i++;
 
        }
 
        return %result;
 
}
 
 
 
sub gen_sim_parameter_h {
sub gen_sim_parameter_h {
        my ($param_h,$includ_h,$ne,$nr,$router_p,$fifow)=@_;
        my ($param_h,$includ_h,$ne,$nr,$router_p,$fifow)=@_;
 
 
        $param_h =~ s/\d\'b/ /g;
        $param_h =~ s/\d\'b/ /g;
Line 1200... Line 1151...
 
 
        #define NE  $ne
        #define NE  $ne
        #define NR  $nr
        #define NR  $nr
        #define ROUTER_P_NUM $router_p
        #define ROUTER_P_NUM $router_p
 
 
 
        extern Vtraffic         *traffic[NE];
 
        extern Vpck_inj     *pck_inj[NE];
 
        extern int reset,clk;
 
 
        //simulation parameter
        //simulation parameter
        #define MAX_RATIO   ".MAX_RATIO."
        #define MAX_RATIO   ".MAX_RATIO."
        #define AVG_LATENCY_METRIC \"HEAD_2_TAIL\"
        #define AVG_LATENCY_METRIC \"HEAD_2_TAIL\"
        #define TIMSTMP_FIFO_NUM   $fifow
        #define TIMSTMP_FIFO_NUM   $fifow
 
 
        $includ_h
        $includ_h
\n \n \#endif" ;
\n \n \#endif" ;
        return $text;
        return $text;
}
}
 
 
sub gen_vrouter_param_v {
sub gen_noc_sim_param {
        my ($simulate,$src_verilog_dr)=@_;
        my $simulate=shift;
        # generate NoC parameter file
 
        my ($noc_param,$pass_param)=gen_noc_param_v($simulate);
 
        open(FILE,  ">$src_verilog_dr/parameter.v") || die "Can not open: $!";
 
        my $fifow=$simulate->object_get_attribute('fpga_param','TIMSTMP_FIFO_NUM');
        my $fifow=$simulate->object_get_attribute('fpga_param','TIMSTMP_FIFO_NUM');
 
 
 
        $fifow= '16' if (!defined $fifow);
 
 
 
        return "
        print FILE  " \`ifdef     INCLUDE_PARAM \n \n
 
        $noc_param
 
 
 
        //simulation parameter
        //simulation parameter
        localparam MAX_RATIO = ".MAX_RATIO.";
        //localparam MAX_RATIO = ".MAX_RATIO.";
        localparam MAX_PCK_NUM = ".MAX_SIM_CLKs.";
        localparam MAX_PCK_NUM = ".MAX_SIM_CLKs.";
        localparam MAX_PCK_SIZ = ".MAX_PCK_SIZ.";
        localparam MAX_PCK_SIZ = ".MAX_PCK_SIZ.";
        localparam MAX_SIM_CLKs=  ".MAX_SIM_CLKs.";
        localparam MAX_SIM_CLKs=  ".MAX_SIM_CLKs.";
        localparam TIMSTMP_FIFO_NUM = $fifow;
        localparam TIMSTMP_FIFO_NUM = $fifow;
 
        ";
 
 
 
}
 
 
 
 
 
sub gen_noc_localparam_v_file {
 
        my ($self,$dst_path,$sample)=@_;
 
        # generate NoC parameter file
 
        my ($noc_param,$pass_param)=gen_noc_param_v($self,$sample);
 
        my $header=autogen_warning().get_license_header("noc_localparam.v");
 
        open(FILE,  ">${dst_path}/noc_localparam.v") || die "Can not open: $!";
 
        my $sim =gen_noc_sim_param($self);
 
        print FILE  "$header
 
 
 
        \`ifdef   NOC_LOCAL_PARAM \n \n
 
        $noc_param
 
 
 
        $sim
 
 
\n \n \`endif" ;
\n \n \`endif" ;
        close FILE;
        close FILE;
}
}
 
 
 
 
Line 1242... Line 1211...
 
 
        add_color_to_gd();
        add_color_to_gd();
        my $emulate= emulator->emulator_new();
        my $emulate= emulator->emulator_new();
        set_gui_status($emulate,"ideal",0);
        set_gui_status($emulate,"ideal",0);
        $emulate->object_add_attribute('compile','compilers',"QuartusII");
        $emulate->object_add_attribute('compile','compilers',"QuartusII");
        my $left_table = Gtk2::Table->new (25, 6, FALSE);
        my $left_table = def_table (25, 6, FALSE);
        my $right_table = Gtk2::Table->new (25, 6, FALSE);
        my $right_table =def_table (25, 6, FALSE);
        my $main_table = Gtk2::Table->new (25, 12, FALSE);
        my $main_table = def_table (25, 12, FALSE);
        my ($infobox,$info)= create_text();
        my ($infobox,$info)= create_txview();
 
 
 
 
 
 
        my @pages =(
        my @pages =(
                {page_name=>" Avg. throughput/latency", page_num=>0},
                {page_name=>" Avg. throughput/latency", page_num=>0},
                {page_name=>" Injected Packet ", page_num=>1},
                {page_name=>" Injected Packet ", page_num=>1},
                {page_name=>" Worst-Case Delay ",page_num=>2},
                {page_name=>" Worst-Case Delay ",page_num=>2},
                {page_name=>" Executaion Time ",page_num=>3},
                {page_name=>" Execution Time ",page_num=>3},
        );
        );
 
 
        my @charts = (
        my @charts = (
                { type=>"2D_line", page_num=>0, graph_name=> "Latency", result_name => "latency_result", X_Title=> 'Desired Avg. Injected Load Per Router (flits/clock (%))', Y_Title=>'Avg. Latency (clock)', Z_Title=>undef, Y_Max=>100},
                { type=>"2D_line", page_num=>0, graph_name=> "Latency", result_name => "latency_result", X_Title=> 'Desired Avg. Injected Load Per Router (flits/clock (%))', Y_Title=>'Avg. Latency (clock)', Z_Title=>undef, Y_Max=>100},
                { type=>"2D_line", page_num=>0, graph_name=> "Throughput", result_name => "throughput_result", X_Title=> 'Desired Avg. Injected Load Per Router (flits/clock (%))', Y_Title=>'Avg. Throughput (flits/clock (%))', Z_Title=>undef},
                { type=>"2D_line", page_num=>0, graph_name=> "Throughput", result_name => "throughput_result", X_Title=> 'Desired Avg. Injected Load Per Router (flits/clock (%))', Y_Title=>'Avg. Throughput (flits/clock (%))', Z_Title=>undef},
Line 1264... Line 1234...
                { type=>"3D_bar",  page_num=>1, graph_name=> "Sent", result_name => "packet_sent_result", X_Title=>'Core ID' , Y_Title=>'Sent Packets Per Router', Z_Title=>undef},
                { type=>"3D_bar",  page_num=>1, graph_name=> "Sent", result_name => "packet_sent_result", X_Title=>'Core ID' , Y_Title=>'Sent Packets Per Router', Z_Title=>undef},
                { type=>"3D_bar",  page_num=>2, graph_name=> "Received", result_name => "worst_delay_rsvd_result",X_Title=>'Core ID' , Y_Title=>'Worst-Case Delay (clk)', Z_Title=>undef},
                { type=>"3D_bar",  page_num=>2, graph_name=> "Received", result_name => "worst_delay_rsvd_result",X_Title=>'Core ID' , Y_Title=>'Worst-Case Delay (clk)', Z_Title=>undef},
                { type=>"2D_line", page_num=>3, graph_name=> "-", result_name => "exe_time_result",X_Title=>'Desired Avg. Injected Load Per Router (flits/clock (%))' , Y_Title=>'Total Emulation Time (clk)', Z_Title=>undef},
                { type=>"2D_line", page_num=>3, graph_name=> "-", result_name => "exe_time_result",X_Title=>'Desired Avg. Injected Load Per Router (flits/clock (%))' , Y_Title=>'Total Emulation Time (clk)', Z_Title=>undef},
        );
        );
 
 
        my ($conf_box,$set_win)=process_notebook_gen($emulate,\$info,"emulate", @charts);
        my ($conf_box,$set_win)=process_notebook_gen($emulate,$info,"emulate", undef,@charts);
        my $chart   =gen_multiple_charts ($emulate,\@pages,\@charts);
        my $chart   =gen_multiple_charts ($emulate,\@pages,\@charts,.4);
 
 
        $main_table->set_row_spacings (4);
        $main_table->set_row_spacings (4);
        $main_table->set_col_spacings (1);
        $main_table->set_col_spacings (1);
 
 
        my $generate = def_image_button('icons/forward.png','Run all');
        my $generate = def_image_button('icons/forward.png','Run all');
Line 1308... Line 1278...
                }
                }
                if($state eq "ideal"){
                if($state eq "ideal"){
                        return TRUE;
                        return TRUE;
 
 
                }
                }
                elsif($state eq 'ref_set_win'){
 
                        my $s=$emulate->object_get_attribute("active_setting",undef);
 
                        $set_win->destroy();
 
                        $emulate->object_add_attribute("active_setting",undef,$s);
 
                }
 
 
 
                #refresh GUI
                #refresh GUI
                my $name=$emulate->object_get_attribute ("emulate_name",undef);
                my $name=$emulate->object_get_attribute ("emulate_name",undef);
                $entry->set_text($name) if(defined $name);
                $entry->set_text($name) if(defined $name);
                $conf_box->destroy();
                $conf_box->destroy();
                $set_win->destroy();
 
                $chart->destroy();
                $chart->destroy();
                $image->destroy();
                $image->destroy();
                $image = get_status_gif($emulate);
                $image = get_status_gif($emulate);
                ($conf_box,$set_win)=process_notebook_gen($emulate,\$info,"emulate", @charts);
                ($conf_box,$set_win)=process_notebook_gen($emulate,$info,"emulate",$set_win, @charts);
                $chart   =gen_multiple_charts  ($emulate,\@pages,\@charts);
                $chart   =gen_multiple_charts  ($emulate,\@pages,\@charts,.4);
                $v1 -> pack1($conf_box, TRUE, TRUE);
                $v1 -> pack1($conf_box, TRUE, TRUE);
                $v1 -> pack2($image, TRUE, TRUE);
                $v1 -> pack2($image, TRUE, TRUE);
                $v2 -> pack2($chart, TRUE, TRUE);
                $v2 -> pack2($chart, TRUE, TRUE);
                $conf_box->show_all();
                $conf_box->show_all();
                $main_table->show_all();
                $main_table->show_all();
Line 1344... Line 1309...
        $generate-> signal_connect("clicked" => sub{
        $generate-> signal_connect("clicked" => sub{
                my @samples =$emulate->object_get_attribute_order("samples");
                my @samples =$emulate->object_get_attribute_order("samples");
                foreach my $sample (@samples){
                foreach my $sample (@samples){
                        $emulate->object_add_attribute ($sample,"status","run");
                        $emulate->object_add_attribute ($sample,"status","run");
                }
                }
                run_emulator($emulate,\$info);
                run_emulator($emulate,$info);
        });
        });
 
 
 
 
        $open-> signal_connect("clicked" => sub{
        $open-> signal_connect("clicked" => sub{
                load_emulation($emulate,\$info);
                load_emulation($emulate,$info);
                set_gui_status($emulate,"ref",5);
                set_gui_status($emulate,"ref",5);
        });
        });
 
 
        $save-> signal_connect("clicked" => sub{
        $save-> signal_connect("clicked" => sub{
                save_emulation($emulate);
                save_emulation($emulate);
                set_gui_status($emulate,"ref",5);
                set_gui_status($emulate,"ref",5);
        });
        });
 
 
        my $sc_win = new Gtk2::ScrolledWindow (undef, undef);
 
        $sc_win->set_policy( "automatic", "automatic" );
 
        $sc_win->add_with_viewport($main_table);
 
 
 
        return $sc_win;
 
 
        return add_widget_to_scrolled_win($main_table);
}
}
 
 
 
 
 
 
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.