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{
|