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/] [diagram.pl] - Diff between revs 48 and 54

Show entire file | Details | Blame | View Log

Rev 48 Rev 54
Line 9... Line 9...
use soc;
use soc;
require "widget.pl";
require "widget.pl";
require "emulator.pl";
require "emulator.pl";
use File::Copy;
use File::Copy;
 
 
 
use Chart::Gnuplot;
 
 
 
 
sub get_dot_file{
sub get_dot_file{
        my $self= shift;
        my $self= shift;
        my $self_name=$self->object_get_attribute('soc_name');
        my $self_name=$self->object_get_attribute('soc_name');
Line 246... Line 246...
 
 
}
}
 
 
 
 
sub show_topology_diagram {
sub show_topology_diagram {
        my $self= shift;
        my ($self)= @_;
 
 
        my $table=def_table(20,20,FALSE);
        my $table=def_table(20,20,FALSE);
 
 
        my $window=def_popwin_size(80,80,"NoC-based MPSoC topology block diagram",'percent');
        my $window=def_popwin_size(80,80,"NoC-based MPSoC topology block diagram",'percent');
        my $scrolled_win = add_widget_to_scrolled_win();
        my $scrolled_win = add_widget_to_scrolled_win();
 
 
        $window->add ($table);
 
 
        my $notebook = gen_notebook();
 
        $notebook->set_tab_pos ('top');
 
        $notebook->set_scrollable(TRUE);
 
        $window->add($notebook);
 
 
 
 
 
 
 
 
 
        my @data;
 
        my $ref =$self->object_get_attribute('noc_param');
 
        if(defined $ref){
 
                my %param=%{$ref};
 
                foreach my $p (sort keys %param){
 
                        push (@data, {0 => "$p", 1 =>"$param{$p}"});
 
                }
 
        }
 
 
 
        # create list store
 
        my @clmn_type =  ('Glib::String',  'Glib::String');
 
        my @clmns = (" Parameter Name   ", " Value ");
 
        my $page2=add_widget_to_scrolled_win(gen_list_store (\@data,\@clmn_type,\@clmns));
 
 
 
 
 
 
 
        $notebook->append_page ($table,gen_label_with_mnemonic ("Topology diagram")) ;
 
        $notebook->append_page ($page2,gen_label_with_mnemonic ("NoC parameters")) ;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
        my $plus = def_image_button('icons/plus.png',undef,TRUE);
        my $plus = def_image_button('icons/plus.png',undef,TRUE);
        my $minues = def_image_button('icons/minus.png',undef,TRUE);
        my $minues = def_image_button('icons/minus.png',undef,TRUE);
        my $save = def_image_button('icons/save.png',undef,TRUE);
        my $save = def_image_button('icons/save.png',undef,TRUE);
        my $dot_file = def_image_button('icons/add-notes.png',undef,TRUE);
        my $dot_file = def_image_button('icons/add-notes.png',undef,TRUE);
Line 302... Line 336...
                $self->object_add_attribute("topology_diagram","scale", $scale );
                $self->object_add_attribute("topology_diagram","scale", $scale );
                gen_show_diagram($self,$scrolled_win,'topology',"topology_diagram");
                gen_show_diagram($self,$scrolled_win,'topology',"topology_diagram");
 
 
        });
        });
        $minues  -> signal_connect("clicked" => sub{
        $minues  -> signal_connect("clicked" => sub{
                $scale*=.9  if ($scale >0.1); ;
                $scale*=.9  if ($scale >0.1);
                $self->object_add_attribute("topology_diagram","scale", $scale );
                $self->object_add_attribute("topology_diagram","scale", $scale );
                gen_show_diagram($self,$scrolled_win,'topology',"topology_diagram");
                gen_show_diagram($self,$scrolled_win,'topology',"topology_diagram");
        });
        });
        $save-> signal_connect("clicked" => sub{
        $save-> signal_connect("clicked" => sub{
                        save_inline_diagram_as ($self);
                        save_inline_diagram_as ($self);
Line 329... Line 363...
        });
        });
 
 
 
 
        gen_show_diagram($self,$scrolled_win,'topology',"topology_diagram");
        gen_show_diagram($self,$scrolled_win,'topology',"topology_diagram");
        $window->show_all();
        $window->show_all();
 
        $notebook->set_current_page (0);
}
}
 
 
 
 
sub get_dot_file_text {
sub get_dot_file_text {
        my ($self,$type)=@_;
        my ($self,$type)=@_;
Line 388... Line 423...
}
}
 
 
 
 
 
 
sub show_diagram {
sub show_diagram {
        my ($self,$scrolled_win,$name)=@_;
        my ($self,$scrolled_win,$name,$image_name)=@_;
 
        $image_name="diagram.png" if (!defined $image_name);
        my @list = $scrolled_win->get_children();
        my @list = $scrolled_win->get_children();
        foreach my $l (@list){
        foreach my $l (@list){
                $scrolled_win->remove($l);
                $scrolled_win->remove($l);
        }
        }
 
 
 
 
        my $scale=$self->object_get_attribute($name,"scale");
        my $scale=$self->object_get_attribute($name,"scale");
        $scale= 1 if (!defined $scale);
        $scale= 1 if (!defined $scale);
        my $tmp_dir  = "$ENV{'PRONOC_WORK'}/tmp";
        my $tmp_dir  = "$ENV{'PRONOC_WORK'}/tmp";
        my $diagram=open_image("$tmp_dir/diagram.png",70*$scale,70*$scale,'percent');
        my $diagram=open_image("$tmp_dir/$image_name",70*$scale,70*$scale,'percent');
 
 
        add_widget_to_scrolled_win($diagram,$scrolled_win);
        add_widget_to_scrolled_win($diagram,$scrolled_win);
        $scrolled_win->show_all();
        $scrolled_win->show_all();
 
 
}
}
Line 669... Line 704...
##################################
##################################
#
#
##################################
##################################
 
 
 
 
 
 
 
 
 
