OpenCores
URL https://opencores.org/ocsvn/an-fpga-implementation-of-low-latency-noc-based-mpsoc/an-fpga-implementation-of-low-latency-noc-based-mpsoc/trunk

Subversion Repositories an-fpga-implementation-of-low-latency-noc-based-mpsoc

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /an-fpga-implementation-of-low-latency-noc-based-mpsoc/trunk/mpsoc/perl_gui/lib/perl
    from Rev 23 to Rev 24
    Reverse comparison

Rev 23 → Rev 24

/hdr_file_gen.pl
13,9 → 13,56
 
 
 
sub get_instance_global_variable{
my ($soc,$id) = @_;
my $module =$soc->soc_get_module($id);
my $module_name =$soc->soc_get_module_name($id);
my $category =$soc->soc_get_category($id);
my $inst =$soc->soc_get_instance_name($id);
my @plugs= $soc->soc_get_all_plugs_of_an_instance($id);
my %params= $soc->soc_get_module_param($id);
#add two extra variable the instance name and base addresses
$params{IP}=$inst;
$params{CORE}=$id;
foreach my $plug (@plugs){
my @nums=$soc->soc_list_plug_nums($id,$plug);
foreach my $num (@nums){
my ($addr,$base,$end,$name,$connect_id,$connect_socket,$connect_socket_num)=$soc->soc_get_plug($id,$plug,$num);
#wishbone slave address
if((defined $connect_socket) && ($connect_socket eq 'wb_slave')){
#print "$addr,$base,$end,$connect_id,$connect_socket,$connect_socket_num\n";
my $base_hex=sprintf("0X%08x", $base);
my $end_hex=sprintf("0X%08x", $end);
my $val="BASE".$num;
$params{$val}=$base_hex;
}
}
}
$params{BASE}=$params{BASE0} if(defined $params{BASE0});
 
return (\%params);
}
 
 
sub replace_golb_var{
my ($hdr,$ref)=@_;
my %params= %{$ref};
foreach my $p (sort keys %params){
my $pattern= '\$\{?' . $p . '(\}|\b)';
($hdr=$hdr)=~s/$pattern/$params{$p}/g;
}
return $hdr;
 
}
 
 
 
