Line 16... |
Line 16... |
|
|
|
|
require "widget.pl";
|
require "widget.pl";
|
require "readme_gen.pl";
|
require "readme_gen.pl";
|
|
|
use String::Similarity;
|
|
|
|
|
|
sub find_the_most_similar_position{
|
|
my ($item ,@list)=@_;
|
|
my $most_similar_pos=0;
|
|
my $lastsim=0;
|
|
my $i=0;
|
|
# convert item to lowercase
|
|
$item = lc $item;
|
|
foreach my $p(@list){
|
|
my $similarity= similarity $item, $p;
|
|
if ($similarity > $lastsim){
|
|
$lastsim=$similarity;
|
|
$most_similar_pos=$i;
|
|
}
|
|
$i++;
|
|
}
|
|
return $most_similar_pos;
|
|
}
|
|
|
|
|
|
use constant DISPLY_COLUMN => 0;
|
use constant DISPLY_COLUMN => 0;
|
use constant CATGR_COLUMN => 1;
|
use constant CATGR_COLUMN => 1;
|
use constant INTFC_COLUMN => 2;
|
use constant INTFC_COLUMN => 2;
|
use constant ITAL_COLUMN => 3;
|
use constant ITAL_COLUMN => 3;
|
Line 79... |
Line 60... |
|
|
|
|
|
|
$ipgen->ipgen_add("module_name",$modules[0]);
|
$ipgen->ipgen_add("module_name",$modules[0]);
|
$ipgen->ipgen_set_module_list(@modules);
|
$ipgen->ipgen_set_module_list(@modules);
|
load_deafult_setting($ipgen,$modules[0]);
|
load_default_setting($ipgen,$modules[0]);
|
|
|
|
|
set_gui_status($ipgen,"file_selected",1);
|
set_gui_status($ipgen,"file_selected",1);
|
show_info(\$info,"Select the module which contain the interface ports\n ");
|
show_info(\$info,"Select the module which contain the interface ports\n ");
|
|
|
Line 350... |
Line 331... |
|
|
|
|
$combo->signal_connect("changed"=> sub{
|
$combo->signal_connect("changed"=> sub{
|
|
|
my $module= $combo->get_active_text();
|
my $module= $combo->get_active_text();
|
load_deafult_setting($ipgen,$module);
|
load_default_setting($ipgen,$module);
|
set_gui_status($ipgen,'intfc_changed',0);
|
set_gui_status($ipgen,'intfc_changed',0);
|
|
|
|
|
});
|
});
|
|
|
Line 375... |
Line 356... |
|
|
});
|
});
|
$header_h->signal_connect("clicked"=> sub{
|
$header_h->signal_connect("clicked"=> sub{
|
my %page_info;
|
my %page_info;
|
my $help1="The files and folder that selected here will be copied in genertated processing tile SW folder.";
|
my $help1="The files and folder that selected here will be copied in genertated processing tile SW folder.";
|
my $help2="The file listed here can contain some variable with \${var_name} format. The file genertor will replace them with their values during file generation. The variable can be selected from above listed global vairable";
|
my $help2="The file listed here can contain some variable with \${var_name} format. The file genertor will replace them with their values during file generation. The variable can be selected from above listed global vairables";
|
my $help3='Define the header file for this peripheral device. You can use global vriables listed at the top.
|
my $help3='Define the header file for this peripheral device. You can use global vriables listed at the top.
|
|
|
header file example
|
header file example
|
|
|
#define ${IP}_REG_0 (*((volatile unsigned int *) ($BASE)))
|
#define ${IP}_REG_0 (*((volatile unsigned int *) ($BASE)))
|
Line 395... |
Line 376... |
$page_info{0}{filed_type}= "exsiting_file/folder";
|
$page_info{0}{filed_type}= "exsiting_file/folder";
|
$page_info{0}{rename_file}=undef;
|
$page_info{0}{rename_file}=undef;
|
$page_info{0}{folder_en}=1;
|
$page_info{0}{folder_en}=1;
|
$page_info{0}{help}=$help1;
|
$page_info{0}{help}=$help1;
|
|
|
$page_info{1}{page_name} = "_Add file generator(s)";
|
$page_info{1}{page_name} = "_Add files contain variables";
|
$page_info{1}{filed_name}= "gen_sw_files";
|
$page_info{1}{filed_name}= "gen_sw_files";
|
$page_info{1}{filed_type}= "file_generators";
|
$page_info{1}{filed_type}= "file_with_variables";
|
$page_info{1}{rename_file}=1;
|
$page_info{1}{rename_file}=1;
|
$page_info{1}{folder_en}=0;
|
$page_info{1}{folder_en}=0;
|
$page_info{1}{help}=$help2;
|
$page_info{1}{help}=$help2;
|
|
|
$page_info{2}{page_name} = "_Add to system.h";
|
$page_info{2}{page_name} = "_Add to tile.h";
|
$page_info{2}{filed_name}= "system_h";
|
$page_info{2}{filed_name}= "system_h";
|
$page_info{2}{filed_type}= "file_content";
|
$page_info{2}{filed_type}= "file_content";
|
$page_info{2}{rename_file}=undef;
|
$page_info{2}{rename_file}=undef;
|
$page_info{2}{folder_en}=0;
|
$page_info{2}{folder_en}=0;
|
$page_info{2}{help}=$help3;
|
$page_info{2}{help}=$help3;
|
Line 416... |
Line 397... |
#get_software_file($ipgen,$info,0);
|
#get_software_file($ipgen,$info,0);
|
|
|
});
|
});
|
$lib_hdl->signal_connect("clicked"=> sub{
|
$lib_hdl->signal_connect("clicked"=> sub{
|
my $help1="The files and folder that selected here will be copied in genertated processing tile RTL folder.";
|
my $help1="The files and folder that selected here will be copied in genertated processing tile RTL folder.";
|
|
my $help2="The file listed here can contain some variable with \${var_name} format. The file genertor will replace them with their values during file generation. The variable can be selected from above listed global vairables";
|
my %page_info;
|
my %page_info;
|
$page_info{0}{page_name} = "_Add exsiting HDL file/folder";
|
$page_info{0}{page_name} = "_Add exsiting HDL file/folder";
|
$page_info{0}{filed_name}= "hdl_files";
|
$page_info{0}{filed_name}= "hdl_files";
|
$page_info{0}{filed_type}= "exsiting_file/folder";
|
$page_info{0}{filed_type}= "exsiting_file/folder";
|
$page_info{0}{rename_file}=undef;
|
$page_info{0}{rename_file}=undef;
|
$page_info{0}{folder_en}=1;
|
$page_info{0}{folder_en}=1;
|
$page_info{0}{help}=$help1;
|
$page_info{0}{help}=$help1;
|
|
|
|
$page_info{1}{page_name} = "_Add files contain variables";
|
|
$page_info{1}{filed_name}= "gen_hw_files";
|
|
$page_info{1}{filed_type}= "file_with_variables";
|
|
$page_info{1}{rename_file}=1;
|
|
$page_info{1}{folder_en}=0;
|
|
$page_info{1}{help}=$help2;
|
|
|
get_source_file($ipgen,$info,0,"Add HDL file(s)", "hw",\%page_info);
|
get_source_file($ipgen,$info,0,"Add HDL file(s)", "hw",\%page_info);
|
|
|
#get_hdl_file($ipgen,$info);
|
#get_hdl_file($ipgen,$info);
|
|
|
|
|
});
|
});
|
}
|
}
|
|
|
sub load_deafult_setting{
|
sub load_default_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_verilog_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";
|
|
|
#add deafult parameter setting
|
#add default parameter setting
|
$ipgen->ipgen_remove_all_parameters();
|
$ipgen->ipgen_remove_all_parameters();
|
foreach my $p (keys %parameters){
|
foreach my $p (keys %parameters){
|
#print "$p\n";
|
#print "$p\n";
|
my $v = $parameters{$p};
|
my $v = $parameters{$p};
|
$v =~s/[\n]//gs;
|
$v =~s/[\n]//gs;
|
Line 617... |
Line 606... |
my @positions=(0,1,2,3,4,5,6,7,8);
|
my @positions=(0,1,2,3,4,5,6,7,8);
|
my $col=0;
|
my $col=0;
|
#title
|
#title
|
my @title;
|
my @title;
|
$title[0]=gen_label_in_center("Parameter name");
|
$title[0]=gen_label_in_center("Parameter name");
|
$title[1]=gen_label_in_center("Deafult value");
|
$title[1]=gen_label_in_center("Default value");
|
$title[2]=gen_label_help($type_info,"Widget type");
|
$title[2]=gen_label_help($type_info,"Widget type");
|
$title[3]=gen_label_help($content_info,"Widget content");
|
$title[3]=gen_label_help($content_info,"Widget content");
|
$title[4]=gen_label_help($param_info);
|
$title[4]=gen_label_help($param_info,"Type");
|
$title[5]=gen_label_help($redefine_info);
|
$title[5]=gen_label_help($redefine_info,"");
|
$title[6]=gen_label_help("You can add aditional information about this parameter.","info");
|
$title[6]=gen_label_help("You can add aditional information about this parameter.","info");
|
$title[7]=gen_label_in_center("add/remove");
|
$title[7]=gen_label_in_center("add/remove");
|
|
|
|
|
foreach my $t (@title){
|
foreach my $t (@title){
|
Line 657... |
Line 646... |
|
|
my $row=1;
|
my $row=1;
|
my $error;
|
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_default,$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_default,$saved_type,$saved_content)\n";
|
my $parameter_box = def_hbox(TRUE,5);
|
my $parameter_box = def_hbox(TRUE,5);
|
my $param_name;
|
my $param_name;
|
my $add_remove;
|
my $add_remove;
|
if($p ne "#new#"){
|
if($p ne "#new#"){
|
$param_name= def_label($p);
|
$param_name= def_label($p);
|
Line 670... |
Line 659... |
} else {
|
} else {
|
$param_name= gen_entry();
|
$param_name= gen_entry();
|
$add_remove=def_image_button("icons/plus.png","add");
|
$add_remove=def_image_button("icons/plus.png","add");
|
}
|
}
|
|
|
my $deafult_entry= gen_entry($saved_deafult);
|
my $default_entry= gen_entry($saved_default);
|
my $pos=(defined $saved_widget_type ) ? get_scolar_pos( $saved_widget_type,@widget_type_list) : 0;
|
my $pos=(defined $saved_widget_type ) ? get_scolar_pos( $saved_widget_type,@widget_type_list) : 0;
|
my $widget_type_combo=gen_combo(\@widget_type_list, $pos);
|
my $widget_type_combo=gen_combo(\@widget_type_list, $pos);
|
my $content_entry= gen_entry($saved_content);
|
my $content_entry= gen_entry($saved_content);
|
|
|
|
|
Line 701... |
Line 690... |
|
|
my $info=def_image_button("icons/add_info.png");
|
my $info=def_image_button("icons/add_info.png");
|
#print "\$vfile_param_type =$vfile_param_type\n";
|
#print "\$vfile_param_type =$vfile_param_type\n";
|
|
|
$col=0;
|
$col=0;
|
my @all_widget=($param_name,$deafult_entry,$widget_type_combo,$content_entry,$check_param,$check_redefine,$info,$add_remove);
|
my @all_widget=($param_name,$default_entry,$widget_type_combo,$content_entry,$check_param,$check_redefine,$info,$add_remove);
|
foreach my $t (@all_widget){
|
foreach my $t (@all_widget){
|
$table->attach ($t, $positions[$col], $positions[$col+1], $row, $row+1,'expand','shrink',2,2);$col++;
|
$table->attach ($t, $positions[$col], $positions[$col+1], $row, $row+1,'expand','shrink',2,2);$col++;
|
|
|
}
|
}
|
|
|
Line 716... |
Line 705... |
});
|
});
|
|
|
|
|
$ok->signal_connect (clicked => sub{
|
$ok->signal_connect (clicked => sub{
|
if($p ne "#new#"){
|
if($p ne "#new#"){
|
my $deafult=$deafult_entry->get_text();
|
my $default=$default_entry->get_text();
|
my $type= $widget_type_combo->get_active_text();
|
my $type= $widget_type_combo->get_active_text();
|
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,$default,$type,$content,$saved_info,$vfile_param_type,$redefine_param);
|
|
|
if ($type eq "Spin-button"){
|
if ($type eq "Spin-button"){
|
my @d=split(",",$content);
|
my @d=split(",",$content);
|
if( scalar @d != 3){
|
if( scalar @d != 3){
|
$error=$error."wrong content setting for parameter $p\n" ;
|
$error=$error."wrong content setting for parameter $p\n" ;
|
Line 741... |
Line 730... |
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();
|
$param=remove_all_white_spaces($param);
|
$param=remove_all_white_spaces($param);
|
|
|
if( length($param) ){
|
if( length($param) ){
|
my $deafult=$deafult_entry->get_text();
|
my $default=$default_entry->get_text();
|
my $type=$widget_type_combo->get_active_text();
|
my $type=$widget_type_combo->get_active_text();
|
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($param,$deafult,$type,$content,$saved_info,$vfile_param_type,$redefine_param);
|
$ipgen->ipgen_add_parameter($param,$default,$type,$content,$saved_info,$vfile_param_type,$redefine_param);
|
$ipgen->ipgen_push_parameters_order($param);
|
$ipgen->ipgen_push_parameters_order($param);
|
set_gui_status($ipgen,"change_parameter",0);
|
set_gui_status($ipgen,"change_parameter",0);
|
$ok->clicked;
|
$ok->clicked;
|
#$window->destroy();
|
#$window->destroy();
|
}
|
}
|
Line 1598... |
Line 1587... |
|
|
# Write
|
# Write
|
mkpath("$dir/lib/ip/$category/",1,01777);
|
mkpath("$dir/lib/ip/$category/",1,01777);
|
open(FILE, ">lib/ip/$category/$ip_name.IP") || die "Can not open: $!";
|
open(FILE, ">lib/ip/$category/$ip_name.IP") || die "Can not open: $!";
|
print FILE perl_file_header("$ip_name.IP");
|
print FILE perl_file_header("$ip_name.IP");
|
print FILE Data::Dumper->Dump([\%$ipgen],[$name]);
|
print FILE Data::Dumper->Dump([\%$ipgen],["ipgen"]);
|
close(FILE) || die "Error closing file: $!";
|
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 $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,
|
my $dialog = Gtk2::MessageDialog->new (my $window,
|
'destroy-with-parent',
|
'destroy-with-parent',
|
Line 1769... |
Line 1758... |
my $notebook = Gtk2::Notebook->new;
|
my $notebook = Gtk2::Notebook->new;
|
my %page_info=%{$page_info_ref};
|
my %page_info=%{$page_info_ref};
|
foreach my $p (sort keys %page_info){
|
foreach my $p (sort keys %page_info){
|
my $page_ref;
|
my $page_ref;
|
$page_ref=get_file_folder($ipgen,$info,$window,$p,$page_info_ref) if($page_info{$p}{filed_type} eq "exsiting_file/folder");
|
$page_ref=get_file_folder($ipgen,$info,$window,$p,$page_info_ref) if($page_info{$p}{filed_type} eq "exsiting_file/folder");
|
$page_ref=get_file_folder($ipgen,$info,$window,$p,$page_info_ref) if($page_info{$p}{filed_type} eq "file_generators");
|
$page_ref=get_file_folder($ipgen,$info,$window,$p,$page_info_ref) if($page_info{$p}{filed_type} eq "file_with_variables");
|
$page_ref=get_file_content($ipgen,$info,$window,$page_info{$p},$page_info_ref) if($page_info{$p}{filed_type} eq "file_content");
|
$page_ref=get_file_content($ipgen,$info,$window,$page_info{$p},$page_info_ref) if($page_info{$p}{filed_type} eq "file_content");
|
$notebook->append_page ($page_ref,Gtk2::Label->new_with_mnemonic ($page_info{$p}{page_name}));
|
$notebook->append_page ($page_ref,Gtk2::Label->new_with_mnemonic ($page_info{$p}{page_name}));
|
|
|
}
|
}
|
$notebook->show_all;
|
$notebook->show_all;
|