sub generate_heat_map_table{
 
        my ($d)=@_ ;
 
 
 
        return (def_table (1, 1, FALSE),def_table (1, 1, FALSE)) if (!defined $d);
 
        my %data=%{$d};
 
        my @xs = (sort {$a<=>$b} keys %data);
 
 
 
 
 
 
 
 
 
        my $max=0;
 
        #for(my $y=0; $y<$dim; $y++){           
 
        #       for(my $x=0; $x<$dim; $x++){    
 
                foreach my $y (@xs){
 
                        foreach my $x (@xs){
 
                        #$data{$x}{$y}=int(rand(50000));
 
                        #$data{$x}{$y}=$y*64+$x;
 
                        $max = $data{$x}{$y} if( $max < $data{$x}{$y});
 
                }
 
        }
 
 
 
 
 
        my $width_max = length int $max;
 
 
 
        my $table = def_table (1, 1, FALSE);
 
 
 
        #for(my $y=0; $y<$dim; $y++){ 
 
        foreach my $y (@xs){
 
                my $l=gen_label_in_center("$y");
 
                $table->attach ($l,     $y+1,$y+2,0,1,'expand','shrink',2,2);
 
        }
 
        #for(my $x=0; $x<$dim; $x++){
 
        foreach my $x (@xs){
 
                my $l=gen_label_in_center("$x");
 
                $table->attach ($l,     0,1,$x+1,$x+2,'expand','shrink',2,2);
 
        }
 
 
 
        #for(my $y=0; $y<$dim; $y++){           
 
        #       for(my $x=0; $x<$dim; $x++){
 
                foreach my $y (@xs){
 
                        foreach my $x (@xs){
 
                        my $d=$data{$x}{$y};
 
                        my $c = int (((5*$d))/($max+1));
 
                        my $v = length int $d;
 
                        until ($v >= $width_max){
 
                                $d="  ".$d;
 
                                $v++;
 
                        }
 
 
 
                my $l =gen_colored_label( "   " ,32+$c);
 
                set_tip($l,"E[$x]->E[$y]=$d");
 
                $table->attach ($l, $y+1,$y+2,$x+1,$x+2,'expand','shrink',2,2);
 
        }
 
 
 
  }
 
 
 
  my $scale = def_table (1, 1, FALSE);
 
  my $v=gen_label_in_center("0");
 
  $scale->attach ($v, 1,2,0,1,'expand','shrink',2,2);
 
  for (my $i=0; $i<5; $i++){
 
        my $l =gen_colored_label( "   " ,32+$i);
 
        my $val =int( (2*$i+1)*$max/10);
 
        my $v=gen_label_in_center($val);
 
        $scale->attach ($v, 0,1,$i+1,$i+2,'expand','shrink',2,2);
 
        $scale->attach ($l, 1,2,$i+1,$i+2,'expand','shrink',2,2);
 
        $scale->attach (gen_label_in_center("$max"), 1,2,$i+2,$i+3,'expand','shrink',2,2) if($i==4);
 
  }
 
 
 
 
 
   return ($table,$scale);
 
 
 
}
 
 
 
 
 