sub generate_header_file{
my ($soc)= @_;
my ($soc,$project_dir,$target_dir,$dir)= @_;
my $soc_name=$soc->soc_get_soc_name();
$soc_name = uc($soc_name);
if(!defined $soc_name){$soc_name='soc'};
33,27 → 80,20
my $module_name =$soc->soc_get_module_name($id);
my $category =$soc->soc_get_category($id);
my $inst =$soc->soc_get_instance_name($id);
 
add_text_to_string(\$system_h,"\n \n /* $inst */ \n");
$inst=uc($inst);
# print base address
my @plugs= $soc->soc_get_all_plugs_of_an_instance($id);
 
 
my %params= %{get_instance_global_variable($soc,$id)};
 
foreach my $plug (@plugs){
my @nums=$soc->soc_list_plug_nums($id,$plug);
foreach my $num (@nums){
my ($addr,$base,$end,$name,$connect_id,$connect_socket,$connect_socket_num)=$soc->soc_get_plug($id,$plug,$num);
#wishbone slave address
if((defined $connect_socket) && ($connect_socket eq 'wb_slave')){
#print "$addr,$base,$end,$connect_id,$connect_socket,$connect_socket_num\n";
my $base_hex=sprintf("0X%08x", $base);
my $end_hex=sprintf("0X%08x", $end);
add_text_to_string(\$system_h,"#define $inst\_BASE_ADDR$num \t\t $base_hex\n");
add_text_to_string(\$system_h,"#define $inst\_BASE_ADDR \t\t $inst\_BASE_ADDR0\n") if ($num==0);
}
#intrrupt
if((defined $connect_socket) && ($connect_socket eq 'interrupt_peripheral')){
add_text_to_string(\$system_h,"//intrrupt flag location\n");
65,27 → 105,52
}
my $hdr =$ip->ip_get_hdr($category,$module);
my $hdr =$ip->ip_get($category,$module,"system_h");
#print "$hdr";
# \$\{?IP(\b|\})
if(defined $hdr){
#replace IP name
my $key='\$IP\\\\';
($hdr=$hdr)=~s/$key/$inst/g;
$hdr=replace_golb_var($hdr,\%params);
add_text_to_string(\$system_h,"$hdr\n");
}
 
$key='\$IP';
($hdr=$hdr)=~s/$key/$inst/g;
# Write Software gen files
my @sw_file_gen = $ip->ip_get_list($category,$module,"gen_sw_files");
foreach my $file (@sw_file_gen){
if(defined $file ){
my ($path,$rename)=split('frename_sep_t',$file);
$rename=replace_golb_var($rename,\%params);
#read the file content
my $content=read_file_cntent($path,$project_dir);
$content=replace_golb_var($content,\%params);
 
 
if(defined $rename){
#replace BASE addr
$key='\$BASE';
($hdr=$hdr)=~s/$key/$inst\_BASE_ADDR/g;
add_text_to_string(\$system_h,"$hdr\n");
open(FILE, ">lib/verilog/$rename") || die "Can not open: $!";
print FILE $content;
close(FILE) || die "Error closing file: $!";
move ("$dir/lib/verilog/$rename","$target_dir/sw/");
 
}
}
}
 
}
add_text_to_string(\$system_h,"#endif\n");
return $system_h;
my $name=$soc->soc_get_soc_name();
open(FILE, ">lib/verilog/$name.h") || die "Can not open: $!";
print FILE $system_h;
close(FILE) || die "Error closing file: $!";
move ("$dir/lib/verilog/$name.h","$target_dir/sw/");
 
 
 
}
 
 
/temp.pl
1,58 → 1,160
#! /usr/bin/perl -w
 
use Glib qw/TRUE FALSE/;
use Gtk2 '-init';
 
use strict;
use warnings;
our $spinner1;
 
sub get_value
{
my ($button, $format) = @_;
 
if ('int' eq $format)
{
$button->{val_label}->set_text (sprintf ("%d",
$spinner1->get_value_as_int));
}
else
{
$button->{val_label}->set_text (sprintf ("%0.*f",
$spinner1->get_digits,
$spinner1->get_value));
}
}
 
$window = Gtk2::Window->new ('toplevel');
$window->signal_connect (destroy => sub { Gtk2->main_quit; 0; });
$window->set_title ("Spin Button");
 
$main_vbox = Gtk2::VBox->new (FALSE, 5);
$main_vbox->set_border_width (10);
$window->add ($main_vbox);
 
my @nums=(0,2,3,6,7);
$frame = Gtk2::Frame->new ("Not accelerated");
$main_vbox->pack_start ($frame, TRUE, TRUE, 0);
 
my $s=compress_nums(@nums);
$vbox = Gtk2::VBox->new (FALSE, 0);
$vbox->set_border_width (10);
$frame->add ($vbox);
 
print "$s\n";
# Day, month, year spinners
$hbox = Gtk2::HBox->new (FALSE, 0);
$vbox->pack_start ($hbox, TRUE, TRUE, 5);
 
$vbox2 = Gtk2::VBox->new (FALSE, 0);
$hbox->pack_start ($vbox2, TRUE, TRUE, 5);
 
sub compress_nums{
my @nums=@_;
my @f=sort { $a <=> $b } @nums;
my $s;
my $ls;
my $range=0;
my $x;
$label = Gtk2::Label->new ("Day :");
$label->set_alignment (0.0, 0.5); # left halignment, middle valignment
$vbox2->pack_start ($label, FALSE, TRUE, 0);
 
foreach my $p (@f){
if(!defined $x) {
$s="$p";
$ls=$p;
}
else{
if($p-$x>1){ #gap exist
if( $range){
$s=($x-$ls>1 )? "$s:$x,$p": "$s,$x,$p";
$ls=$p;
$range=0;
}else{
$s= "$s,$p";
$ls=$p;
$adj = Gtk2::Adjustment->new (1.0, 1.0, 31.0, 1.0, 5.0, 0.0);
$spinner = Gtk2::SpinButton->new ($adj, 0, 0);
$spinner->set_wrap (TRUE);
$vbox2->pack_start ($spinner, FALSE, TRUE, 0);
 
}
}else {$range=1;}
$vbox2 = Gtk2::VBox->new (FALSE, 0);
$hbox->pack_start ($vbox2, TRUE, TRUE, 5);
 
$label = Gtk2::Label->new ("Month :");
$label->set_alignment (0.0, 0.5); # left halignment, middle valignment
$vbox2->pack_start ($label, FALSE, TRUE, 0);
 
}
$x=$p
}
if($range==1){ $s= ($x-$ls>1 )? "$s:$x": "$s,$x";}
#update $s($ls,$hs);
$adj = Gtk2::Adjustment->new (1.0, 1.0, 12.0, 1.0, 5.0, 0.0);
$spinner = Gtk2::SpinButton->new ($adj, 0, 0);
$spinner->set_wrap (TRUE);
$vbox2->pack_start ($spinner, FALSE, TRUE, 0);
 
return $s;
}
$vbox2 = Gtk2::VBox->new (FALSE, 0);
$hbox->pack_start ($vbox2, TRUE, TRUE, 5);
 
$label = Gtk2::Label->new ("Year :");
$label->set_alignment (0.0, 0.5); # left halignment, middle valignment
$vbox2->pack_start ($label, FALSE, TRUE, 0);
 
$adj = Gtk2::Adjustment->new (1998.0, 1.0, 2100.0, 1.0, 100.0, 0.0);
$spinner = Gtk2::SpinButton->new ($adj, 0, 0);
$spinner->set_wrap (TRUE);
$spinner->set_size_request (55, -1);
$vbox2->pack_start ($spinner, FALSE, TRUE, 0);
 
$frame = Gtk2::Frame->new ("Accelerated");
$main_vbox->pack_start ($frame, TRUE, TRUE, 0);
 
$vbox = Gtk2::VBox->new (FALSE, 0);
$vbox->set_border_width (5);
$frame->add ($vbox);
 
$hbox = Gtk2::HBox->new (FALSE, 0);
$vbox->pack_start ($hbox, TRUE, TRUE, 5);
 
$vbox2 = Gtk2::VBox->new (FALSE, 0);
$hbox->pack_start ($vbox2, TRUE, TRUE, 5);
 
$label = Gtk2::Label->new ("Value :");
$label->set_alignment (0.0, 0.5); # left halignment, middle valignment
$vbox2->pack_start ($label, FALSE, TRUE, 0);
 
$adj = Gtk2::Adjustment->new (0.0, -10000.0, 10000.0, 0.5, 100.0, 0.0);
$spinner1 = Gtk2::SpinButton->new ($adj, 1.0, 2);
$spinner1->set_wrap (TRUE);
$spinner1->set_size_request (100, -1);
$vbox2->pack_start ($spinner1, FALSE, TRUE, 0);
 
$vbox2 = Gtk2::VBox->new (FALSE, 0);
$hbox->pack_start ($vbox2, TRUE, TRUE, 5);
 
$label = Gtk2::Label->new ("Digits :");
$label->set_alignment (0.0, 0.5); # left halignment, middle valignment
$vbox2->pack_start ($label, FALSE, TRUE, 0);
 
$adj = Gtk2::Adjustment->new (2, 1, 5, 1, 1, 0);
$spinner2 = Gtk2::SpinButton->new ($adj, 0.0, 0);
$spinner2->set_wrap (TRUE);
$adj->signal_connect (value_changed => sub {
$spinner1->set_digits ($spinner2->get_value_as_int ());
});
$vbox2->pack_start ($spinner2, FALSE, TRUE, 0);
 
$button = Gtk2::CheckButton->new ("Snap to 0.5-ticks");
$button->signal_connect (clicked => sub {
$spinner1->set_snap_to_ticks ($_[0]->get_active);
});
$vbox->pack_start ($button, TRUE, TRUE, 0);
$button->set_active (TRUE);
 
$button = Gtk2::CheckButton->new ("Numeric only input mode");
$button->signal_connect (clicked => sub {
$spinner1->set_numeric ($_[0]->get_active);
});
$vbox->pack_start ($button, TRUE, TRUE, 0);
$button->set_active (TRUE);
 
$val_label = Gtk2::Label->new ("");
 
$hbox = Gtk2::HBox->new (FALSE, 0);
$vbox->pack_start ($hbox, FALSE, TRUE, 5);
$button = Gtk2::Button->new ("Value as Int");
$button->{val_label} = $val_label;
$button->signal_connect (clicked => \&get_value, 'int');
$hbox->pack_start ($button, TRUE, TRUE, 5);
 
$button = Gtk2::Button->new ("Value as Float");
$button->{val_label} = $val_label;
$button->signal_connect (clicked => \&get_value, 'float');
$hbox->pack_start ($button, TRUE, TRUE, 5);
 
$vbox->pack_start ($val_label, TRUE, TRUE, 0);
$val_label->set_text ("0");
 
$hbox = Gtk2::HBox->new (FALSE, 0);
$main_vbox->pack_start ($hbox, FALSE, TRUE, 0);
 
$button = Gtk2::Button->new ("Close");
$button->signal_connect (clicked => sub { $window->destroy; });
$hbox->pack_start ($button, TRUE, TRUE, 0);
 
$window->show_all;
 
Gtk2->main;
 
0;
/ip.pm
229,20 → 229,7
return @r;
}
 
sub get_describtion{
my ($self,$category,$module)=@_;
my $r;
if (!defined($module) ) {return $r;}
$r=$self->{categories}{$category}{names}{$module}{Describtion};
return $r;
 
}
 
 
 
 
 
