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/] [mpsoc_gen.pl] - Diff between revs 32 and 34

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

Rev 32 Rev 34
Line 283... Line 283...
 
 
sub get_conflict_decision{
sub get_conflict_decision{
        my ($mpsoc,$name,$inserted,$conflicts,$msg)=@_;
        my ($mpsoc,$name,$inserted,$conflicts,$msg)=@_;
        $msg="\tThe inserted tile number(s) have been mapped previously to \n\t\t\"$msg\".\n\tDo you want to remove the conflicted tiles number(s) in newly \n\tinsterd range or remove them from the previous ones? ";
        $msg="\tThe inserted tile number(s) have been mapped previously to \n\t\t\"$msg\".\n\tDo you want to remove the conflicted tiles number(s) in newly \n\tinsterd range or remove them from the previous ones? ";
 
 
        my $wind=def_popwin_size(100,300,"warning");
        my $wind=def_popwin_size(10,30,"warning",'percent');
        my $label= gen_label_in_left($msg);
        my $label= gen_label_in_left($msg);
        my $table=def_table(2,6,FALSE);
        my $table=def_table(2,6,FALSE);
        $table->attach_defaults ($label , 0, 6, 0,1);
        $table->attach_defaults ($label , 0, 6, 0,1);
        $wind->add($table);
        $wind->add($table);
 
 
Line 417... Line 417...
################
################
 
 
sub get_soc_parameter_setting{
sub get_soc_parameter_setting{
        my ($mpsoc,$soc_name,$tile)=@_;
        my ($mpsoc,$soc_name,$tile)=@_;
 
 
        my $window = (defined $tile)? def_popwin_size(600,400,"Parameter setting for $soc_name located in tile($tile) "):def_popwin_size(600,400,"Default Parameter setting for $soc_name ");
        my $window = (defined $tile)? def_popwin_size(40,40,"Parameter setting for $soc_name located in tile($tile) ",'percent'):def_popwin_size(40,40,"Default Parameter setting for $soc_name ",'percent');
        my $table = def_table(10, 7, TRUE);
        my $table = def_table(10, 7, TRUE);
 
 
        my $scrolled_win = new Gtk2::ScrolledWindow (undef, undef);
        my $scrolled_win = new Gtk2::ScrolledWindow (undef, undef);
        $scrolled_win->set_policy( "automatic", "automatic" );
        $scrolled_win->set_policy( "automatic", "automatic" );
        $scrolled_win->add_with_viewport($table);
        $scrolled_win->add_with_viewport($table);
Line 1099... Line 1099...
######################
######################
 
 
sub get_config{
sub get_config{
        my ($mpsoc,$info)=@_;
        my ($mpsoc,$info)=@_;
        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 = new Gtk2::ScrolledWindow (undef, undef);
        #my $scrolled_win = new Gtk2::ScrolledWindow (undef, undef);
        $scrolled_win->set_policy( "automatic", "automatic" );
        #$scrolled_win->set_policy( "automatic", "automatic" );
        $scrolled_win->add_with_viewport($table);
        #$scrolled_win->add_with_viewport($table);
 
 
        #noc_setting
        #noc_setting
        my $row=noc_config ($mpsoc,$table);
        my $row=noc_config ($mpsoc,$table);
 
 
 
 
Line 1157... Line 1157...
 
 
 
 
 
 
 
 
 
 
return  $scrolled_win;
return  $table;
 
 
}
}
 
 
 
 
#############
#############
Line 1235... Line 1235...
 
 
sub generate_soc_files{
sub generate_soc_files{
        my ($mpsoc,$soc,$info)=@_;
        my ($mpsoc,$soc,$info)=@_;
        my $mpsoc_name=$mpsoc->object_get_attribute('mpsoc_name');
        my $mpsoc_name=$mpsoc->object_get_attribute('mpsoc_name');
        my $soc_name=$soc->object_get_attribute('soc_name');
        my $soc_name=$soc->object_get_attribute('soc_name');
        my ($file_v,$tmp)=soc_generate_verilog($soc);
 
 
        # copy all files in project work directory
 
        my $dir = Cwd::getcwd();
 
        my $project_dir   = abs_path("$dir/../../");
 
        #make target dir
 
        my $target_dir  = "$ENV{'PRONOC_WORK'}/MPSOC/$mpsoc_name";
 
        mkpath("$target_dir/src_verilog/lib/",1,0755);
 
        mkpath("$target_dir/src_verilog/tiles/",1,0755);
 
        mkpath("$target_dir/sw",1,0755);
 
 
 
        my ($file_v,$tmp)=soc_generate_verilog($soc,"$target_dir/sw");
 
 
        # Write object file
        # Write object file
        open(FILE,  ">lib/soc/$soc_name.SOC") || die "Can not open: $!";
        open(FILE,  ">lib/soc/$soc_name.SOC") || die "Can not open: $!";
        print FILE perl_file_header("$soc_name.SOC");
        print FILE perl_file_header("$soc_name.SOC");
        print FILE Data::Dumper->Dump([\%$soc],['mpsoc']);
        print FILE Data::Dumper->Dump([\%$soc],['mpsoc']);
Line 1251... Line 1261...
        close(FILE) || die "Error closing file: $!";
        close(FILE) || die "Error closing file: $!";
 
 
 
 
 
 
 
 
        # copy all files in project work directory
 
        my $dir = Cwd::getcwd();
 
        my $project_dir   = abs_path("$dir/../../");
 
        #make target dir
 
        my $target_dir  = "$ENV{'PRONOC_WORK'}/MPSOC/$mpsoc_name";
 
        mkpath("$target_dir/src_verilog/lib/",1,0755);
 
        mkpath("$target_dir/src_verilog/tiles/",1,0755);
 
        mkpath("$target_dir/sw",1,0755);
 
 
 
    #copy hdl codes in src_verilog
    #copy hdl codes in src_verilog
 
 
    my ($hdl_ref,$warnings)= get_all_files_list($soc,"hdl_files");
    my ($hdl_ref,$warnings)= get_all_files_list($soc,"hdl_files");
    foreach my $f(@{$hdl_ref}){
    foreach my $f(@{$hdl_ref}){
Line 1314... Line 1317...
 
 
return $msg;
return $msg;
}
}
 
 
 
 
 
sub generate_mpsoc_lib_file {
 
        my ($mpsoc,$info) = @_;
 
        my $name=$mpsoc->object_get_attribute('mpsoc_name');
 
        $mpsoc->mpsoc_remove_all_soc_tops();
 
        open(FILE,  ">lib/mpsoc/$name.MPSOC") || die "Can not open: $!";
 
        print FILE perl_file_header("$name.MPSOC");
 
        print FILE Data::Dumper->Dump([\%$mpsoc],[$name]);
 
        close(FILE) || die "Error closing file: $!";
 
        get_soc_list($mpsoc,$info);
 
 
 
}
 
 
 
 
################
################
#       generate_mpsoc
#       generate_mpsoc
#################
#################
 
 
sub generate_mpsoc{
sub generate_mpsoc{
        my ($mpsoc,$info)=@_;
        my ($mpsoc,$info)=@_;
        my $name=$mpsoc->object_get_attribute('mpsoc_name');
        my $name=$mpsoc->object_get_attribute('mpsoc_name');
        if ( $name =~ /\W+/ ){
        my $error = check_verilog_identifier_syntax($name);
                message_dialog('The mpsoc name must not contain any non-word character:("./\()\':,.;<>~!@#$%^&*|+=[]{}`~?-")!")');
        if ( defined $error ){
 
                message_dialog("The \"$name\" is given with an unacceptable formatting. The mpsoc name will be used as top level verilog module name so it must follow Verilog identifier declaration formatting:\n $error");
                return 0;
                return 0;
        }
        }
        my $size= (defined $name)? length($name) :0;
        my $size= (defined $name)? length($name) :0;
        if ($size ==0) {
        if ($size ==0) {
                message_dialog("Please define the MPSoC name!");
                message_dialog("Please define the MPSoC name!");
Line 1352... Line 1369...
        my @files = glob( "$dir/../src_noc/*.v" );
        my @files = glob( "$dir/../src_noc/*.v" );
        copy_file_and_folders(\@files,$dir,"$hw_dir/lib/");
        copy_file_and_folders(\@files,$dir,"$hw_dir/lib/");
 
 
 
 
 
 
        my ($file_v,$top_v)=mpsoc_generate_verilog($mpsoc);
        my ($file_v,$top_v)=mpsoc_generate_verilog($mpsoc,$sw_dir);
 
 
 
 
 
 
        # Write object file
        # Write object file
        open(FILE,  ">lib/mpsoc/$name.MPSOC") || die "Can not open: $!";
        generate_mpsoc_lib_file($mpsoc,$info);
        print FILE perl_file_header("$name.MPSOC");
 
        print FILE Data::Dumper->Dump([\%$mpsoc],[$name]);
 
        close(FILE) || die "Error closing file: $!";
 
 
 
        # Write verilog file
        # Write verilog file
        open(FILE,  ">lib/verilog/$name.v") || die "Can not open: $!";
        open(FILE,  ">lib/verilog/$name.v") || die "Can not open: $!";
        print FILE $file_v;
        print FILE $file_v;
        close(FILE) || die "Error closing file: $!";
        close(FILE) || die "Error closing file: $!";
Line 1579... Line 1593...
        }else {
        }else {
                $button =def_colored_button("Tile $tile ($x,$y)\n",50) if(! defined $soc_name);
                $button =def_colored_button("Tile $tile ($x,$y)\n",50) if(! defined $soc_name);
        }
        }
 
 
        $button->signal_connect("clicked" => sub{
        $button->signal_connect("clicked" => sub{
                my $window = def_popwin_size(400,400,"Parameter setting for Tile $tile ");
                my $window = def_popwin_size(40,40,"Parameter setting for Tile $tile ",'percent');
                my $table = def_table(6, 2, TRUE);
                my $table = def_table(6, 2, TRUE);
 
 
                my $scrolled_win = new Gtk2::ScrolledWindow (undef, undef);
                my $scrolled_win = new Gtk2::ScrolledWindow (undef, undef);
                $scrolled_win->set_policy( "automatic", "automatic" );
                $scrolled_win->set_policy( "automatic", "automatic" );
                $scrolled_win->add_with_viewport($table);
                $scrolled_win->add_with_viewport($table);
Line 1715... Line 1729...
 
 
        }}
        }}
 
 
 
 
 
 
 
sub software_edit_mpsoc {
 
        my $self=shift;
 
        my $name=$self->object_get_attribute('mpsoc_name');
 
        if (length($name)==0){
 
                message_dialog("Please define the MPSoC name!");
 
                return ;
 
        }
 
        my $target_dir  = "$ENV{'PRONOC_WORK'}/MPSOC/$name/sw";
 
        my $sw  = "$target_dir";
 
        my ($app,$table,$tview) = software_main($sw);
 
 
 
 
 
 
 
 
 
        my $make = def_image_button('icons/gen.png','Compile');
 
 
 
 
 
        $table->attach ($make,9, 10, 1,2,'shrink','shrink',0,0);
 
 
 
 
 
        $make -> signal_connect("clicked" => sub{
 
                $app->do_save();
 
                run_make_file($sw,$tview);
 
 
 
        });
 
 
 
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
############
############
Line 1751... Line 1791...
 
 
 
 
        my $noc_conf_box=get_config ($mpsoc,$info);
        my $noc_conf_box=get_config ($mpsoc,$info);
        my $noc_tiles=gen_tiles($mpsoc);
        my $noc_tiles=gen_tiles($mpsoc);
 
 
 
        my $scr_conf = new Gtk2::ScrolledWindow (undef, undef);
 
        $scr_conf->set_policy( "automatic", "automatic" );
 
        $scr_conf->add_with_viewport($noc_conf_box);
 
 
        $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  $device_win=show_active_dev($soc,$soc,$infc,\$refresh,$info);
        #my  $device_win=show_active_dev($soc,$soc,$infc,\$refresh,$info);
Line 1765... Line 1807...
 
 
 
 
 
 
 
 
        my $open = def_image_button('icons/browse.png','Load MPSoC');
        my $open = def_image_button('icons/browse.png','Load MPSoC');
 
        my $compile  = def_image_button('icons/run.png','Compile');
 
        my $software = def_image_button('icons/binary.png','Software');
        my $entry=gen_entry_object($mpsoc,'mpsoc_name',undef,undef,undef,undef);
        my $entry=gen_entry_object($mpsoc,'mpsoc_name',undef,undef,undef,undef);
        my $entrybox=labele_widget_info(" MPSoC name:",$entry);
        my $entrybox=labele_widget_info(" MPSoC name:",$entry);
 
 
 
 
 
 
        #$table->attach_defaults ($event_box, $col, $col+1, $row, $row+1);
        #$table->attach_defaults ($event_box, $col, $col+1, $row, $row+1);
        $main_table->attach_defaults ($noc_conf_box , 0, 4, 0, 22);
        #$main_table->attach_defaults ($noc_conf_box , 0, 4, 0, 22);
        $main_table->attach_defaults ($noc_tiles , 4, 12, 0, 22);
        #$main_table->attach_defaults ($noc_tiles , 4, 12, 0, 22);
        $main_table->attach_defaults ($infobox  , 0, 12, 22,24);
        #$main_table->attach_defaults ($infobox  , 0, 12, 22,24);
 
 
 
        my $h1=gen_hpaned($scr_conf,.3,$noc_tiles);
 
        my $v2=gen_vpaned($h1,.55,$infobox);
 
        $main_table->attach_defaults ($v2  , 0, 12, 0,24);
 
 
 
 
 
 
 
 
 
 
        $main_table->attach ($open,0, 3, 24,25,'expand','shrink',2,2);
        $main_table->attach ($open,0, 3, 24,25,'expand','shrink',2,2);
        $main_table->attach_defaults ($entrybox,3, 7, 24,25);
        $main_table->attach_defaults ($entrybox,3, 7, 24,25);
 
 
        $main_table->attach ($generate, 10, 12, 24,25,'expand','shrink',2,2);
        $main_table->attach ($generate, 8, 9, 24,25,'expand','shrink',2,2);
 
        $main_table->attach ($software, 9, 10, 24,25,'expand','shrink',2,2);
 
        $main_table->attach ($compile, 10, 12, 24,25,'expand','shrink',2,2);
 
 
        #referesh the mpsoc generator 
        #referesh the mpsoc generator 
        $refresh-> signal_connect("clicked" => sub{
        $refresh-> signal_connect("clicked" => sub{
                $noc_conf_box->destroy();
                $noc_conf_box->destroy();
                $noc_conf_box=get_config ($mpsoc,$info);
                $noc_conf_box=get_config ($mpsoc,$info);
                $main_table->attach_defaults ($noc_conf_box , 0, 4, 0, 22);
                $scr_conf->add_with_viewport($noc_conf_box);
                $noc_conf_box->show_all();
                #$main_table->attach_defaults ($noc_conf_box , 0, 4, 0, 22);
 
                #$noc_conf_box->show_all();                     
 
 
 
 
 
 
                $noc_tiles->destroy();
                $noc_tiles->destroy();
                $noc_tiles=gen_tiles($mpsoc);
                $noc_tiles=gen_tiles($mpsoc);
                $main_table->attach_defaults ($noc_tiles , 4, 12, 0, 22);
                #$h1->destroy();
 
                #$h1=gen_hpaned($noc_conf_box,.3,$noc_tiles);
 
                $h1 -> pack1($scr_conf, TRUE, TRUE);
 
                $h1 -> pack2($noc_tiles, TRUE, TRUE);
 
 
 
                $v2-> pack1($h1, TRUE, TRUE);
 
                $h1->show_all;
 
                #$main_table->attach_defaults ($noc_tiles , 4, 12, 0, 22);
 
 
                $main_table->show_all();
                $main_table->show_all();
 
 
 
 
        });
        });
Line 1810... Line 1870...
 
 
 
 
                if ($timeout>0){
                if ($timeout>0){
                        $timeout--;
                        $timeout--;
                        set_gui_status($mpsoc,$state,$timeout);
                        set_gui_status($mpsoc,$state,$timeout);
 
                }elsif ($state eq 'save_project'){
 
                        # Write object file
 
                        my $name=$mpsoc->object_get_attribute('mpsoc_name');
 
                        open(FILE,  ">lib/mpsoc/$name.MPSOC") || die "Can not open: $!";
 
                        print FILE perl_file_header("$name.MPSOC");
 
                        print FILE Data::Dumper->Dump([\%$mpsoc],[$name]);
 
                        close(FILE) || die "Error closing file: $!";
 
                        set_gui_status($mpsoc,"ideal",0);
                }
                }
                elsif( $state ne "ideal" ){
                elsif( $state ne "ideal" ){
                        $refresh->clicked;
                        $refresh->clicked;
                        my $saved_name=$mpsoc->object_get_attribute('mpsoc_name');
                        my $saved_name=$mpsoc->object_get_attribute('mpsoc_name');
                        if(defined $saved_name) {$entry->set_text($saved_name);}
                        if(defined $saved_name) {$entry->set_text($saved_name);}
Line 1842... Line 1910...
                load_mpsoc($mpsoc,$info);
                load_mpsoc($mpsoc,$info);
 
 
        });
        });
 
 
 
 
 
        $compile -> signal_connect("clicked" => sub{
 
                my $name=$mpsoc->object_get_attribute('mpsoc_name');
 
                if (length($name)==0){
 
                        message_dialog("Please define the MPSoC name!");
 
                        return ;
 
                }
 
                my $target_dir  = "$ENV{'PRONOC_WORK'}/MPSOC/$name";
 
                my $top_file    = "$target_dir/src_verilog/${name}_top.v";
 
                if (-f $top_file){
 
                        select_compiler($mpsoc,$name,$top_file,$target_dir);
 
                } else {
 
                        message_dialog("Cannot find $top_file file. Please run RTL Generator first!");
 
                        return;
 
                }
 
        });
 
 
 
        $software -> signal_connect("clicked" => sub{
 
                software_edit_mpsoc($mpsoc);
 
 
 
        });
 
 
 
 
        my $sc_win = new Gtk2::ScrolledWindow (undef, undef);
        my $sc_win = new Gtk2::ScrolledWindow (undef, undef);
                $sc_win->set_policy( "automatic", "automatic" );
                $sc_win->set_policy( "automatic", "automatic" );
                $sc_win->add_with_viewport($main_table);
                $sc_win->add_with_viewport($main_table);
 
 
        return $sc_win;
        return $sc_win;
Line 1880... Line 1970...
        $filter->set_name("MPSoC");
        $filter->set_name("MPSoC");
        $filter->add_pattern("*.MPSOC");
        $filter->add_pattern("*.MPSOC");
        $dialog->add_filter ($filter);
        $dialog->add_filter ($filter);
                my $dir = Cwd::getcwd();
                my $dir = Cwd::getcwd();
        $dialog->set_current_folder ("$dir/lib/mpsoc")  ;
        $dialog->set_current_folder ("$dir/lib/mpsoc")  ;
 
        my @newsocs=$mpsoc->mpsoc_get_soc_list();
 
        add_info(\$info,'');
        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 '.MPSOC'){
                if($suffix eq '.MPSOC'){
                        my $pp= eval { do $file };
                        my $pp= eval { do $file };
                        if ($@ || !defined $pp){
                        if ($@ || !defined $pp){
                                show_info(\$info,"**Error reading  $file file: $@\n");
                                add_info(\$info,"**Error: cannot open $file file: $@\n");
                                 $dialog->destroy;
                                 $dialog->destroy;
                                return;
                                return;
                        }
                        }
 
 
 
 
                        clone_obj($mpsoc,$pp);
                        clone_obj($mpsoc,$pp);
 
                        #read save mpsoc socs
 
                        my @oldsocs=$mpsoc->mpsoc_get_soc_list();
 
                        #add exsiting SoCs and add them to mpsoc
 
 
 
                        my $error;
 
                        #print "old: @oldsocs\n new @newsocs \n"; 
 
                        foreach my $p (@oldsocs) {
 
                                #print "$p\n";
 
                                my @num= $mpsoc->mpsoc_get_soc_tiles_num($p);
 
                                if (scalar @num && ( grep (/^$p$/,@newsocs)==0)){
 
                                        my $m="Processing tile $p that has been used for ties  @num but is not located in librray anymore\n";
 
                                        $error = (defined $error ) ? "$error $m" : $m;
 
                                }
 
                                $mpsoc->mpsoc_remove_soc ($p) if (grep (/^$p$/,@newsocs)==0);
 
 
 
 
 
                        }
 
                        @newsocs=get_soc_list($mpsoc,$info); # add all existing socs
 
                        add_info(\$info,"**Error:  \n $error\n") if(defined $error);
 
 
                        set_gui_status($mpsoc,"load_file",0);
                        set_gui_status($mpsoc,"load_file",0);
 
 
                }
                }
     }
     }
     $dialog->destroy;
     $dialog->destroy;

powered by: WebSVN 2.1.0

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