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

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

Rev 25 Rev 34
Line 70... Line 70...
sub read_all_module{
sub read_all_module{
        my ($file,$ipgen,$info)=@_;
        my ($file,$ipgen,$info)=@_;
 
 
        if (!defined $file) {return; }
        if (!defined $file) {return; }
        if (-e $file) {
        if (-e $file) {
                my $vdb =  read_file($file);
                my $vdb =  read_verilog_file($file);
                my @modules=sort $vdb->get_modules($file);
                my @modules=sort $vdb->get_modules($file);
                #foreach my $p(@module_list) {print "$p\n"}
                #foreach my $p(@module_list) {print "$p\n"}
                $ipgen->ipgen_add("file_name",$file);
                $ipgen->ipgen_add("file_name",$file);
 
 
 
 
Line 436... Line 436...
 
 
sub load_deafult_setting{
sub load_deafult_setting{
        my ($ipgen,$module)=@_;
        my ($ipgen,$module)=@_;
        my $file= $ipgen->ipgen_get("file_name");
        my $file= $ipgen->ipgen_get("file_name");
        $ipgen->ipgen_add("module_name",$module);
        $ipgen->ipgen_add("module_name",$module);
        my $vdb =read_file($file);
        my $vdb =read_verilog_file($file);
        my %parameters = $vdb->get_modules_parameters_not_local($module);
        my %parameters = $vdb->get_modules_parameters_not_local($module);
        my @parameters_order= $vdb->get_modules_parameters_not_local_order($module);
        my @parameters_order= $vdb->get_modules_parameters_not_local_order($module);
        my @ports_order=$vdb->get_module_ports_order($module);
        my @ports_order=$vdb->get_module_ports_order($module);
        #print "@port_order\n";
        #print "@port_order\n";
 
 
Line 584... Line 584...
                        return;
                        return;
 
 
        }
        }
        my $module = $ipgen->ipgen_get("module_name");
        my $module = $ipgen->ipgen_get("module_name");
 
 
        my($width,$hight)=max_win_size();
 
        my $window =  def_popwin_size(.85*$width,.5*$hight,"Define parameters detail");
        my $window =  def_popwin_size(85,50,"Define parameters detail",'percent');
 
 
 
 
 
 
 
 
        my @widget_type_list=("Fixed","Entry","Combo-box","Spin-button");
        my @widget_type_list=("Fixed","Entry","Combo-box","Spin-button");
Line 654... Line 654...
        $addbox->pack_start($add,   FALSE, FALSE,0);
        $addbox->pack_start($add,   FALSE, FALSE,0);
 
 
        my @allowed;
        my @allowed;
 
 
        my $row=1;
        my $row=1;
 
        my $error;
        push(@parameters,"#new#");
        push(@parameters,"#new#");
        foreach my $p (@parameters) {
        foreach my $p (@parameters) {
                my ($saved_deafult,$saved_widget_type,$saved_content,$saved_info,$vfile_param_type,$redefine_param)=  $ipgen->ipgen_get_parameter_detail($p);
                my ($saved_deafult,$saved_widget_type,$saved_content,$saved_info,$vfile_param_type,$redefine_param)=  $ipgen->ipgen_get_parameter_detail($p);
                #print  "($saved_deafult,$saved_type,$saved_content)\n";
                #print  "($saved_deafult,$saved_type,$saved_content)\n";
                my $parameter_box = def_hbox(TRUE,5);
                my $parameter_box = def_hbox(TRUE,5);
Line 723... Line 723...
                                my $content=$content_entry->get_text();
                                my $content=$content_entry->get_text();
                                my $vfile_param_type=$check_param->get_active_text();
                                my $vfile_param_type=$check_param->get_active_text();
                                my $check_result=$check_redefine->get_active();
                                my $check_result=$check_redefine->get_active();
                                my $redefine_param=($check_result eq 1)? 1:0;
                                my $redefine_param=($check_result eq 1)? 1:0;
                                $ipgen->ipgen_add_parameter($p,$deafult,$type,$content,$saved_info,$vfile_param_type,$redefine_param);
                                $ipgen->ipgen_add_parameter($p,$deafult,$type,$content,$saved_info,$vfile_param_type,$redefine_param);
 
 
 
                                if      ($type eq "Spin-button"){
 
                                        my @d=split(",",$content);
 
                                         if( scalar @d != 3){
 
                                                $error=$error."wrong content setting for parameter $p\n" ;
 
                                                print "$error";
 
                                        }
 
                                }
 
 
 
 
                        }
                        }
                });
                });
                $add_remove->signal_connect (clicked => sub{
                $add_remove->signal_connect (clicked => sub{
                        if($p eq "#new#"){ #add new parameter
                        if($p eq "#new#"){ #add new parameter
                                my $param= $param_name->get_text();
                                my $param= $param_name->get_text();
Line 747... Line 757...
                                }
                                }
 
 
                        } else { #remove the parameter
                        } else { #remove the parameter
                                $ipgen->ipgen_remove_parameter($p);
                                $ipgen->ipgen_remove_parameter($p);
                                $ipgen->ipgen_remove_parameters_order($p);
                                $ipgen->ipgen_remove_parameters_order($p);
 
                                $p = "#new#";
                                set_gui_status($ipgen,"change_parameter",0);
                                set_gui_status($ipgen,"change_parameter",0);
                                $ok->clicked;
                                $ok->clicked;
                                        #$window->destroy();
                                        #$window->destroy();
 
 
                        }
                        }
Line 796... Line 807...
 
 
        });
        });
 
 
        $ok->signal_connect (clicked => sub{
        $ok->signal_connect (clicked => sub{
 
 
 
 
 
 
 
 
 
 
 
 
 
                if (defined $error){
 
                        message_dialog("$error");
 
                        $error=undef;
 
                }else {
                $window->destroy();
                $window->destroy();
 
                }
 
 
        });
        });
 
 
        my $mtable = def_table(10, 1, FALSE);
        my $mtable = def_table(10, 1, FALSE);
        $mtable->attach_defaults($scrolled_win,0,1,0,9);
        $mtable->attach_defaults($scrolled_win,0,1,0,9);