sub get_param_default{
my ($self,$category,$module)=@_;
my %r;
382,52 → 369,53
}
 
 
sub ip_get_module_name{
my ($self, $category,$module)=@_;
my $module_name;
if(exists $self->{categories}{$category}{names}{$module}{module_name}){
$module_name= $self->{categories}{$category}{names}{$module}{module_name};
}
return $module_name;
}
 
 
sub ip_get_hdr{
my ($self, $category,$module)=@_;
my $hdr;
if(exists($self->{categories}{$category}{names}{$module}{header})){
$hdr=$self->{categories}{$category}{names}{$module}{header};
}
return $hdr;
 
 
 
sub ip_add{
my ($self,$category,$module,$filed_name,$filed_data)=@_;
$self->{categories}{$category}{names}{$module}{$filed_name}=$filed_data;
}
 
 
sub ip_get_files{
my ($self, $category,$module,$list_name)=@_;
sub ip_get{
my ($self,$category,$module,$filed_name)=@_;
return $self->{categories}{$category}{names}{$module}{$filed_name};
}
 
 
sub ip_get_list{
my ($self,$category,$module,$filed_name)=@_;
my @l;
@l=@{$self->{categories}{$category}{names}{$module}{$list_name}} if(defined $self->{categories}{$category}{names}{$module}{$list_name});
return @l;
if( defined $self->{categories}{$category}{names}{$module}{$filed_name}){
@l=@{$self->{categories}{$category}{names}{$module}{$filed_name}};
}
return @l;
}
 
 
sub ip_get_unsuded_intfc_ports{
my ($self, $category,$module)=@_;
return $self->{categories}{$category}{names}{$module}{"unused"};
sub ip_remove{
my ($self,$category,$module,$filed_name)=@_;
delete $self->{categories}{$category}{names}{$module}{$filed_name};
}
 
 
 
 
sub add_ip{
 
my ($self,$ipgen) =@_;
my $module;
$module = $ipgen->ipgen_get_ip_name();
my $module_name =$ipgen->ipgen_get_module_name();
$module = $ipgen->ipgen_get("ip_name");
my $module_name =$ipgen->ipgen_get("module_name");
if(!defined $module){ $module = $module_name}
my $category= $ipgen->ipgen_get_category();
my $Describtion= $ipgen->ipgen_get_description();
my $category= $ipgen->ipgen_get("category");
$self->{categories}{$category}{names}{$module}={};
$self->{categories}{$category}{names}{$module}{Describtion}=$Describtion;
$self->{categories}{$category}{names}{$module}{module_name}=$module_name;
my @plugs= $ipgen->ipgen_list_plugs();
#print "$module:@plugs\n";
450,24 → 438,20
ip_add_parameter($self,$category,$module,$param,$deafult,$type,$content,$info,$glob_param,$redefine_param);
}
my @params_order= $ipgen->ipgen_get_parameters_order();
$self->{categories}{$category}{names}{$module}{parameters_order}=\@params_order;
my @ports= $ipgen->ipgen_list_ports();
foreach my $port (@ports){
my($range,$type,$intfc_name,$intfc_port)=$ipgen->ipgen_get_port($port);
ip_add_port($self,$category,$module,$port,$type,$range,$intfc_name,$intfc_port);
}
my $hdr= $ipgen->ipgen_get_hdr();
$self->{categories}{$category}{names}{$module}{header}=$hdr;
my @hdl_files= $ipgen->ipgen_get_files_list("hdl_files");
$self->{categories}{$category}{names}{$module}{"hdl_files"}=\@hdl_files;
my @fileds =("system_h","hdl_files","sw_files","gen_sw_files","sw_params_list","unused","parameters_order","description");
foreach my $p (@fileds){
my $val=$ipgen->ipgen_get($p);
$self->{categories}{$category}{names}{$module}{$p}=$ipgen->ipgen_get($p) if(defined $val );
}
my @sw_files= $ipgen->ipgen_get_files_list("sw_files");
$self->{categories}{$category}{names}{$module}{"sw_files"}=\@sw_files;
$self->{categories}{$category}{names}{$module}{"unused"}=$ipgen->ipgen_get_unused_intfc_ports();
}
/mpsoc_gen.pl
89,7 → 89,7
$step=~ s/\D//g;
$widget=gen_spin($min,$max,$step);
$widget->set_value($value);
$widget-> signal_connect("changed" => sub{
$widget-> signal_connect("value_changed" => sub{
my $new_param_value=$widget->get_value_as_int();
$mpsoc->mpsoc_add_param($param,$new_param_value);
set_state($state,"ref",1);
440,7 → 440,7
my $spin=gen_spin($min,$max,$step);
$spin->set_value($param_value{$p});
$table->attach_defaults ($spin, 3, 4, $row, $row+1);
$spin-> signal_connect("changed" => sub{$param_value{$p}=$spin->get_value_as_int();});
$spin-> signal_connect("value_changed" => sub{$param_value{$p}=$spin->get_value_as_int();});
# $box=def_label_spin_help_box ($param,$info, $value,$min,$max,$step, 2);
}
1131,7 → 1131,7
foreach my $soc_name (@soc_list){
my @n=$mpsoc->mpsoc_get_soc_tiles_num($soc_name);
if(scalar @n){
#this soc has been used generate the verilog files of it
#generate the verilog files of it
push(@used_socs,$soc_name);
}
}
1222,15 → 1222,12
# Write header file
my $file_h=generate_header_file($soc);
open(FILE, ">lib/verilog/$soc_name.h") || die "Can not open: $!";
print FILE $file_h;
close(FILE) || die "Error closing file: $!";
generate_header_file($soc,$project_dir,$target_dir,$dir);
move ("$dir/lib/verilog/$soc_name.h","$target_dir/sw/");
#use File::Copy::Recursive qw(dircopy);
#dircopy("$dir/../src_processor/aeMB/compiler","$target_dir/sw/") or die("$!\n");
/soc_gen.pl
163,7 → 163,7
my $spin=gen_spin($min,$max,$step);
$spin->set_value($value);
$table->attach_defaults ($spin, 3, 4, $row, $row+1);
$spin-> signal_connect("changed" => sub{$new_param_value{$p}=$spin->get_value_as_int();});
$spin-> signal_connect("value_changed" => sub{ $new_param_value{$p}=$spin->get_value_as_int(); });
# $box=def_label_spin_help_box ($param,$info, $value,$min,$max,$step, 2);
}
749,7 → 749,7
 
my ($category) = $model->get ($iter, CATRGORY_COLUMN);
my ($module) = $model->get ($iter,MODULE_COLUMN );
my $describ=$ip->get_describtion($category,$module);
my $describ=$ip->ip_get($category,$module,"description");
if($describ){
#print "$entry describtion is: $describ \n";
show_info($info,$describ);
818,10 → 818,11
my $category =$soc->soc_get_category($id);
my $inst =$soc->soc_get_instance_name($id);
my @new=$ip->ip_get_files( $category,$module,$list_name);
my @new=$ip->ip_get_list( $category,$module,$list_name);
#print "@new\n";
foreach my $f(@new){
my $n="$project_dir$f";
if (!(-f "$n") && !(-f "$f" ) ){
if (!(-f "$n") && !(-f "$f" ) && !(-d "$n") && !(-d "$f" ) ){
$warnings=(defined $warnings)? "$warnings WARNING: Can not find \"$f\" which is required for \"$inst\" \n":"WARNING: Can not find \"$f\" which is required for \"$inst\"\n ";
}
877,17 → 878,8
#copy hdl codes in src_verilog
my ($file_ref,$warnings)= get_all_files_list($soc,"hdl_files");
foreach my $f(@{$file_ref}){
my $n="$project_dir$f";
if (-f "$n") {
copy ("$n","$target_dir/src_verilog/lib");
}elsif(-f "$f" ){
copy ("$f","$target_dir/src_verilog/lib");
}
copy_file_and_folders($file_ref,$project_dir,"$target_dir/src_verilog/lib");
}
show_info(\$info,$warnings) if(defined $warnings);
907,34 → 899,23
# Write header files
my $file_h=generate_header_file($soc);
open(FILE, ">lib/verilog/$name.h") || die "Can not open: $!";
print FILE $file_h;
close(FILE) || die "Error closing file: $!";
move ("$dir/lib/verilog/$name.h","$target_dir/sw/");
# Write system.h and generated file
generate_header_file($soc,$project_dir,$target_dir,$dir);
# Write Software files
($file_ref,$warnings)= get_all_files_list($soc,"sw_files");
copy_file_and_folders($file_ref,$project_dir,"$target_dir/sw");
# Write Software gen files
($file_ref,$warnings)= get_all_files_list($soc,"gen_sw_files");
foreach my $f(@{$file_ref}){
my $name= basename($f);
#print "$f\n";
my $n="$project_dir$f";
if (-f "$n") { #copy file
copy ("$n","$target_dir/sw");
}elsif(-f "$f" ){
copy ("$f","$target_dir/sw");
}elsif (-d "$n") {#copy folder
dircopy ("$n","$target_dir/sw/$name");
}elsif(-d "$f" ){
dircopy ("$f","$target_dir/sw/$name");
}
}
 
}
 
 
# Write main.c file if not exist
my $n="$target_dir/sw/main.c";
if (!(-f "$n")) {
1236,11 → 1217,7
my $info;
if(is_hex($base_in) && is_hex($end_in)){
my $size=(hex ($end_in) >= hex ($base_in))? hex ($end_in) - hex ($base_in) +1 : 0;
my $size_text= $size==0 ? 'Error':
$size<(1 << 10)? $size:
$size<(1 << 20)? join (' ', ($size>>10,"K")) :
$size<(1 << 30)? join (' ', ($size>>20,"M")) :
join (' ', ($size>>30,"G")) ;
my $size_text= metric_conversion($size);
$label= gen_label_in_center($size_text);
$$newbase_ref[$number]=hex($base_in);
$$newend_ref[$number]=hex($end_in);
/widget.pl
135,8 → 135,19
$box->pack_start( $entry, FALSE, FALSE, 3);
return ($box,$entry);
}
}
 
sub def_h_labeled_entry_help{
my ($help,$label_name,$initial)=@_;
my $box = def_hbox(TRUE,0);
my $label= gen_label_in_left($label_name);
my ($b,$entry) =gen_entry_help($help,$initial);
$box->pack_start( $label, FALSE, FALSE, 3);
$box->pack_start( $b, FALSE, FALSE, 3);
return ($box,$entry);
}
 
##############
# ComboBoxEntry
##############
153,6 → 164,25
return $combo_box_entry;
}
 
###########
#
###########
 
sub def_h_labeled_checkbutton{
my ($label_name,$status)=@_;
my $box = def_hbox(TRUE,0);
my $label= gen_label_in_left($label_name);
my $check= Gtk2::CheckButton->new;
#if($status==1) $check->
$box->pack_start( $label, FALSE, FALSE, 3);
$box->pack_start( $check, FALSE, FALSE, 3);
return ($box,$check);
}
 
 
 
 
#############
# label
############
897,4 → 927,62
}
 
 
sub copy_file_and_folders{
my ($file_ref,$project_dir,$target_dir)=@_;
 
foreach my $f(@{$file_ref}){
my $name= basename($f);
my $n="$project_dir$f";
if (-f "$n") { #copy file
copy ("$n","$target_dir");
}elsif(-f "$f" ){
copy ("$f","$target_dir");
}elsif (-d "$n") {#copy folder
dircopy ("$n","$target_dir/$name");
}elsif(-d "$f" ){
dircopy ("$f","$target_dir/$name");
}
}
 
}
 
sub read_file_cntent {
my ($f,$project_dir)=@_;
my $n="$project_dir$f";
my $str;
if (-f "$n") { #copy file
$str = do {
local $/ = undef;
open my $fh, "<", $n
or die "could not open $n: $!";
<$fh>;
};
 
}elsif(-f "$f" ){
$str = do {
local $/ = undef;
open my $fh, "<", $f
or die "could not open $f: $!";
<$fh>;
};
}
return $str
 
}
 
 
sub metric_conversion{
my $size=shift;
my $size_text= $size==0 ? 'Error':
$size<(1 << 10)? $size:
$size<(1 << 20)? join (' ', ($size>>10,"K")) :
$size<(1 << 30)? join (' ', ($size>>20,"M")) :
join (' ', ($size>>30,"G")) ;
return $size_text;
}
 
1
/soc.pm
27,7 → 27,7
if(exists ($self->{instances}{$instance_id})){
return 0;
}
my $module_name=$ip->ip_get_module_name($category,$module);
my $module_name=$ip->ip_get($category,$module,"module_name");
#print "$module_name\n";
$self->{instances}{$instance_id}={};
$self->{instances}{$instance_id}{module}=$module;
/ip_gen.pl
53,7 → 53,7
my ($file,$ipgen,$soc_state,$info)=@_;
my ($name,$path,$suffix) = fileparse("$file",qr"\..[^.]*$");
if($suffix eq '.IP'){
$ipgen->ipgen_set_file($file);
$ipgen->ipgen_add("file_name",$file);
set_state($soc_state,"load_file",0);
74,8 → 74,11
my $vdb = read_file($file);
my @modules=sort $vdb->get_modules($file);
#foreach my $p(@module_list) {print "$p\n"}
$ipgen->ipgen_set_file($file);
$ipgen->ipgen_set_module_name($modules[0]);
$ipgen->ipgen_add("file_name",$file);
 
 
 
$ipgen->ipgen_add("module_name",$modules[0]);
$ipgen->ipgen_set_module_list(@modules);
load_deafult_setting($ipgen,$modules[0]);
237,9 → 240,9
my $browse= def_image_button("icons/browse.png","Browse");
my $label2= gen_label_in_left(" IP name:");
my $entry2= gen_entry();
my $file= $ipgen->ipgen_get_file();
my $file= $ipgen->ipgen_get("file_name");
if(defined $file){$entry->set_text($file);}
my $ip_name= $ipgen->ipgen_get_ip_name();
my $ip_name= $ipgen->ipgen_get("ip_name");
if(defined $ip_name){$entry2->set_text($ip_name);}
show_info(\$info,"Please select the verilog file containig the ip module\n");
$browse->signal_connect("clicked"=> sub{
290,7 → 293,7
});
$entry2->signal_connect("changed"=>sub{
my $name=$entry2->get_text();
$ipgen->ipgen_set_ip_name($name);
$ipgen->ipgen_add("ip_name",$name);
});
$table->attach_defaults ($label, 0, 1 , $row, $row+1);
312,7 → 315,7
my ($ipgen,$soc_state,$info,$table,$row)=@_;
my $label= gen_label_in_left(" Select\n module:");
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 $combo = gen_combo(\@modules, $pos);
my $param= def_image_button("icons/setting.png","Parameter\n setting");
319,7 → 322,7
my $def= def_image_button("icons/setting.png","Definition\n file setting");
my $label2= gen_label_in_left(" Select\n Category:");
my ($category,$category_entry)=gen_entry_help('Define the IP category:e.g RAM, GPIO,...');
my $saved_category=$ipgen->ipgen_get_category();
my $saved_category=$ipgen->ipgen_get("category");
if(defined $saved_category){$category_entry->set_text($saved_category);}
my $ipinfo= def_image_button("icons/info.png"," IP\n Description");
my $header_h= def_image_button("icons/h_file.png","Add Software\n files");
358,7 → 361,7
});
$category_entry->signal_connect("changed"=> sub{
my $name=$category_entry->get_text();
$ipgen->ipgen_set_category($name);
$ipgen->ipgen_add("category",$name);
});
$ipinfo->signal_connect("clicked"=> sub{
366,11 → 369,61
});
$header_h->signal_connect("clicked"=> sub{
get_software_file($ipgen,$soc_state,$info);
my %page_info;
my $help1="The files and folder that selected here will be copied in genertated processing tile SW folder.";
my $help2="The file listed here can contain some variable with \${var_name} format. The file genertor will replace them with their values during file generation. The variable can be selected from above listed global vairable";
my $help3='Define the header file for this peripheral device. You can use global vriables listed at the top.
header file example
#define ${IP}_REG_0 (*((volatile unsigned int *) ($BASE)))
#define ${IP}_REG_1 (*((volatile unsigned int *) ($BASE+4)))
#define ${IP}_WRITE_REG1(value) ${IP}_REG_1=value
#define ${IP}_READ_REG1() ${IP}_REG_1
';
 
$page_info{0}{page_name} = "_Add exsiting file/folder";
$page_info{0}{filed_name}= "sw_files";
$page_info{0}{filed_type}= "exsiting_file/folder";
$page_info{0}{rename_file}=undef;
$page_info{0}{folder_en}=1;
$page_info{0}{help}=$help1;
 
$page_info{1}{page_name} = "_Add file generator(s)";
$page_info{1}{filed_name}= "gen_sw_files";
$page_info{1}{filed_type}= "file_generators";
$page_info{1}{rename_file}=1;
$page_info{1}{folder_en}=0;
$page_info{1}{help}=$help2;
 
$page_info{2}{page_name} = "_Add to system.h";
$page_info{2}{filed_name}= "system_h";
$page_info{2}{filed_type}= "file_content";
$page_info{2}{rename_file}=undef;
$page_info{2}{folder_en}=0;
$page_info{2}{help}=$help3;
 
 
get_source_file($ipgen,$soc_state,$info,0,"Add software file(s)","SW",\%page_info);
#get_software_file($ipgen,$soc_state,$info,0);
});
$lib_hdl->signal_connect("clicked"=> sub{
get_hdl_file($ipgen,$soc_state,$info);
my $help1="The files and folder that selected here will be copied in genertated processing tile RTL folder.";
my %page_info;
$page_info{0}{page_name} = "_Add exsiting HDL file/folder";
$page_info{0}{filed_name}= "hdl_files";
$page_info{0}{filed_type}= "exsiting_file/folder";
$page_info{0}{rename_file}=undef;
$page_info{0}{folder_en}=1;
$page_info{0}{help}=$help1;
 
get_source_file($ipgen,$soc_state,$info,0,"Add HDL file(s)", "hw",\%page_info);
 
#get_hdl_file($ipgen,$soc_state,$info);
});
}
377,8 → 430,8
 
sub load_deafult_setting{
my ($ipgen,$module)=@_;
my $file= $ipgen->ipgen_get_file();
$ipgen->ipgen_set_module_name($module);
my $file= $ipgen->ipgen_get("file_name");
$ipgen->ipgen_add("module_name",$module);
my $vdb =read_file($file);
my %parameters = $vdb->get_modules_parameters_not_local($module);
my @parameters_order= $vdb->get_modules_parameters_not_local_order($module);
395,7 → 448,7
}
#add parameter order.
$ipgen->ipgen_add_parameters_order(@parameters_order);
$ipgen->ipgen_add("parameters_order",\@parameters_order);
#add port order.
$ipgen->ipgen_add_ports_order(@ports_order);
#add ports
439,10 → 492,9
$scrolled_win->add_with_viewport($table);
$table->show;
$scrolled_win->show_all;
#print "llllllllllllllllllllllllllllllllllllll\n";
});
return $scrolled_win;
519,8 → 571,8
sub get_parameter_setting {
my ($ipgen,$soc_state,$info)=@_;
my $module = $ipgen->ipgen_get_module_name();
my $file= $ipgen->ipgen_get_file();
my $module = $ipgen->ipgen_get("module_name");
my $file= $ipgen->ipgen_get("file_name");
if (!defined $file) {
message_dialog("The input verilog file is empty");
return;
583,7 → 635,7
 
my @parameters=$ipgen->ipgen_get_all_parameters_list();
my @params_order= $ipgen->ipgen_get_parameters_order();
my @params_order= $ipgen->ipgen_get_list("parameters_order");
if((@params_order)) {@parameters=@params_order;}
my $ok = def_image_button('icons/select.png','OK');
774,7 → 826,7
 
sub get_Description{
my ($ipgen,$soc_state,$info)=@_;
my $description = $ipgen->ipgen_get_description();
my $description = $ipgen->ipgen_get("description");
my $table = Gtk2::Table->new (15, 15, TRUE);
my $window=def_popwin_size(500,500,"Add description");
my ($scrwin,$text_view)=create_text();
790,7 → 842,7
$window->destroy;
my $text = $text_buffer->get_text($text_buffer->get_bounds, TRUE);
$ipgen->ipgen_set_description($text);
$ipgen->ipgen_add("description",$text);
#print "$text\n";
});
801,204 → 853,85
}
 
 
###########
# get header file
#########
 
