#! /usr/bin/perl -w
|
#! /usr/bin/perl -w
|
use Glib qw/TRUE FALSE/;
|
use constant::boolean;
|
use strict;
|
use strict;
|
use warnings;
|
use warnings;
|
|
|
|
use FindBin;
|
|
use lib $FindBin::Bin;
|
|
|
use Data::Dumper;
|
use Data::Dumper;
|
use intfc_gen;
|
use intfc_gen;
|
use rvp;
|
use rvp;
|
use Gtk2;
|
|
|
|
|
|
|
|
require "widget.pl";
|
require "widget.pl";
|
|
|
|
|
sub read_file_modules{
|
sub read_file_modules{
|
my ($file,$intfc_gen,$info)=@_;
|
my ($file,$intfc_gen,$info)=@_;
|
|
|
if (!defined $file) {return; }
|
if (!defined $file) {
|
if (-e $file) {
|
add_colored_info($info,"No input file is given. Please set an input Verilog fle first.\n", 'red');
|
my $vdb = read_verilog_file($file);
|
return;
|
my @modules=sort $vdb->get_modules($file);
|
}
|
|
|
|
my $f=add_project_dir_to_addr($file);
|
|
if (-e $f) {
|
|
my $vdb = read_verilog_file($f);
|
|
my @modules=sort $vdb->get_modules($f);
|
#foreach my $p(@module_list) {print "$p\n"}
|
#foreach my $p(@module_list) {print "$p\n"}
|
$intfc_gen->intfc_set_interface_file($file);
|
$intfc_gen->intfc_set_interface_file($file);
|
$intfc_gen->intfc_set_module_name($modules[0]);
|
$intfc_gen->intfc_set_module_name($modules[0]);
|
$intfc_gen->intfc_add_module_list(@modules);
|
$intfc_gen->intfc_add_module_list(@modules);
|
|
|
set_gui_status($intfc_gen,"file_selected",1);
|
set_gui_status($intfc_gen,"file_selected",1);
|
show_info(\$info,"Select the module which contain the interface ports\n ");
|
add_info($info,"$f is loaded\n");
|
|
|
}
|
}
|
else {
|
else {
|
show_info(\$info,"File $file doese not exsit!\n ");
|
add_colored_info($info,"File $file does not exist!\n", 'red');
|
|
|
}
|
}
|
}
|
}
|
|
|
|
|
################
|
################
|
# check_input_intfc_file
|
# check_input_intfc_file
|
################
|
################
|
|
|
sub check_input_intfc_file{
|
sub check_input_intfc_file{
|
my ($file,$intfc_gen,$info)=@_;
|
my ($file,$intfc_gen,$info)=@_;
|
my ($name,$path,$suffix) = fileparse("$file",qr"\..[^.]*$");
|
my ($name,$path,$suffix) = fileparse("$file",qr"\..[^.]*$");
|
if($suffix eq '.ITC'){
|
if($suffix eq '.ITC'){
|
$intfc_gen->intfc_set_interface_file($file);
|
$intfc_gen->intfc_set_interface_file($file);
|
set_gui_status($intfc_gen,"load_file",0);
|
set_gui_status($intfc_gen,"load_file",0);
|
|
|
|
|
}else{
|
}else{
|
read_file_modules($file,$intfc_gen,$info);
|
read_file_modules($file,$intfc_gen,$info);
|
|
|
}
|
}
|
|
|
|
|
}
|
}
|
|
|
sub file_box {
|
sub file_box {
|
my ($intfc_gen,$info)=@_;
|
my ($intfc_gen,$info)=@_;
|
my $label = gen_label_in_left("Select file:");
|
my $label = gen_label_in_left("Select file:");
|
my $entry = Gtk2::Entry->new;
|
my $entry = gen_entry();
|
my $open= def_image_button("icons/select.png","Open");
|
my $open= def_image_button("icons/select.png","Open");
|
my $browse= def_image_button("icons/browse.png","Browse");
|
my $browse= def_image_button("icons/browse.png","Browse");
|
my $file= $intfc_gen->intfc_get_interface_file();
|
my $file= $intfc_gen->intfc_get_interface_file();
|
my $intfc_info= def_image_button("icons/add_info.png","Description");
|
my $intfc_info= def_image_button("icons/add_info.png","Description");
|
my $table = def_table(1,10,TRUE);
|
my $table = def_table(1,10,FALSE);
|
$intfc_info->signal_connect("clicked"=> sub{
|
$intfc_info->signal_connect("clicked"=> sub{
|
get_intfc_description($intfc_gen,$info);
|
get_intfc_description($intfc_gen,$info);
|
|
|
|
|
});
|
});
|
|
|
if(defined $file){$entry->set_text($file);}
|
if(defined $file){$entry->set_text($file);}
|
show_info(\$info,"Please select the verilog file containig the interface\n");
|
else {show_info($info,"Please select the Verilog file containing the interface\n");}
|
|
|
|
|
$browse->signal_connect("clicked"=> sub{
|
$browse->signal_connect("clicked"=> sub{
|
my $entry_ref=$_[1];
|
my $entry_ref=$_[1];
|
my $file;
|
my $file;
|
my $dialog = Gtk2::FileChooserDialog->new(
|
my $dialog = gen_file_dialog (undef, 'v','ITC');
|
'Select a File', undef,
|
|
'open',
|
|
'gtk-cancel' => 'cancel',
|
|
'gtk-ok' => 'ok',
|
|
);
|
|
|
|
my $filter = Gtk2::FileFilter->new();
|
|
$filter->set_name("Verilog");
|
|
$filter->add_pattern("*.v");
|
|
my $filter2 = Gtk2::FileFilter->new();
|
|
$filter2->set_name("Interface");
|
|
$filter2->add_pattern("*.ITC");
|
|
$dialog->add_filter ($filter);
|
|
$dialog->add_filter ($filter2);
|
|
|
|
|
|
if ( "ok" eq $dialog->run ) {
|
if ( "ok" eq $dialog->run ) {
|
$file = $dialog->get_filename;
|
$file = $dialog->get_filename;
|
$$entry_ref->set_text($file);
|
$$entry_ref->set_text($file);
|
check_input_intfc_file($file,$intfc_gen,$info);
|
check_input_intfc_file($file,$intfc_gen,$info);
|
#read_file_modules($file,$intfc_gen,$info);
|
|
#print "file = $file\n";
|
|
}
|
}
|
$dialog->destroy;
|
$dialog->destroy;
|
|
|
|
|
|
|
} , \$entry);
|
} , \$entry);
|
|
|
$open->signal_connect("clicked"=> sub{
|
$open->signal_connect("clicked"=> sub{
|
my $file_name=$entry->get_text();
|
my $file_name=$entry->get_text();
|
check_input_intfc_file($file,$intfc_gen,$info);
|
check_input_intfc_file($file,$intfc_gen,$info);
|
#read_file_modules($file_name,$intfc_gen,$info);
|
#read_file_modules($file_name,$intfc_gen,$info);
|
|
|
});
|
});
|
$entry->signal_connect("activate"=>sub{
|
$entry->signal_connect("activate"=>sub{
|
my $file_name=$entry->get_text();
|
my $file_name=$entry->get_text();
|
read_file_modules($file_name,$intfc_gen,$info);
|
read_file_modules($file_name,$intfc_gen,$info);
|
});
|
});
|
|
|
$entry->signal_connect("changed"=>sub{
|
$entry->signal_connect("changed"=>sub{
|
show_info(\$info,"Please select the verilog file containig the interface\n");
|
#show_info($info,"Please select the verilog file containing the interface\n");
|
});
|
});
|
|
|
my $row=0;
|
my $row=0;
|
$table->attach_defaults ($label, 0, 1 , $row, $row+1);
|
$table->attach_defaults ($label, 0, 1 , $row, $row+1);
|
$table->attach_defaults ($entry, 1, 7 , $row, $row+1);
|
$table->attach_defaults ($entry, 1, 7 , $row, $row+1);
|
$table->attach ($browse, 7, 8, $row, $row+1,'shrink','shrink',2,2);
|
$table->attach ($browse, 7, 8, $row, $row+1,'shrink','shrink',2,2);
|
$table->attach ($intfc_info, 8, 9 , $row, $row+1,'shrink','shrink',2,2);
|
$table->attach ($intfc_info, 8, 9 , $row, $row+1,'shrink','shrink',2,2);
|
#$table->attach_defaults ($open, 9, 10, $row, $row+1);
|
#$table->attach_defaults ($open, 9, 10, $row, $row+1);
|
#$table->attach_defaults ($entry, $col, $col+1, $row, $row+1);
|
#$table->attach_defaults ($entry, $col, $col+1, $row, $row+1);
|
return $table;
|
return $table;
|
|
|
|
|
}
|
}
|
|
|
|
|
|
|
sub get_ports_type{
|
|
my ($vdb,$top_module)=@_;
|
|
my %ports;
|
|
|
|
foreach my $sig (sort $vdb->get_modules_signals($top_module)) {
|
|
my ($line,$a_line,$i_line,$type,$file,$posedge,$negedge,
|
|
$type2,$s_file,$s_line,$range,$a_file,$i_file,$dims) =
|
|
$vdb->get_module_signal($top_module,$sig);
|
|
|
|
if($type eq "input" or $type eq "inout" or $type eq "output" ){
|
|
$ports{$sig}=$type;
|
|
|
|
}
|
|
}
|
|
return %ports;
|
|
}
|
|
|
|
|
|
|
|
sub get_ports_rang{
|
|
my ($vdb,$top_module)=@_;
|
|
my %ports;
|
|
|
|
foreach my $sig (sort $vdb->get_modules_signals($top_module)) {
|
|
my ($line,$a_line,$i_line,$type,$file,$posedge,$negedge,
|
|
$type2,$s_file,$s_line,$range,$a_file,$i_file,$dims) =
|
|
$vdb->get_module_signal($top_module,$sig);
|
|
|
|
if($type eq "input" or $type eq "inout" or $type eq "output" ){
|
|
|
|
|
|
|
|
$ports{$sig}=remove_all_white_spaces($range);
|
|
|
|
}
|
|
}
|
|
return %ports;
|
|
}
|
|
|
|
|
|
|
|
sub get_interface_ports {
|
sub get_interface_ports {
|
my ($intfc_gen,$info)=@_;
|
my ($intfc_gen,$info)=@_;
|
my $window=def_popwin_size(60,60,"Import Ports",'percent');
|
my $window=def_popwin_size(60,60,"Import Ports",'percent');
|
|
|
my $file=$intfc_gen->intfc_get_interface_file();
|
my $file=$intfc_gen->intfc_get_interface_file();
|
if (!defined $file){show_info(\$info,"File name has not been defined yet!"); return;}
|
if (!defined $file){show_info($info,"File name has not been defined yet!"); return;}
|
my $module=$intfc_gen->intfc_get_module_name();
|
my $module=$intfc_gen->intfc_get_module_name();
|
if (!defined $module){ show_info(\$info,"Module name has not been selected yet!"); return;}
|
if (!defined $module){ show_info($info,"Module name has not been selected yet!"); return;}
|
my $vdb=read_verilog_file($file);
|
my $f=add_project_dir_to_addr($file);
|
|
my $vdb=read_verilog_file($f);
|
my %port_type=get_ports_type($vdb,$module);
|
my %port_type=get_ports_type($vdb,$module);
|
my %port_range=get_ports_rang($vdb,$module);
|
my %port_range=get_ports_rang($vdb,$module);
|
|
|
my $table=def_table(8,8,TRUE);
|
my $table=def_table(8,8,TRUE);
|
my $scrolled_win = new Gtk2::ScrolledWindow (undef, undef);
|
my $scrolled_win = add_widget_to_scrolled_win($table);
|
$scrolled_win->set_policy( "automatic", "automatic" );
|
|
$scrolled_win->add_with_viewport($table);
|
|
|
|
|
|
|
|
my $title=gen_label_in_center("Select the ports included in the interface");
|
my $title=gen_label_in_center("Select the ports included in the interface");
|
my $title1=gen_label_in_center("Type");
|
my $title1=gen_label_in_center("Type");
|
my $title2=gen_label_in_center("Range");
|
my $title2=gen_label_in_center("Range");
|
my $title3=gen_label_in_center("Name");
|
my $title3=gen_label_in_center("Name");
|
my $title4=gen_label_in_center("Select");
|
my $title4=gen_label_in_center("Select");
|
|
|
my $row =0;
|
my $row =0;
|
$table->attach_defaults($title, 0,8, $row, $row+1);
|
$table->attach_defaults($title, 0,8, $row, $row+1);
|
$row++;
|
$row++;
|
$table->attach_defaults($title1, 0,1, $row, $row+1);
|
$table->attach_defaults($title1, 0,1, $row, $row+1);
|
$table->attach_defaults($title2, 1,4, $row, $row+1);
|
$table->attach_defaults($title2, 1,4, $row, $row+1);
|
$table->attach_defaults($title3, 4,7, $row, $row+1);
|
$table->attach_defaults($title3, 4,7, $row, $row+1);
|
$table->attach_defaults($title4, 7,8, $row, $row+1);
|
$table->attach_defaults($title4, 7,8, $row, $row+1);
|
|
|
my $separator = Gtk2::HSeparator->new;
|
|
$row++;
|
$row++;
|
|
|
$table->attach_defaults($separator, 0,8, $row, $row+1);
|
add_Hsep_to_table($table, 0, 8 , $row); $row++;
|
|
|
$row++;
|
|
$intfc_gen->intfc_remove_ports();
|
$intfc_gen->intfc_remove_ports();
|
foreach my $p (sort keys %port_type){
|
foreach my $p (sort keys %port_type){
|
my $port_id= $p;
|
my $port_id= $p;
|
my $porttype=$port_type{$p};
|
my $porttype=$port_type{$p};
|
my $label1= gen_label_in_center("$porttype");
|
my $label1= gen_label_in_center("$porttype");
|
$table->attach_defaults($label1, 0,1, $row, $row+1);
|
$table->attach_defaults($label1, 0,1, $row, $row+1);
|
my $portrange=$port_range{$p};
|
my $portrange=$port_range{$p};
|
if ( $port_range{$p} ne ''){
|
if ( $port_range{$p} ne ''){
|
|
|
my $label2= gen_label_in_center("\[$portrange\]");
|
my $label2= gen_label_in_center("\[$portrange\]");
|
$table->attach_defaults($label2, 1,4, $row, $row+1);
|
$table->attach_defaults($label2, 1,4, $row, $row+1);
|
}
|
}
|
|
|
my $label3= gen_label_in_center($p);
|
my $label3= gen_label_in_center($p);
|
$table->attach_defaults($label3, 4,7, $row, $row+1);
|
$table->attach_defaults($label3, 4,7, $row, $row+1);
|
|
|
my $check= Gtk2::CheckButton->new;
|
my $check= gen_checkbutton();
|
$table->attach_defaults($check, 7,8, $row, $row+1);
|
$table->attach_defaults($check, 7,8, $row, $row+1);
|
|
|
$row++;
|
$row++;
|
if($row>8){$table->resize ($row, 8);}
|
if($row>8){$table->resize ($row, 8);}
|
#print "$p\:$port_type{$p}\n";
|
#print "$p\:$port_type{$p}\n";
|
|
|
$check->signal_connect("toggled"=>sub{
|
$check->signal_connect("toggled"=>sub{
|
my $widget=shift;
|
my $widget=shift;
|
my $in=$widget->get_active();
|
my $in=$widget->get_active();
|
if ($in eq 1){
|
if ($in eq 1){
|
my $connect_type=($porttype eq "input")? "output" : ($porttype eq "output")? "input" : $porttype;
|
my $connect_type=($porttype eq "input")? "output" : ($porttype eq "output")? "input" : $porttype;
|
$intfc_gen->intfc_add_port($port_id,$porttype,$portrange,$p,$connect_type,$portrange,$p,"concatenate","Active low");
|
$intfc_gen->intfc_add_port($port_id,$porttype,$portrange,$p,$connect_type,$portrange,$p,"concatenate","Active low");
|
|
|
|
|
|
|
#print "chanhed to $in \n";
|
#print "chanhed to $in \n";
|
}else {
|
}else {
|
$intfc_gen->intfc_remove_port($port_id);
|
$intfc_gen->intfc_remove_port($port_id);
|
|
|
#print "chanhed to 0 \n";
|
#print "chanhed to 0 \n";
|
|
|
}
|
}
|
|
|
|
|
});
|
});
|
|
|
}
|
}
|
|
|
|
|
my $ok= def_image_button("icons/select.png","ok");
|
my $ok= def_image_button("icons/select.png","ok");
|
$table->attach($ok, 3,5, $row, $row+1,'shrink','shrink',2,2);
|
$table->attach($ok, 3,5, $row, $row+1,'shrink','shrink',2,2);
|
|
|
$ok->signal_connect("clicked"=>sub{
|
$ok->signal_connect("clicked"=>sub{
|
$window->destroy;
|
$window->destroy;
|
set_gui_status($intfc_gen,"refresh",1);
|
set_gui_status($intfc_gen,"refresh",1);
|
|
|
|
|
});
|
});
|
|
|
$window->add($scrolled_win);
|
$window->add($scrolled_win);
|
|
|
$window->show_all();
|
$window->show_all();
|
}
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
sub module_select{
|
sub module_select{
|
my ($intfc_gen,$info)=@_;
|
my ($intfc_gen,$info)=@_;
|
my $file= $intfc_gen->intfc_get_interface_file();
|
#my $file= $intfc_gen->intfc_get_interface_file();
|
|
|
my $table = def_table(1,10,TRUE);
|
my $table = def_table(1,10,FALSE);
|
|
|
|
|
|
|
my @modules= $intfc_gen->intfc_get_module_list();
|
my @modules= $intfc_gen->intfc_get_module_list();
|
my $combo=gen_combobox_object($intfc_gen,'module_name',undef,join(',', @modules),undef,'refresh',1);
|
my $combo=gen_combobox_object($intfc_gen,'module_name',undef,join(',', @modules),undef,'refresh',1);
|
my $modul_name=labele_widget_info(" Select module:",$combo);
|
my $modul_name=gen_label_info(" Select module:",$combo);
|
|
|
|
|
my $port= def_image_button("icons/import.png","Import Ports");
|
my $port= def_image_button("icons/import.png","Import Ports");
|
my $category_entry=gen_entry_object($intfc_gen,'category',undef,undef,undef,undef);
|
my $category_entry=gen_entry_object($intfc_gen,'category',undef,undef,undef,undef);
|
my $category=labele_widget_info(" Select Category:",$category_entry,'Define the Interface category:e.g RAM, wishbone,...');
|
my $category=gen_label_info(" Select Category:",$category_entry,'Define the Interface category:e.g RAM, wishbone,...');
|
|
|
|
|
|
|
|
|
my $row=0;
|
my $row=0;
|
#$table->attach_defaults ($label, 0, 1 , $row, $row+1);
|
#$table->attach_defaults ($label, 0, 1 , $row, $row+1);
|
$table->attach ($modul_name, 0, 3 , $row,$row+1,'shrink','shrink',2,2);
|
$table->attach ($modul_name, 0, 3 , $row,$row+1,'shrink','shrink',2,2);
|
$table->attach ($port, 4, 6 , $row, $row+1,'shrink','shrink',2,2);
|
$table->attach ($port, 4, 6 , $row, $row+1,'shrink','shrink',2,2);
|
$table->attach_defaults ($category, 7, 10 , $row, $row+1);
|
$table->attach_defaults ($category, 7, 10 , $row, $row+1);
|
|
|
|
|
|
|
|
|
$port->signal_connect("clicked"=> sub{
|
$port->signal_connect("clicked"=> sub{
|
get_interface_ports($intfc_gen,$info);
|
get_interface_ports($intfc_gen,$info);
|
|
|
|
|
});
|
});
|
|
|
|
|
|
|
return $table;
|
return $table;
|
|
|
|
|
}
|
}
|
|
|
sub interface_type_select {
|
sub interface_type_select {
|
my ($intfc_gen,$info,$table,$row)=@_;
|
my ($intfc_gen,$info,$table,$row)=@_;
|
|
|
my $entry=gen_entry_object($intfc_gen,'name',undef,undef,"refresh",50);
|
my $entry=gen_entry_object($intfc_gen,'name',undef,undef,"refresh",50);
|
my $entrybox=labele_widget_info(" Interface name:",$entry);
|
my $entrybox=gen_label_info(" Interface name:",$entry);
|
|
|
my $combo=gen_combobox_object($intfc_gen,'connection_num',undef,"single connection,multi connection","single connection",'refresh',1);
|
my $combo=gen_combobox_object($intfc_gen,'connection_num',undef,"single connection,multi connection","single connection",'refresh',1);
|
my $combo_box=labele_widget_info(" Select soket type:",$combo,'Define the soket as multi connection if only if all interfaces ports are output oprts and they can feed more than one plug interface. E.g. clk is defined as multi connection');
|
my $combo_box=gen_label_info(" Select socket type:",$combo,'Define the socket as multi connection if only if all interfaces ports are output oprts and they can feed more than one plug interface. E.g. clk is defined as multi connection');
|
|
|
$table->attach ($entrybox, 0, 2 , $row, $row+1,'expand','shrink',2,2);
|
$table->attach ($entrybox, 0, 2 , $row, $row+1,'expand','shrink',2,2);
|
$table->attach ($combo_box, 3, 6 , $row, $row+1,'expand','shrink',2,2);
|
$table->attach ($combo_box, 3, 6 , $row, $row+1,'expand','shrink',2,2);
|
|
|
}
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
sub port_select{
|
sub port_select{
|
my ($intfc_gen,$info,$table,$row)=@_;
|
my ($intfc_gen,$info,$table,$row)=@_;
|
my(%types,%ranges,%names,%connect_types,%connect_ranges,%connect_names,%outport_types,%default_outs);
|
my(%types,%ranges,%names,%connect_types,%connect_ranges,%connect_names,%outport_types,%default_outs);
|
$intfc_gen->intfc_get_ports(\%types,\%ranges,\%names,\%connect_types,\%connect_ranges,\%connect_names,\%outport_types,\%default_outs);
|
$intfc_gen->intfc_get_ports(\%types,\%ranges,\%names,\%connect_types,\%connect_ranges,\%connect_names,\%outport_types,\%default_outs);
|
|
|
my $size = keys %types;
|
my $size = keys %types;
|
if($size >0){
|
if($size >0){
|
my $sep = Gtk2::HSeparator->new;
|
|
$table->attach ($sep, 0, 10 , $row, $row+1,'fill','fill',2,2); $row++;
|
|
|
|
|
add_Hsep_to_table($table, 0, 10 , $row); $row++;
|
|
|
my $swap= def_image_button("icons/swap.png","swap");
|
my $swap= def_image_button("icons/swap.png","swap");
|
|
|
$swap->signal_connect('clicked'=>sub{
|
$swap->signal_connect('clicked'=>sub{
|
my $type=$intfc_gen->intfc_get_interface_type();
|
my $type=$intfc_gen->intfc_get_interface_type();
|
if($type eq 'plug'){
|
if($type eq 'plug'){
|
$intfc_gen->intfc_set_interface_type('socket');
|
$intfc_gen->intfc_set_interface_type('socket');
|
}
|
}
|
else {
|
else {
|
$intfc_gen->intfc_set_interface_type('plug');
|
$intfc_gen->intfc_set_interface_type('plug');
|
}
|
}
|
set_gui_status($intfc_gen,"refresh",1);
|
set_gui_status($intfc_gen,"refresh",1);
|
|
|
});
|
});
|
|
|
|
|
my @intfcs=("plug","socket");
|
my @intfcs=("plug","socket");
|
my $inttype=$intfc_gen->intfc_get_interface_type();
|
my $inttype=$intfc_gen->intfc_get_interface_type();
|
if (!defined $inttype){
|
if (!defined $inttype){
|
$inttype='plug';
|
$inttype='plug';
|
$intfc_gen->intfc_set_interface_type($inttype);
|
$intfc_gen->intfc_set_interface_type($inttype);
|
}
|
}
|
|
|
#my $lab1= gen_label_in_center($inttype);
|
#my $lab1= gen_label_in_center($inttype);
|
my ($lab1,$lab2);
|
my ($lab1,$lab2);
|
if ($inttype eq 'plug'){
|
if ($inttype eq 'plug'){
|
$lab1=def_image_label('icons/plug.png' ,'plug ');
|
$lab1=def_image_label('icons/plug.png' ,'plug ');
|
$lab2=def_image_label('icons/socket.png','socket');
|
$lab2=def_image_label('icons/socket.png','socket');
|
}else {
|
}else {
|
$lab2=def_image_label('icons/plug.png','plug');
|
$lab2=def_image_label('icons/plug.png','plug');
|
$lab1=def_image_label('icons/socket.png','socket');
|
$lab1=def_image_label('icons/socket.png','socket');
|
|
|
}
|
}
|
|
|
my $sep2 = Gtk2::HSeparator->new;
|
|
|
|
|
|
$table->attach ($lab1, 1, 2 , $row, $row+1,'expand','shrink',2,2);
|
$table->attach ($lab1, 1, 2 , $row, $row+1,'expand','shrink',2,2);
|
$table->attach ($swap, 3, 4 , $row, $row+1,'expand','shrink',2,2);
|
$table->attach ($swap, 3, 4 , $row, $row+1,'expand','shrink',2,2);
|
$table->attach ($lab2, 5, 6 , $row, $row+1,'expand','shrink',2,2); $row++;
|
$table->attach ($lab2, 5, 6 , $row, $row+1,'expand','shrink',2,2); $row++;
|
$table->attach ($sep2, 0, 9 , $row, $row+1,'fill','fill',2,2); $row++;
|
|
|
|
|
add_Hsep_to_table($table, 0, 9 , $row); $row++;
|
|
|
|
|
my $lab3= gen_label_in_center("Type");
|
my $lab3= gen_label_in_center("Type");
|
my $lab4= gen_label_in_center("Range");
|
my $lab4= gen_label_in_center("Range");
|
my $lab5= gen_label_in_center("Name");
|
my $lab5= gen_label_in_center("Name");
|
$table->attach ($lab3, 0, 1 , $row, $row+1,'expand','shrink',2,2);
|
$table->attach ($lab3, 0, 1 , $row, $row+1,'expand','shrink',2,2);
|
$table->attach ($lab4, 1, 2 , $row, $row+1,'expand','shrink',2,2);
|
$table->attach ($lab4, 1, 2 , $row, $row+1,'expand','shrink',2,2);
|
$table->attach ($lab5, 2, 3 , $row, $row+1,'expand','shrink',2,2);
|
$table->attach ($lab5, 2, 3 , $row, $row+1,'expand','shrink',2,2);
|
my $lab6= gen_label_in_center("Type");
|
my $lab6= gen_label_in_center("Type");
|
my $lab7= gen_label_in_center("Range");
|
my $lab7= gen_label_in_center("Range");
|
my $lab8= gen_label_in_center("Name");
|
my $lab8= gen_label_in_center("Name");
|
$table->attach ($lab6, 4, 5 , $row, $row+1,'expand','shrink',2,2);
|
$table->attach ($lab6, 4, 5 , $row, $row+1,'expand','shrink',2,2);
|
$table->attach ($lab7, 5, 6 , $row, $row+1,'expand','shrink',2,2);
|
$table->attach ($lab7, 5, 6 , $row, $row+1,'expand','shrink',2,2);
|
$table->attach ($lab8, 6, 7 , $row, $row+1,'expand','shrink',2,2);
|
$table->attach ($lab8, 6, 7 , $row, $row+1,'expand','shrink',2,2);
|
my $lab9= gen_label_help ("When an IP core does not have any of interface output port, the default value will be send to the IP core's input port which is supposed to be connected to that port","Output port Default ");
|
my $lab9= gen_label_help ("When an IP core does not have any of interface output port, the default value will be send to the IP core's input port which is supposed to be connected to that port","Output port Default ");
|
$table->attach ($lab9, 8, 9 , $row, $row+1,'expand','shrink',2,2);
|
$table->attach ($lab9, 8, 9 , $row, $row+1,'expand','shrink',2,2);
|
$row++;
|
$row++;
|
|
|
foreach my $id (sort keys %ranges){
|
foreach my $id (sort keys %ranges){
|
my $type=$types{$id};
|
my $type=$types{$id};
|
my $range=$ranges{$id};
|
my $range=$ranges{$id};
|
my $name=$names{$id};
|
my $name=$names{$id};
|
my $connect_type=$connect_types{$id};
|
my $connect_type=$connect_types{$id};
|
my $connect_range=$connect_ranges{$id};
|
my $connect_range=$connect_ranges{$id};
|
my $connect_name=$connect_names{$id};
|
my $connect_name=$connect_names{$id};
|
my $outport_type=$outport_types{$id};
|
my $outport_type=$outport_types{$id};
|
my $default_out=$default_outs{$id};
|
my $default_out=$default_outs{$id};
|
if(! defined $default_out){
|
if(! defined $default_out){
|
$default_out = "Active low"; # port_width_repeat($connect_range,"1\'b0");
|
$default_out = "Active low"; # port_width_repeat($connect_range,"1\'b0");
|
$intfc_gen->intfc_add_port($id,$type,$range,$name,$connect_type,$connect_range,$connect_name,$outport_type,$default_out);
|
$intfc_gen->intfc_add_port($id,$type,$range,$name,$connect_type,$connect_range,$connect_name,$outport_type,$default_out);
|
print "\$default_out is set to: $default_out\n ";
|
print "\$default_out is set to: $default_out\n ";
|
}
|
}
|
|
|
#my $box=def_hbox(FALSE,0);
|
#my $box=def_hbox(FALSE,0);
|
|
|
my @ports_type=("input","output","inout");
|
my @ports_type=("input","output","inout");
|
my $pos=get_scolar_pos($type,@ports_type);
|
my $pos=get_scolar_pos($type,@ports_type);
|
my $combo1=gen_combo(\@ports_type,$pos);
|
my $combo1=gen_combo(\@ports_type,$pos);
|
my $entry2=gen_entry($range);
|
my $entry2=gen_entry($range);
|
my $entry3=gen_entry($name);
|
my $entry3=gen_entry($name);
|
my $separator = Gtk2::VSeparator->new;
|
|
my $connect_type_lable= gen_label_in_center($connect_type);
|
my $connect_type_lable= gen_label_in_center($connect_type);
|
my $entry4=gen_entry($connect_range);
|
my $entry4=gen_entry($connect_range);
|
my $entry5=gen_entry($connect_name);
|
my $entry5=gen_entry($connect_name);
|
my @outport_types=("shared","concatenate");
|
my @outport_types=("shared","concatenate");
|
my $pos2=get_scolar_pos($outport_type,@outport_types);
|
my $pos2=get_scolar_pos($outport_type,@outport_types);
|
my $combo2=gen_combo(\@outport_types,$pos2);
|
my $combo2=gen_combo(\@outport_types,$pos2);
|
|
|
|
|
#my @list=(port_width_repeat($range,"1\'b0"),port_width_repeat($range,"1\'b1"),port_width_repeat($range,"1\'bx"));
|
#my @list=(port_width_repeat($range,"1\'b0"),port_width_repeat($range,"1\'b1"),port_width_repeat($range,"1\'bx"));
|
my @list=("Active low","Active high","Don't care");
|
my @list=("Active low","Active high","Don't care");
|
|
|
my $combentry=gen_combo_entry(\@list);
|
my $combentry=gen_combo_entry(\@list);
|
|
my $combochiled = combo_entry_get_chiled($combentry);
|
$pos2=get_scolar_pos($default_out,@list);
|
$pos2=get_scolar_pos($default_out,@list);
|
if( defined $pos2){
|
if( defined $pos2){
|
$combentry->set_active($pos2);
|
$combentry->set_active($pos2);
|
} else {
|
} else {
|
($combentry->child)->set_text($default_out);
|
|
|
$combochiled->set_text($default_out);
|
}
|
}
|
|
|
|
|
#$box->pack_start($entry3,TRUE,FALSE,3);
|
#$box->pack_start($entry3,TRUE,FALSE,3);
|
#$box->pack_start($separator,TRUE,FALSE,3);
|
#$box->pack_start($separator,TRUE,FALSE,3);
|
|
|
$table->attach ($combo1, 0, 1 , $row, $row+1,'expand','shrink',2,2);
|
$table->attach ($combo1, 0, 1 , $row, $row+1,'expand','shrink',2,2);
|
$table->attach ($entry2, 1, 2 , $row, $row+1,'expand','shrink',2,2);
|
$table->attach ($entry2, 1, 2 , $row, $row+1,'expand','shrink',2,2);
|
$table->attach ($entry3, 2, 3 , $row, $row+1,'expand','shrink',2,2);
|
$table->attach ($entry3, 2, 3 , $row, $row+1,'expand','shrink',2,2);
|
|
|
|
|
$table->attach ($connect_type_lable, 4, 5 , $row, $row+1,'expand','shrink',2,2);
|
$table->attach ($connect_type_lable, 4, 5 , $row, $row+1,'expand','shrink',2,2);
|
$table->attach ($entry4, 5, 6 , $row, $row+1,'expand','shrink',2,2);
|
$table->attach ($entry4, 5, 6 , $row, $row+1,'expand','shrink',2,2);
|
$table->attach ($entry5, 6, 7 , $row, $row+1,'expand','shrink',2,2);
|
$table->attach ($entry5, 6, 7 , $row, $row+1,'expand','shrink',2,2);
|
$table->attach ($combentry, 8, 9 , $row, $row+1,'expand','shrink',2,2);
|
$table->attach ($combentry, 8, 9 , $row, $row+1,'expand','shrink',2,2);
|
|
|
$combo1->signal_connect("changed"=>sub{
|
$combo1->signal_connect("changed"=>sub{
|
my $new_type=$combo1->get_active_text();
|
my $new_type=$combo1->get_active_text();
|
my $new_connect_type=($new_type eq "input")? "output" : ($new_type eq "output")? "input" : $new_type;
|
my $new_connect_type=($new_type eq "input")? "output" : ($new_type eq "output")? "input" : $new_type;
|
$intfc_gen->intfc_add_port($id,$new_type,$range,$name,$new_connect_type,$connect_range,$connect_name,$outport_type,$default_out);
|
$intfc_gen->intfc_add_port($id,$new_type,$range,$name,$new_connect_type,$connect_range,$connect_name,$outport_type,$default_out);
|
set_gui_status($intfc_gen,"refresh",1);
|
set_gui_status($intfc_gen,"refresh",1);
|
|
|
});
|
});
|
$entry2->signal_connect("changed"=>sub{
|
$entry2->signal_connect("changed"=>sub{
|
$range=$entry2->get_text();
|
$range=$entry2->get_text();
|
$intfc_gen->intfc_add_port($id,$type,$range,$name,$connect_type,$connect_range,$connect_name,$outport_type,$default_out);
|
$intfc_gen->intfc_add_port($id,$type,$range,$name,$connect_type,$connect_range,$connect_name,$outport_type,$default_out);
|
set_gui_status($intfc_gen,"refresh",50);
|
set_gui_status($intfc_gen,"refresh",50);
|
|
|
});
|
});
|
$entry3->signal_connect("changed"=>sub{
|
$entry3->signal_connect("changed"=>sub{
|
$name=$entry3->get_text();
|
$name=$entry3->get_text();
|
$intfc_gen->intfc_add_port($id,$type,$range,$name,$connect_type,$connect_range,$connect_name,$outport_type,$default_out);
|
$intfc_gen->intfc_add_port($id,$type,$range,$name,$connect_type,$connect_range,$connect_name,$outport_type,$default_out);
|
set_gui_status($intfc_gen,"refresh",50);
|
set_gui_status($intfc_gen,"refresh",50);
|
|
|
});
|
});
|
|
|
$entry4->signal_connect("changed"=>sub{
|
$entry4->signal_connect("changed"=>sub{
|
$connect_range=$entry4->get_text();
|
$connect_range=$entry4->get_text();
|
$intfc_gen->intfc_add_port($id,$type,$range,$name,$connect_type,$connect_range,$connect_name,$outport_type,$default_out);
|
$intfc_gen->intfc_add_port($id,$type,$range,$name,$connect_type,$connect_range,$connect_name,$outport_type,$default_out);
|
set_gui_status($intfc_gen,"refresh",50);
|
set_gui_status($intfc_gen,"refresh",50);
|
|
|
});
|
});
|
$entry5->signal_connect("changed"=>sub{
|
$entry5->signal_connect("changed"=>sub{
|
$connect_name=$entry5->get_text();
|
$connect_name=$entry5->get_text();
|
$intfc_gen->intfc_add_port($id,$type,$range,$name,$connect_type,$connect_range,$connect_name,$outport_type,$default_out);
|
$intfc_gen->intfc_add_port($id,$type,$range,$name,$connect_type,$connect_range,$connect_name,$outport_type,$default_out);
|
set_gui_status($intfc_gen,"refresh",50);
|
set_gui_status($intfc_gen,"refresh",50);
|
|
|
});
|
});
|
$combo2->signal_connect("changed"=>sub{
|
$combo2->signal_connect("changed"=>sub{
|
my $new_outport_type=$combo2->get_active_text();
|
my $new_outport_type=$combo2->get_active_text();
|
$intfc_gen->intfc_add_port($id,$type,$range,$name,$connect_type,$connect_range,$connect_name,$new_outport_type,$default_out);
|
$intfc_gen->intfc_add_port($id,$type,$range,$name,$connect_type,$connect_range,$connect_name,$new_outport_type,$default_out);
|
set_gui_status($intfc_gen,"refresh",1);
|
set_gui_status($intfc_gen,"refresh",1);
|
|
|
});
|
});
|
($combentry->child)->signal_connect('changed' => sub {
|
$combochiled->signal_connect('changed' => sub {
|
my ($entry) = @_;
|
my ($entry) = @_;
|
$default_out=$entry->get_text();
|
$default_out=$entry->get_text();
|
$intfc_gen->intfc_add_port($id,$type,$range,$name,$connect_type,$connect_range,$connect_name,$outport_type,$default_out);
|
$intfc_gen->intfc_add_port($id,$type,$range,$name,$connect_type,$connect_range,$connect_name,$outport_type,$default_out);
|
|
|
|
|
});
|
});
|
|
|
|
|
|
|
$row++;
|
$row++;
|
|
|
|
|
}#foreach port
|
}#foreach port
|
|
|
|
|
}
|
}
|
return $row;
|
return $row;
|
}
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sub dev_box_show{
|
sub dev_box_show{
|
my($intfc_gen,$info)=@_;
|
my($intfc_gen,$info)=@_;
|
|
|
my $table = def_table(20,10,FALSE);
|
my $table = def_table(20,10,FALSE);
|
|
|
|
|
interface_type_select($intfc_gen,$info,$table,0);
|
interface_type_select($intfc_gen,$info,$table,0);
|
my $row=port_select($intfc_gen,$info,$table,1);
|
my $row=port_select($intfc_gen,$info,$table,1);
|
for (my $i=$row; $i<20; $i++){
|
for (my $i=$row; $i<20; $i++){
|
my $temp=gen_label_in_center(" ");
|
my $temp=gen_label_in_center(" ");
|
#$table->attach_defaults ($temp, 0, 1 , $i, $i+1);
|
#$table->attach_defaults ($temp, 0, 1 , $i, $i+1);
|
}
|
}
|
my $scrolled_win = new Gtk2::ScrolledWindow (undef, undef);
|
|
$scrolled_win->set_policy( "automatic", "automatic" );
|
|
$scrolled_win->add_with_viewport($table);
|
|
|
|
|
|
|
|
|
|
|
my $scrolled_win = add_widget_to_scrolled_win($table);
|
|
|
return $scrolled_win;
|
return $scrolled_win;
|
|
|
}
|
}
|
|
|
|
|
|
|
|
|
sub check_intfc{
|
sub check_intfc{
|
my $intfc_gen=shift;
|
my $intfc_gen=shift;
|
my $result;
|
my $result;
|
my $message;
|
my $message;
|
|
|
|
|
$result=$intfc_gen->intfc_ckeck_ports_available();
|
$result=$intfc_gen->intfc_ckeck_ports_available();
|
if(!defined $result){$message="No port connection has been selected for this interface!";}
|
if(!defined $result){$message="No port connection has been selected for this interface!";}
|
$result=$intfc_gen->intfc_get_interface_name();
|
$result=$intfc_gen->intfc_get_interface_name();
|
if(!defined $result){$message="The interface name is empty!";}
|
if(!defined $result){$message="The interface name is empty!";}
|
$result=$intfc_gen->intfc_get_interface_file();
|
$result=$intfc_gen->intfc_get_interface_file();
|
if(!defined $result){$message="The verilog file containig the interface has not been selected!";}
|
if(!defined $result){$message="The Verilog file containing the interface has not been selected!";}
|
|
|
if(!defined $message){return 1;}
|
if(!defined $message){return 1;}
|
else {message_dialog($message); return 0;}
|
else {message_dialog($message); return 0;}
|
|
|
|
|
}
|
}
|
|
|
|
|
|
|
sub generate_lib{
|
sub generate_lib{
|
my $intfc_gen=shift;
|
my $intfc_gen=shift;
|
my $name=$intfc_gen->intfc_get_interface_name();
|
my $name=$intfc_gen->intfc_get_interface_name();
|
my $category=$intfc_gen->object_get_attribute('category');
|
my $category=$intfc_gen->object_get_attribute('category');
|
# Write
|
# Write
|
if(defined ($category)){
|
if(defined ($category)){
|
open(FILE, ">lib/interface/$name.ITC") || die "Can not open: $!";
|
open(FILE, ">lib/interface/$name.ITC") || die "Can not open: $!";
|
print FILE perl_file_header("$name.ITC");
|
print FILE perl_file_header("$name.ITC");
|
print FILE Data::Dumper->Dump([\%$intfc_gen],["HashRef"]);
|
print FILE Data::Dumper->Dump([\%$intfc_gen],["HashRef"]);
|
close(FILE) || die "Error closing file: $!";
|
close(FILE) || die "Error closing file: $!";
|
#store \%$intfc_gen, "lib/$name.ITC";
|
#store \%$intfc_gen, "lib/$name.ITC";
|
|
|
my $message="Interface $name has been generated successfully. In order to see this interface in IP generator you need to reset the ProNoC. Do you want to reset the ProNoC now?" ;
|
my $message="Interface $name has been generated successfully. In order to see this interface in IP generator you need to reset the ProNoC. Do you want to reset the ProNoC now?" ;
|
|
|
my $dialog = Gtk2::MessageDialog->new (my $window,
|
my $response = yes_no_dialog($message);
|
'destroy-with-parent',
|
|
'question', # message type
|
|
'yes-no', # which set of buttons?
|
|
"$message");
|
|
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;
|
|
|
|
|
|
}else{
|
}else{
|
my $message="Category must be defined!";
|
my $message="Category must be defined!";
|
message_dialog($message);
|
message_dialog($message);
|
|
|
}
|
}
|
|
|
|
|
return 1;
|
return 1;
|
}
|
}
|
|
|
|
|
|
|
###########
|
###########
|
# get description
|
# get description
|
#########
|
#########
|
|
|
sub get_intfc_description{
|
sub get_intfc_description{
|
my ($intfc_gen,$info)=@_;
|
my ($intfc_gen,$info)=@_;
|
my $description = $intfc_gen->intfc_get_description();
|
my $description = $intfc_gen->intfc_get_description();
|
my $table = Gtk2::Table->new (15, 15, TRUE);
|
my $table = def_table(15,15,TRUE);
|
my $window=def_popwin_size(50,50,"Add description",'percent');
|
my $window=def_popwin_size(50,50,"Add description",'percent');
|
my ($scrwin,$text_view)=create_text();
|
my ($scrwin,$text_view)=create_txview();
|
#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($scrwin,0,15,0,14);
|
$table->attach_defaults($scrwin,0,15,0,14);
|
$table->attach_defaults($ok,6,9,14,15);
|
$table->attach_defaults($ok,6,9,14,15);
|
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 {
|
$window->destroy;
|
$window->destroy;
|
|
|
my $text = $text_buffer->get_text($text_buffer->get_bounds, TRUE);
|
my $text = $text_buffer->get_text($text_buffer->get_bounds, TRUE);
|
$intfc_gen->intfc_set_description($text);
|
$intfc_gen->intfc_set_description($text);
|
#print "$text\n";
|
#print "$text\n";
|
|
|
});
|
});
|
|
|
$window->add($table);
|
$window->add($table);
|
$window->show_all();
|
$window->show_all();
|
|
|
}
|
}
|
|
|
|
|
|
|
sub load_interface{
|
sub load_interface{
|
my ($intfc_gen)=@_;
|
my ($intfc_gen)=@_;
|
my $file;
|
my $file;
|
my $dialog = Gtk2::FileChooserDialog->new(
|
my $dialog = gen_file_dialog (undef, 'ITC');
|
'Select a File', undef,
|
|
'open',
|
|
'gtk-cancel' => 'cancel',
|
|
'gtk-ok' => 'ok',
|
|
);
|
|
|
|
my $filter = Gtk2::FileFilter->new();
|
|
$filter->set_name("ITC");
|
|
$filter->add_pattern("*.ITC");
|
|
$dialog->add_filter ($filter);
|
|
my $dir = Cwd::getcwd();
|
my $dir = Cwd::getcwd();
|
$dialog->set_current_folder ("$dir/lib/interface") ;
|
$dialog->set_current_folder ("$dir/lib/interface") ;
|
|
|
|
|
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 '.ITC'){
|
if($suffix eq '.ITC'){
|
$intfc_gen->intfc_set_interface_file($file);
|
$intfc_gen->intfc_set_interface_file($file);
|
set_gui_status($intfc_gen,"load_file",0);
|
set_gui_status($intfc_gen,"load_file",0);
|
}
|
}
|
}
|
}
|
$dialog->destroy;
|
$dialog->destroy;
|
|
|
|
|
|
|
}
|
}
|
|
|
|
|
|
|
############
|
############
|
# main
|
# main
|
############
|
############
|
sub intfc_main{
|
sub intfc_main{
|
|
|
my $intfc_gen= intfc_gen->interface_generator();
|
my $intfc_gen= intfc_gen->interface_generator();
|
set_gui_status($intfc_gen,"ideal",0);
|
set_gui_status($intfc_gen,"ideal",0);
|
my $main_table = Gtk2::Table->new (15, 12, FALSE);
|
my $main_table =def_table(15, 12, FALSE);
|
|
|
$main_table->set_row_spacings (4);
|
$main_table->set_row_spacings (4);
|
$main_table->set_col_spacings (1);
|
$main_table->set_col_spacings (1);
|
# 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_txview();
|
|
|
|
|
my $refresh = Gtk2::Button->new_from_stock('ref');
|
|
my $generate = def_image_button('icons/gen.png','Generate');
|
my $generate = def_image_button('icons/gen.png','Generate');
|
|
|
|
|
|
|
my $fbox=file_box($intfc_gen,$info);
|
my $fbox=file_box($intfc_gen,$info);
|
my $sbox=module_select($intfc_gen,$info);
|
my $sbox=module_select($intfc_gen,$info);
|
|
|
|
|
my $devbox=dev_box_show($intfc_gen,$info);
|
my $devbox=dev_box_show($intfc_gen,$info);
|
|
|
#$main_table->attach_defaults ($fbox , 0, 12, 0,1);
|
#$main_table->attach_defaults ($fbox , 0, 12, 0,1);
|
#$main_table->attach_defaults ($sbox , 0, 12, 1,2);
|
#$main_table->attach_defaults ($sbox , 0, 12, 1,2);
|
#$main_table->attach_defaults ($devbox , 0, 12, 2,12);
|
#$main_table->attach_defaults ($devbox , 0, 12, 2,12);
|
#$main_table->attach_defaults ($infobox , 0, 12, 12,14);
|
#$main_table->attach_defaults ($infobox , 0, 12, 12,14);
|
|
my $table=def_table(2,11,FALSE);
|
|
$table->attach($fbox,0,11,0,1,'fill','shrink',2,2);
|
|
$table->attach($sbox,0,11,1,2,'fill','shrink',2,2);
|
|
|
my $v1=def_pack_vbox(TRUE,0,$fbox,$sbox);
|
#my $v1=def_pack_vbox(TRUE,0,$fbox,$sbox);
|
my $v2=gen_vpaned($v1,.1,$devbox);
|
my $v2=gen_vpaned($table,.12,$devbox);
|
my $v3=gen_vpaned($v2,.6,$infobox);
|
my $v3=gen_vpaned($v2,.6,$infobox);
|
$main_table->attach_defaults ($v3 , 0, 12, 0,14);
|
$main_table->attach_defaults ($v3 , 0, 12, 0,14);
|
|
|
|
|
$main_table->attach ($generate , 6, 8, 14,15,'shrink','shrink',2,2);
|
$main_table->attach ($generate , 6, 8, 14,15,'shrink','shrink',2,2);
|
|
|
|
|
my $open = def_image_button('icons/browse.png','Load Interface');
|
my $open = def_image_button('icons/browse.png','Load Interface');
|
my $openbox=def_hbox(TRUE,0);
|
my $openbox=def_hbox(TRUE,0);
|
$openbox->pack_start($open, FALSE, FALSE,0);
|
$openbox->pack_start($open, FALSE, FALSE,0);
|
$main_table->attach ($openbox,0, 2, 14,15,'shrink','shrink',2,2);
|
$main_table->attach ($openbox,0, 2, 14,15,'shrink','shrink',2,2);
|
|
|
#referesh the mpsoc generator
|
|
$refresh-> signal_connect("clicked" => sub{
|
|
$devbox->destroy();
|
|
$fbox->destroy();
|
|
$sbox->destroy();
|
|
$v1->destroy();
|
|
select(undef, undef, undef, 0.1); #wait 10 ms
|
|
$devbox=dev_box_show($intfc_gen,$info);
|
|
$fbox=file_box($intfc_gen,$info);
|
|
$sbox=module_select($intfc_gen,$info);
|
|
$v1=def_pack_vbox(TRUE,0,$fbox,$sbox);
|
|
$v2->pack1($v1,TRUE, TRUE);
|
|
$v2->pack2($devbox,TRUE, TRUE);
|
|
$v3-> pack1($v2, TRUE, TRUE);
|
|
#$main_table->attach_defaults ($v3 , 0, 12, 0,14);
|
|
|
|
$v3->show_all();
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
#check soc status every 0.5 second. referesh gui if there is any changes
|
#check soc status every 0.5 second. referesh gui if there is any changes
|
Glib::Timeout->add (100, sub{
|
Glib::Timeout->add (100, sub{
|
|
|
my ($state,$timeout)= get_gui_status($intfc_gen);
|
my ($state,$timeout)= get_gui_status($intfc_gen);
|
if ($timeout>0){
|
if ($timeout>0){
|
$timeout--;
|
$timeout--;
|
set_gui_status($intfc_gen,$state,$timeout);
|
set_gui_status($intfc_gen,$state,$timeout);
|
}
|
}
|
elsif($state eq "load_file"){
|
elsif($state eq "load_file"){
|
my $file=$intfc_gen->intfc_get_interface_file();
|
my $file=$intfc_gen->intfc_get_interface_file();
|
my ($pp,$r,$err) = regen_object($file);
|
my ($pp,$r,$err) = regen_object($file);
|
if ($r){
|
if ($r){
|
add_info(\$info,"**Error reading $file file: $err\n");
|
add_info($info,"**Error reading $file file: $err\n");
|
return;
|
return;
|
}
|
}
|
clone_obj($intfc_gen,$pp);
|
clone_obj($intfc_gen,$pp);
|
|
show_info($info,"$file is loaded!\n ");
|
set_gui_status($intfc_gen,"ref",1);
|
set_gui_status($intfc_gen,"ref",1);
|
|
|
|
|
}
|
}
|
elsif( $state ne "ideal" ){
|
elsif( $state ne "ideal" ){
|
$refresh->clicked;
|
$devbox->destroy();
|
|
$fbox->destroy();
|
|
$sbox->destroy();
|
|
|
|
select(undef, undef, undef, 0.1); #wait 10 ms
|
|
$devbox=dev_box_show($intfc_gen,$info);
|
|
$fbox=file_box($intfc_gen,$info);
|
|
$sbox=module_select($intfc_gen,$info);
|
|
$table->attach($fbox,0,11,0,1,'fill','shrink',2,2);
|
|
$table->attach($sbox,0,11,1,2,'fill','shrink',2,2);
|
|
|
|
$v2->pack2($devbox,TRUE, TRUE);
|
|
$v3-> pack1($v2, TRUE, TRUE);
|
|
#$main_table->attach_defaults ($v3 , 0, 12, 0,14);
|
|
$v3->show_all();
|
set_gui_status($intfc_gen,"ideal",0);
|
set_gui_status($intfc_gen,"ideal",0);
|
|
|
}
|
}
|
return TRUE;
|
return TRUE;
|
|
|
} );
|
} );
|
|
|
$open-> signal_connect("clicked" => sub{
|
$open-> signal_connect("clicked" => sub{
|
load_interface($intfc_gen);
|
load_interface($intfc_gen);
|
|
|
});
|
});
|
|
|
$generate-> signal_connect("clicked" => sub{
|
$generate-> signal_connect("clicked" => sub{
|
if( check_intfc($intfc_gen)) {
|
if( check_intfc($intfc_gen)) {
|
generate_lib($intfc_gen);
|
generate_lib($intfc_gen);
|
|
|
}
|
}
|
|
set_gui_status($intfc_gen,"ref",1);
|
|
|
$refresh->clicked;
|
|
|
|
});
|
});
|
|
|
#show_selected_dev($info,\@active_dev,\$dev_list_refresh,\$dev_table);
|
#show_selected_dev($info,\@active_dev,\$dev_list_refresh,\$dev_table);
|
|
|
|
|
|
|
#$box->show;
|
#$box->show;
|
#$window->add ($main_table);
|
#$window->add ($main_table);
|
#$window->show_all;
|
#$window->show_all;
|
#return $main_table;
|
#return $main_table;
|
|
|
my $sc_win = new Gtk2::ScrolledWindow (undef, undef);
|
|
$sc_win->set_policy( "automatic", "automatic" );
|
|
$sc_win->add_with_viewport($main_table);
|
|
|
|
return $sc_win;
|
|
|
|
|
return add_widget_to_scrolled_win($main_table);
|
|
|
}
|
}
|
|
|
|
|
|
|
|
|
|
|
1
|
1
|
|
|
|
|