#! /usr/bin/perl -w
|
#! /usr/bin/perl -w
|
use Glib qw/TRUE FALSE/;
|
use Glib qw/TRUE FALSE/;
|
use strict;
|
use strict;
|
use warnings;
|
use warnings;
|
use Data::Dumper;
|
use Data::Dumper;
|
use intfc_gen;
|
use intfc_gen;
|
use rvp;
|
use rvp;
|
use Gtk2;
|
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) {return; }
|
if (-e $file) {
|
if (-e $file) {
|
my $vdb = read_verilog_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"}
|
$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 ");
|
show_info(\$info,"Select the module which contain the interface ports\n ");
|
|
|
}
|
}
|
else {
|
else {
|
show_info(\$info,"File $file doese not exsit!\n ");
|
show_info(\$info,"File $file doese not exsit!\n ");
|
|
|
}
|
}
|
}
|
}
|
|
|
|
|
################
|
################
|
# 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 = Gtk2::Entry->new;
|
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,TRUE);
|
$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");
|
show_info(\$info,"Please select the verilog file containig 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 = Gtk2::FileChooserDialog->new(
|
'Select a File', undef,
|
'Select a File', undef,
|
'open',
|
'open',
|
'gtk-cancel' => 'cancel',
|
'gtk-cancel' => 'cancel',
|
'gtk-ok' => 'ok',
|
'gtk-ok' => 'ok',
|
);
|
);
|
|
|
my $filter = Gtk2::FileFilter->new();
|
my $filter = Gtk2::FileFilter->new();
|
$filter->set_name("Verilog");
|
$filter->set_name("Verilog");
|
$filter->add_pattern("*.v");
|
$filter->add_pattern("*.v");
|
my $filter2 = Gtk2::FileFilter->new();
|
my $filter2 = Gtk2::FileFilter->new();
|
$filter2->set_name("Interface");
|
$filter2->set_name("Interface");
|
$filter2->add_pattern("*.ITC");
|
$filter2->add_pattern("*.ITC");
|
$dialog->add_filter ($filter);
|
$dialog->add_filter ($filter);
|
$dialog->add_filter ($filter2);
|
$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);
|
#read_file_modules($file,$intfc_gen,$info);
|
#print "file = $file\n";
|
#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 containig 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{
|
sub get_ports_type{
|
my ($vdb,$top_module)=@_;
|
my ($vdb,$top_module)=@_;
|
my %ports;
|
my %ports;
|
|
|
foreach my $sig (sort $vdb->get_modules_signals($top_module)) {
|
foreach my $sig (sort $vdb->get_modules_signals($top_module)) {
|
my ($line,$a_line,$i_line,$type,$file,$posedge,$negedge,
|
my ($line,$a_line,$i_line,$type,$file,$posedge,$negedge,
|
$type2,$s_file,$s_line,$range,$a_file,$i_file,$dims) =
|
$type2,$s_file,$s_line,$range,$a_file,$i_file,$dims) =
|
$vdb->get_module_signal($top_module,$sig);
|
$vdb->get_module_signal($top_module,$sig);
|
|
|
if($type eq "input" or $type eq "inout" or $type eq "output" ){
|
if($type eq "input" or $type eq "inout" or $type eq "output" ){
|
$ports{$sig}=$type;
|
$ports{$sig}=$type;
|
|
|
}
|
}
|
}
|
}
|
return %ports;
|
return %ports;
|
}
|
}
|
|
|
|
|
|
|
sub get_ports_rang{
|
sub get_ports_rang{
|
my ($vdb,$top_module)=@_;
|
my ($vdb,$top_module)=@_;
|
my %ports;
|
my %ports;
|
|
|
foreach my $sig (sort $vdb->get_modules_signals($top_module)) {
|
foreach my $sig (sort $vdb->get_modules_signals($top_module)) {
|
my ($line,$a_line,$i_line,$type,$file,$posedge,$negedge,
|
my ($line,$a_line,$i_line,$type,$file,$posedge,$negedge,
|
$type2,$s_file,$s_line,$range,$a_file,$i_file,$dims) =
|
$type2,$s_file,$s_line,$range,$a_file,$i_file,$dims) =
|
$vdb->get_module_signal($top_module,$sig);
|
$vdb->get_module_signal($top_module,$sig);
|
|
|
if($type eq "input" or $type eq "inout" or $type eq "output" ){
|
if($type eq "input" or $type eq "inout" or $type eq "output" ){
|
|
|
|
|
|
|
$ports{$sig}=remove_all_white_spaces($range);
|
$ports{$sig}=remove_all_white_spaces($range);
|
|
|
}
|
}
|
}
|
}
|
return %ports;
|
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 $vdb=read_verilog_file($file);
|
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 = new Gtk2::ScrolledWindow (undef, undef);
|
$scrolled_win->set_policy( "automatic", "automatic" );
|
$scrolled_win->set_policy( "automatic", "automatic" );
|
$scrolled_win->add_with_viewport($table);
|
$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;
|
my $separator = Gtk2::HSeparator->new;
|
$row++;
|
$row++;
|
|
|
$table->attach_defaults($separator, 0,8, $row, $row+1);
|
$table->attach_defaults($separator, 0,8, $row, $row+1);
|
|
|
$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= Gtk2::CheckButton->new;
|
$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,TRUE);
|
|
|
|
|
|
|
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=labele_widget_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=labele_widget_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=labele_widget_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=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');
|
|
|
$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;
|
my $sep = Gtk2::HSeparator->new;
|
$table->attach ($sep, 0, 10 , $row, $row+1,'fill','fill',2,2); $row++;
|
$table->attach ($sep, 0, 10 , $row, $row+1,'fill','fill',2,2); $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;
|
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++;
|
$table->attach ($sep2, 0, 9 , $row, $row+1,'fill','fill',2,2); $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 $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);
|
$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);
|
($combentry->child)->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 {
|
($combentry->child)->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);
|
my $scrolled_win = new Gtk2::ScrolledWindow (undef, undef);
|
$scrolled_win->set_policy( "automatic", "automatic" );
|
$scrolled_win->set_policy( "automatic", "automatic" );
|
$scrolled_win->add_with_viewport($table);
|
$scrolled_win->add_with_viewport($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 containig 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 $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?
|
"$message");
|
"$message");
|
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{
|
}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 = Gtk2::Table->new (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_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($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 = Gtk2::FileChooserDialog->new(
|
'Select a File', undef,
|
'Select a File', undef,
|
'open',
|
'open',
|
'gtk-cancel' => 'cancel',
|
'gtk-cancel' => 'cancel',
|
'gtk-ok' => 'ok',
|
'gtk-ok' => 'ok',
|
);
|
);
|
|
|
my $filter = Gtk2::FileFilter->new();
|
my $filter = Gtk2::FileFilter->new();
|
$filter->set_name("ITC");
|
$filter->set_name("ITC");
|
$filter->add_pattern("*.ITC");
|
$filter->add_pattern("*.ITC");
|
$dialog->add_filter ($filter);
|
$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 = Gtk2::Table->new (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_text();
|
|
|
|
|
my $refresh = Gtk2::Button->new_from_stock('ref');
|
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 $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($v1,.1,$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
|
#referesh the mpsoc generator
|
$refresh-> signal_connect("clicked" => sub{
|
$refresh-> signal_connect("clicked" => sub{
|
$devbox->destroy();
|
$devbox->destroy();
|
$fbox->destroy();
|
$fbox->destroy();
|
$sbox->destroy();
|
$sbox->destroy();
|
$v1->destroy();
|
$v1->destroy();
|
select(undef, undef, undef, 0.1); #wait 10 ms
|
select(undef, undef, undef, 0.1); #wait 10 ms
|
$devbox=dev_box_show($intfc_gen,$info);
|
$devbox=dev_box_show($intfc_gen,$info);
|
$fbox=file_box($intfc_gen,$info);
|
$fbox=file_box($intfc_gen,$info);
|
$sbox=module_select($intfc_gen,$info);
|
$sbox=module_select($intfc_gen,$info);
|
$v1=def_pack_vbox(TRUE,0,$fbox,$sbox);
|
$v1=def_pack_vbox(TRUE,0,$fbox,$sbox);
|
$v2->pack1($v1,TRUE, TRUE);
|
$v2->pack1($v1,TRUE, TRUE);
|
$v2->pack2($devbox,TRUE, TRUE);
|
$v2->pack2($devbox,TRUE, TRUE);
|
$v3-> pack1($v2, TRUE, TRUE);
|
$v3-> pack1($v2, TRUE, TRUE);
|
#$main_table->attach_defaults ($v3 , 0, 12, 0,14);
|
#$main_table->attach_defaults ($v3 , 0, 12, 0,14);
|
|
|
$v3->show_all();
|
$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= eval { do $file };
|
my ($pp,$r,$err) = regen_object($file);
|
|
if ($r){
|
|
add_info(\$info,"**Error reading $file file: $err\n");
|
|
return;
|
|
}
|
clone_obj($intfc_gen,$pp);
|
clone_obj($intfc_gen,$pp);
|
|
|
|
|
set_gui_status($intfc_gen,"ref",1);
|
set_gui_status($intfc_gen,"ref",1);
|
|
|
|
|
}
|
}
|
elsif( $state ne "ideal" ){
|
elsif( $state ne "ideal" ){
|
$refresh->clicked;
|
$refresh->clicked;
|
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);
|
|
|
}
|
}
|
|
|
$refresh->clicked;
|
$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);
|
my $sc_win = new Gtk2::ScrolledWindow (undef, undef);
|
$sc_win->set_policy( "automatic", "automatic" );
|
$sc_win->set_policy( "automatic", "automatic" );
|
$sc_win->add_with_viewport($main_table);
|
$sc_win->add_with_viewport($main_table);
|
|
|
return $sc_win;
|
return $sc_win;
|
|
|
|
|
}
|
}
|
|
|
|
|
|
|
|
|
|
|
1
|
1
|
|
|
|
|