sub get_header_file{
my ($ipgen,$soc_state,$info)=@_;
my $hdr = $ipgen->ipgen_get_hdr();
my $table = Gtk2::Table->new (15, 15, TRUE);
#my $window=def_popwin_size(600,600,"Add header file");
my ($scrwin,$text_view)=create_text();
my $help_text=
'Define the header file for this peripheral device.
You can use two variable $BASEn and $IP.
$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 ...
$IP: is the peripheral device name. When more than one
peripheral device is allowed to be called in the SoC, it is
recommended to add $IP to the global variables, definitions
and functions.
header file example
#define $IP_REG_0 (*((volatile unsigned int *) ($BASE)))
#define $IP_REG_1 (*((volatile unsigned int *) ($BASE+4)))
#define $IP_WRITE_REG1(value) $IP_REG_1=value
#define $IP_READ_REG1() $IP_REG_1
';
my $help=gen_label_help($help_text,"Define the header file for this peripheral device. ");
$table->attach_defaults($help,0,15,0,1);
$table->attach_defaults($scrwin,0,15,1,14);
my $text_buffer = $text_view->get_buffer;
if(defined $hdr) {$text_buffer->set_text($hdr)};
my $scrolled_win = new Gtk2::ScrolledWindow (undef, undef);
$scrolled_win->set_policy( "automatic", "automatic" );
$scrolled_win->add_with_viewport($table);
#$window->add($table);
#$window->show_all();
return ($scrolled_win,$text_buffer);
}
 