sub generate_heat_map_img_file{
 
        my ($d,$image_file,$title)=@_ ;
 
        return  if (!defined $d);
 
        my %hash=%{$d};
 
        my @data;
 
        my @xs = (sort {$a<=>$b} keys %hash);
 
        foreach my $y (@xs){
 
                my @b;
 
                push (@data ,\@b) if ($y!=0);
 
                foreach my $x (@xs){
 
                        my @a=($x,$y, $hash{$x}{$y});
 
                        push (@data ,\@a);
 
                }
 
 
 
        }
 
 
 
my $length = @xs;
 
$length+=1;
 
 
 
my $chart = Chart::Gnuplot->new(
 
    bg         => 'white',
 
    view       => 'map',
 
    palette    => 'defined (0 0 0 1, 1 1 1 0, 2 1 0 0)',
 
    output     => "$image_file",
 
    title      => "$title",
 
    xlabel     => 'Endp-ID',
 
    ylabel     => 'Endp-ID',
 
    xrange         => [-1, $length],
 
    size       => 'ratio -1',
 
    xtics      => {
 
        labels   => \@xs,
 
    },
 
    ytics      => {
 
       labels   => \@xs,
 
    },
 
    mxtics => '2',
 
    mytics => '2',
 
    border => undef,
 
    grid   => 'front mxtics mytics lw 1.5 lt -1 lc rgb \'white\'',
 
 
 
);
 
my $dataSet = Chart::Gnuplot::DataSet->new(
 
        points => \@data,
 
        view   => 'map',
 
        type   => 'matrix',
 
    using  => "1:2:3 with image",
 
);
 
 
 
 
 
$chart->plot2d($dataSet);
 
 
 
 
 
 
 
 
 
 
 
}
 
 
 
 
 
 
 
sub generate_heat_map_dot_file{
 
        my ($data,$dim)=@_ ;
 
        my $dotfile=
 
"digraph G {
 
        graph [layout = neato, rankdir = RL , splines = true, overlap = true];
 
        node[shape=record];
 
        ";
 
        for(my $y=0; $y<$dim; $y++){
 
                for(my $x=0; $x<$dim; $x++){
 
                        my $tx=$x*2+0.5;
 
                        my $ty=($dim-$y-1)*2+0.5;
 
                        my $w=2;
 
 
 
                    $tx/=2;
 
                        $ty/=2;
 
                        $w/=2;
 
 
 
 
 
                        $dotfile.="
 
                                        \"t${x}_$y\"[
 
        label = \"8822255\"
 
    pos = \"$tx,$ty!\"
 
    width =$w
 
    height=$w
 
        style=filled
 
        fontsize=\"12\"
 
        fillcolor=orange
 
 
 
];
 
"
 
                }
 
        }
 
 
 
        $dotfile=$dotfile."\n}\n";
 
        return $dotfile;
 
 
 
}
 
 
 
 
 
 
sub generate_mesh_dot_file{
sub generate_mesh_dot_file{
        my $self=shift;
        my $self=shift;
 
 
        my $gtype=$self->object_get_attribute("tile_diagram","gtype");
        my $gtype=$self->object_get_attribute("tile_diagram","gtype");
 
 

powered by: WebSVN 2.1.0

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