Line 821... Line 842...
##########
##########
sub get_def_setting {
sub get_def_setting {
        my ($ipgen,$info)=@_;
        my ($ipgen,$info)=@_;
        my $table = Gtk2::Table->new (15, 15, TRUE);
        my $table = Gtk2::Table->new (15, 15, TRUE);
        my $table2 = Gtk2::Table->new (15, 15, TRUE);
        my $table2 = Gtk2::Table->new (15, 15, TRUE);
        my($width,$hight)=max_win_size();
        my $window =  def_popwin_size(70,70,"Add definition file",'percent');
        my $window =  def_popwin_size(.7*$width,.7*$hight,"Add definition file");
 
        my $ok=def_image_button("icons/select.png",' Ok ');
        my $ok=def_image_button("icons/select.png",' Ok ');
        my $scrwin=  new Gtk2::ScrolledWindow (undef, undef);
        my $scrwin=  new Gtk2::ScrolledWindow (undef, undef);
        $scrwin->set_policy( "automatic", "automatic" );
        $scrwin->set_policy( "automatic", "automatic" );
        $scrwin->add_with_viewport($table2);
        $scrwin->add_with_viewport($table2);
 
 
Line 850... Line 870...
 
 
sub get_Description{
sub get_Description{
        my ($ipgen,$info)=@_;
        my ($ipgen,$info)=@_;
        my $description = $ipgen->ipgen_get("description");
        my $description = $ipgen->ipgen_get("description");
        my $table = Gtk2::Table->new (15, 15, FALSE);
        my $table = Gtk2::Table->new (15, 15, FALSE);
        my($width,$hight)=max_win_size();
        my $window =  def_popwin_size(40,40, "Add description",'percent');
        my $window =  def_popwin_size(.4*$width,.4*$hight, "Add description");
 
        my ($scrwin,$text_view)=create_text();
        my ($scrwin,$text_view)=create_text();
        #my $buffer = $textbox->get_buffer();
        #my $buffer = $textbox->get_buffer();
        my $ok=def_image_button("icons/select.png",' Ok ');
        my $ok=def_image_button("icons/select.png",' Ok ');
 
        $table->attach_defaults(gen_label_help("User can open the PDF file when oppening IP parameter setting","IP Documentation file in PDF"),0,7,0,1);
        $table->attach_defaults($scrwin,0,15,0,14);
        $table->attach_defaults(gen_label_help("Description will be shown on IP generator text view when selecting this IP","Short Description"),5,10,1,2);
 
        $table->attach_defaults(get_file_name_object ( $ipgen, 'description_pdf',undef,"pdf",undef),7,15,0,1);
 
        $table->attach_defaults($scrwin,0,15,2,14);
        $table->attach($ok,6,9,14,15,'expand','shrink',2,2);
        $table->attach($ok,6,9,14,15,'expand','shrink',2,2);
        my $text_buffer = $text_view->get_buffer;
        my $text_buffer = $text_view->get_buffer;
        if(defined $description) {$text_buffer->set_text($description)};
        if(defined $description) {$text_buffer->set_text($description)};
 
 
        $ok->signal_connect("clicked"=> sub {
        $ok->signal_connect("clicked"=> sub {
Line 962... Line 983...
 
 
 
 
sub get_param_info{
sub get_param_info{
        my ($ipgen,$saved_info)=@_;
        my ($ipgen,$saved_info)=@_;
        my $table = Gtk2::Table->new (15, 15, FALSE);
        my $table = Gtk2::Table->new (15, 15, FALSE);
        my($width,$hight)=max_win_size();
        my $window =  def_popwin_size(50,50,"Add description",'percent');
        my $window =  def_popwin_size(.5*$width,.5*$hight,"Add description");
 
        my ($scrwin,$text_view)=create_text();
        my ($scrwin,$text_view)=create_text();
        my $ok=def_image_button("icons/select.png",' Ok ');
        my $ok=def_image_button("icons/select.png",' Ok ');
 
 
        $table->attach_defaults($scrwin,0,15,0,14);
        $table->attach_defaults($scrwin,0,15,0,14);
        $table->attach($ok,6,9,14,15,'expand','shrink',2,2);
        $table->attach($ok,6,9,14,15,'expand','shrink',2,2);
Line 1173... Line 1193...
########
########
 
 
sub get_intfc_setting{
sub get_intfc_setting{
 
 
        my ($ipgen,$intfc_name, $intfc_type)=@_;
        my ($ipgen,$intfc_name, $intfc_type)=@_;
 
        my $window =  def_popwin_size(70,70,"Interface parameter setting",'percent');
        my($width,$hight)=max_win_size();
 
        my $window =  def_popwin_size(.7*$width,.7*$hight,"Interface parameter setting");
 
        my $table=def_table(7,6,FALSE);
        my $table=def_table(7,6,FALSE);
        my $ok = def_image_button('icons/select.png','OK');
        my $ok = def_image_button('icons/select.png','OK');
 
 
 
 
 
 
Line 1562... Line 1580...
 
 
 
 
}
}
 
 
 
 
 
sub write_ip{
 
        my $ipgen=shift;
 
        my $name=$ipgen->ipgen_get("module_name");
 
        my $category=$ipgen->ipgen_get("category");
 
        my $ip_name= $ipgen->ipgen_get("ip_name");
 
        my $dir = Cwd::getcwd();
 
 
 
        #Increase IP version
 
        my $v=$ipgen->object_get_attribute("version",undef);
 
        $v = 0 if(!defined $v);
 
        $v++;
 
        $ipgen->object_add_attribute("version",undef,$v);
 
        #print "$v\n";
 
 
 
        # Write
 
        mkpath("$dir/lib/ip/$category/",1,01777);
 
        open(FILE,  ">lib/ip/$category/$ip_name.IP") || die "Can not open: $!";
 
        print FILE perl_file_header("$ip_name.IP");
 
        print FILE Data::Dumper->Dump([\%$ipgen],[$name]);
 
        close(FILE) || die "Error closing file: $!";
 
        my $message="IP $ip_name has been generated successfully. In order to see the generated IP in processing tile generator you need to reset the ProNoC. Do you want to reset the ProNoC now?" ;
 
 
 
        my $dialog = Gtk2::MessageDialog->new (my $window,
 
                     'destroy-with-parent',
 
                     'question', # message type
 
                     'yes-no', # which set of buttons?
 
                     "$message");
 
        my $response = $dialog->run;
 
        if ($response eq 'yes') {
 
                exec($^X, $0, @ARGV);# reset ProNoC to apply changes    
 
        }
 
        $dialog->destroy;
 
 
 
}
 
 
 
 
 
 
sub generate_ip{
sub generate_ip{
        my $ipgen=shift;
        my $ipgen=shift;
Line 1574... Line 1625...
        my $category=$ipgen->ipgen_get("category");
        my $category=$ipgen->ipgen_get("category");
        my $ip_name= $ipgen->ipgen_get("ip_name");
        my $ip_name= $ipgen->ipgen_get("ip_name");
        my $dir = Cwd::getcwd();
        my $dir = Cwd::getcwd();
 
 
 
 
 
 
        #check if name has been set
        #check if name has been set
        if(defined ($name) && defined ($category)){
        if(defined ($name) && defined ($category)){
                if (!defined $ip_name) {$ip_name= $name}
                if (!defined $ip_name) {$ip_name= $name}
 
                my $error = check_verilog_identifier_syntax($ip_name);
 
                if ( defined $error ){
 
                        message_dialog("The IP name \"$ip_name\" is given with an unacceptable formatting. This name will be used as a verilog module name so it must follow Verilog identifier declaration formatting:\n $error");
 
                        return ;
 
                }
 
 
 
 
 
 
                #check if any source file has been added for this ip
                #check if any source file has been added for this ip
                my @l=$ipgen->ipgen_get_list("hdl_files");
                my @l=$ipgen->ipgen_get_list("hdl_files");
                if( scalar @l ==0){
                if( scalar @l ==0){
                        my $mwindow;
                        my $mwindow;
                        my $dialog = Gtk2::MessageDialog->new ($mwindow,
                        my $dialog = Gtk2::MessageDialog->new ($mwindow,
Line 1588... Line 1648...
                                      'question', # message type
                                      'question', # message type
                                      'yes-no', # which set of buttons?
                                      'yes-no', # which set of buttons?
                                      "No hdl library file has been set for this IP. Do you want to generate this IP?");
                                      "No hdl library file has been set for this IP. Do you want to generate this IP?");
                        my $response = $dialog->run;
                        my $response = $dialog->run;
                        if ($response eq 'yes') {
                        if ($response eq 'yes') {
                        # Write
                                write_ip($ipgen);
                                mkpath("$dir/lib/ip/$category/",1,01777);
 
                                open(FILE,  ">lib/ip/$category/$ip_name.IP") || die "Can not open: \">lib/ip/$category/$ip_name.IP\" $!";
 
                                print FILE perl_file_header("$ip_name.IP");
 
                                print FILE Data::Dumper->Dump([\%$ipgen],[$name]);
 
                                close(FILE) || die "Error closing file: $!";
 
                                my $message="IP $ip_name has been generated successfully" ;
 
                                message_dialog($message);
 
                                exec($^X, $0, @ARGV);# reset ProNoC to apply changes
 
                        }
                        }
                        $dialog->destroy;
                        $dialog->destroy;
 
 
 
 
                        #$dialog->show_all;
                        #$dialog->show_all;
 
 
                }else{
                }else{
                        # Write
 
                        mkpath("$dir/lib/ip/$category/",1,01777);
                        write_ip($ipgen);
                        open(FILE,  ">lib/ip/$category/$ip_name.IP") || die "Can not open: $!";
 
                        print FILE perl_file_header("$ip_name.IP");
 
                        print FILE Data::Dumper->Dump([\%$ipgen],[$name]);
 
                        close(FILE) || die "Error closing file: $!";
 
                        my $message="IP $ip_name has been generated successfully" ;
 
                        message_dialog($message);
 
                        exec($^X, $0, @ARGV);# reset ProNoC to apply changes
 
                }
                }
        }else{
        }else{
                my $message;
                my $message;
                if(!defined ($name)){ $message="Input file has not been selected yet.\nNothing has been generated!" ;}
                if(!defined ($name)){ $message="Input file has not been selected yet.\nNothing has been generated!" ;}
                elsif(!defined ($category)){ $message="Category must be defined!" ;}
                elsif(!defined ($category)){ $message="Category must be defined!" ;}
Line 1695... Line 1742...
${BASE}: is the wishbone base addresse(s) and will be added during soc generation to system.h. If more than one slave wishbone bus are used  define them as ${BASE0}, ${BASE1}... .
${BASE}: is the wishbone base addresse(s) and will be added during soc generation to system.h. If more than one slave wishbone bus are used  define them as ${BASE0}, ${BASE1}... .
'
'
;
;
        my $var_help=gen_button_message($var_list,"icons/info.png","Global variables");
        my $var_help=gen_button_message($var_list,"icons/info.png","Global variables");
 
 
        my($width,$hight)=max_win_size();
 
        my $window = def_popwin_size($width*2/3,$hight*2/3,$title);
        my $window = def_popwin_size(75,75,$title,'percent');
 
 
        my $notebook=source_notebook($ipgen,$info,$window,$page,$dest,$page_info_ref);
        my $notebook=source_notebook($ipgen,$info,$window,$page,$dest,$page_info_ref);
        my $table=def_table (15, 15, FALSE);
        my $table=def_table (15, 15, FALSE);
 
 
 
 
Line 1860... Line 1907...
        my ($ipgen,$info,$window,$page_info_ref)=@_;
        my ($ipgen,$info,$window,$page_info_ref)=@_;
        my %page_info=%{$page_info_ref};
        my %page_info=%{$page_info_ref};
        #my $hdr = $ipgen->ipgen_get_hdr();
        #my $hdr = $ipgen->ipgen_get_hdr();
        my  $hdr = $ipgen-> ipgen_get($page_info{filed_name});
        my  $hdr = $ipgen-> ipgen_get($page_info{filed_name});
        my $table = Gtk2::Table->new (14, 15, FALSE);
        my $table = Gtk2::Table->new (14, 15, FALSE);
        #my $window=def_popwin_size(600,600,"Add header file");
 
        my ($scrwin,$text_view)=create_text();
        my ($scrwin,$text_view)=create_text();
 
 
        my $help=gen_label_help($page_info{help});
        my $help=gen_label_help($page_info{help});
        $table->attach ($help,0,8,0,1,'expand','shrink',2,2);
        $table->attach ($help,0,8,0,1,'expand','shrink',2,2);
        $table->attach_defaults($scrwin,0,15,1,14);
        $table->attach_defaults($scrwin,0,15,1,14);
Line 1980... Line 2026...
        set_gui_status($ipgen,"ideal",0);
        set_gui_status($ipgen,"ideal",0);
 
 
        #  The main table containg the lib tree, selected modules and info section 
        #  The main table containg the lib tree, selected modules and info section 
        my $main_table = def_table (15, 12, FALSE);
        my $main_table = def_table (15, 12, FALSE);
 
 
 
 
 
 
 
 
 
 
 
        #my $vpaned = Gtk2::VPaned -> new;
 
        #$table->attach_defaults ($vpaned,0, 10, 0,1);
 
        #my $make = def_image_button('icons/run.png','Compile');
 
        #$table->attach ($make,9, 10, 1,2,'shrink','shrink',0,0);
 
        #$make -> signal_connect("clicked" => sub{
 
                #$self->do_save();
 
                #run_make_file($sw,$tview);     
 
 
 
        #});
 
 
 
        #$window -> add ( $table);
 
 
 
        #my($width,$hight)=max_win_size();
 
 
 
        #my $scwin_dirs = Gtk2::ScrolledWindow -> new;
 
        #$scwin_dirs -> set_policy ('automatic', 'automatic');
 
 
 
 
 
 
 
 
 
 
 
 
        # The box which holds the info, warning, error ...  mesages
        # The box which holds the info, warning, error ...  mesages
        my ($infobox,$info)= create_text();
        my ($infobox,$info)= create_text();
 
 
 
 
        my $refresh_dev_win = Gtk2::Button->new_from_stock('ref');
        my $refresh_dev_win = Gtk2::Button->new_from_stock('ref');
Line 2007... Line 2079...
 
 
        #my  $device_win=show_active_dev($soc,$lib,$infc,\$refresh_dev_win,$info);
        #my  $device_win=show_active_dev($soc,$lib,$infc,\$refresh_dev_win,$info);
 
 
 
 
        #$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 ($tree_box , 0, 2, 0, 13);
 
        $main_table->attach_defaults ($file_info , 2, 12, 0, 2);
 
        $main_table->attach_defaults ($intfc_info , 2, 12, 2, 6);
 
 
 
        $main_table->attach_defaults ($port_info  , 2, 12, 6,13);
        my $v1=gen_vpaned($file_info,.2,$intfc_info);
        $main_table->attach_defaults ($infobox  , 0, 12, 13,14);
        my $v2=gen_vpaned($v1,.4,$port_info);
 
        my $h1=gen_hpaned($tree_box,.15,$v2);
 
        my $v3=gen_vpaned($h1,.6,$infobox);
 
 
 
 
 
        #$main_table->attach_defaults ($tree_box , 0, 2, 0, 13);
 
        #$main_table->attach_defaults ($file_info , 2, 12, 0, 2);
 
        #$main_table->attach_defaults ($intfc_info , 2, 12, 2, 6);
 
 
 
        #$main_table->attach_defaults ($port_info  , 2, 12, 6,13);
 
        #$main_table->attach_defaults ($infobox  , 0, 12, 13,14);
 
        $main_table->attach_defaults  ($v3, 0, 12, 0,14);
        $main_table->attach ($generate, 6, 8, 14,15,'expand','shrink',2,2);
        $main_table->attach ($generate, 6, 8, 14,15,'expand','shrink',2,2);
        $main_table->attach ($open,0, 1, 14,15,'expand','shrink',2,2);
        $main_table->attach ($open,0, 1, 14,15,'expand','shrink',2,2);
 
 
        #check soc status every 0.5 second. referesh device table if there is any changes 
        #check soc status every 0.5 second. referesh device table if there is any changes 
Glib::Timeout->add (100, sub{
Glib::Timeout->add (100, sub{

powered by: WebSVN 2.1.0

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