#############
# get hdl files
############
sub get_hdl_file{
my ($ipgen,$soc_state,$info)=@_;
my $table = Gtk2::Table->new (15, 15, TRUE);
my $window=def_popwin_size(600,600,"Add HDL file()s");
my @saved_files=$ipgen->ipgen_get_files_list("hdl_files");
my $ok=def_image_button("icons/select.png",' Ok ');
my $scrwin=gen_file_list($ipgen,"hdl_files",\@saved_files,$ok);
my $label=gen_label_in_left("Selecet the design files you want to include for the IP core");
my $brows=def_image_button("icons/browse.png",' Browse');
$table->attach_defaults($label,0,10,0,1);
$table->attach_defaults($brows,10,12,0,1);
$table->attach_defaults($scrwin,0,15,1,14);
$table->attach_defaults($ok,6,9,14,15);
my $dir = Cwd::getcwd();
my $project_dir = abs_path("$dir/../../"); #mpsoc directory address
$brows->signal_connect("clicked"=> sub {
my @files;
my $dialog = Gtk2::FileChooserDialog->new(
'Select a File',
undef,
'open',
'gtk-cancel' => 'cancel',
'gtk-ok' => 'ok',
);
my $filter = Gtk2::FileFilter->new();
my $dir = Cwd::getcwd();
$dialog->set_current_folder ("$dir/..") ;
$dialog->set_select_multiple(TRUE);
 
if ( "ok" eq $dialog->run ) {
@files = $dialog->get_filenames;
@saved_files=$ipgen->ipgen_get_files_list("hdl_files");
foreach my $p (@files){
#remove $project_dir form beginig of each file
$p =~ s/$project_dir//;
if(! grep (/^$p$/,@saved_files)){push(@saved_files,$p)};
}
$ipgen->ipgen_set_files_list("hdl_files",\@saved_files);
$window->destroy;
get_hdl_file($ipgen,$soc_state,$info);
#$$entry_ref->set_text($file);
#print "file = $file\n";
}
$dialog->destroy;
 
 
} );# # ,\$entry);
$ok->signal_connect("clicked"=> sub {
$window->destroy;
#my $text = $text_buffer->get_text($text_buffer->get_bounds, TRUE);
#$ipgen->ipgen_set_hdr($text);
#print "$text\n";
});
$window->add($table);
$window->show_all();
 
}
 
 
 
 
##########
#
# gen_file_list
#########
 
