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

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

Rev 34 Rev 38
Line 150... Line 150...
        $row++;
        $row++;
        foreach my $p (@parameters){
        foreach my $p (@parameters){
                my ($default,$type,$content,$info)= $ip->ip_get_parameter($category,$module,$p);
                my ($default,$type,$content,$info)= $ip->ip_get_parameter($category,$module,$p);
 
 
                my $value=$param_value{$p};
                my $value=$param_value{$p};
 
                #$value = $default if (!defined $value && defined $default);
 
                #print "$value\n";
                if ($type eq "File_Entry"){
                if ($type eq "File_Entry"){
                        my $entry=gen_entry($value);
                        my $entry=gen_entry($value);
                        my $brows=get_file_name(undef,undef,$entry,undef,undef,undef,undef,undef);
                        my $brows=get_file_name(undef,undef,$entry,undef,undef,undef,undef,undef);
                        my $box=def_hbox(TRUE,0);
                        my $box=def_hbox(TRUE,0);
                        $box->pack_start($entry,FALSE,FALSE,3);
                        $box->pack_start($entry,FALSE,FALSE,3);
Line 979... Line 981...
                # Write memory prog file
                # Write memory prog file
                open(FILE,  ">lib/verilog/write_memory.sh") || die "Can not open: $!";
                open(FILE,  ">lib/verilog/write_memory.sh") || die "Can not open: $!";
                print FILE $prog;
                print FILE $prog;
                close(FILE) || die "Error closing file: $!";
                close(FILE) || die "Error closing file: $!";
 
 
 
                #generate prog_mem
 
                open(FILE,  ">lib/verilog/program.sh") || die "Can not open: $!";
 
                print FILE soc_mem_prog();
 
                close(FILE) || die "Error closing file: $!";
 
 
 
 
 
 
                my $dir = Cwd::getcwd();
                my $dir = Cwd::getcwd();
                my $project_dir   = abs_path("$dir/../../");
                my $project_dir   = abs_path("$dir/../../");
                if($gen_hw_lib){
                if($gen_hw_lib){
 
 
                        #make target dir
                        #make target dir
Line 1003... Line 1012...
                        copy_file_and_folders(\@jtags,$project_dir,$hw_lib);
                        copy_file_and_folders(\@jtags,$project_dir,$hw_lib);
                        move ("$dir/lib/verilog/$name.v","$hw_path/");
                        move ("$dir/lib/verilog/$name.v","$hw_path/");
                        move ("$dir/lib/verilog/${name}_top.v","$hw_path/");
                        move ("$dir/lib/verilog/${name}_top.v","$hw_path/");
                        move ("$dir/lib/verilog/README" ,"$sw_path/");
                        move ("$dir/lib/verilog/README" ,"$sw_path/");
                        move ("$dir/lib/verilog/write_memory.sh" ,"$sw_path/");
                        move ("$dir/lib/verilog/write_memory.sh" ,"$sw_path/");
 
                        move ("$dir/lib/verilog/program.sh" ,"$sw_path/");
                }
                }
 
 
                # Copy Software files
                # Copy Software files
                my ($file_ref,$warnings)= get_all_files_list($soc,"sw_files");
                my ($file_ref,$warnings)= get_all_files_list($soc,"sw_files");
                copy_file_and_folders($file_ref,$project_dir,$sw_path);
                copy_file_and_folders($file_ref,$project_dir,$sw_path);
 
 
                # Write system.h and Software gen files
                # Write system.h and Software gen files
                generate_header_file($soc,$project_dir,$sw_path,$dir);
                generate_header_file($soc,$project_dir,$sw_path,$hw_path,$dir);
 
 
 
 
 
 
 
 
 
 
Line 1494... Line 1504...
        my $new_v=$ip->ip_get($category,$module,"version");
        my $new_v=$ip->ip_get($category,$module,"version");
        $new_v=0 if(!defined $new_v);
        $new_v=0 if(!defined $new_v);
        return ($old_v,$new_v);
        return ($old_v,$new_v);
}
}
 
 
 
sub check_for_ni{
 
        my $self=shift;
 
        my $ckeck=0;
 
        my @instances=$self->soc_get_all_instances();
 
        foreach my $id (@instances){
 
                my $category = $self->soc_get_category($id);
 
                if ($category eq 'NoC') {
 
                $ckeck=1;
 
                }
 
        }
 
        return $ckeck;
 
 
 
}
 
 
 
 
sub get_ram_init{
sub get_ram_init{
        my $soc=shift;
        my $soc=shift;
        my $window = def_popwin_size(80,50,"Memory initial file setting setting",'percent');
        my $window = def_popwin_size(80,50,"Memory initial file setting setting",'percent');
Line 1538... Line 1560...
 
 
sub software_edit_soc {
sub software_edit_soc {
        my $soc=shift;
        my $soc=shift;
        my $name=$soc->object_get_attribute('soc_name');
        my $name=$soc->object_get_attribute('soc_name');
        if (length($name)==0){
        if (length($name)==0){
                message_dialog("Please define the SoC name!");
                message_dialog("Please define the Tile name!");
                return ;
                return ;
        }
        }
        my $target_dir  = "$ENV{'PRONOC_WORK'}/SOC/$name";
        my $target_dir  = "$ENV{'PRONOC_WORK'}/SOC/$name";
        my $sw  = "$target_dir/sw";
        my $sw  = "$target_dir/sw";
        my ($app,$table,$tview) = software_main($sw);
        my ($app,$table,$tview) = software_main($sw);
Line 1550... Line 1572...
 
 
 
 
 
 
        my $make = def_image_button('icons/gen.png','Compile');
        my $make = def_image_button('icons/gen.png','Compile');
        my $regen=def_image_button('icons/refresh.png','Regenerate main.c');
        my $regen=def_image_button('icons/refresh.png','Regenerate main.c');
 
        my $prog= def_image_button('icons/write.png','Program the memory');
 
 
        $table->attach ($regen,0, 1, 1,2,'shrink','shrink',0,0);
        $table->attach ($regen,0, 1, 1,2,'shrink','shrink',0,0);
        $table->attach ($make,9, 10, 1,2,'shrink','shrink',0,0);
        $table->attach ($make,5, 6, 1,2,'shrink','shrink',0,0);
 
        $table->attach ($prog,9, 10, 1,2,'shrink','shrink',0,0);
        $regen -> signal_connect ("clicked" => sub{
        $regen -> signal_connect ("clicked" => sub{
                my $dialog = Gtk2::MessageDialog->new (my $window,
                my $dialog = Gtk2::MessageDialog->new (my $window,
                                      'destroy-with-parent',
                                      'destroy-with-parent',
                                      'question', # message type
                                      'question', # message type
                                      'yes-no', # which set of buttons?
                                      'yes-no', # which set of buttons?
                                      "Are you sure you want to regenaret the Top.v file? Note that any changes you have made will be lost");
                                      "Are you sure you want to regenaret the main.c file? Note that any changes you have made will be lost");
                my $response = $dialog->run;
                my $response = $dialog->run;
                if ($response eq 'yes') {
                if ($response eq 'yes') {
 
 
                        save_file ("$sw/main.c",main_c_template($name));
                        save_file ("$sw/main.c",main_c_template($name));
                        $app->load_source("$sw/main.c");
                        $app->load_source("$sw/main.c");
                }
                }
 
                $dialog->destroy;
 
 
        });
        });
 
 
        $make -> signal_connect("clicked" => sub{
        $make -> signal_connect("clicked" => sub{
                $app->do_save();
                $app->do_save();
                run_make_file($sw,$tview);
                run_make_file($sw,$tview);
 
 
        });
        });
 
 
 
        #Programe the board 
 
        $prog-> signal_connect("clicked" => sub{
 
                my $error = 0;
 
                my $bash_file="$target_dir/sw/program.sh";
 
 
 
                add_info(\$tview,"Programe the board using quartus_pgm and $bash_file file\n");
 
                #check if the programming file exists
 
                unless (-f $bash_file) {
 
                        add_colored_info(\$tview,"\tThe $bash_file does not exists! \n", 'red');
 
                        $error=1;
 
                }
 
 
 
                return if($error);
 
                my $command = "cd $target_dir/sw; sh program.sh";
 
                add_info(\$tview,"$command\n");
 
                my ($stdout,$exit,$stderr)=run_cmd_in_back_ground_get_stdout($command);
 
                if(length $stderr>1){
 
                        add_colored_info(\$tview,"$stderr\n",'red');
 
                        add_colored_info(\$tview,"Memory was not programed successfully!\n",'red');
 
                }else {
 
 
 
                        if($exit){
 
                                add_colored_info(\$tview,"$stdout\n",'red');
 
                                add_colored_info(\$tview,"Memory was not programed successfully!\n",'red');
 
                        }else{
 
                                add_info(\$tview,"$stdout\n");
 
                                add_colored_info(\$tview,"Memory is programed successfully!\n",'blue');
 
 
 
                        }
 
 
 
                }
 
        });
 
 
 
}
 
 
 
 
 
sub soc_mem_prog {
 
         my $string='
 
#!/bin/sh
 
 
 
 
 
#JTAG_INTFC="$PRONOC_WORK/toolchain/bin/JTAG_INTFC"
 
source ./jtag_intfc.sh
 
 
 
#reset and disable cpus, then release the reset but keep the cpus disabled
 
 
 
$JTAG_INTFC -n 127  -d  "I:1,D:2:3,D:2:2,I:0"
 
 
 
# jtag instruction
 
#       0: bypass
 
#       1: getting data
 
# jtag data :
 
#       bit 0 is reset
 
#       bit 1 is disable
 
# I:1  set jtag_enable  in active mode
 
# D:2:3 load jtag_enable data register with 0x3 reset=1 disable=1
 
# D:2:2 load jtag_enable data register with 0x2 reset=0 disable=1
 
# I:0  set jtag_enable  in bypass mode
 
 
 
 
 
 
 
#programe the memory
 
 
 
        sh write_memory.sh
 
 
 
 
 
#Enable the cpu
 
$JTAG_INTFC -n 127  -d  "I:1,D:2:0,I:0"
 
# I:1  set jtag_enable  in active mode
 
# D:2:0 load jtag_enable data register with 0x0 reset=0 disable=0
 
# I:0  set jtag_enable  in bypass mode
 
';
 
return $string;
 
 
}
}
 
 
 
 
 
 
 
 
Line 1588... Line 1687...
 
 
        my $infc = interface->interface_new();
        my $infc = interface->interface_new();
        my $ip = ip->lib_new ();
        my $ip = ip->lib_new ();
        my $soc = soc->soc_new();
        my $soc = soc->soc_new();
        set_gui_status($soc,"ideal",0);
        set_gui_status($soc,"ideal",0);
 
 
        #my $soc= eval { do 'lib/soc/soc.SOC' };
        #my $soc= eval { do 'lib/soc/soc.SOC' };
        #message_dialog("$ENV{'PRONOC_WORK'}\n");
        #message_dialog("$ENV{'PRONOC_WORK'}\n");
 
 
        # main window
        # main window
        #my $window = def_win_size(1000,800,"Top");
        #my $window = def_win_size(1000,800,"Top");
Line 1614... Line 1714...
 
 
        my  $device_win=show_active_dev($soc,$ip,$infc,\$refresh_dev_win,$info);
        my  $device_win=show_active_dev($soc,$ip,$infc,\$refresh_dev_win,$info);
 
 
 
 
        my $generate = def_image_button('icons/gen.png','Generate RTL');
        my $generate = def_image_button('icons/gen.png','Generate RTL');
        my $compile  = def_image_button('icons/gate.jpg','Compile RTL');
        my $compile  = def_image_button('icons/gate.png','Compile RTL');
        my $software = def_image_button('icons/binary.png','Software');
        my $software = def_image_button('icons/binary.png','Software');
        my $diagram  = def_image_button('icons/diagram.png','Diagram');
        my $diagram  = def_image_button('icons/diagram.png','Diagram');
        my $ram      = def_image_button('icons/RAM.png','Memory');
        my $ram      = def_image_button('icons/RAM.png','Memory');
 
 
 
 
Line 1672... Line 1772...
 
 
        $generate-> signal_connect("clicked" => sub{
        $generate-> signal_connect("clicked" => sub{
                my $name=$soc->object_get_attribute('soc_name');
                my $name=$soc->object_get_attribute('soc_name');
 
 
                if (length($name)==0){
                if (length($name)==0){
                        message_dialog("Please define the SoC name!");
                        message_dialog("Please define the Tile name!");
                        return ;
                        return ;
                }
                }
 
 
 
 
                my @tmp=split('_',$name);
                my @tmp=split('_',$name);
Line 1695... Line 1795...
                my $sw_path     = "$target_dir/sw";
                my $sw_path     = "$target_dir/sw";
 
 
                $soc->object_add_attribute('global_param','CORE_ID',0);
                $soc->object_add_attribute('global_param','CORE_ID',0);
                generate_soc($soc,$info,$target_dir,$hw_dir,$sw_path,1,1);
                generate_soc($soc,$info,$target_dir,$hw_dir,$sw_path,1,1);
                #message_dialog("SoC \"$name\" has been created successfully at $target_dir/ " );
                #message_dialog("SoC \"$name\" has been created successfully at $target_dir/ " );
 
                my $has_ni= check_for_ni($soc);
 
                if($has_ni){
                my $dialog = Gtk2::MessageDialog->new (my $window,
                my $dialog = Gtk2::MessageDialog->new (my $window,
                                      'destroy-with-parent',
                                      'destroy-with-parent',
                                      'question', # message type
                                      'question', # message type
                                      'yes-no', # which set of buttons?
                                      'yes-no', # which set of buttons?
                                      "Processing Tile  \"$name\" has been created successfully at $target_dir/.  In order to see this tile in MPSoC Generator you need to restar the ProNoC. Do you ant to reset the ProNoC now?");
                                              "Processing Tile  \"$name\" has been created successfully at $target_dir/.  In order to include this tile in MPSoC Generator you need to restar the ProNoC. Do you ant to reset the ProNoC now?");
                my $response = $dialog->run;
                my $response = $dialog->run;
                if ($response eq 'yes') {
                if ($response eq 'yes') {
                        exec($^X, $0, @ARGV);# reset ProNoC to apply changes    
                        exec($^X, $0, @ARGV);# reset ProNoC to apply changes    
                }
                }
                $dialog->destroy;
                $dialog->destroy;
 
                } else {
 
                        message_dialog("Processing Tile  \"$name\" has been created successfully at $target_dir/.");
 
 
 
                }
 
 
 
 
 
 
 
 
        });
        });
Line 1725... Line 1829...
 
 
        });
        });
 
 
 
 
        $compile -> signal_connect("clicked" => sub{
        $compile -> signal_connect("clicked" => sub{
 
                $soc->object_add_attribute('compile','compilers',"QuartusII,Verilator,Modelsim");
                my $name=$soc->object_get_attribute('soc_name');
                my $name=$soc->object_get_attribute('soc_name');
                if (length($name)==0){
                if (length($name)==0){
                        message_dialog("Please define the SoC name!");
                        message_dialog("Please define the Tile name!");
                        return ;
                        return ;
                }
                }
                my $target_dir  = "$ENV{'PRONOC_WORK'}/SOC/$name";
                my $target_dir  = "$ENV{'PRONOC_WORK'}/SOC/$name";
 
                my $hw_dir      = "$target_dir/src_verilog";
 
                my $sw_path     = "$target_dir/sw";
                my $top         = "$target_dir/src_verilog/${name}_top.v";
                my $top         = "$target_dir/src_verilog/${name}_top.v";
                if (-f $top){
                if (-f $top){
 
                        generate_soc($soc,$info,$target_dir,$hw_dir,$sw_path,1,1);
                        select_compiler($soc,$name,$top,$target_dir);
                        select_compiler($soc,$name,$top,$target_dir);
                } else {
                } else {
                        message_dialog("Cannot find $top file. Please run RTL Generator first!");
                        message_dialog("Cannot find $top file. Please run RTL Generator first!");
                        return;
                        return;
                }
                }

powered by: WebSVN 2.1.0

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