Line 1... |
Line 1... |
#! /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 FindBin;
|
use lib $FindBin::Bin;
|
use lib $FindBin::Bin;
|
|
|
use wb_addr;
|
use wb_addr;
|
use interface;
|
use interface;
|
use intfc_gen;
|
use intfc_gen;
|
use ip_gen;
|
use ip_gen;
|
|
use ip;
|
use rvp;
|
use rvp;
|
use Cwd 'abs_path';
|
use Cwd 'abs_path';
|
|
|
use File::Basename;
|
use File::Basename;
|
use File::Path qw/make_path/;
|
use File::Path qw/make_path/;
|
|
|
use Gtk2;
|
|
|
|
|
|
require "widget.pl";
|
require "widget.pl";
|
require "readme_gen.pl";
|
require "readme_gen.pl";
|
|
|
|
|
|
|
|
|
use constant DISPLY_COLUMN => 0;
|
|
use constant CATGR_COLUMN => 1;
|
|
use constant INTFC_COLUMN => 2;
|
|
use constant ITAL_COLUMN => 3;
|
|
use constant NUM_COLUMN => 4;
|
|
|
|
################
|
################
|
# check_input_file
|
# check_input_file
|
################
|
################
|
|
|
sub check_input_file{
|
sub check_input_file{
|
Line 53... |
Line 48... |
|
|
|
|
sub read_all_module{
|
sub read_all_module{
|
my ($file,$ipgen,$info)=@_;
|
my ($file,$ipgen,$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);
|
|
my @modules=sort $vdb->get_modules($file);
|
return;
|
|
}
|
|
|
|
my $f=add_project_dir_to_addr($file);
|
|
|
|
if (-f $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"}
|
$ipgen->ipgen_add("file_name",$file);
|
$ipgen->ipgen_add("file_name",$file);
|
|
|
|
|
|
|
Line 68... |
Line 70... |
$ipgen->ipgen_set_module_list(@modules);
|
$ipgen->ipgen_set_module_list(@modules);
|
load_default_setting($ipgen,$modules[0]);
|
load_default_setting($ipgen,$modules[0]);
|
|
|
|
|
set_gui_status($ipgen,"file_selected",1);
|
set_gui_status($ipgen,"file_selected",1);
|
show_info(\$info,"Select the module which contain the interface ports\n ");
|
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');
|
|
|
}
|
|
}
|
|
|
|
|
|
##############
|
|
# create_interface_tree
|
|
##############
|
|
sub create_interface_tree {
|
|
my ($info,$intfc,$ipgen)=@_;
|
|
my $model = Gtk2::TreeStore->new ('Glib::String', 'Glib::String', 'Glib::Scalar', 'Glib::Boolean');
|
|
my $tree_view = Gtk2::TreeView->new;
|
|
$tree_view->set_model ($model);
|
|
my $selection = $tree_view->get_selection;
|
|
|
|
$selection->set_mode ('browse');
|
|
# $tree_view->set_size_request (200, -1);
|
|
|
|
|
|
# my @interface= $intfc->get_interfaces();
|
|
my @categories= $intfc->get_categories();
|
|
|
|
|
|
|
|
foreach my $p (@categories)
|
|
{
|
|
my @intfc_names= $intfc->get_intfcs_of_category($p);
|
|
#my @dev_entry= @{$tree_entry{$p}};
|
|
my $iter = $model->append (undef);
|
|
$model->set ($iter,
|
|
DISPLY_COLUMN, $p,
|
|
CATGR_COLUMN, $p || '',
|
|
INTFC_COLUMN, 0 || '',
|
|
ITAL_COLUMN, FALSE);
|
|
|
|
next unless @intfc_names;
|
|
|
|
foreach my $v ( @intfc_names){
|
|
my $child_iter = $model->append ($iter);
|
|
my $entry= '';
|
|
|
|
$model->set ($child_iter,
|
|
DISPLY_COLUMN, $v,
|
|
CATGR_COLUMN, $p|| '',
|
|
INTFC_COLUMN, $v || '',
|
|
ITAL_COLUMN, FALSE);
|
|
}
|
}
|
|
|
|
|
|
|
}
|
|
|
|
my $cell = Gtk2::CellRendererText->new;
|
|
$cell->set ('style' => 'italic');
|
|
my $column = Gtk2::TreeViewColumn->new_with_attributes
|
|
("Interfaces list",
|
|
$cell,
|
|
'text' => DISPLY_COLUMN,
|
|
'style_set' => ITAL_COLUMN);
|
|
|
|
$tree_view->append_column ($column);
|
|
my @ll=($model,\$info);
|
|
#row selected
|
|
|
|
$selection->signal_connect (changed =>sub {
|
|
my ($selection, $ref) = @_;
|
|
my ($model,$info)=@{$ref};
|
|
my $iter = $selection->get_selected;
|
|
return unless defined $iter;
|
|
|
|
my ($category) = $model->get ($iter, CATGR_COLUMN);
|
|
my ($name) = $model->get ($iter,INTFC_COLUMN );
|
|
my $describ=$intfc->get_description($category,$name);
|
|
|
|
if($describ){
|
|
#print "$entry description is: $describ \n";
|
|
show_info($info,$describ);
|
|
|
|
}
|
}
|
|
|
|
|
}, \@ll);
|
|
|
|
# row_activated
|
|
$tree_view->signal_connect (row_activated => sub{
|
|
|
|
my ($tree_view, $path, $column) = @_;
|
|
my $model = $tree_view->get_model;
|
|
my $iter = $model->get_iter ($path);
|
|
my ($category) = $model->get ($iter, CATGR_COLUMN);
|
|
my ($name) = $model->get ($iter,INTFC_COLUMN );
|
|
|
|
|
|
|
|
if($name){
|
|
#print "$infc_name-$infc_type is selected via row activaton!\n";
|
|
add_intfc_to_ip($intfc,$ipgen,$name,'plug',\$info);
|
|
|
|
}
|
|
|
|
}, \@ll);
|
|
|
|
#$tree_view->expand_all;
|
|
|
|
my $scrolled_window = Gtk2::ScrolledWindow->new;
|
|
$scrolled_window->set_policy ('automatic', 'automatic');
|
|
$scrolled_window->set_shadow_type ('in');
|
|
$scrolled_window->add($tree_view);
|
|
|
|
my $hbox = Gtk2::HBox->new (FALSE, 0);
|
|
$hbox->pack_start ( $scrolled_window, TRUE, TRUE, 0);
|
|
|
|
|
|
|
|
return $hbox;
|
|
}
|
|
|
|
|
|
|
|
sub save_ports_all{
|
sub save_ports_all{
|
my ($ipgen,$vdb,$top_module)=@_;
|
my ($ipgen,$vdb,$top_module)=@_;
|
|
|
Line 219... |
Line 108... |
#############
|
#############
|
|
|
sub ip_file_box {
|
sub ip_file_box {
|
my ($ipgen,$info,$table,$row)=@_;
|
my ($ipgen,$info,$table,$row)=@_;
|
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= $ipgen->ipgen_get("file_name");
|
my $file= $ipgen->ipgen_get("file_name");
|
if(defined $file){$entry->set_text($file);}
|
if(defined $file){$entry->set_text($file);}
|
|
else {show_info($info,"Please select the verilog file containing the top level IP core\n");}
|
|
|
|
|
|
my $entry2=gen_label_info(" IP name:",gen_entry_object($ipgen,'ip_name',undef,undef,undef,undef));
|
my $entry2=labele_widget_info(" IP name:",gen_entry_object($ipgen,'ip_name',undef,undef,undef,undef));
|
|
|
|
|
|
|
|
show_info(\$info,"Please select the verilog file containig the ip module\n");
|
#show_info($info,"Please select the verilog file containing the ip module\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','IP');
|
'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("IP");
|
|
$filter2->add_pattern("*.IP");
|
|
$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_file($file,$ipgen,$info);
|
check_input_file($file,$ipgen,$info);
|
#print "file = $file\n";
|
|
}
|
}
|
$dialog->destroy;
|
$dialog->destroy;
|
|
|
|
|
|
|
} , \$entry);
|
} , \$entry);
|
|
|
|
|
|
|
|
|
$entry->signal_connect("activate"=>sub{
|
$entry->signal_connect("activate"=>sub{
|
my $file_name=$entry->get_text();
|
my $file_name=$entry->get_text();
|
check_input_file($file_name,$ipgen,$info);
|
check_input_file($file_name,$ipgen,$info);
|
});
|
});
|
|
|
$entry->signal_connect("changed"=>sub{
|
$entry->signal_connect("changed"=>sub{
|
show_info(\$info,"Please select the verilog file containig the interface\n");
|
#my $file_name=$entry->get_text();
|
|
#check_input_file($file_name,$ipgen,$info);
|
});
|
});
|
|
|
$table->attach_defaults ($label, 0, 1 , $row, $row+1);
|
$table->attach_defaults ($label, 0, 1 , $row, $row+1);
|
$table->attach_defaults ($entry, 1, 8 , $row, $row+1);
|
$table->attach_defaults ($entry, 1, 8 , $row, $row+1);
|
$table->attach ($browse, 8, 9, $row, $row+1,,'expand','shrink',2,2);
|
$table->attach ($browse, 8, 9, $row, $row+1,,'expand','shrink',2,2);
|
Line 295... |
Line 163... |
|
|
my @modules= $ipgen->ipgen_get_module_list();
|
my @modules= $ipgen->ipgen_get_module_list();
|
my $saved_module=$ipgen->ipgen_get("module_name");
|
my $saved_module=$ipgen->ipgen_get("module_name");
|
my $pos=(defined $saved_module ) ? get_scolar_pos( $saved_module,@modules) : 0;
|
my $pos=(defined $saved_module ) ? get_scolar_pos( $saved_module,@modules) : 0;
|
my $combo = gen_combo(\@modules, $pos);
|
my $combo = gen_combo(\@modules, $pos);
|
my $top_module=labele_widget_info(" Select\n module:",$combo);
|
my $top_module=gen_label_info(" Select\n module:",$combo);
|
|
|
|
|
|
|
|
|
my $param= def_image_button("icons/setting.png","Parameter\n setting");
|
my $param= def_image_button("icons/setting.png","Parameter\n setting");
|
Line 313... |
Line 181... |
$ip =undef;
|
$ip =undef;
|
my $saved_category=$ipgen->ipgen_get("category");
|
my $saved_category=$ipgen->ipgen_get("category");
|
if(defined $saved_category ){ push(@categories,$saved_category) if(!( grep /^$saved_category$/, @categories ));}
|
if(defined $saved_category ){ push(@categories,$saved_category) if(!( grep /^$saved_category$/, @categories ));}
|
my $content=join( ',', @categories);
|
my $content=join( ',', @categories);
|
my $combentry=gen_comboentry_object ($ipgen,'category',undef,$content,$saved_category,undef,undef);
|
my $combentry=gen_comboentry_object ($ipgen,'category',undef,$content,$saved_category,undef,undef);
|
my $category=labele_widget_info(" Select\n Category:",$combentry,"Select the IP category form the given list or you can add a new category.");
|
my $category=gen_label_info(" Select\n Category:",$combentry,"Select the IP category form the given list or you can add a new category.");
|
|
|
|
|
|
|
my $ipinfo= def_image_button("icons/add_info.png"," IP\n Description");
|
my $ipinfo= def_image_button("icons/add_info.png"," IP\n Description");
|
my $header_h= def_image_button("icons/h_file.png","Add Software\n files");
|
my $header_h= def_image_button("icons/h_file.png","Add Software\n files");
|
Line 359... |
Line 227... |
get_Description($ipgen,$info);
|
get_Description($ipgen,$info);
|
|
|
});
|
});
|
$header_h->signal_connect("clicked"=> sub{
|
$header_h->signal_connect("clicked"=> sub{
|
my %page_info;
|
my %page_info;
|
my $help1="The files and folder that selected here will be copied in genertated processing tile SW folder.";
|
my $help1="The files and folder that selected here will be copied in generated processing tile SW folder.";
|
my $help2="The file listed here can contain some variable with \${var_name} format. The file genertor will replace them with their values during file generation. The variable can be selected from above listed global vairables";
|
my $help2="The file listed here can contain some variable with \${var_name} format. The file generator will replace them with their values during file generation. The variable can be selected from above listed global variables";
|
my $help3='Define the header file for this peripheral device. You can use global vriables listed at the top.
|
my $help3='Define the header file for this peripheral device. You can use global variables listed at the top. This file contains peripheral device functions\' deceleration, memory-mapped register address definition, definitions of data types, and C preprocessor commands. Do not put function definitions in the header file. Functions should be defined in add to tile.c section.
|
|
|
header file example
|
header file example
|
|
|
#define ${IP}_REG_0 (*((volatile unsigned int *) ($BASE)))
|
#define ${IP}_REG_0 (*((volatile unsigned int *) ($BASE)))
|
#define ${IP}_REG_1 (*((volatile unsigned int *) ($BASE+4)))
|
#define ${IP}_REG_1 (*((volatile unsigned int *) ($BASE+4)))
|
Line 373... |
Line 241... |
|
|
#define ${IP}_WRITE_REG1(value) ${IP}_REG_1=value
|
#define ${IP}_WRITE_REG1(value) ${IP}_REG_1=value
|
#define ${IP}_READ_REG1() ${IP}_REG_1
|
#define ${IP}_READ_REG1() ${IP}_REG_1
|
';
|
';
|
|
|
$page_info{0}{page_name} = "_Add exsiting file/folder";
|
my $help4='Define peripheral device\'s functions in this file. You can use global variables listed at the top.
|
|
';
|
|
|
|
|
|
$page_info{0}{page_name} = "_Add existing file/folder";
|
$page_info{0}{filed_name}= "sw_files";
|
$page_info{0}{filed_name}= "sw_files";
|
$page_info{0}{filed_type}= "exsiting_file/folder";
|
$page_info{0}{filed_type}= "existing_file/folder";
|
$page_info{0}{rename_file}=undef;
|
$page_info{0}{rename_file}=undef;
|
$page_info{0}{folder_en}=1;
|
$page_info{0}{folder_en}=1;
|
$page_info{0}{help}=$help1;
|
$page_info{0}{help}=$help1;
|
|
|
$page_info{1}{page_name} = "_Add files contain variables";
|
$page_info{1}{page_name} = "_Add files contain variables";
|
Line 395... |
Line 267... |
$page_info{2}{rename_file}=undef;
|
$page_info{2}{rename_file}=undef;
|
$page_info{2}{folder_en}=0;
|
$page_info{2}{folder_en}=0;
|
$page_info{2}{help}=$help3;
|
$page_info{2}{help}=$help3;
|
|
|
|
|
|
$page_info{3}{page_name} = "_Add to tile.c";
|
|
$page_info{3}{filed_name}= "system_c";
|
|
$page_info{3}{filed_type}= "file_content";
|
|
$page_info{3}{rename_file}=undef;
|
|
$page_info{3}{folder_en}=0;
|
|
$page_info{3}{help}=$help4;
|
|
|
|
|
|
|
|
|
|
|
get_source_file($ipgen,$info,0,"Add software file(s)","SW",\%page_info);
|
get_source_file($ipgen,$info,0,"Add software file(s)","SW",\%page_info);
|
#get_software_file($ipgen,$info,0);
|
#get_software_file($ipgen,$info,0);
|
|
|
});
|
});
|
$lib_hdl->signal_connect("clicked"=> sub{
|
$lib_hdl->signal_connect("clicked"=> sub{
|
my $help1="The files and folder that selected here will be copied in genertated processing tile RTL folder.";
|
my $help1="The files and folder that selected here will be copied in the generated processing tile src_verilog folder. If you tick simulation only option for each file/folder, they will be copied in src_sim folder instead and will only be used for simulation.";
|
my $help2="The file listed here can contain some variable with \${var_name} format. The file genertor will replace them with their values during file generation. The variable can be selected from above listed global vairables";
|
my $help2="The files listed here can contain some variables with \${var_name} format. The file generator will replace them with their values during file generation. The variable can be selected from the above listed global variables.";
|
my $help3='The content here will be added to the generated tile.v file. You can define functions/ tasks etc...';
|
my $help3='The content here will be added to the generated tile.v file. You can define functions/ tasks etc...';
|
|
|
my %page_info;
|
my %page_info;
|
$page_info{0}{page_name} = "_Add exsiting HDL file/folder";
|
$page_info{0}{page_name} = "_Add existing HDL file/folder";
|
$page_info{0}{filed_name}= "hdl_files";
|
$page_info{0}{filed_name}= "hdl_files";
|
$page_info{0}{filed_type}= "exsiting_file/folder";
|
$page_info{0}{filed_type}= "existing_file/folder";
|
$page_info{0}{rename_file}=undef;
|
$page_info{0}{rename_file}=undef;
|
$page_info{0}{folder_en}=1;
|
$page_info{0}{folder_en}=1;
|
$page_info{0}{help}=$help1;
|
$page_info{0}{help}=$help1;
|
|
$page_info{0}{tick}="Used only for Simulation";
|
|
|
$page_info{1}{page_name} = "_Add files contain variables";
|
$page_info{1}{page_name} = "_Add files contain variables";
|
$page_info{1}{filed_name}= "gen_hw_files";
|
$page_info{1}{filed_name}= "gen_hw_files";
|
$page_info{1}{filed_type}= "file_with_variables";
|
$page_info{1}{filed_type}= "file_with_variables";
|
$page_info{1}{rename_file}=1;
|
$page_info{1}{rename_file}=1;
|
Line 438... |
Line 322... |
}
|
}
|
|
|
sub load_default_setting{
|
sub load_default_setting{
|
my ($ipgen,$module)=@_;
|
my ($ipgen,$module)=@_;
|
my $file= $ipgen->ipgen_get("file_name");
|
my $file= $ipgen->ipgen_get("file_name");
|
|
$file=add_project_dir_to_addr($file);
|
$ipgen->ipgen_add("module_name",$module);
|
$ipgen->ipgen_add("module_name",$module);
|
my $vdb =read_verilog_file($file);
|
my $vdb =read_verilog_file($file);
|
my %parameters = $vdb->get_modules_parameters_not_local($module);
|
my %parameters = $vdb->get_modules_parameters_not_local($module);
|
my @parameters_order= $vdb->get_modules_parameters_not_local_order($module);
|
my @parameters_order= $vdb->get_modules_parameters_not_local_order($module);
|
my @ports_order=$vdb->get_module_ports_order($module);
|
my @ports_order=$vdb->get_module_ports_order($module);
|
Line 473... |
Line 358... |
my $table=def_table(2,11,FALSE);
|
my $table=def_table(2,11,FALSE);
|
my $table1=def_table(1,11,FALSE);
|
my $table1=def_table(1,11,FALSE);
|
my $table2=def_table(1,11,FALSE);
|
my $table2=def_table(1,11,FALSE);
|
ip_file_box ($ipgen,$info,$table1,0);
|
ip_file_box ($ipgen,$info,$table1,0);
|
select_module($ipgen,$info,$table2,0);
|
select_module($ipgen,$info,$table2,0);
|
$table->attach_defaults($table1,0,11,0,1);
|
$table->attach($table1,0,11,0,1,'fill','shrink',2,2);
|
$table->attach_defaults($table2,0,11,1,2);
|
$table->attach($table2,0,11,1,2,'fill','shrink',2,2);
|
return $table;
|
return add_widget_to_scrolled_win($table);
|
|
|
|
|
}
|
}
|
|
|
|
|
|
|
|
|
sub show_file_info{
|
|
my($ipgen,$info,$refresh_ref)=@_;
|
|
my $table = file_info_box($ipgen,$info,$info);
|
|
my $scrolled_win = new Gtk2::ScrolledWindow (undef, undef);
|
|
$scrolled_win->set_policy( "automatic", "never" );
|
|
$scrolled_win->add_with_viewport($table);
|
|
|
|
|
|
|
|
$$refresh_ref-> signal_connect("clicked" => sub{
|
|
$table->destroy;
|
|
$table = file_info_box($ipgen,$info,$info);
|
|
|
|
$scrolled_win->add_with_viewport($table);
|
|
$table->show;
|
|
$scrolled_win->show_all;
|
|
|
|
|
|
|
|
});
|
|
|
|
return $scrolled_win;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
sub show_port_info{
|
sub show_port_info{
|
my($intfc,$ipgen,$info,$refresh_ref)=@_;
|
my($intfc,$ipgen,$info,$refresh_ref)=@_;
|
my $table = port_info_box($intfc,$ipgen,$info,$info);
|
my $table = port_info_box($intfc,$ipgen,$info,$info);
|
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);
|
|
|
|
|
|
|
|
$$refresh_ref-> signal_connect("clicked" => sub{
|
$$refresh_ref-> signal_connect("clicked" => sub{
|
$table->destroy;
|
$table->destroy;
|
$table = port_info_box($intfc,$ipgen,$info,$info);
|
$table = port_info_box($intfc,$ipgen,$info,$info);
|
|
|
$scrolled_win->add_with_viewport($table);
|
add_widget_to_scrolled_win($table,$scrolled_win);
|
$table->show;
|
$table->show;
|
$scrolled_win->show_all;
|
$scrolled_win->show_all;
|
|
|
|
|
|
|
Line 538... |
Line 396... |
return $scrolled_win;
|
return $scrolled_win;
|
|
|
}
|
}
|
|
|
|
|
sub show_interface_info{
|
|
my($intfc,$ipgen,$info,$refresh_ref)=@_;
|
|
my $table = interface_info_box($intfc,$ipgen,$info,$info);
|
|
my $scrolled_win = new Gtk2::ScrolledWindow (undef, undef);
|
|
$scrolled_win->set_policy( "automatic", "automatic" );
|
|
$scrolled_win->add_with_viewport($table);
|
|
|
|
|
|
|
|
$$refresh_ref-> signal_connect("clicked" => sub{
|
|
$table->destroy;
|
|
select(undef, undef, undef, 0.1); #wait 10 ms
|
|
$table = interface_info_box($intfc,$ipgen,$info,$info);
|
|
|
|
$scrolled_win->add_with_viewport($table);
|
|
$table->show;
|
|
$scrolled_win->show_all;
|
|
|
|
|
|
});
|
|
|
|
return $scrolled_win;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Line 581... |
Line 412... |
my ($ipgen,$info)=@_;
|
my ($ipgen,$info)=@_;
|
|
|
|
|
my $file= $ipgen->ipgen_get("file_name");
|
my $file= $ipgen->ipgen_get("file_name");
|
if (!defined $file) {
|
if (!defined $file) {
|
message_dialog("The input verilog file is empty");
|
message_dialog("The input Verilog file is empty");
|
return;
|
#return;
|
|
|
}
|
}
|
my $module = $ipgen->ipgen_get("module_name");
|
my $module = $ipgen->ipgen_get("module_name");
|
|
|
|
|
Line 614... |
Line 445... |
|
|
my $redefine_info='
|
my $redefine_info='
|
If checked, the defined parameter/localparam in SoC will be passed to the IP core';
|
If checked, the defined parameter/localparam in SoC will be passed to the IP core';
|
|
|
#TABLE
|
#TABLE
|
my $table = Gtk2::Table->new (12, 8, FALSE);
|
my $table = def_table(12,8,FALSE);
|
my @positions=(0,1,2,3,4,5,6,7,8);
|
my @positions=(0,1,2,3,4,5,6,7,8);
|
my $col=0;
|
my $col=0;
|
#title
|
#title
|
my @title;
|
my @title;
|
$title[0]=gen_label_in_center("Parameter name");
|
$title[0]=gen_label_in_center("Parameter name");
|
$title[1]=gen_label_in_center("Default value");
|
$title[1]=gen_label_in_center("Default value");
|
$title[2]=gen_label_help($type_info,"Widget type");
|
$title[2]=gen_label_help($type_info,"Widget type");
|
$title[3]=gen_label_help($content_info,"Widget content");
|
$title[3]=gen_label_help($content_info,"Widget content");
|
$title[4]=gen_label_help($param_info,"Type");
|
$title[4]=gen_label_help($param_info,"Type");
|
$title[5]=gen_label_help($redefine_info,"");
|
$title[5]=gen_label_help($redefine_info,"");
|
$title[6]=gen_label_help("You can add aditional information about this parameter.","info");
|
$title[6]=gen_label_help("You can add additional information about this parameter.","info");
|
$title[7]=gen_label_in_center("add/remove");
|
$title[7]=gen_label_in_center("add/remove");
|
|
|
|
|
foreach my $t (@title){
|
foreach my $t (@title){
|
$table->attach ($title[$col], $positions[$col], $positions[$col+1], 0, 1,'expand','shrink',2,2); $col++;
|
$table->attach ($title[$col], $positions[$col], $positions[$col+1], 0, 1,'expand','shrink',2,2); $col++;
|
|
|
}
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
my @parameters=$ipgen->ipgen_get_all_parameters_list();
|
my @parameters=$ipgen->ipgen_get_all_parameters_list();
|
my @params_order= $ipgen->ipgen_get_list("parameters_order");
|
my @params_order= $ipgen->ipgen_get_list("parameters_order");
|
if((@params_order)) {@parameters=@params_order;}
|
if((@params_order)) {@parameters=@params_order;}
|
|
|
my $ok = def_image_button('icons/select.png','OK');
|
my $ok = def_image_button('icons/select.png','OK');
|
Line 688... |
Line 513... |
$pos=get_scolar_pos($vfile_param_type,@param_type_list);
|
$pos=get_scolar_pos($vfile_param_type,@param_type_list);
|
my $check_param= gen_combo(\@param_type_list, $pos);
|
my $check_param= gen_combo(\@param_type_list, $pos);
|
|
|
|
|
#$check_param->set_active($vfile_param_type) if(defined $vfile_param_type );
|
#$check_param->set_active($vfile_param_type) if(defined $vfile_param_type );
|
my $check_redefine= Gtk2::CheckButton->new('Redefine');
|
my $check_redefine= gen_checkbutton('Redefine');
|
$check_redefine->set_active(1) ;
|
$check_redefine->set_active(1) ;
|
$check_redefine->set_active($redefine_param) if(defined $redefine_param );
|
$check_redefine->set_active($redefine_param) if(defined $redefine_param );
|
|
|
|
|
|
|
|
|
|
|
#my $check= Gtk2::CheckButton->new;
|
|
#$check->set_active($vfile_param_type) if(defined $vfile_param_type );
|
|
|
|
|
|
my $info=def_image_button("icons/add_info.png");
|
my $info=def_image_button("icons/add_info.png");
|
#print "\$vfile_param_type =$vfile_param_type\n";
|
#print "\$vfile_param_type =$vfile_param_type\n";
|
|
|
$col=0;
|
$col=0;
|
my @all_widget=($param_name,$default_entry,$widget_type_combo,$content_entry,$check_param,$check_redefine,$info,$add_remove);
|
my @all_widget=($param_name,$default_entry,$widget_type_combo,$content_entry,$check_param,$check_redefine,$info,$add_remove);
|
Line 728... |
Line 545... |
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,$default,$type,$content,$saved_info,$vfile_param_type,$redefine_param);
|
$ipgen->ipgen_add_parameter($p,$default,$type,$content,$saved_info,$vfile_param_type,$redefine_param);
|
|
|
if ($type eq "Spin-button"){
|
if ($type eq "Spin-button"){
|
my @d=split(",",$content);
|
my @d=split(/\s*,\s*/,$content);
|
if( scalar @d != 3){
|
if( scalar @d != 3){
|
$error=$error."wrong content setting for parameter $p\n" ;
|
$error=$error."wrong content setting for parameter $p\n" ;
|
print "$error";
|
print "$error";
|
}
|
}
|
}
|
}
|
Line 784... |
Line 601... |
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
|
|
Line 816... |
Line 631... |
|
|
|
|
|
|
|
|
if (defined $error){
|
if (defined $error){
|
message_dialog("$error");
|
message_dialog("$error",'error');
|
$error=undef;
|
$error=undef;
|
}else {
|
}else {
|
$window->destroy();
|
$window->destroy();
|
}
|
}
|
|
|
Line 843... |
Line 658... |
############
|
############
|
# get_def_setting
|
# get_def_setting
|
##########
|
##########
|
sub get_def_setting {
|
sub get_def_setting {
|
my ($ipgen,$info)=@_;
|
my ($ipgen,$info)=@_;
|
my $table = Gtk2::Table->new (15, 15, TRUE);
|
my $table = def_table (15, 15, TRUE);
|
my $table2 = Gtk2::Table->new (15, 15, TRUE);
|
my $table2 = def_table (15, 15, TRUE);
|
my $window = def_popwin_size(70,70,"Add definition file",'percent');
|
my $window = def_popwin_size(70,70,"Add definition file",'percent');
|
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);
|
|
$scrwin->set_policy( "automatic", "automatic" );
|
|
$scrwin->add_with_viewport($table2);
|
|
|
|
my $label=gen_label_help("You ","Selecet the Verilog file containig the definitions.");
|
my $scrwin = add_widget_to_scrolled_win($table2);
|
|
|
|
my $label=gen_label_help("You ","Select the Verilog file containing the definitions.");
|
my $brows=def_image_button("icons/browse.png",' Browse');
|
my $brows=def_image_button("icons/browse.png",' Browse');
|
$table->attach_defaults($label,0,10,0,1);
|
$table->attach_defaults($label,0,10,0,1);
|
$table->attach($brows,10,12,1,2,'expand','shrink',2,2);
|
$table->attach($brows,10,12,1,2,'expand','shrink',2,2);
|
$table->attach_defaults($scrwin,0,15,2,14);
|
$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);
|
Line 872... |
Line 686... |
#########
|
#########
|
|
|
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 = def_table (15, 15, FALSE);
|
my $window = def_popwin_size(40,40, "Add description",'percent');
|
my $window = def_popwin_size(40,40, "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(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(gen_label_help("User can open the PDF file when opening IP parameter setting","IP Documentation file in PDF"),0,7,0,1);
|
$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(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(get_file_name_object ( $ipgen, 'description_pdf',undef,"pdf",undef),7,15,0,1);
|
$table->attach_defaults($scrwin,0,15,2,14);
|
$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;
|
Line 909... |
Line 723... |
##########
|
##########
|
# gen_file_list
|
# gen_file_list
|
#########
|
#########
|
|
|
sub gen_file_list{
|
sub gen_file_list{
|
my ($ipgen,$list_name,$window,$rename_file_en)=@_;
|
my ($ipgen,$list_name,$window,$rename_file_en,$tick)=@_;
|
|
|
|
|
my $table=def_table(10,10,FALSE);# my ($row,$col,$homogeneous)=@_;
|
my $table=def_table(10,10,FALSE);# my ($row,$col,$homogeneous)=@_;
|
my $scrolled_win = new Gtk2::ScrolledWindow (undef, undef);
|
|
my $ok=def_image_button("icons/select.png",' Ok ');
|
my $ok=def_image_button("icons/select.png",' Ok ');
|
|
my $scrolled_win = add_widget_to_scrolled_win($table);
|
|
|
$scrolled_win->set_policy( "automatic", "automatic" );
|
|
$scrolled_win->add_with_viewport($table);
|
|
$table->attach (gen_label_in_center("File path"), 0, 5 , 0, 1,'expand','shrink',2,2);
|
$table->attach (gen_label_in_center("File path"), 0, 5 , 0, 1,'expand','shrink',2,2);
|
$table->attach (gen_label_help("The target name can contain any of Global variables e.g \$IP\$.h","Copy as"), 5, 9 , 0, 1,'expand','shrink',2,2) if(defined $rename_file_en);
|
$table->attach (gen_label_help("The target name can contain any of Global variables e.g \$IP\$.h","Copy as"), 5, 9 , 0, 1,'expand','shrink',2,2) if(defined $rename_file_en);
|
|
$table->attach (gen_label_in_center("$tick"), 9, 10 , 0, 1,'expand','shrink',2,2) if (defined $tick);
|
my $col=0;
|
my $col=0;
|
my $row=1;
|
my $row=1;
|
my @files= $ipgen->ipgen_get_list($list_name); #@{$ref};
|
my @files= $ipgen->ipgen_get_list($list_name); #@{$ref};
|
my $file_num= scalar @files;
|
my $file_num= scalar @files;
|
foreach my $p(@files){
|
foreach my $p(@files){
|
my ($path,$rename)=split('frename_sep_t',$p);
|
my ($path,$rename)=split('frename_sep_t',$p);
|
my $entry=gen_entry($path);
|
my $entry=gen_entry($path);
|
my $entry2=gen_entry($rename) ;
|
my $entry2=gen_entry($rename) ;
|
|
|
my $remove=def_image_button("icons/cancel.png");
|
my $remove=def_image_button("icons/cancel.png");
|
$table->attach ($entry, 0, 5 , $row, $row+1,'fill','shrink',2,2);
|
$table->attach ($entry, 0, 5 , $row, $row+1,'fill','shrink',2,2);
|
$table->attach ($entry2, 5, 9 , $row, $row+1,'fill','shrink',2,2) if(defined $rename_file_en);
|
$table->attach ($entry2, 5, 9 , $row, $row+1,'fill','shrink',2,2) if(defined $rename_file_en);
|
$table->attach ($remove, 9,10 , $row, $row+1,'expand','shrink',2,2);
|
$table->attach ($remove, 10,11 , $row, $row+1,'expand','shrink',2,2);
|
|
my $check= gen_checkbutton();
|
|
if (defined $tick){
|
|
$table->attach ($check, 9,10 , $row, $row+1,'expand','shrink',2,2);
|
|
$check-> signal_connect("toggled" => sub{
|
|
my @ticked_files=$ipgen->ipgen_get_list($list_name."_ticked");
|
|
@ticked_files =() if (!@ticked_files);
|
|
|
|
|
|
if($check->get_active()){
|
|
push(@ticked_files,$p);
|
|
}else{
|
|
@ticked_files=remove_scolar_from_array(\@ticked_files,$p);
|
|
}
|
|
$ipgen->ipgen_add($list_name."_ticked",\@ticked_files);
|
|
});
|
|
|
|
}
|
$row++;
|
$row++;
|
|
|
|
|
$remove->signal_connect("clicked"=> sub {
|
$remove->signal_connect("clicked"=> sub {
|
my @saved_files=$ipgen->ipgen_get_list($list_name);
|
my @saved_files=$ipgen->ipgen_get_list($list_name);
|
@saved_files=remove_scolar_from_array(\@saved_files,$p);
|
@saved_files=remove_scolar_from_array(\@saved_files,$p);
|
$ipgen->ipgen_add($list_name,\@saved_files);
|
$ipgen->ipgen_add($list_name,\@saved_files);
|
|
|
|
my @ticked_files=$ipgen->ipgen_get_list($list_name."_ticked");
|
|
@ticked_files=remove_scolar_from_array(\@ticked_files,$p);
|
|
$ipgen->ipgen_add($list_name."_ticked",\@ticked_files);
|
|
|
|
|
$entry->destroy;
|
$entry->destroy;
|
$entry2->destroy if(defined $rename_file_en);
|
$entry2->destroy if(defined $rename_file_en);
|
$remove->destroy;
|
$remove->destroy;
|
|
|
});
|
});
|
Line 960... |
Line 799... |
|
|
|
|
|
|
});
|
});
|
|
|
#my $seph = Gtk2::HSeparator->new;
|
|
#$table->attach_defaults ($seph, 0, 10 , $row, $row+1);
|
|
#$row++;
|
|
|
|
}
|
}
|
|
|
|
|
|
|
Line 985... |
Line 822... |
|
|
|
|
|
|
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 = def_table (15, 15, FALSE);
|
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 $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);
|
my $text_buffer = $text_view->get_buffer;
|
my $text_buffer = $text_view->get_buffer;
|
Line 1182... |
Line 1019... |
|
|
|
|
$row++;
|
$row++;
|
}
|
}
|
|
|
|
return add_widget_to_scrolled_win($table);
|
|
|
|
|
|
|
return $table;
|
|
|
|
}
|
}
|
########
|
########
|
# get_intfc_setting
|
# get_intfc_setting
|
########
|
########
|
Line 1200... |
Line 1033... |
my ($ipgen,$intfc_name, $intfc_type)=@_;
|
my ($ipgen,$intfc_name, $intfc_type)=@_;
|
my $window = def_popwin_size(70,70,"Interface parameter setting",'percent');
|
my $window = def_popwin_size(70,70,"Interface parameter setting",'percent');
|
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');
|
|
|
|
my $scrolled_win = add_widget_to_scrolled_win($table);
|
|
|
my $scrolled_win = new Gtk2::ScrolledWindow (undef, undef);
|
|
$scrolled_win->set_policy( "automatic", "automatic" );
|
|
$scrolled_win->add_with_viewport($table);
|
|
|
|
#title
|
#title
|
my $lable1=gen_label_in_left("interface name");
|
my $label1=gen_label_in_left("interface name");
|
$table->attach ( $lable1,0,2,0,1,'expand','shrink',2,2);
|
$table->attach ( $label1,0,2,0,1,'expand','shrink',2,2);
|
|
|
|
|
|
|
|
|
my ($type,$value);
|
my ($type,$value);
|
Line 1245... |
Line 1074... |
}
|
}
|
|
|
|
|
#wishbone addr
|
#wishbone addr
|
if($intfc_name eq 'wb_slave' && $intfc_type eq 'plug'){
|
if($intfc_name eq 'wb_slave' && $intfc_type eq 'plug'){
|
my $lable2=gen_label_in_center("address range: (start end name)");
|
my $label2=gen_label_in_center("address range: (start end name)");
|
my $lable3=gen_label_help("This field defines the total memory_map address which is required by this module in byte. ( =2 ^ block_address_width).
|
my $label3=gen_label_help("This field defines the total memory_map address which is required by this module in byte. ( =2 ^ block_address_width).
|
You can define a fixed value or assign it to any of module parameter","block address width");
|
You can define a fixed value or assign it to any of module parameter","block address width");
|
|
|
$table->attach ( $lable2,2,5,0,1,'expand','shrink',2,2);
|
$table->attach ( $label2,2,5,0,1,'expand','shrink',2,2);
|
$table->attach ( $lable3,5,6,0,1,'expand','shrink',2,2);
|
$table->attach ( $label3,5,6,0,1,'expand','shrink',2,2);
|
|
|
my $plug=$intfc_name;
|
my $plug=$intfc_name;
|
my $wb= wb_addr->wb_addr_new();
|
my $wb= wb_addr->wb_addr_new();
|
my @ip_names=$wb->wb_list_names();
|
my @ip_names=$wb->wb_list_names();
|
my @list;
|
my @list;
|
Line 1392... |
Line 1221... |
|
|
}
|
}
|
|
|
|
|
|
|
sub is_integer {
|
|
defined $_[0] && $_[0] =~ /^[+-]?\d+$/;
|
|
}
|
|
|
|
|
|
#############
|
#############
|
# add_intfc_to_ip
|
# add_intfc_to_ip
|
##############
|
##############
|
Line 1414... |
Line 1241... |
set_gui_status($ipgen,"interface_selected",1);
|
set_gui_status($ipgen,"interface_selected",1);
|
|
|
}
|
}
|
|
|
|
|
|
sub add_plug_interface_from_tree{
|
|
my ($ipgen,$category,$infc_name,$info)=@_;
|
|
$ipgen->ipgen_add_plug($infc_name,'num',1);
|
|
set_gui_status($ipgen,"interface_selected",1);
|
|
}
|
|
|
|
sub show_interface_description {
|
|
my ($soc,$category,$infc_name,$info)=@_;
|
|
my $intfc=interface->interface_new();
|
|
my $describ=$intfc->get_description($category,$infc_name);
|
|
if($describ){
|
|
show_info($info,$describ);
|
|
}
|
|
undef $intfc;
|
|
}
|
|
|
#################
|
#################
|
# get_list_of_all_interfaces
|
# get_list_of_all_interfaces
|
################
|
################
|
|
|
sub get_list_of_all_interfaces{
|
sub get_list_of_all_interfaces{
|
Line 1577... |
Line 1420... |
}
|
}
|
|
|
|
|
|
|
|
|
return $table;
|
return add_widget_to_scrolled_win($table);
|
|
|
|
|
}
|
}
|
|
|
|
|
Line 1605... |
Line 1448... |
print FILE perl_file_header("$ip_name.IP");
|
print FILE perl_file_header("$ip_name.IP");
|
print FILE Data::Dumper->Dump([\%$ipgen],["ipgen"]);
|
print FILE Data::Dumper->Dump([\%$ipgen],["ipgen"]);
|
close(FILE) || die "Error closing file: $!";
|
close(FILE) || die "Error closing file: $!";
|
my $message="IP $ip_name has been generated successfully. In order to see the generated IP in processing tile generator you need to reset the ProNoC. Do you want to reset the ProNoC now?" ;
|
my $message="IP $ip_name has been generated successfully. In order to see the generated IP in processing tile generator you need to reset the ProNoC. Do you want to reset the ProNoC now?" ;
|
|
|
my $dialog = Gtk2::MessageDialog->new (my $window,
|
my $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;
|
|
|
|
}
|
}
|
|
|
|
|
|
|
sub generate_ip{
|
sub generate_ip{
|
Line 1644... |
Line 1480... |
|
|
#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 $response = yes_no_dialog("No HDL library file has been set for this IP. Do you want to generate this IP?");
|
'destroy-with-parent',
|
|
'question', # message type
|
|
'yes-no', # which set of buttons?
|
|
"No hdl library file has been set for this IP. Do you want to generate this IP?");
|
|
my $response = $dialog->run;
|
|
if ($response eq 'yes') {
|
if ($response eq 'yes') {
|
write_ip($ipgen);
|
write_ip($ipgen);
|
|
|
|
|
}
|
}
|
$dialog->destroy;
|
|
|
|
|
|
#$dialog->show_all;
|
|
|
|
}else{
|
}else{
|
|
|
write_ip($ipgen);
|
write_ip($ipgen);
|
}
|
}
|
}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!" ;}
|
Line 1688... |
Line 1513... |
########
|
########
|
|
|
sub load_ip{
|
sub load_ip{
|
my ($ipgen)=@_;
|
my ($ipgen)=@_;
|
my $file;
|
my $file;
|
my $dialog = Gtk2::FileChooserDialog->new(
|
my $dialog = gen_file_dialog (undef, 'IP');
|
'Select a File', undef,
|
|
'open',
|
|
'gtk-cancel' => 'cancel',
|
|
'gtk-ok' => 'ok',
|
|
);
|
|
|
|
my $filter = Gtk2::FileFilter->new();
|
|
$filter->set_name("IP");
|
|
$filter->add_pattern("*.IP");
|
|
$dialog->add_filter ($filter);
|
|
my $dir = Cwd::getcwd();
|
my $dir = Cwd::getcwd();
|
$dialog->set_current_folder ("$dir/lib/ip") ;
|
$dialog->set_current_folder ("$dir/lib/ip") ;
|
|
|
|
|
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 '.IP'){
|
if($suffix eq '.IP'){
|
$ipgen->ipgen_add("file_name",$file);
|
$ipgen->ipgen_add("file_name",$file);
|
set_gui_status($ipgen,"load_file",0);
|
set_gui_status($ipgen,"load_file",0);
|
}
|
}
|
}
|
}
|
$dialog->destroy;
|
$dialog->destroy;
|
|
|
|
|
|
|
}
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
############
|
############
|
# get_source_file
|
# get_source_file
|
###########
|
###########
|
|
|
|
|
Line 1734... |
Line 1542... |
my($ipgen,$info,$page,$title,$dest,$page_info_ref)=@_;
|
my($ipgen,$info,$page,$title,$dest,$page_info_ref)=@_;
|
|
|
|
|
my $var_list='${parameter_name}: Verilog module parameter values.
|
my $var_list='${parameter_name}: Verilog module parameter values.
|
|
|
${CORE_ID} Each wishbone bus based SoC will have a unique CORE_ID that represents its location in NoC topology. CORE_ID=((y * number_of_nodes_in_x_ dimension) + x) where (x,y) are the node location in x and y axises. If the generated tile is used as top level module CORE_ID will take the default value of zero.
|
${CORE_ID} Each wishbone bus based SoC will have a unique CORE_ID that represents its location in NoC topology. CORE_ID=((y * number_of_nodes_in_x_ dimension) + x) where (x,y) are the node location in x and y axes. If the generated tile is used as top level module CORE_ID will take the default value of zero.
|
|
|
${IP}: is the peripheral device instance name.
|
${IP}: is the peripheral device instance name.
|
|
|
${CORE}: is the peripheral device module name.
|
${CORE}: is the peripheral device module name.
|
|
|
${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 address(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");
|
|
|
|
|
Line 1767... |
Line 1575... |
# source_notebook
|
# source_notebook
|
##########
|
##########
|
|
|
sub source_notebook{
|
sub source_notebook{
|
my($ipgen,$info,$window,$page,$dest,$page_info_ref)=@_;
|
my($ipgen,$info,$window,$page,$dest,$page_info_ref)=@_;
|
my $notebook = Gtk2::Notebook->new;
|
my $notebook = gen_notebook();
|
my %page_info=%{$page_info_ref};
|
my %page_info=%{$page_info_ref};
|
foreach my $p (sort keys %page_info){
|
foreach my $p (sort keys %page_info){
|
my $page_ref;
|
my $page_ref;
|
$page_ref=get_file_folder($ipgen,$info,$window,$p,$page_info_ref) if($page_info{$p}{filed_type} eq "exsiting_file/folder");
|
$page_ref=get_file_folder($ipgen,$info,$window,$p,$page_info_ref) if($page_info{$p}{filed_type} eq "existing_file/folder");
|
$page_ref=get_file_folder($ipgen,$info,$window,$p,$page_info_ref) if($page_info{$p}{filed_type} eq "file_with_variables");
|
$page_ref=get_file_folder($ipgen,$info,$window,$p,$page_info_ref) if($page_info{$p}{filed_type} eq "file_with_variables");
|
$page_ref=get_file_content($ipgen,$info,$window,$page_info{$p},$page_info_ref) if($page_info{$p}{filed_type} eq "file_content");
|
$page_ref=get_file_content($ipgen,$info,$window,$page_info{$p},$page_info_ref) if($page_info{$p}{filed_type} eq "file_content");
|
$notebook->append_page ($page_ref,Gtk2::Label->new_with_mnemonic ($page_info{$p}{page_name}));
|
$notebook->append_page ($page_ref,gen_label_with_mnemonic ($page_info{$p}{page_name}));
|
|
|
}
|
}
|
$notebook->show_all;
|
$notebook->show_all;
|
$notebook->set_current_page($page) if(defined $page);
|
$notebook->set_current_page($page) if(defined $page);
|
return $notebook;
|
return $notebook;
|
Line 1791... |
Line 1599... |
|
|
sub get_file_folder{
|
sub get_file_folder{
|
my ($ipgen,$info,$window,$page,$page_info_ref)=@_;
|
my ($ipgen,$info,$window,$page,$page_info_ref)=@_;
|
my %page_info=%{$page_info_ref};
|
my %page_info=%{$page_info_ref};
|
my @sw_dir = $ipgen->ipgen_get_list($page_info{$page}{filed_name});
|
my @sw_dir = $ipgen->ipgen_get_list($page_info{$page}{filed_name});
|
my $table = Gtk2::Table->new (15, 15, FALSE);
|
my $table = def_table (15, 15, FALSE);
|
my $help=gen_label_help($page_info{$page}{help});
|
my $help=gen_label_help($page_info{$page}{help});
|
$table->attach ($help,0,2,0,1,'expand','shrink',2,2);
|
$table->attach ($help,0,2,0,1,'expand','shrink',2,2);
|
my ($scrwin,$ok)=gen_file_list($ipgen,$page_info{$page}{filed_name},$window,$page_info{$page}{rename_file});
|
my $tick = $page_info{$page}{'tick'};
|
|
my ($scrwin,$ok)=gen_file_list($ipgen,$page_info{$page}{filed_name},$window,$page_info{$page}{rename_file},$tick);
|
|
|
my $label=gen_label_in_left("Selecet file(s):");
|
my $label=gen_label_in_left("Select file(s):");
|
my $brows=def_image_button("icons/browse.png",' Browse');
|
my $brows=def_image_button("icons/browse.png",' Browse');
|
$table->attach ($label,2,4,0,1,'expand','shrink',2,2);
|
$table->attach ($label,2,4,0,1,'expand','shrink',2,2);
|
$table->attach($brows,4,6,0,1,'expand','shrink',2,2);
|
$table->attach($brows,4,6,0,1,'expand','shrink',2,2);
|
|
|
my $dir = Cwd::getcwd();
|
my $dir = Cwd::getcwd();
|
my $project_dir = abs_path("$dir/../../"); #mpsoc directory address
|
my $project_dir = abs_path("$dir/../../"); #mpsoc directory address
|
|
|
|
|
$brows->signal_connect("clicked"=> sub {
|
$brows->signal_connect("clicked"=> sub {
|
my @files;
|
my @files;
|
my $dialog = Gtk2::FileChooserDialog->new(
|
my $dialog = gen_file_dialog (undef);
|
'Select a File',
|
|
undef,
|
|
'open',
|
|
'gtk-cancel' => 'cancel',
|
|
'gtk-ok' => 'ok',
|
|
);
|
|
|
|
my $filter = Gtk2::FileFilter->new();
|
|
my $dir = Cwd::getcwd();
|
my $dir = Cwd::getcwd();
|
$dialog->set_current_folder ("$dir/..") ;
|
$dialog->set_current_folder ("$dir/..") ;
|
$dialog->set_select_multiple(TRUE);
|
$dialog->set_select_multiple(TRUE);
|
|
|
if ( "ok" eq $dialog->run ) {
|
if ( "ok" eq $dialog->run ) {
|
@files = $dialog->get_filenames;
|
@files = get_filenames_from_dialog($dialog);
|
@sw_dir=$ipgen->ipgen_get_list($page_info{$page}{filed_name});
|
@sw_dir=$ipgen->ipgen_get_list($page_info{$page}{filed_name});
|
foreach my $p (@files){
|
foreach my $p (@files){
|
#remove $project_dir form beginig of each file
|
#remove $project_dir form beginning of each file
|
$p =~ s/$project_dir//;
|
$p =~ s/$project_dir//;
|
my ($name,$path,$suffix) = fileparse("$p",qr"\..[^.]*$");
|
my ($name,$path,$suffix) = fileparse("$p",qr"\..[^.]*$");
|
$p=$p.'frename_sep_t'.$name.$suffix if (defined $page_info{$page}{rename_file});
|
$p=$p.'frename_sep_t'.$name.$suffix if (defined $page_info{$page}{rename_file});
|
if(! grep (/^$p$/,@sw_dir)){push(@sw_dir,$p)};
|
if(! grep (/^$p$/,@sw_dir)){push(@sw_dir,$p)};
|
|
|
}
|
}
|
$ipgen->ipgen_add($page_info{$page}{filed_name},\@sw_dir);
|
$ipgen->ipgen_add($page_info{$page}{filed_name},\@sw_dir);
|
get_source_file($ipgen,$info,$page,"Add software file(s)","SW",$page_info_ref);
|
get_source_file($ipgen,$info,$page,"Add software file(s)","SW",$page_info_ref);
|
$window->destroy;
|
$window->destroy;
|
|
|
}
|
}
|
$dialog->destroy;
|
$dialog->destroy;
|
} );# # ,\$entry);
|
} );# # ,\$entry);
|
|
|
if($page_info{$page}{folder_en} eq 1){
|
if($page_info{$page}{folder_en} eq 1){
|
my $label2=gen_label_in_left("Selecet folder(s):");
|
my $label2=gen_label_in_left("Select folder(s):");
|
my $brows2=def_image_button("icons/browse.png",' Browse');
|
my $brows2=def_image_button("icons/browse.png",' Browse');
|
$table->attach($label2,7,9,0,1,'expand','shrink',2,2);
|
$table->attach($label2,7,9,0,1,'expand','shrink',2,2);
|
$table->attach($brows2,9,11,0,1,'expand','shrink',2,2);
|
$table->attach($brows2,9,11,0,1,'expand','shrink',2,2);
|
|
|
$brows2->signal_connect("clicked"=> sub {
|
$brows2->signal_connect("clicked"=> sub {
|
my @files;
|
my @files;
|
|
my $dialog = gen_folder_dialog ('Select Folder(s)');
|
my $dialog = Gtk2::FileChooserDialog->new(
|
|
'Select Folder(s)',
|
|
undef,
|
|
'select-folder',
|
|
'gtk-cancel' => 'cancel',
|
|
'gtk-ok' => 'ok',
|
|
);
|
|
|
|
my $filter = Gtk2::FileFilter->new();
|
|
my $dir = Cwd::getcwd();
|
my $dir = Cwd::getcwd();
|
$dialog->set_current_folder ("$dir/..") ;
|
$dialog->set_current_folder ("$dir/..") ;
|
$dialog->set_select_multiple(TRUE);
|
$dialog->set_select_multiple(TRUE);
|
|
|
if ( "ok" eq $dialog->run ) {
|
if ( "ok" eq $dialog->run ) {
|
@files = $dialog->get_filenames;
|
@files = get_filenames_from_dialog($dialog);
|
|
|
@sw_dir=$ipgen->ipgen_get_list($page_info{$page}{filed_name});
|
@sw_dir=$ipgen->ipgen_get_list($page_info{$page}{filed_name});
|
foreach my $p (@files){
|
foreach my $p (@files){
|
#remove $project_dir form beginig of each file
|
#remove $project_dir form beginning of each file
|
$p =~ s/$project_dir//;
|
$p =~ s/$project_dir//;
|
if(! grep (/^$p$/,@sw_dir)){push(@sw_dir,$p)};
|
if(! grep (/^$p$/,@sw_dir)){push(@sw_dir,$p)};
|
|
|
}
|
}
|
|
|
Line 1890... |
Line 1681... |
} );# # ,\$entry);
|
} );# # ,\$entry);
|
}
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
$table->attach_defaults($scrwin,0,15,1,14);
|
$table->attach_defaults($scrwin,0,15,1,14);
|
$table->attach($ok,6,9,14,15,'expand','shrink',2,2);
|
$table->attach($ok,6,9,14,15,'expand','shrink',2,2);
|
|
|
return ($table)
|
return ($table)
|
|
|
Line 1909... |
Line 1703... |
sub get_file_content{
|
sub get_file_content{
|
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 = def_table (14, 15, FALSE);
|
my ($scrwin,$text_view)=create_text();
|
my ($scrwin,$text_view)=create_txview();
|
|
|
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);
|
my $text_buffer = $text_view->get_buffer;
|
my $text_buffer = $text_view->get_buffer;
|
Line 2026... |
Line 1820... |
my $ipgen=shift;
|
my $ipgen=shift;
|
my $intfc=interface->interface_new();
|
my $intfc=interface->interface_new();
|
if(!defined $ipgen) { $ipgen=ip_gen->ip_gen_new();}
|
if(!defined $ipgen) { $ipgen=ip_gen->ip_gen_new();}
|
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 containing 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_txview();
|
|
|
|
|
my $refresh_dev_win = Gtk2::Button->new_from_stock('ref');
|
|
my $generate = def_image_button('icons/gen.png','Generate');
|
my $generate = def_image_button('icons/gen.png','Generate');
|
|
|
|
|
# A tree view for holding a library
|
# A tree view for holding a library
|
my $tree_box = create_interface_tree ($info,$intfc,$ipgen);
|
my %tree_text;
|
|
my @categories= $intfc->get_categories();
|
|
foreach my $p (@categories)
|
|
{
|
|
my @intfc_names= $intfc->get_intfcs_of_category($p);
|
|
$tree_text{$p}=\@intfc_names;
|
|
|
|
}
|
|
|
|
|
|
my $tree_box = create_tree ($ipgen,'Interfaces list',$info,\%tree_text,\&show_interface_description ,\&add_plug_interface_from_tree);
|
|
|
my $file_info=show_file_info($ipgen,$info,\$refresh_dev_win);
|
|
my $port_info=show_port_info($intfc,$ipgen,$info,\$refresh_dev_win);
|
my $file_info=file_info_box($ipgen,$info);
|
my $intfc_info=show_interface_info($intfc,$ipgen,$info,\$refresh_dev_win);
|
my $port_info=port_info_box($intfc,$ipgen,$info);
|
|
my $intfc_info=interface_info_box($intfc,$ipgen,$info);
|
|
|
|
|
my $open = def_image_button('icons/browse.png','Load IP');
|
my $open = def_image_button('icons/browse.png','Load IP');
|
|
|
|
|
$main_table->set_row_spacings (4);
|
$main_table->set_row_spacings (4);
|
$main_table->set_col_spacings (1);
|
$main_table->set_col_spacings (1);
|
|
|
#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);
|
|
|
my $v1=gen_vpaned($file_info,.2,$intfc_info);
|
my $v1=gen_vpaned($file_info,.2,$intfc_info);
|
my $v2=gen_vpaned($v1,.4,$port_info);
|
my $v2=gen_vpaned($v1,.4,$port_info);
|
my $h1=gen_hpaned($tree_box,.15,$v2);
|
my $h1=gen_hpaned($tree_box,.15,$v2);
|
my $v3=gen_vpaned($h1,.6,$infobox);
|
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_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. refresh device table if there is any changes
|
Glib::Timeout->add (100, sub{
|
Glib::Timeout->add (100, sub{
|
|
|
my ($state,$timeout)= get_gui_status($ipgen);
|
my ($state,$timeout)= get_gui_status($ipgen);
|
if($state eq "load_file"){
|
if($state eq "load_file"){
|
my $file=$ipgen->ipgen_get("file_name");
|
my $file=$ipgen->ipgen_get("file_name");
|
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_colored_info($info,"**Error reading $file file: $err\n",'red');
|
|
|
return;
|
return;
|
}
|
}
|
clone_obj($ipgen,$pp);
|
clone_obj($ipgen,$pp);
|
|
show_info($info,"$file is loaded!\n ");
|
set_gui_status($ipgen,"ref",1);
|
set_gui_status($ipgen,"ref",1);
|
|
|
|
|
}elsif ($timeout>0){
|
}elsif ($timeout>0){
|
$timeout--;
|
$timeout--;
|
Line 2127... |
Line 1900... |
|
|
|
|
|
|
}
|
}
|
elsif( $state ne "ideal" ){
|
elsif( $state ne "ideal" ){
|
$refresh_dev_win->clicked;
|
$file_info->destroy;
|
|
$port_info->destroy;
|
|
$intfc_info->destroy;
|
|
$file_info=file_info_box($ipgen,$info);
|
|
$port_info=port_info_box($intfc,$ipgen,$info);
|
|
$intfc_info=interface_info_box($intfc,$ipgen,$info);
|
|
|
|
$v1 -> pack1($file_info, TRUE, TRUE);
|
|
$v1 -> pack2($intfc_info, TRUE, TRUE);
|
|
$v2 -> pack2($port_info, TRUE, TRUE);
|
|
$v1->show_all;
|
|
$v2->show_all;
|
set_gui_status($ipgen,"ideal",0);
|
set_gui_status($ipgen,"ideal",0);
|
|
|
|
|
}
|
}
|
return TRUE;
|
return TRUE;
|
|
|
} );
|
} );
|
|
|
|
|
|
|
|
|
$open-> signal_connect("clicked" => sub{
|
$open-> signal_connect("clicked" => sub{
|
load_ip($ipgen);
|
load_ip($ipgen);
|
|
|
});
|
});
|
|
|
$generate-> signal_connect("clicked" => sub{
|
$generate-> signal_connect("clicked" => sub{
|
get_unused_intfc_ports_list ($intfc,$ipgen,$info);
|
get_unused_intfc_ports_list ($intfc,$ipgen,$info);
|
generate_ip($ipgen);
|
generate_ip($ipgen);
|
|
|
$refresh_dev_win->clicked;
|
set_gui_status($ipgen,"ref",1);
|
|
|
});
|
});
|
|
|
#show_selected_dev($info,\@active_dev,\$dev_list_refresh,\$dev_table);
|
return add_widget_to_scrolled_win($main_table);
|
|
|
|
|
|
|
#$box->show;
|
|
#$window->add ($main_table);
|
|
#$window->show_all;
|
|
#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;
|
|
|
|
|
|
}
|
}
|
|
|
|
|
|
|