sub gen_file_list{
my ($ipgen,$list_name,$ref,$ok)=@_;
my @files=@{$ref};
my $file_num= scalar @files;
my ($ipgen,$list_name,$window,$rename_file_en)=@_;
 
my $table=def_table(10,10,TRUE);# my ($row,$col,$homogeneous)=@_;
my $scrolled_win = new Gtk2::ScrolledWindow (undef, undef);
my $ok=def_image_button("icons/select.png",' Ok ');
 
$scrolled_win->set_policy( "automatic", "automatic" );
$scrolled_win->add_with_viewport($table);
 
$table->attach_defaults (gen_label_in_center("File path"), 0, 5 , 0, 1);
$table->attach_defaults (gen_label_help("The target name can contain any of Global variables e.g \$IP\$.h","Copy as"), 5, 9 , 0, 1) if(defined $rename_file_en);
my $col=0;
my $row=0;
my $row=1;
my @files= $ipgen->ipgen_get_list($list_name); #@{$ref};
my $file_num= scalar @files;
foreach my $p(@files){
my $entry=gen_entry($p);
my $remove=def_image_button("icons/cancel.png");
$table->attach_defaults ($entry, 0, 9 , $row, $row+1);
$table->attach_defaults ($remove, 9,10 , $row, $row+1);
$row++;
$remove->signal_connect("clicked"=> sub {
my @saved_files=$ipgen->ipgen_get_files_list($list_name);
@saved_files=remove_scolar_from_array(\@saved_files,$p);
$ipgen->ipgen_set_files_list($list_name,\@saved_files);
$entry->destroy;
$remove->destroy;
my ($path,$rename)=split('frename_sep_t',$p);
my $entry=gen_entry($path);
my $entry2=gen_entry($rename) ;
my $remove=def_image_button("icons/cancel.png");
$table->attach_defaults ($entry, 0, 5 , $row, $row+1);
$table->attach_defaults ($entry2, 5, 9 , $row, $row+1) if(defined $rename_file_en);
$table->attach_defaults ($remove, 9,10 , $row, $row+1);
$row++;
$remove->signal_connect("clicked"=> sub {
my @saved_files=$ipgen->ipgen_get_list($list_name);
@saved_files=remove_scolar_from_array(\@saved_files,$p);
$ipgen->ipgen_add($list_name,\@saved_files);
$entry->destroy;
$entry2->destroy if(defined $rename_file_en);
$remove->destroy;
});
$ok->signal_connect("clicked"=> sub {
if(defined $entry){
my $n= $entry->get_text();
if($p ne $n){
my @saved_files=$ipgen->ipgen_get_files_list($list_name);
@saved_files=replace_in_array(\@saved_files,$p, $n);
$ipgen->ipgen_set_files_list($list_name,\@saved_files);
});
$ok->signal_connect("clicked"=> sub {
if(defined $entry){
my $n= $entry->get_text();
if(defined $rename_file_en){
$n= $n.'frename_sep_t'.$entry2->get_text() ;
}
if($p ne $n){
my @saved_files=$ipgen->ipgen_get_list($list_name);
@saved_files=replace_in_array(\@saved_files,$p, $n);
$ipgen->ipgen_add($list_name,\@saved_files);
}
}
}
});
});
#my $seph = Gtk2::HSeparator->new;
#$table->attach_defaults ($seph, 0, 10 , $row, $row+1);
#$row++;
#my $seph = Gtk2::HSeparator->new;
#$table->attach_defaults ($seph, 0, 10 , $row, $row+1);
#$row++;
}
 
 
$ok->signal_connect("clicked"=> sub {
$window->destroy;
});
 
# while( $row<10){
# my $label=gen_label_in_left(' ');
# $table->attach_defaults ($label, 0, 1 , $row, $row+1);$row++;
#}
 
 
return $scrolled_win;
return ($scrolled_win,$ok);
}
 
 
1079,7 → 1012,7
my $advance_button=def_image_button('icons/advance.png','separate');
$table->attach_defaults ($type_box, $positions[2], $positions[3], $row, $row+1);
$table->attach_defaults ($advance_button, $positions[3], $positions[4], $row, $row+1);
$type_spin->signal_connect("changed"=>sub{
$type_spin->signal_connect("value_changed"=>sub{
my $wiget=shift;
my $num=$wiget->get_value_as_int();
$ipgen->ipgen_add_soket($p,'num',$num);
1163,7 → 1096,7
$type_box->pack_start($name_setting,FALSE,FALSE,0);
$type_spin->set_value($value);
$table->attach_defaults ($type_box, $positions[2], $positions[3], $row, $row+1);
$type_spin->signal_connect("changed"=>sub{
$type_spin->signal_connect("value_changed"=>sub{
my $wiget=shift;
my $num=$wiget->get_value_as_int();
$ipgen->ipgen_add_plug($q,'num',$num);
1207,8 → 1140,10
return $table;
}
########
# get_intfc_setting
########
 
 
sub get_intfc_setting{
my ($ipgen,$soc_state,$intfc_name, $intfc_type)=@_;
1299,6 → 1234,7
my $name_combo=gen_combo(\@list,$pos);
my $sbox=def_hbox(FALSE,0);
my $widget;
my $size_lab;
my @l=("Fixed","Parameterizable");
 
if(!defined $saved_width){
1311,6 → 1247,8
$pos= 0;
$widget=gen_spin(1,31,1);
$widget->set_value($saved_width);
my $d=2**$saved_width;
$size_lab=gen_label_in_left(metric_conversion($d). " Bytes");
} else{
$pos= 1;
my @parameters=$ipgen->ipgen_get_all_parameters_list();
1317,6 → 1255,7
my $p=get_scolar_pos($saved_width,@parameters);
 
$widget=gen_combo(\@parameters, $p);
$size_lab=gen_label_in_left(" ");
 
}
 
1329,16 → 1268,38
#$widget->set_value($saved_width);
$sbox->pack_start($comb,FALSE,FALSE,3);
$sbox->pack_end($widget,FALSE,FALSE,3);
$sbox->pack_end($size_lab,FALSE,FALSE,3);
$comb->signal_connect('changed'=>sub{
my $condition=$comb->get_active_text();
$widget->destroy;
$size_lab->destroy;
my @parameters=$ipgen->ipgen_get_all_parameters_list();
$widget=($condition eq "Fixed" )? gen_spin(1,31,1):gen_combo(\@parameters, 0);
$size_lab=($condition eq "Fixed" )? gen_label_in_left("2 Bytes"): gen_label_in_left(" ");
$sbox->pack_end($widget,FALSE,FALSE,3);
$sbox->pack_end($size_lab,FALSE,FALSE,3);
$sbox->show_all();
$widget->signal_connect('changed'=>sub{
$size_lab->destroy;
my $in=$comb->get_active_text();
my $width=($in eq "Fixed" )? $widget->get_value_as_int(): $widget->get_active_text() ;
my $d=($in eq "Fixed" )? 2**$width:0;
$size_lab=($in eq "Fixed" )? gen_label_in_left( metric_conversion($d). " Bytes"):gen_label_in_left(" ");
$sbox->pack_end($size_lab,FALSE,FALSE,3);
$sbox->show_all();
});
});
$widget->signal_connect('changed'=>sub{
$size_lab->destroy;
my $in=$comb->get_active_text();
my $width=($in eq "Fixed" )? $widget->get_value_as_int(): $widget->get_active_text() ;
my $d=($in eq "Fixed" )? 2**$width:0;
$size_lab=($in eq "Fixed" )? gen_label_in_left(metric_conversion($d). " Bytes"):gen_label_in_left(" ");
$sbox->pack_end($size_lab,FALSE,FALSE,3);
$sbox->show_all();
});
$table->attach_defaults($name_combo,2,5,$i+1,$i+2);
$table->attach_defaults($sbox,5,6,$i+1,$i+2);
1586,14 → 1547,14
 
sub generate_ip{
my $ipgen=shift;
my $name=$ipgen->ipgen_get_module_name();
my $category=$ipgen->ipgen_get_category();
my $ip_name= $ipgen->ipgen_get_ip_name();
my $name=$ipgen->ipgen_get("module_name");
my $category=$ipgen->ipgen_get("category");
my $ip_name= $ipgen->ipgen_get("ip_name");
#check if name has been set
if(defined ($name) && defined ($category)){
if (!defined $ip_name) {$ip_name= $name}
#check if any source file has been added for this ip
my @l=$ipgen->ipgen_get_files_list("hdl_files");
my @l=$ipgen->ipgen_get_list("hdl_files");
if( scalar @l ==0){
my $mwindow;
my $dialog = Gtk2::MessageDialog->new ($mwindow,
1668,7 → 1629,7
$file = $dialog->get_filename;
my ($name,$path,$suffix) = fileparse("$file",qr"\..[^.]*$");
if($suffix eq '.IP'){
$ipgen->ipgen_set_file($file);
$ipgen->ipgen_add("file_name",$file);
set_state($soc_state,"load_file",0);
}
}
1680,31 → 1641,83
 
 
 
 
 
 
############
# get_source_file
###########
# get header file
#########
 
sub get_sw_file_folder{
my ($ipgen,$soc_state,$info,$window)=@_;
my @sw_dir = $ipgen->ipgen_get_files_list("sw_files");
my $table = Gtk2::Table->new (15, 15, TRUE);
 
 
sub get_source_file{
my($ipgen,$soc_state,$info,$page,$title,$dest,$page_info_ref)=@_;
 
my $var_list='${parameter_name}: Verilog module parameter values.
 
${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}... .
${IP}: is the peripheral device instance name.
 
${CORE}: is the peripheral device module name.';
my $var_help=gen_button_message($var_list,"icons/info.png","Global variables");
my($width,$hight)=max_win_size();
my $window = def_popwin_size($width*2/3,$hight*2/3,$title);
my $help=gen_label_help("The files and folder that selected here will be copied in genertated processing tile SW folder.");
my $notebook=source_notebook($ipgen,$soc_state,$info,$window,$page,$dest,$page_info_ref);
my $table=def_table (15, 15, TRUE);
$table->attach_defaults ($var_help, 5, 7, 0, 1);
$table->attach_defaults ($notebook , 0, 15, 1, 15);
$window->add($table);
$window->show_all;
return $window;
$table->attach_defaults($help,0,15,0,1);
my $ok=def_image_button("icons/select.png",' Ok ');
my $scrwin=gen_file_list($ipgen,"sw_files",\@sw_dir,$ok);
}
 
##########
# source_notebook
##########
 
sub source_notebook{
my($ipgen,$soc_state,$info,$window,$page,$dest,$page_info_ref)=@_;
my $notebook = Gtk2::Notebook->new;
my %page_info=%{$page_info_ref};
foreach my $p (sort keys %page_info){
my $page_ref;
$page_ref=get_file_folder($ipgen,$soc_state,$info,$window,$p,$page_info_ref) if($page_info{$p}{filed_type} eq "exsiting_file/folder");
$page_ref=get_file_folder($ipgen,$soc_state,$info,$window,$p,$page_info_ref) if($page_info{$p}{filed_type} eq "file_generators");
$page_ref=get_file_content($ipgen,$soc_state,$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->show_all;
$notebook->set_current_page($page) if(defined $page);
return $notebook;
 
}
 
##########
# get_file_folder
#########
 
sub get_file_folder{
my ($ipgen,$soc_state,$info,$window,$page,$page_info_ref)=@_;
my %page_info=%{$page_info_ref};
my @sw_dir = $ipgen->ipgen_get_list($page_info{$page}{filed_name});
my $table = Gtk2::Table->new (15, 15, TRUE);
my $help=gen_label_help($page_info{$page}{help});
$table->attach_defaults($help,0,2,0,1);
my ($scrwin,$ok)=gen_file_list($ipgen,$page_info{$page}{filed_name},$window,$page_info{$page}{rename_file});
my $label=gen_label_in_left("Selecet file(s):");
my $brows=def_image_button("icons/browse.png",' Browse');
$table->attach_defaults($label,1,3,1,2);
$table->attach_defaults($brows,3,5,1,2);
my $label2=gen_label_in_left("Selecet folder(s):");
my $brows2=def_image_button("icons/browse.png",' Browse');
$table->attach_defaults($label2,7,9,1,2);
$table->attach_defaults($brows2,9,11,1,2);
$table->attach_defaults($label,2,4,0,1);
$table->attach_defaults($brows,4,6,0,1);
my $dir = Cwd::getcwd();
my $project_dir = abs_path("$dir/../../"); #mpsoc directory address
1726,170 → 1739,132
$dialog->set_select_multiple(TRUE);
 
if ( "ok" eq $dialog->run ) {
@files = $dialog->get_filenames;
@sw_dir=$ipgen->ipgen_get_files_list("sw_files");
@files = $dialog->get_filenames;
@sw_dir=$ipgen->ipgen_get_list($page_info{$page}{filed_name});
foreach my $p (@files){
#remove $project_dir form beginig of each file
$p =~ s/$project_dir//;
$p =~ s/$project_dir//;
my ($name,$path,$suffix) = fileparse("$p",qr"\..[^.]*$");
$p=$p.'frename_sep_t'.$name.$suffix if (defined $page_info{$page}{rename_file});
if(! grep (/^$p$/,@sw_dir)){push(@sw_dir,$p)};
}
$ipgen->ipgen_set_files_list("sw_files",\@sw_dir);
get_software_file($ipgen,$soc_state,$info);
}
$ipgen->ipgen_add($page_info{$page}{filed_name},\@sw_dir);
get_source_file($ipgen,$soc_state,$info,$page,"Add software file(s)","SW",$page_info_ref);
$window->destroy;
#$$entry_ref->set_text($file);
#print "file = $file\n";
}
$dialog->destroy;
 
 
} );# # ,\$entry);
$brows2->signal_connect("clicked"=> sub {
my @files;
if($page_info{$page}{folder_en} eq 1){
my $label2=gen_label_in_left("Selecet folder(s):");
my $brows2=def_image_button("icons/browse.png",' Browse');
$table->attach_defaults($label2,7,9,0,1);
$table->attach_defaults($brows2,9,11,0,1);
 
$brows2->signal_connect("clicked"=> sub {
my @files;
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();
$dialog->set_current_folder ("$dir/..") ;
$dialog->set_select_multiple(TRUE);
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();
$dialog->set_current_folder ("$dir/..") ;
$dialog->set_select_multiple(TRUE);
 
if ( "ok" eq $dialog->run ) {
@files = $dialog->get_filenames;
@sw_dir=$ipgen->ipgen_get_files_list("sw_files");
foreach my $p (@files){
#remove $project_dir form beginig of each file
$p =~ s/$project_dir//;
if(! grep (/^$p$/,@sw_dir)){push(@sw_dir,$p)};
}
$ipgen->ipgen_set_files_list("sw_files",\@sw_dir);
get_software_file($ipgen,$soc_state,$info);
$window->destroy;
#$$entry_ref->set_text($file);
if ( "ok" eq $dialog->run ) {
@files = $dialog->get_filenames;
@sw_dir=$ipgen->ipgen_get_list($page_info{$page}{filed_name});
foreach my $p (@files){
#remove $project_dir form beginig of each file
$p =~ s/$project_dir//;
if(! grep (/^$p$/,@sw_dir)){push(@sw_dir,$p)};
}
$ipgen->ipgen_add($page_info{$page}{filed_name},\@sw_dir);
get_source_file($ipgen,$soc_state,$info,$page,"Add software file(s)","SW",$page_info_ref);
$window->destroy;
#$$entry_ref->set_text($file);
#print "file = $file\n";
}
$dialog->destroy;
#print "file = $file\n";
}
$dialog->destroy;
 
 
} );# # ,\$entry);
} );# # ,\$entry);
}
$table->attach_defaults($scrwin,0,15,1,14);
$table->attach_defaults($ok,6,9,14,15);
return ($table)
 
$table->attach_defaults($scrwin,0,15,2,15);
#$table->attach_defaults($ok,6,9,14,15);
my $scrolled_win = new Gtk2::ScrolledWindow (undef, undef);
$scrolled_win->set_policy( "automatic", "automatic" );
$scrolled_win->add_with_viewport($table);
#$window->add($table);
#$window->show_all();
return ($scrolled_win);
}
 
 
 
###########
# get_file_content
#########
 
sub get_file_content{
my ($ipgen,$soc_state,$info,$window,$page_info_ref)=@_;
my %page_info=%{$page_info_ref};
#my $hdr = $ipgen->ipgen_get_hdr();
my $hdr = $ipgen-> ipgen_get($page_info{filed_name});
my $table = Gtk2::Table->new (14, 15, TRUE);
#my $window=def_popwin_size(600,600,"Add header file");
my ($scrwin,$text_view)=create_text();
 
sub get_software_file{
my($ipgen,$soc_state,$info)=@_;
my $help=gen_label_help($page_info{help});
$table->attach_defaults($help,0,8,0,1);
$table->attach_defaults($scrwin,0,15,1,14);
my $text_buffer = $text_view->get_buffer;
if(defined $hdr) {$text_buffer->set_text($hdr)};
my $ok=def_image_button("icons/select.png",' Save ');
$ok->signal_connect("clicked"=> sub {#
my $text = $text_buffer->get_text($text_buffer->get_bounds, TRUE);
$ipgen->ipgen_add($page_info{filed_name},$text);
$window->destroy;
});
 
$table->attach_defaults($ok,6,9,14,15);
return ($table);
}
 
my $notebook = Gtk2::Notebook->new;
#$hbox->pack_start ($notebook, TRUE, TRUE, 0);
 
my($width,$hight)=max_win_size();
my $window = def_popwin_size($width*2/3,$hight*2/3,"Add Software file(s)");
my ($sw_dir)=get_sw_file_folder($ipgen,$soc_state,$info,$window);
$notebook->append_page ($sw_dir,Gtk2::Label->new_with_mnemonic ("_Add file/folder"));
 
my ($hdr_file,$text_buffer)= get_header_file($ipgen,$soc_state,$info);
$notebook->append_page ($hdr_file,Gtk2::Label->new_with_mnemonic ("_Add hedaer file"));
 
 
#my $socgen=socgen_main();
#$notebook->append_page ($socgen,Gtk2::Label->new_with_mnemonic ("_Processing tile generator"));
 
#my $mpsocgen =mpsocgen_main();
#$notebook->append_page ($mpsocgen,Gtk2::Label->new_with_mnemonic ("_NoC based MPSoC generator"));
 
my $table=def_table (15, 15, TRUE);
my $scrolled_win = new Gtk2::ScrolledWindow (undef, undef);
$scrolled_win->set_policy( "automatic", "automatic" );
$scrolled_win->add_with_viewport($table);
 
my $ok=def_image_button("icons/select.png",' Ok ');
$ok->signal_connect("clicked"=> sub {
$window->destroy;
my $text = $text_buffer->get_text($text_buffer->get_bounds, TRUE);
$ipgen->ipgen_set_hdr($text);
#print "$text\n";
});
#$table->attach_defaults ($event_box, $col, $col+1, $row, $row+1);
$table->attach_defaults ($ok , 7, 9, 14, 15);
$table->attach_defaults ($notebook , 0, 15, 0, 14);
#
$window->add($scrolled_win);
$window->show_all;
return $window;
 
 
 
}
 
 
 
 
 
############
# get_unused_intfc_ports_list
###########
1900,7 → 1875,7
my ($name_ref,$ref)=get_list_of_all_interfaces($ipgen);
my @interfaces_name=@{$name_ref};
my @interfaces=@{$ref};
$ipgen->ipgen_remove_unused_intfc_port( );
$ipgen->ipgen_remove("unused");
foreach my $intfc_name (@interfaces)
{
#print "$intfc_name\n";
1946,6 → 1921,21
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
############
# main
############
2003,7 → 1993,7
my ($state,$timeout)= get_state($soc_state);
if($state eq "load_file"){
my $file=$ipgen->ipgen_get_file();
my $file=$ipgen->ipgen_get("file_name");
my $pp= eval { do $file };
clone_obj($ipgen,$pp);
/ip_gen.pm
34,39 → 34,8
return $self;
}
 
sub ipgen_set_file{
my ($self,$file)=@_;
$self->{file_name}=$file;
}
 
 
 
sub ipgen_get_file{
my $self=shift;
return $self->{file_name};
}
 
sub ipgen_set_module_name{
my ($self,$module)=@_;
$self->{module_name}=$module;
}
 
sub ipgen_get_module_name{
my ($self)=@_;
return $self->{module_name};
}
 
sub ipgen_set_ip_name{
my ($self,$name)=@_;
$self->{ip_name}=$name;
}
 
sub ipgen_get_ip_name{
my ($self)=@_;
return $self->{ip_name};
}
 
 
sub ipgen_set_module_list{
my ($self,@list)=@_;
$self->{modules}={};
101,20 → 70,8
 
 
 
sub ipgen_add_parameters_order{
my ($self,@parameters_order)=@_;
$self->{parameters_order}=\@parameters_order;
}
 
 
sub ipgen_get_parameters_order{
my $self=shift;
my @r;
@r = @{$self->{parameters_order}} if (defined $self->{parameters_order});
return @r;
}
 
sub ipgen_push_parameters_order{
my ($self,$param)=@_;
378,44 → 335,11
}
sub ipgen_set_category{
my ($self,$category)=@_;
if(defined $category){
$self->{category}=$category;
}
 
}
 
sub ipgen_get_category{
my ($self)=@_;
my $category;
if(exists ($self->{category})){
$category=$self->{category};
}
return $category;
}
 
 
sub ipgen_get_description{
my ($self)=@_;
my $description;
if(exists ($self->{description})){
$description=$self->{description};
}
return $description;
}
 
sub ipgen_set_description{
my ($self,$description)=@_;
$self->{description}=$description;
}
 
 
sub ipgen_save_wb_addr{
my ($self,$plug,$num,$addr,$width)=@_;
$self->{plugs}{$plug}{$num}{addr}=$addr;
473,27 → 397,35
}
 
sub ipgen_set_hdr{
my ($self,$hdr)=@_;
$self->{header}=$hdr;
}
 
sub ipgen_add_unused_intfc_port{
my ($self,$intfc_name,$port)=@_;
push(@{$self->{unused}{$intfc_name}},$port);
}
 
sub ipgen_get_hdr{
my ($self)=@_;
my $hdr;
if(exists ($self->{header})){
$hdr=$self->{header};
}
return $hdr;
 
 
 
 
#add,read,remove object fileds
 
sub ipgen_add{
my ($self,$filed_name,$filed_data)=@_;
$self->{$filed_name}=$filed_data;
}
 
sub ipgen_remove{
my ($self,$filed_name)=@_;
$self->{$filed_name}=undef;
}
 
sub ipgen_get{
my ($self,$filed_name)=@_;
return $self->{$filed_name}
}
 
 
sub ipgen_get_files_list{
sub ipgen_get_list{
my ($self,$list_name)=@_;
my @l;
if ( defined $self->{$list_name} ){
504,28 → 436,8
}
 
 
sub ipgen_set_files_list{
my ($self,$list_name,$ref)=@_;
$self->{$list_name}= $ref;
}
 
 
sub ipgen_add_unused_intfc_port{
my ($self,$intfc_name,$port)=@_;
push(@{$self->{unused}{$intfc_name}},$port);
}
 
sub ipgen_get_unused_intfc_ports{
my $self=shift;
return $self->{unused};
}
 
sub ipgen_remove_unused_intfc_port{
my $self=shift;
$self->{unused}=undef;
}
 
######################################
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.