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; |
} |
|
###################################### |
|
|