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

[/] [an-fpga-implementation-of-low-latency-noc-based-mpsoc/] [trunk/] [mpsoc/] [perl_gui/] [lib/] [perl/] [ip_gen.pl] - Blame information for rev 24

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 16 alirezamon
#! /usr/bin/perl -w
2
use Glib qw/TRUE FALSE/;
3
use strict;
4
use warnings;
5
use wb_addr;
6
use interface;
7
use intfc_gen;
8
use ip_gen;
9
use rvp;
10
use Cwd 'abs_path';
11
 
12
use File::Basename;
13
 
14
use Gtk2;
15
 
16
 
17
require "widget.pl";
18
 
19
 
20
use String::Similarity;
21
 
22
 
23
sub find_the_most_similar_position{
24
        my ($item ,@list)=@_;
25
        my $most_similar_pos=0;
26
        my $lastsim=0;
27
        my $i=0;
28 17 alirezamon
        # convert item to lowercase
29
        $item = lc $item;
30 16 alirezamon
        foreach my $p(@list){
31
                my $similarity= similarity $item, $p;
32
                if ($similarity > $lastsim){
33
                        $lastsim=$similarity;
34
                        $most_similar_pos=$i;
35
                }
36
                $i++;
37
        }
38
        return $most_similar_pos;
39
}
40
 
41
 
42
use constant DISPLY_COLUMN    => 0;
43
use constant CATGR_COLUMN    => 1;
44
use constant INTFC_COLUMN     => 2;
45
use constant ITAL_COLUMN   => 3;
46
use constant NUM_COLUMN     => 4;
47
 
48
################
49
#  check_input_file
50
################
51
 
52
sub check_input_file{
53
        my ($file,$ipgen,$soc_state,$info)=@_;
54
        my ($name,$path,$suffix) = fileparse("$file",qr"\..[^.]*$");
55
        if($suffix eq '.IP'){
56 24 alirezamon
                $ipgen->ipgen_add("file_name",$file);
57 16 alirezamon
                set_state($soc_state,"load_file",0);
58
 
59
 
60
        }else{
61
                read_all_module ($file,$ipgen,$soc_state,$info);
62
 
63
        }
64
 
65
 
66
}
67
 
68
 
69
sub read_all_module{
70
        my ($file,$ipgen,$soc_state,$info)=@_;
71
 
72
        if (!defined $file) {return; }
73
        if (-e $file) {
74
                my $vdb =  read_file($file);
75
                my @modules=sort $vdb->get_modules($file);
76
                #foreach my $p(@module_list) {print "$p\n"}
77 24 alirezamon
                $ipgen->ipgen_add("file_name",$file);
78
 
79
 
80
 
81
                $ipgen->ipgen_add("module_name",$modules[0]);
82 16 alirezamon
                $ipgen->ipgen_set_module_list(@modules);
83
                load_deafult_setting($ipgen,$modules[0]);
84
 
85
 
86
                set_state($soc_state,"file_selected",1);
87
                show_info(\$info,"Select the module which contain the interface ports\n ");
88
 
89
        }
90
        else {
91
                show_info(\$info,"File $file doese not exsit!\n ");
92
 
93
        }
94
}
95
 
96
 
97
##############
98
#       create_interface_tree 
99
##############
100
sub create_interface_tree {
101
   my ($info,$intfc,$ipgen,$soc_state)=@_;
102
   my $model = Gtk2::TreeStore->new ('Glib::String', 'Glib::String', 'Glib::Scalar', 'Glib::Boolean');
103
   my $tree_view = Gtk2::TreeView->new;
104
   $tree_view->set_model ($model);
105
   my $selection = $tree_view->get_selection;
106
 
107
   $selection->set_mode ('browse');
108
   $tree_view->set_size_request (200, -1);
109
 
110
 
111
  # my @interface= $intfc->get_interfaces();
112
        my @categories= $intfc->get_categories();
113
 
114
 
115
 
116
   foreach my $p (@categories)
117
   {
118
        my @intfc_names=  $intfc->get_intfcs_of_category($p);
119
        #my @dev_entry=  @{$tree_entry{$p}};    
120
        my $iter = $model->append (undef);
121
        $model->set ($iter,
122
                   DISPLY_COLUMN,    $p,
123
                   CATGR_COLUMN, $p || '',
124
                   INTFC_COLUMN,     0     || '',
125
                   ITAL_COLUMN,   FALSE);
126
 
127
        next unless  @intfc_names;
128
 
129
        foreach my $v ( @intfc_names){
130
                 my $child_iter = $model->append ($iter);
131
                 my $entry= '';
132
 
133
                $model->set ($child_iter,
134
                                        DISPLY_COLUMN,    $v,
135
                        CATGR_COLUMN, $p|| '',
136
                        INTFC_COLUMN,     $v     || '',
137
                        ITAL_COLUMN,   FALSE);
138
        }
139
 
140
 
141
 
142
   }
143
 
144
   my $cell = Gtk2::CellRendererText->new;
145
   $cell->set ('style' => 'italic');
146
   my $column = Gtk2::TreeViewColumn->new_with_attributes
147
                                        ("Double click to add the interface",
148
                                        $cell,
149
                                        'text' => DISPLY_COLUMN,
150
                                        'style_set' => ITAL_COLUMN);
151
 
152
  $tree_view->append_column ($column);
153
  my @ll=($model,\$info);
154
#row selected
155
 
156
  $selection->signal_connect (changed =>sub {
157
        my ($selection, $ref) = @_;
158
        my ($model,$info)=@{$ref};
159
        my $iter = $selection->get_selected;
160
        return unless defined $iter;
161
 
162
        my ($category) = $model->get ($iter, CATGR_COLUMN);
163
        my ($name) = $model->get ($iter,INTFC_COLUMN );
164
        my $describ=$intfc->get_description($category,$name);
165
 
166
        if($describ){
167
                #print "$entry description is: $describ \n";
168
                show_info($info,$describ);
169
 
170
        }
171
 
172
 
173
}, \@ll);
174
 
175
#  row_activated 
176
  $tree_view->signal_connect (row_activated => sub{
177
 
178
        my ($tree_view, $path, $column) = @_;
179
        my $model = $tree_view->get_model;
180
        my $iter = $model->get_iter ($path);
181
        my ($category) = $model->get ($iter, CATGR_COLUMN);
182
        my ($name) = $model->get ($iter,INTFC_COLUMN );
183
 
184
 
185
 
186
        if($name){
187
                #print "$infc_name-$infc_type  is selected via row activaton!\n";
188
                add_intfc_to_ip($intfc,$ipgen,$name,'plug',\$info,$soc_state);
189
 
190
        }
191
 
192
}, \@ll);
193
 
194
  #$tree_view->expand_all;
195
 
196
  my $scrolled_window = Gtk2::ScrolledWindow->new;
197
  $scrolled_window->set_policy ('automatic', 'automatic');
198
  $scrolled_window->set_shadow_type ('in');
199
  $scrolled_window->add($tree_view);
200
 
201
  my $hbox = Gtk2::HBox->new (TRUE, 0);
202
  $hbox->pack_start ( $scrolled_window, TRUE, TRUE, 0);
203
 
204
 
205
 
206
  return $hbox;
207
}
208
 
209
 
210
 
211
sub save_ports_all{
212
        my ($ipgen,$vdb,$top_module)=@_;
213
 
214
        foreach my $sig (sort $vdb->get_modules_signals($top_module)) {
215
        my ($line,$a_line,$i_line,$type,$file,$posedge,$negedge,
216
         $type2,$s_file,$s_line,$range,$a_file,$i_file,$dims) =
217
           $vdb->get_module_signal($top_module,$sig);
218
 
219
                if($type eq "input" or $type eq "inout" or $type eq "output" ){
220
                        $ipgen->ipgen_add_port($sig,$range,$type,'IO','IO');
221
                        #print "$sig,$range,$type,'IO','IO'\n";
222
 
223
                }
224
 
225
 
226
        }
227
 
228
}
229
 
230
 
231
############
232
#       file_info
233
#############
234
 
235
sub ip_file_box {
236
        my ($ipgen,$soc_state,$info,$table,$row)=@_;
237
        my $label = gen_label_in_left(" Select file:");
238
        my $entry = Gtk2::Entry->new;
239
        #my $open= def_image_button("icons/select.png","Open");
240
        my $browse= def_image_button("icons/browse.png","Browse");
241
        my $label2= gen_label_in_left(" IP name:");
242
        my $entry2= gen_entry();
243 24 alirezamon
        my $file= $ipgen->ipgen_get("file_name");
244 16 alirezamon
        if(defined $file){$entry->set_text($file);}
245 24 alirezamon
        my $ip_name= $ipgen->ipgen_get("ip_name");
246 16 alirezamon
        if(defined $ip_name){$entry2->set_text($ip_name);}
247
        show_info(\$info,"Please select the verilog file containig the ip module\n");
248
        $browse->signal_connect("clicked"=> sub{
249
                my $entry_ref=$_[1];
250
                my $file;
251
        my $dialog = Gtk2::FileChooserDialog->new(
252
                'Select a File', undef,
253
                'open',
254
                'gtk-cancel' => 'cancel',
255
                'gtk-ok'     => 'ok',
256
                );
257
 
258
                my $filter = Gtk2::FileFilter->new();
259
                        $filter->set_name("Verilog");
260
                        $filter->add_pattern("*.v");
261
                        my $filter2 = Gtk2::FileFilter->new();
262
                        $filter2->set_name("IP");
263
                        $filter2->add_pattern("*.IP");
264
                        $dialog->add_filter ($filter);
265
                        $dialog->add_filter ($filter2);
266
 
267
                if ( "ok" eq $dialog->run ) {
268
                        $file = $dialog->get_filename;
269
                                        $$entry_ref->set_text($file);
270
                                        check_input_file($file,$ipgen,$soc_state,$info);
271
                        #print "file = $file\n";
272
                 }
273
                $dialog->destroy;
274
 
275
 
276
 
277
        } , \$entry);
278
 
279
 
280
 
281
        #$open->signal_connect("clicked"=> sub{
282
                #my $file_name=$entry->get_text();
283
                #check_input_file($file_name,$ipgen,$soc_state,$info);
284
 
285
                #});
286
        $entry->signal_connect("activate"=>sub{
287
                my $file_name=$entry->get_text();
288
                check_input_file($file_name,$ipgen,$soc_state,$info);
289
        });
290
 
291
        $entry->signal_connect("changed"=>sub{
292
                show_info(\$info,"Please select the verilog file containig the interface\n");
293
        });
294
        $entry2->signal_connect("changed"=>sub{
295
                my $name=$entry2->get_text();
296 24 alirezamon
                $ipgen->ipgen_add("ip_name",$name);
297 16 alirezamon
 
298
        });
299
        $table->attach_defaults ($label, 0, 1 , $row, $row+1);
300
        $table->attach_defaults ($entry, 1, 8 , $row, $row+1);
301
        $table->attach_defaults ($browse, 8, 9, $row, $row+1);
302
        $table->attach_defaults ($label2, 9, 10, $row, $row+1);
303
        $table->attach_defaults ($entry2,  10, 11, $row, $row+1);
304
        #$table->attach_defaults ($open,  7, 8, $row, $row+1);
305
        #$table->attach_defaults ($entry, $col, $col+1, $row, $row+1);
306
        #return $table;
307
 
308
 
309
}
310
 
311
 
312
 
313
 
314
sub select_module{
315
        my ($ipgen,$soc_state,$info,$table,$row)=@_;
316 17 alirezamon
        my $label= gen_label_in_left("  Select\n module:");
317 16 alirezamon
        my @modules= $ipgen->ipgen_get_module_list();
318 24 alirezamon
        my $saved_module=$ipgen->ipgen_get("module_name");
319 16 alirezamon
        my $pos=(defined $saved_module ) ? get_scolar_pos( $saved_module,@modules) : 0;
320
        my $combo = gen_combo(\@modules, $pos);
321
        my $param= def_image_button("icons/setting.png","Parameter\n   setting");
322 17 alirezamon
        my $def= def_image_button("icons/setting.png","Definition\n file setting");
323
        my $label2= gen_label_in_left("  Select\n Category:");
324 16 alirezamon
        my ($category,$category_entry)=gen_entry_help('Define the IP category:e.g RAM, GPIO,...');
325 24 alirezamon
        my $saved_category=$ipgen->ipgen_get("category");
326 16 alirezamon
        if(defined $saved_category){$category_entry->set_text($saved_category);}
327 17 alirezamon
        my $ipinfo= def_image_button("icons/info.png","    IP\n Description");
328
        my $header_h= def_image_button("icons/h_file.png","Add Software\n      files");
329
        my $lib_hdl= def_image_button("icons/add-notes.png","Add HDL\n     files");
330 16 alirezamon
 
331
        $table->attach_defaults ($label, 0, 1 , $row, $row+1);
332 17 alirezamon
        $table->attach_defaults ($combo, 1, 4 , $row,$row+1);
333
        $table->attach_defaults ($param, 4, 6 , $row, $row+1);
334
        #$table->attach_defaults ($def, 5, 6 , $row, $row+1);
335 16 alirezamon
        $table->attach_defaults ($label2, 6, 7 , $row, $row+1);
336
        $table->attach_defaults ($category, 7, 8 , $row, $row+1);
337
        $table->attach_defaults ($ipinfo, 8, 9 , $row, $row+1);
338
        $table->attach_defaults ($header_h, 9, 10 , $row, $row+1);
339
        $table->attach_defaults ($lib_hdl, 10, 11 , $row, $row+1);
340
 
341
 
342
        $combo->signal_connect("changed"=> sub{
343
 
344
                my $module= $combo->get_active_text();
345
                load_deafult_setting($ipgen,$module);
346
                set_state($soc_state,'intfc_changed',0);
347
 
348
 
349
        });
350
 
351
        $param->signal_connect("clicked"=> sub{
352
                get_parameter_setting($ipgen,$soc_state,$info);
353
 
354
 
355
        });
356 17 alirezamon
 
357
        $def->signal_connect("clicked"=> sub{
358
                get_def_setting($ipgen,$soc_state,$info);
359
 
360
 
361
        });
362 16 alirezamon
        $category_entry->signal_connect("changed"=> sub{
363
                my $name=$category_entry->get_text();
364 24 alirezamon
                $ipgen->ipgen_add("category",$name);
365 16 alirezamon
 
366
        });
367
        $ipinfo->signal_connect("clicked"=> sub{
368
                get_Description($ipgen,$soc_state,$info);
369
 
370
        });
371
        $header_h->signal_connect("clicked"=> sub{
372 24 alirezamon
                my %page_info;
373
                my $help1="The files and folder that selected here will be copied in genertated processing tile SW folder.";
374
                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";
375
                my $help3='Define the header file for this peripheral device. You can use global vriables listed at the top.
376
 
377
header file example
378
 
379
 #define ${IP}_REG_0   (*((volatile unsigned int *) ($BASE)))
380
 #define ${IP}_REG_1   (*((volatile unsigned int *) ($BASE+4)))
381
 
382
 
383
 #define ${IP}_WRITE_REG1(value)  ${IP}_REG_1=value
384
 #define ${IP}_READ_REG1()      ${IP}_REG_1
385
  ';
386
 
387
                $page_info{0}{page_name} = "_Add exsiting file/folder";
388
                $page_info{0}{filed_name}= "sw_files";
389
                $page_info{0}{filed_type}= "exsiting_file/folder";
390
                $page_info{0}{rename_file}=undef;
391
                $page_info{0}{folder_en}=1;
392
                $page_info{0}{help}=$help1;
393
 
394
                $page_info{1}{page_name} = "_Add file generator(s)";
395
                $page_info{1}{filed_name}= "gen_sw_files";
396
                $page_info{1}{filed_type}= "file_generators";
397
                $page_info{1}{rename_file}=1;
398
                $page_info{1}{folder_en}=0;
399
                $page_info{1}{help}=$help2;
400
 
401
                $page_info{2}{page_name} = "_Add to system.h";
402
                $page_info{2}{filed_name}= "system_h";
403
                $page_info{2}{filed_type}= "file_content";
404
                $page_info{2}{rename_file}=undef;
405
                $page_info{2}{folder_en}=0;
406
                $page_info{2}{help}=$help3;
407
 
408
 
409
                get_source_file($ipgen,$soc_state,$info,0,"Add software file(s)","SW",\%page_info);
410
                #get_software_file($ipgen,$soc_state,$info,0);          
411 16 alirezamon
 
412
        });
413
        $lib_hdl->signal_connect("clicked"=> sub{
414 24 alirezamon
                my $help1="The files and folder that selected here will be copied in genertated processing tile RTL  folder.";
415
                my %page_info;
416
                $page_info{0}{page_name} = "_Add exsiting HDL file/folder";
417
                $page_info{0}{filed_name}= "hdl_files";
418
                $page_info{0}{filed_type}= "exsiting_file/folder";
419
                $page_info{0}{rename_file}=undef;
420
                $page_info{0}{folder_en}=1;
421
                $page_info{0}{help}=$help1;
422
 
423
                get_source_file($ipgen,$soc_state,$info,0,"Add HDL file(s)", "hw",\%page_info);
424
 
425
                #get_hdl_file($ipgen,$soc_state,$info);
426
 
427 16 alirezamon
 
428
        });
429
}
430
 
431
sub load_deafult_setting{
432
        my ($ipgen,$module)=@_;
433 24 alirezamon
        my $file= $ipgen->ipgen_get("file_name");
434
        $ipgen->ipgen_add("module_name",$module);
435 16 alirezamon
        my $vdb =read_file($file);
436
        my %parameters = $vdb->get_modules_parameters_not_local($module);
437
        my @parameters_order= $vdb->get_modules_parameters_not_local_order($module);
438
        my @ports_order=$vdb->get_module_ports_order($module);
439
        #print "@port_order\n";
440
 
441
        #add deafult parameter setting
442
        $ipgen->ipgen_remove_all_parameters();
443
        foreach my $p (keys %parameters){
444
                        #print "$p\n";
445
                        my $v = $parameters{$p};
446
                        $v =~s/[\n]//gs;
447
                        $ipgen->ipgen_add_parameter($p,$v,'Fixed','');
448
 
449
        }
450
        #add parameter order. 
451 24 alirezamon
        $ipgen->ipgen_add("parameters_order",\@parameters_order);
452 16 alirezamon
        #add port order.
453
        $ipgen->ipgen_add_ports_order(@ports_order);
454
        #add ports 
455
        $ipgen->ipgen_remove_all_ports();
456
        save_ports_all($ipgen,$vdb,$module);
457
 
458
 
459
 
460
}
461
 
462
sub file_info_box {
463
        my($ipgen,$soc_state,$info)=@_;
464
        my $table=def_table(2,11,FALSE);
465 17 alirezamon
        my $table1=def_table(1,11,FALSE);
466
        my $table2=def_table(1,11,FALSE);
467
        ip_file_box ($ipgen,$soc_state,$info,$table1,0);
468
        select_module($ipgen,$soc_state,$info,$table2,0);
469
        $table->attach_defaults($table1,0,11,0,1);
470
        $table->attach_defaults($table2,0,11,1,2);
471 16 alirezamon
        return $table;
472
 
473
 
474
}
475
 
476
 
477
 
478
 
479
sub show_file_info{
480
        my($ipgen,$soc_state,$info,$refresh_ref)=@_;
481
        my $table = file_info_box($ipgen,$soc_state,$info,$info);
482
        my $scrolled_win = new Gtk2::ScrolledWindow (undef, undef);
483
        $scrolled_win->set_policy( "automatic", "never" );
484
        $scrolled_win->add_with_viewport($table);
485
 
486
 
487
 
488
        $$refresh_ref-> signal_connect("clicked" => sub{
489
                $table->destroy;
490
                $table = file_info_box($ipgen,$soc_state,$info,$info);
491
 
492
                $scrolled_win->add_with_viewport($table);
493
                $table->show;
494
                $scrolled_win->show_all;
495 24 alirezamon
 
496 16 alirezamon
 
497
 
498
        });
499
 
500
        return $scrolled_win;
501
 
502
 
503
 
504
}
505
 
506
 
507
sub show_port_info{
508
        my($intfc,$ipgen,$soc_state,$info,$refresh_ref)=@_;
509
        my $table = port_info_box($intfc,$ipgen,$soc_state,$info,$info);
510
        my $scrolled_win = new Gtk2::ScrolledWindow (undef, undef);
511
        $scrolled_win->set_policy( "automatic", "automatic" );
512
        $scrolled_win->add_with_viewport($table);
513
 
514
 
515
 
516
        $$refresh_ref-> signal_connect("clicked" => sub{
517
                $table->destroy;
518
                $table = port_info_box($intfc,$ipgen,$soc_state,$info,$info);
519
 
520
                $scrolled_win->add_with_viewport($table);
521
                $table->show;
522
                $scrolled_win->show_all;
523
 
524
 
525
 
526
 
527
        });
528
 
529
        return $scrolled_win;
530
 
531
}
532
 
533
 
534
sub show_interface_info{
535
        my($intfc,$ipgen,$soc_state,$info,$refresh_ref)=@_;
536
        my $table = interface_info_box($intfc,$ipgen,$soc_state,$info,$info);
537
        my $scrolled_win = new Gtk2::ScrolledWindow (undef, undef);
538
        $scrolled_win->set_policy( "automatic", "automatic" );
539
        $scrolled_win->add_with_viewport($table);
540
 
541
 
542
 
543
        $$refresh_ref-> signal_connect("clicked" => sub{
544
                $table->destroy;
545 22 alirezamon
                select(undef, undef, undef, 0.1); #wait 10 ms
546 16 alirezamon
                $table = interface_info_box($intfc,$ipgen,$soc_state,$info,$info);
547
 
548
                $scrolled_win->add_with_viewport($table);
549
                $table->show;
550
                $scrolled_win->show_all;
551
 
552
 
553
        });
554
 
555
        return $scrolled_win;
556
 
557
 
558
 
559
}
560
 
561
 
562
 
563
 
564
 
565
 
566
 
567
 
568
############
569
#  get_parameter_setting
570
##########
571
sub get_parameter_setting {
572
        my ($ipgen,$soc_state,$info)=@_;
573
 
574 24 alirezamon
        my $module = $ipgen->ipgen_get("module_name");
575
        my $file= $ipgen->ipgen_get("file_name");
576 16 alirezamon
        if (!defined $file) {
577
                        message_dialog("The input verilog file is empty");
578
                        return;
579
 
580
        }
581
 
582
        #my $titelbox=def_title_box(TRUE,5,("Parameter name","Deafult value","Widget type","Widget content","Global param   Optional info",));
583
 
584
 
585
 
586
 
587
 
588
        my @widget_type_list=("Fixed","Entry","Combo-box","Spin-button");
589
        my @param_type_list=("localparam-pass", "parameter-pass", "localparam-notpass","parameter-notpass");
590
        my $type_info="Define the parameter type:
591 17 alirezamon
 
592
Fixed: The parameter is fixed and get the default value. Users can not see or change the parameter value.
593
 
594
Entry: The parameter value is received via entry. The user can type anything.
595
 
596
Combo-box: The parameter value can be selected from a list of predefined value.
597
 
598
Spin-button: The parameter is numeric and will be obtained using spin button.";
599 16 alirezamon
        my $content_info='
600
For Fixed and Entry leave it empty.
601
For Combo box define the parameters which must be shown in combo box as: "PAEAMETER1","PARAMETER2"...,"PARAMETERn".
602
For Spin button define it as "minimum, maximum, step" e.g 0,10,1.';
603
        my $param_info='
604
        If checked, the parameter will be defined as parameter in SoC file too, otherwise it will be defined as localparam.';
605
 
606
        my $redefine_info='
607
        If checked, the defined parameter/localparam in SoC will be passed to the IP core';
608
 
609
        #TABLE
610
        my $table = Gtk2::Table->new (12, 8, FALSE);
611
        my @positions=(0,1,2,3,4,5,6,7,8);
612
        my $col=0;
613
        #title
614
        my @title;
615
        $title[0]=gen_label_in_center("Parameter name");
616
        $title[1]=gen_label_in_center("Deafult value");
617
        $title[2]=gen_label_help($type_info,"Widget type");
618
        $title[3]=gen_label_help($content_info,"Widget content");
619
        $title[4]=gen_label_help($param_info);
620
        $title[5]=gen_label_help($redefine_info);
621
        $title[6]=gen_label_help("You can add aditional information about this parameter.","info");
622
        $title[7]=gen_label_in_center("add/remove");
623
 
624
 
625
        foreach my $t (@title){
626
                $table->attach_defaults ($title[$col], $positions[$col], $positions[$col+1], 0, 1);$col++;
627
 
628
        }
629
 
630
 
631
 
632
        my ($box,$window)=def_scrolled_window_box(1200,500,"Define parameters detail");
633
 
634
 
635
 
636
 
637
        my @parameters=$ipgen->ipgen_get_all_parameters_list();
638 24 alirezamon
        my @params_order= $ipgen->ipgen_get_list("parameters_order");
639 16 alirezamon
        if((@params_order)) {@parameters=@params_order;}
640
 
641
        my $ok = def_image_button('icons/select.png','OK');
642
        my $okbox=def_hbox(TRUE,0);
643
        $okbox->pack_start($ok,   FALSE, FALSE,0);
644
 
645
        my ($b,$new_param)= def_h_labeled_entry("Add new parameter name:");
646
        my $add = def_image_button('icons/plus.png','Add parameter');
647
        my $addbox=def_hbox(FALSE,0);
648
        $addbox->pack_start($b,FALSE, FALSE,0);
649
        $addbox->pack_start($add,   FALSE, FALSE,0);
650
 
651
        my @allowed;
652
 
653
        my $row=1;
654
 
655
        push(@parameters,"#new#");
656
        foreach my $p (@parameters) {
657
                my ($saved_deafult,$saved_widget_type,$saved_content,$saved_info,$global_param,$redefine_param)=  $ipgen->ipgen_get_parameter_detail($p);
658
                #print  "($saved_deafult,$saved_type,$saved_content)\n";
659
                my $parameter_box = def_hbox(TRUE,5);
660
                my $param_name;
661
                my $add_remove;
662
                if($p ne "#new#"){
663
                        $param_name= def_label($p);
664
                        $add_remove=def_image_button("icons/cancel.png","remove");
665
                } else {
666
                        $param_name= gen_entry();
667
                        $add_remove=def_image_button("icons/plus.png","add");
668
                }
669
 
670
                my $deafult_entry= gen_entry($saved_deafult);
671
                my $pos=(defined $saved_widget_type ) ? get_scolar_pos( $saved_widget_type,@widget_type_list) : 0;
672
                my $widget_type_combo=gen_combo(\@widget_type_list, $pos);
673
                my $content_entry= gen_entry($saved_content);
674
                my $check_param= Gtk2::CheckButton->new('Parameter');
675
                $check_param->set_active($global_param) if(defined $global_param );
676
                my $check_redefine= Gtk2::CheckButton->new('Redefine');
677
                $check_redefine->set_active(1) ;
678
                $check_redefine->set_active($redefine_param) if(defined $redefine_param );
679
 
680
 
681
 
682
 
683
 
684
                #my $check= Gtk2::CheckButton->new;
685
                #$check->set_active($global_param) if(defined $global_param );
686
 
687
 
688
                my $info=def_image_button("icons/addinfo.png");
689
                #print "\$global_param =$global_param\n";
690
 
691
                $col=0;
692
                my @all_widget=($param_name,$deafult_entry,$widget_type_combo,$content_entry,$check_param,$check_redefine,$info,$add_remove);
693
                foreach my $t (@all_widget){
694
                        $table->attach_defaults ($t, $positions[$col], $positions[$col+1], $row, $row+1);$col++;
695
 
696
                }
697
 
698
 
699
                $info->signal_connect (clicked => sub{
700
 
701
                        get_param_info($ipgen,\$saved_info);
702
                });
703
 
704
 
705
                $ok->signal_connect (clicked => sub{
706
                        if($p ne "#new#"){
707
                                my $deafult=$deafult_entry->get_text();
708
                                my $type= $widget_type_combo->get_active_text();
709
                                my $content=$content_entry->get_text();
710
                                my $check_result=$check_param->get_active();
711
                                my $global_param=($check_result eq 1)? 1:0;
712
                                $check_result=$check_redefine->get_active();
713
                                my $redefine_param=($check_result eq 1)? 1:0;
714
                                $ipgen->ipgen_add_parameter($p,$deafult,$type,$content,$saved_info,$global_param,$redefine_param);
715
                        }
716
                });
717
                $add_remove->signal_connect (clicked => sub{
718
                        if($p eq "#new#"){ #add new parameter
719
                                my $param= $param_name->get_text();
720 18 alirezamon
                                $param=remove_all_white_spaces($param);
721 16 alirezamon
 
722
                                if( length($param) ){
723
                                        my $deafult=$deafult_entry->get_text();
724
                                        my $type=$widget_type_combo->get_active_text();
725
                                        my $content=$content_entry->get_text();
726
                                        my $check_result=$check_param->get_active();
727
                                        my $global_param=($check_result eq 1)? 1:0;
728
                                           $check_result=$check_redefine->get_active();
729
                                        my $redefine_param=($check_result eq 1)? 1:0;
730
                                        $ipgen->ipgen_add_parameter($param,$deafult,$type,$content,$saved_info,$global_param,$redefine_param);
731
                                        $ipgen->ipgen_push_parameters_order($param);
732
                                        set_state($soc_state,"change_parameter",0);
733
                                        $ok->clicked;
734
                                        #$window->destroy();
735
                                }
736
 
737
                        } else { #remove the parameter
738
                                $ipgen->ipgen_remove_parameter($p);
739
                                $ipgen->ipgen_remove_parameters_order($p);
740
                                set_state($soc_state,"change_parameter",0);
741
                                $ok->clicked;
742
                                        #$window->destroy();
743
 
744
                        }
745
                        #my $param_name=$new_param->get_text();
746
                        #       if( length($param_name) ){
747
                        #               print "$param_name\n";
748
                        #               $ipgen->ipgen_add_parameter($param_name,undef);
749
                        #               set_state($soc_state,"change_parameter",0);
750
                        #               $window->destroy();
751
 
752
                });
753
 
754
 
755
 
756
        $row++;
757
        }
758
        $box->pack_start( $table, FALSE, FALSE, 3);
759
 
760
        for (my $i=$row; $i<7;$i++){
761
                my $temp=gen_label_in_center(' ');
762
                $box->pack_start($temp,   TRUE, FALSE,3);
763
        }
764
 
765
        $box->pack_start($okbox,   TRUE, FALSE,3);
766
 
767
        $add->signal_connect (clicked => sub{
768
                my $param_name=$new_param->get_text();
769
                if( length($param_name) ){
770
                        #print "$param_name\n";
771
                        $ipgen->ipgen_add_parameter($param_name,undef);
772
                        set_state($soc_state,"change_parameter",0);
773
                        $window->destroy();
774
                }
775
 
776
#/*******************************************************************************************************************************/
777
 
778
        });
779
 
780
        $ok->signal_connect (clicked => sub{
781
 
782
                $window->destroy();
783
 
784
        });
785
 
786
 
787
 
788
 
789
 
790
        $window->show_all;
791
}
792
 
793 17 alirezamon
 
794
 
795
 
796
############
797
#  get_def_setting
798
##########
799
sub get_def_setting {
800
        my ($ipgen,$soc_state,$info)=@_;
801
        my $table = Gtk2::Table->new (15, 15, TRUE);
802
        my $table2 = Gtk2::Table->new (15, 15, TRUE);
803
        my $window=def_popwin_size(600,600,"Add definition file");
804
        my $ok=def_image_button("icons/select.png",' Ok ');
805
        my $scrwin=  new Gtk2::ScrolledWindow (undef, undef);
806
        $scrwin->set_policy( "automatic", "automatic" );
807
        $scrwin->add_with_viewport($table2);
808
 
809
        my $label=gen_label_help("You ","Selecet the Verilog file containig the definitions.");
810
        my $brows=def_image_button("icons/browse.png",' Browse');
811
        $table->attach_defaults($label,0,10,0,1);
812
        $table->attach_defaults($brows,10,12,1,2);
813
        $table->attach_defaults($scrwin,0,15,2,14);
814
        $table->attach_defaults($ok,6,9,14,15);
815
 
816
        $window->add($table);
817
        $window->show_all;
818
 
819
 
820
}
821
 
822
 
823 16 alirezamon
###########
824
#       get description
825
#########
826
 
827
sub get_Description{
828
        my ($ipgen,$soc_state,$info)=@_;
829 24 alirezamon
        my $description = $ipgen->ipgen_get("description");
830 16 alirezamon
        my $table = Gtk2::Table->new (15, 15, TRUE);
831
        my $window=def_popwin_size(500,500,"Add description");
832
        my ($scrwin,$text_view)=create_text();
833
        #my $buffer = $textbox->get_buffer();
834
        my $ok=def_image_button("icons/select.png",' Ok ');
835
 
836
        $table->attach_defaults($scrwin,0,15,0,14);
837
        $table->attach_defaults($ok,6,9,14,15);
838
        my $text_buffer = $text_view->get_buffer;
839
        if(defined $description) {$text_buffer->set_text($description)};
840
 
841
        $ok->signal_connect("clicked"=> sub {
842
                $window->destroy;
843
 
844
                 my $text = $text_buffer->get_text($text_buffer->get_bounds, TRUE);
845 24 alirezamon
                 $ipgen->ipgen_add("description",$text);
846 16 alirezamon
                #print "$text\n";
847
 
848
        });
849
 
850
        $window->add($table);
851
        $window->show_all();
852
 
853
}
854
 
855
 
856
 
857
 
858
 
859
 
860
##########
861 24 alirezamon
#       gen_file_list
862 16 alirezamon
#########
863
 
864
sub gen_file_list{
865 24 alirezamon
        my ($ipgen,$list_name,$window,$rename_file_en)=@_;
866 16 alirezamon
 
867
 
868
        my $table=def_table(10,10,TRUE);#       my ($row,$col,$homogeneous)=@_;
869
        my $scrolled_win = new Gtk2::ScrolledWindow (undef, undef);
870 24 alirezamon
        my $ok=def_image_button("icons/select.png",' Ok ');
871
 
872 16 alirezamon
        $scrolled_win->set_policy( "automatic", "automatic" );
873
        $scrolled_win->add_with_viewport($table);
874 24 alirezamon
        $table->attach_defaults (gen_label_in_center("File path"), 0, 5 , 0, 1);
875
        $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);
876 16 alirezamon
        my $col=0;
877 24 alirezamon
        my $row=1;
878
        my @files=  $ipgen->ipgen_get_list($list_name); #@{$ref};
879
        my $file_num= scalar @files;
880 16 alirezamon
        foreach my $p(@files){
881 24 alirezamon
                        my ($path,$rename)=split('frename_sep_t',$p);
882
                        my $entry=gen_entry($path);
883
                        my $entry2=gen_entry($rename) ;
884
                        my $remove=def_image_button("icons/cancel.png");
885
                        $table->attach_defaults ($entry, 0, 5 , $row, $row+1);
886
                        $table->attach_defaults ($entry2, 5, 9 , $row, $row+1) if(defined $rename_file_en);
887
                        $table->attach_defaults ($remove, 9,10 , $row, $row+1);
888
                        $row++;
889
                        $remove->signal_connect("clicked"=> sub {
890
                                my @saved_files=$ipgen->ipgen_get_list($list_name);
891
                                @saved_files=remove_scolar_from_array(\@saved_files,$p);
892
                                $ipgen->ipgen_add($list_name,\@saved_files);
893
                                $entry->destroy;
894
                                $entry2->destroy if(defined $rename_file_en);
895
                                $remove->destroy;
896 16 alirezamon
 
897 24 alirezamon
                        });
898
                        $ok->signal_connect("clicked"=> sub {
899
                                if(defined $entry){
900
                                        my $n= $entry->get_text();
901
                                           if(defined $rename_file_en){
902
                                                $n= $n.'frename_sep_t'.$entry2->get_text() ;
903
                                           }
904
                                        if($p ne $n){
905
                                                my @saved_files=$ipgen->ipgen_get_list($list_name);
906
                                                @saved_files=replace_in_array(\@saved_files,$p, $n);
907
                                                $ipgen->ipgen_add($list_name,\@saved_files);
908
                                        }
909
 
910 16 alirezamon
                                }
911
 
912
 
913
 
914 24 alirezamon
                        });
915 16 alirezamon
 
916 24 alirezamon
                        #my $seph = Gtk2::HSeparator->new;
917
                        #$table->attach_defaults ($seph, 0, 10 , $row, $row+1);
918
                        #$row++;                
919
 
920 16 alirezamon
        }
921
 
922
 
923
 
924 24 alirezamon
        $ok->signal_connect("clicked"=> sub {
925
                $window->destroy;
926
        });
927
 
928 16 alirezamon
#   while( $row<10){
929
        #       my $label=gen_label_in_left(' ');
930
           # $table->attach_defaults ($label, 0, 1 , $row, $row+1);$row++;
931
        #}
932
 
933 24 alirezamon
 
934
        return ($scrolled_win,$ok);
935 16 alirezamon
}
936
 
937
 
938
 
939
sub get_param_info{
940
        my ($ipgen,$saved_info)=@_;
941
        my $table = Gtk2::Table->new (15, 15, TRUE);
942
        my $window=def_popwin_size(500,500,"Add description");
943
        my ($scrwin,$text_view)=create_text();
944
        my $ok=def_image_button("icons/select.png",' Ok ');
945
 
946
        $table->attach_defaults($scrwin,0,15,0,14);
947
        $table->attach_defaults($ok,6,9,14,15);
948
        my $text_buffer = $text_view->get_buffer;
949
        if(defined $$saved_info) {$text_buffer->set_text($$saved_info)};
950
 
951
        $ok->signal_connect("clicked"=> sub {
952
                $window->destroy;
953
 
954
                 $$saved_info = $text_buffer->get_text($text_buffer->get_bounds, TRUE);
955
 
956
 
957
        });
958
 
959
        $window->add($table);
960
        $window->show_all();
961
 
962
 
963
}
964
 
965
 
966
 
967
sub interface_info_box {
968
        my($intfc,$ipgen,$soc_state,$info)=@_;
969
        my $table=def_table(7,7,TRUE);
970
        my @sokets=$ipgen->ipgen_list_sokets;
971
        my @plugs=$ipgen->ipgen_list_plugs;
972
 
973
        my @positions=(0,1,2,4,5,6,7);
974
 
975
 
976
        my $row=0;
977
        my $col=0;
978
        $table->attach_defaults (gen_label_in_center(" Interface name"), $positions[0], $positions[1], $row, $row+1);
979
        $table->attach_defaults (gen_label_in_center("Type"), $positions[1], $positions[2], $row, $row+1);
980
        $table->attach_defaults (gen_label_in_left("Interface Num"), $positions[2], $positions[3], $row, $row+1);
981
 
982
        $row++;
983
        my @type_list=('plug','socket');
984
 
985
        foreach my $p( @sokets){
986
                #my ($range,$type,$intfc_name,$intfc_port)=$ipgen->ipgen_get_port($p);
987
                my ($type,$value,$connection_num)= $ipgen->ipgen_get_socket($p);
988
                my $label_name=gen_label_in_center($p);
989
                my $combo_type=gen_combo(\@type_list,1);
990
                my $remove=     def_image_button('icons/cancel.png','Remove');
991
                my $name_setting=def_image_button('icons/setting.png');
992
                $remove->signal_connect ('clicked'=> sub{
993
                        $ipgen->ipgen_remove_socket($p);
994
                        set_state($soc_state,'intfc_changed',0);
995
 
996
                        }  );
997
                $name_setting->signal_connect ('clicked'=> sub{
998
                        get_intfc_setting($ipgen,$soc_state,$p,'socket');
999
 
1000
 
1001
                });
1002
                $combo_type     ->signal_connect ('changed'=> sub{
1003
                        $ipgen->ipgen_remove_socket($p);
1004
                        add_intfc_to_ip($intfc,$ipgen,$p,'plug',$info,$soc_state);
1005
 
1006
                        }  );
1007
                $table->attach_defaults ($remove, $positions[4], $positions[5], $row, $row+1);
1008
                if ($type eq 'num'){
1009
                        my ($type_box,$type_spin)=gen_spin_help ('Define the number of this interface in module', 1,1024,1);
1010
                        $type_box->pack_start($name_setting,FALSE,FALSE,0);
1011
                        $type_spin->set_value($value);
1012
                        my $advance_button=def_image_button('icons/advance.png','separate');
1013
                        $table->attach_defaults ($type_box, $positions[2], $positions[3], $row, $row+1);
1014
                        $table->attach_defaults ($advance_button, $positions[3], $positions[4], $row, $row+1);
1015 24 alirezamon
                        $type_spin->signal_connect("value_changed"=>sub{
1016 16 alirezamon
                                my $wiget=shift;
1017
                                my $num=$wiget->get_value_as_int();
1018
                                $ipgen->ipgen_add_soket($p,'num',$num);
1019
                                set_state($soc_state,'intfc_changed',0);
1020
 
1021
                        });
1022
                        $advance_button->signal_connect("clicked"=>sub{
1023
                                $ipgen->ipgen_add_soket($p,'param');
1024
                                set_state($soc_state,'intfc_changed',0);
1025
 
1026
                        });
1027
 
1028
                }
1029
                else {
1030
                        my @parameters=$ipgen->ipgen_get_all_parameters_list();
1031
                        my $pos= get_scolar_pos( $value,@parameters);
1032
                        if(!defined $pos){
1033
                                $pos=0;
1034
                                $ipgen->ipgen_add_soket($p,'param',$parameters[0]);
1035
                        }
1036
                        my ($type_box,$type_combo)=gen_combo_help ('Define the parameter which determine the number of this interface in module',\@parameters,$pos);
1037
                        $type_box->pack_start($name_setting,FALSE,FALSE,0);
1038
                        my $advance_button=def_image_button('icons/advance.png','concatenate');
1039
                        $table->attach_defaults ($type_box, $positions[2], $positions[3], $row, $row+1);
1040
                        $table->attach_defaults ($advance_button, $positions[3], $positions[4], $row, $row+1);
1041
                        $type_combo->signal_connect("changed"=>sub{
1042
                                my $wiget=shift;
1043
                                my $value=$wiget->get_active_text();
1044
                                $ipgen->ipgen_add_soket($p,'param',$value);
1045
                                set_state($soc_state,'intfc_changed',0);
1046
 
1047
                        });
1048
                        $advance_button->signal_connect("clicked"=>sub{
1049
                                $ipgen->ipgen_add_soket($p,'num',0);
1050
                                set_state($soc_state,'intfc_changed',0);
1051
 
1052
                        });
1053
 
1054
                }
1055
 
1056
 
1057
 
1058
 
1059
 
1060
 
1061
                $table->attach_defaults ($label_name, $positions[0], $positions[1], $row, $row+1);
1062
                $table->attach_defaults ($combo_type, $positions[1], $positions[2], $row, $row+1);
1063
 
1064
 
1065
 
1066
 
1067
                $row++;
1068
        }
1069
        foreach my $q( @plugs){
1070
                #my ($range,$type,$intfc_name,$intfc_port)=$ipgen->ipgen_get_port($p);
1071
                my ($type,$value)= $ipgen->ipgen_get_plug($q);
1072
                my $label_name=gen_label_in_center($q);
1073
                my $combo_type=gen_combo(\@type_list,0);
1074
                my $remove=     def_image_button('icons/cancel.png','Remove');
1075
                my $name_setting=def_image_button('icons/setting.png');
1076
 
1077
                $table->attach_defaults ($remove, $positions[4], $positions[5], $row, $row+1);
1078
                $remove->signal_connect ('clicked'=> sub{
1079
                        $ipgen->ipgen_remove_plug($q);
1080
                        set_state($soc_state,'intfc_changed',0);
1081
 
1082
                        }  );
1083
                $name_setting->signal_connect ('clicked'=> sub{
1084
                        get_intfc_setting($ipgen,$soc_state,$q,'plug');
1085
 
1086
 
1087
                }       );
1088
                $combo_type     ->signal_connect ('changed'=> sub{
1089
                        $ipgen->ipgen_remove_plug($q);
1090
                        add_intfc_to_ip($intfc,$ipgen,$q,'socket',$info,$soc_state);
1091
 
1092
                        }  );
1093
                #my $range_entry=gen_entry($range);
1094
                if ($type eq 'num'){
1095
                        my ($type_box,$type_spin)=gen_spin_help ('Define the number of this interface in module', 1,1024,1);
1096
                        $type_box->pack_start($name_setting,FALSE,FALSE,0);
1097
                        $type_spin->set_value($value);
1098
                        $table->attach_defaults ($type_box, $positions[2], $positions[3], $row, $row+1);
1099 24 alirezamon
                        $type_spin->signal_connect("value_changed"=>sub{
1100 16 alirezamon
                                my $wiget=shift;
1101
                                my $num=$wiget->get_value_as_int();
1102
                                $ipgen->ipgen_add_plug($q,'num',$num);
1103
                                set_state($soc_state,'intfc_changed',0);
1104
 
1105
                        });
1106
 
1107
                }
1108
                $table->attach_defaults ($label_name, $positions[0], $positions[1], $row, $row+1);
1109
                $table->attach_defaults ($combo_type, $positions[1], $positions[2], $row, $row+1);
1110
                #$table->attach_defaults ($range_entry, 2, 4, $row, $row+1);
1111
 
1112
                #wishbone address seting
1113
                #print "$q eq 'wb_slave'\n";
1114
                if($q eq 'wb_slave'){
1115
                        my ($saved_addr,$saved_width)=$ipgen->ipgen_get_wb_addr($q,0);
1116
                        my $addr;
1117
                        if(!defined $saved_addr){
1118
                                 $addr= def_image_button('icons/warnning.png');
1119
                                 $addr->signal_connect ('clicked'=> sub{
1120
                                     message_dialog("Wishbone slave address range has not been set yet! ");
1121
 
1122
                                }  );
1123
                        }else{
1124
                                 $addr= def_image_button('icons/select.png');
1125
 
1126
                        }
1127
                        $table->attach_defaults ($addr, $positions[5], $positions[6], $row, $row+1);
1128
 
1129
 
1130
                }
1131
 
1132
 
1133
                $row++;
1134
        }
1135
 
1136
 
1137
 
1138
 
1139
 
1140
        return $table;
1141
 
1142
}
1143 24 alirezamon
########
1144
#       get_intfc_setting
1145
########
1146 16 alirezamon
 
1147
sub get_intfc_setting{
1148
 
1149
        my ($ipgen,$soc_state,$intfc_name, $intfc_type)=@_;
1150
 
1151
 
1152
        my $window =  def_popwin_size(1000,500);
1153
        my $table=def_table(7,6,FALSE);
1154
        my $ok = def_image_button('icons/select.png','OK');
1155
        my $okbox=def_hbox(TRUE,0);
1156
        $okbox->pack_start($ok, FALSE, FALSE,0);
1157
 
1158
 
1159
        my $scrolled_win = new Gtk2::ScrolledWindow (undef, undef);
1160
        $scrolled_win->set_policy( "automatic", "automatic" );
1161
        $scrolled_win->add_with_viewport($table);
1162
 
1163
        #title
1164
        my $lable1=gen_label_in_left("interface name");
1165
        $table->attach_defaults( $lable1,0,2,0,1);
1166
 
1167
 
1168
 
1169
 
1170
        my ($type,$value);
1171
        if($intfc_type eq 'plug'){
1172
                 ($type,$value)= $ipgen->ipgen_get_plug($intfc_name);
1173
        }else {
1174
                 ($type,$value)= $ipgen->ipgen_get_socket($intfc_name);
1175
 
1176
        }
1177
        if ($type ne 'num'){ $value=1;}
1178
        my $i=0;
1179
        for ( $i=0; $i < $value; $i++) {
1180
                #intfc name
1181
                my $saved_name;
1182
                my $number=$i;
1183
                if($intfc_type eq 'plug')       {$saved_name= $ipgen->ipgen_get_plug_name($intfc_name,$number);}
1184
                else                                            {$saved_name= $ipgen->ipgen_get_socket_name($intfc_name,$number);}
1185
                my  $entry_name=gen_entry($saved_name);
1186
 
1187
                $table->attach_defaults($entry_name,0,2,$i+1,$i+2);
1188
                $ok->signal_connect('clicked'=>sub{
1189
                                my $new_name=$entry_name->get_text();
1190
                                #print "my new name is: $new_name\n";
1191
                                if($intfc_type eq 'plug'){ $ipgen->ipgen_set_plug_name($intfc_name,$number,$new_name); }
1192
                                else {                                     $ipgen->ipgen_set_socket_name($intfc_name,$number,$new_name);}
1193
 
1194
                        });
1195
 
1196
 
1197
        }
1198
 
1199
 
1200
        #wishbone addr
1201
        if($intfc_name eq 'wb_slave' &&  $intfc_type eq 'plug'){
1202
                my $lable2=gen_label_in_center("address range: (start end name)");
1203
                my $lable3=gen_label_in_center("block address width");
1204
 
1205
                $table->attach_defaults( $lable2,2,5,0,1);
1206
                $table->attach_defaults( $lable3,5,6,0,1);
1207
 
1208
                my $plug=$intfc_name;
1209
                my $wb= wb_addr->wb_addr_new();
1210
                my @ip_names=$wb->wb_list_names();
1211
                my @list;
1212
                foreach my $p(@ip_names){
1213
                        my($start,$end,$cashed,$size)=$wb->wb_get_addr_info($p);
1214
                        push (@list,"$start\t$end\t\t$p");
1215
 
1216
                }
1217
 
1218
                my ($type,$value,$connection_num)=$ipgen->ipgen_get_plug($plug);
1219
                   $i=0;
1220
 
1221
                for ( $i=0; $i < $value; $i++) {
1222
                        my ($saved_addr,$saved_width)=$ipgen->ipgen_get_wb_addr($plug,$i);
1223
                        my $num=$i;
1224
                        my $pos;
1225
                        if(!defined $saved_addr){
1226
                                $pos=0;
1227
                                $saved_width=1;
1228
                                $ipgen->ipgen_save_wb_addr($plug,$num,$list[0],1);
1229
                        }
1230
                        else{
1231
                                $pos= get_scolar_pos($saved_addr,@list);
1232
                        }
1233
 
1234
                        my $name_combo=gen_combo(\@list,$pos);
1235
                        my $sbox=def_hbox(FALSE,0);
1236 17 alirezamon
                        my $widget;
1237 24 alirezamon
                        my $size_lab;
1238 16 alirezamon
                        my @l=("Fixed","Parameterizable");
1239 17 alirezamon
 
1240
                        if(!defined $saved_width){
1241
                                $pos=0;
1242
                                $saved_width=1;
1243
 
1244
                        }
1245
                        else{
1246
                                if(is_integer($saved_width)){
1247
                                         $pos= 0;
1248
                                         $widget=gen_spin(1,31,1);
1249
                                         $widget->set_value($saved_width);
1250 24 alirezamon
                                         my $d=2**$saved_width;
1251
                                         $size_lab=gen_label_in_left(metric_conversion($d). " Bytes");
1252 17 alirezamon
                                } else{
1253
                                        $pos= 1;
1254
                                        my @parameters=$ipgen->ipgen_get_all_parameters_list();
1255
                                        my $p=get_scolar_pos($saved_width,@parameters);
1256
 
1257
                                        $widget=gen_combo(\@parameters, $p);
1258 24 alirezamon
                                        $size_lab=gen_label_in_left(" ");
1259 17 alirezamon
 
1260
                                }
1261
 
1262
 
1263
                        }
1264
 
1265
 
1266
 
1267 16 alirezamon
                        my $comb=gen_combo(\@l, $pos);
1268 17 alirezamon
                        #$widget->set_value($saved_width);
1269 16 alirezamon
                        $sbox->pack_start($comb,FALSE,FALSE,3);
1270
                        $sbox->pack_end($widget,FALSE,FALSE,3);
1271 24 alirezamon
                        $sbox->pack_end($size_lab,FALSE,FALSE,3);
1272 16 alirezamon
                        $comb->signal_connect('changed'=>sub{
1273
                                my $condition=$comb->get_active_text();
1274
                                $widget->destroy;
1275 24 alirezamon
                                $size_lab->destroy;
1276 16 alirezamon
                                my @parameters=$ipgen->ipgen_get_all_parameters_list();
1277
                                $widget=($condition eq "Fixed" )? gen_spin(1,31,1):gen_combo(\@parameters, 0);
1278 24 alirezamon
                                $size_lab=($condition eq "Fixed" )? gen_label_in_left("2 Bytes"):  gen_label_in_left(" ");
1279 16 alirezamon
                                $sbox->pack_end($widget,FALSE,FALSE,3);
1280 24 alirezamon
                                $sbox->pack_end($size_lab,FALSE,FALSE,3);
1281 16 alirezamon
                                $sbox->show_all();
1282 24 alirezamon
                                $widget->signal_connect('changed'=>sub{
1283
                                        $size_lab->destroy;
1284
                                        my $in=$comb->get_active_text();
1285
                                        my $width=($in eq "Fixed" )? $widget->get_value_as_int(): $widget->get_active_text() ;
1286
                                        my $d=($in eq "Fixed" )? 2**$width:0;
1287
 
1288
                                        $size_lab=($in eq "Fixed" )? gen_label_in_left( metric_conversion($d). " Bytes"):gen_label_in_left(" ");
1289
                                        $sbox->pack_end($size_lab,FALSE,FALSE,3);
1290
                                        $sbox->show_all();
1291
                                });
1292 16 alirezamon
                        });
1293 24 alirezamon
                        $widget->signal_connect('changed'=>sub{
1294
                                $size_lab->destroy;
1295
                                my $in=$comb->get_active_text();
1296
                                my $width=($in eq "Fixed" )? $widget->get_value_as_int(): $widget->get_active_text() ;
1297
                                my $d=($in eq "Fixed" )? 2**$width:0;
1298
 
1299
                                $size_lab=($in eq "Fixed" )? gen_label_in_left(metric_conversion($d). " Bytes"):gen_label_in_left(" ");
1300
                                $sbox->pack_end($size_lab,FALSE,FALSE,3);
1301
                                $sbox->show_all();
1302
                        });
1303 16 alirezamon
 
1304
                        $table->attach_defaults($name_combo,2,5,$i+1,$i+2);
1305
                        $table->attach_defaults($sbox,5,6,$i+1,$i+2);
1306
                        $ok->signal_connect('clicked'=>sub{
1307
                                my $addr=$name_combo->get_active_text();
1308
                                my $in=$comb->get_active_text();
1309
                                my $width=($in eq "Fixed" )? $widget->get_value_as_int(): $widget->get_active_text() ;
1310
                                $ipgen->ipgen_save_wb_addr($plug,$num,$addr,$width);
1311
 
1312
                        });
1313
 
1314
 
1315
                }
1316
 
1317
 
1318
 
1319
        }
1320
 
1321
        while($i<7){
1322
                $i++;
1323
                my $tmp=gen_label_in_left('  ');
1324
                $table->attach_defaults($tmp,5,6,$i,$i+1);
1325
 
1326
        }
1327
 
1328
         $i=($i<7)? 7:$i;
1329
 
1330
 
1331
        my $mtable = def_table(10, 1, TRUE);
1332
        $mtable->attach_defaults($scrolled_win,0,1,0,9);
1333
        $mtable->attach_defaults($okbox,0,1,9,10);
1334
 
1335
        $window->add ($mtable);
1336
        $window->show_all();
1337
 
1338
 
1339
 
1340
 
1341
         $ok->signal_connect('clicked'=>sub{
1342
                        $window->destroy;
1343
                        set_state($soc_state,"interface_selected",1);
1344
 
1345
                 } );
1346
 
1347
 
1348
 
1349
 
1350
}
1351
 
1352
 
1353
 
1354 17 alirezamon
sub is_integer {
1355
   defined $_[0] && $_[0] =~ /^[+-]?\d+$/;
1356
}
1357 16 alirezamon
 
1358
 
1359
#############
1360
#  add_intfc_to_ip
1361
##############
1362
 
1363
 
1364
sub add_intfc_to_ip{
1365
        my ($intfc,$ipgen,$infc_name,$infc_type,$info,$soc_state)=@_;
1366
        if($infc_type eq 'socket'){
1367
                my ($connection_num,$connect_to)=$intfc->get_socket($infc_name);
1368
                $ipgen->ipgen_add_soket($infc_name,'num',1,$connection_num);
1369
        }
1370
        else { $ipgen->ipgen_add_plug($infc_name,'num',1);}
1371
        set_state($soc_state,"interface_selected",1);
1372
 
1373
}
1374
 
1375
 
1376
#################
1377
#       get_list_of_all_interfaces
1378
################
1379
 
1380
sub get_list_of_all_interfaces{
1381
        my ($ipgen)=@_;
1382
        my @sockets     =$ipgen->ipgen_list_sokets();
1383
        my @plugs       =$ipgen->ipgen_list_plugs();
1384
        my @interfaces=('IO');
1385
        my @interfaces_name=('IO');
1386
        foreach my $p( @sockets){
1387
                my ($type,$value)=  $ipgen->ipgen_get_socket($p);
1388
                if($type eq 'num'){
1389
                                for(my $i=0; $i<$value; $i++){
1390
                                        push(@interfaces,"socket:$p\[$i\]");
1391
                                        my $socket_name=$ipgen->ipgen_get_socket_name($p,$i);
1392
                                        push(@interfaces_name,"socket:$socket_name");
1393
                                }#for   
1394
 
1395
                }#if
1396
                else {
1397
                        push(@interfaces,"socket:$p\[array\]");
1398
                        my $socket_name=$ipgen->ipgen_get_socket_name($p,0);
1399
                        push(@interfaces_name,"socket:$socket_name");
1400
 
1401
 
1402
                }#else          
1403
 
1404
        }#foreach       
1405
        foreach my $p( @plugs){
1406
                my ($type,$value)=  $ipgen->ipgen_get_plug($p);
1407
                if($type eq 'num'){
1408
                                for(my $i=0; $i<$value; $i++){
1409
                                        push(@interfaces,"plug:$p\[$i\]");
1410
                                        my $plug_name=$ipgen->ipgen_get_plug_name($p,$i);
1411
                                        push(@interfaces_name,"plug:$plug_name");
1412
 
1413
                                }#for   
1414
 
1415
                }#if
1416
                else {
1417
                        my $plug_name=$ipgen->ipgen_get_plug_name($p,0);
1418
                        push(@interfaces,"plug:$p\[array\]");
1419
                        push(@interfaces_name,"plug:$plug_name");
1420
 
1421
 
1422
                }#else          
1423
 
1424
        }#foreach       
1425
        return (\@interfaces_name,\@interfaces);
1426
 
1427
}
1428
 
1429
sub gen_intfc_port_combo{
1430
        my ($intfc,$ipgen,$intfc_name,$porttype,$portname)=@_;
1431
 
1432
        my($type,$name,$num)= split("[:\[ \\]]", $intfc_name);
1433
        my @all_ports;
1434
        my @ports;
1435
 
1436
        if($type eq 'socket'){
1437
                @all_ports= $intfc->get_socket_port_list($name);
1438
                foreach my $p(@all_ports){
1439
                        my ($r,$t,$c)=$intfc->get_port_info_of_socket($name,$p);
1440
                        if ($t eq $porttype){ push (@ports,$p);}
1441
                }
1442
 
1443
        }elsif($type eq 'plug'){
1444
                @all_ports= $intfc->get_plug_port_list($name);
1445
 
1446
                foreach my $p(@all_ports){
1447
                        my ($r,$t,$c)=$intfc->get_port_info_of_plug($name,$p);
1448
                        #print "($t eq $porttype)\n";
1449
                        if ($t eq $porttype){ push (@ports,$p);}
1450
                }
1451
 
1452
        }
1453
        else  {
1454
                @ports=('IO');
1455
        }
1456
        my $saved_intfc_port=$ipgen->ipgen_get_port_intfc_port($portname);
1457
        my $pos=(defined $saved_intfc_port ) ? get_scolar_pos( $saved_intfc_port,@ports) : undef;
1458
        if (!defined $pos){
1459
                $pos=find_the_most_similar_position( $portname       ,@ports);
1460
                $ipgen->ipgen_set_port_intfc_port($portname,$ports[$pos]);
1461
                #print "$ports[$pos]\n;"
1462
        }
1463
        my $intfc_port_combo=gen_combo(\@ports,$pos);
1464
        $intfc_port_combo->signal_connect('changed'=> sub {
1465
                my $intfc_port=$intfc_port_combo->get_active_text();
1466
                $ipgen->ipgen_set_port_intfc_port($portname,$intfc_port);
1467
 
1468
        });
1469
 
1470
 
1471
        return  $intfc_port_combo;
1472
}
1473
 
1474
 
1475
 
1476
sub port_info_box {
1477
        my($intfc,$ipgen,$soc_state,$info)=@_;
1478
        my $table=def_table(8,10,TRUE);
1479
        my @ports=$ipgen->ipgen_list_ports;
1480
        my $row=0;
1481
        my ($name_ref,$ref)=get_list_of_all_interfaces($ipgen);
1482
        my @interfaces_name=@{$name_ref};
1483
        my @interfaces=@{$ref};
1484
        #print "@interfaces_name\n";
1485
 
1486
        $table->attach_defaults (gen_label_in_left(" Type "), 0, 1, $row, $row+1);
1487
        $table->attach_defaults (gen_label_in_left(" Port name "), 1, 3, $row, $row+1);
1488
        $table->attach_defaults (gen_label_in_left(" Interface name "), 3, 5, $row, $row+1);
1489
        $table->attach_defaults (gen_label_in_center(" Range "), 5, 7, $row, $row+1);
1490
        $table->attach_defaults (gen_label_in_left(" Interface port "), 7, 9, $row, $row+1);
1491
        $row++;
1492
        #print  @interfaces;
1493
        my @ports_order=$ipgen->ipgen_get_ports_order();
1494
        if(scalar(@ports_order) >1 ){ @ports= @ports_order}
1495
 
1496
 
1497
 
1498
 
1499
        foreach my $p( @ports){
1500
                my ($range,$type,$intfc_name,$intfc_port)=$ipgen->ipgen_get_port($p);
1501
                #my $label_name=gen_label_in_left(" $p ");
1502
                my $name_entry=gen_entry($p);
1503
                my $label_type=gen_label_in_left(" $type ");
1504
                my $range_entry=gen_entry($range);
1505
                my $pos=(defined $intfc_name ) ? get_scolar_pos( $intfc_name,@interfaces) : 0;
1506
                if (!defined $pos){
1507
                        $pos=0;
1508
                        $ipgen->ipgen_set_port_intfc_name($p,'IO');
1509
                };
1510
                my $intfc_name_combo=gen_combo(\@interfaces_name,$pos);
1511
                my $intfc_port_combo=gen_intfc_port_combo($intfc,$ipgen,$intfc_name,$type,$p);
1512
 
1513
 
1514
                $table->attach_defaults ($label_type, 0, 1, $row, $row+1);
1515
                $table->attach_defaults ($name_entry, 1, 3, $row, $row+1);
1516
                $table->attach_defaults ($intfc_name_combo,3, 5, $row, $row+1);
1517
                $table->attach_defaults ($range_entry, 5, 7, $row, $row+1);
1518
                $table->attach_defaults ($intfc_port_combo,7, 9, $row, $row+1);
1519
                $intfc_name_combo->signal_connect('changed'=>sub{
1520
                        my $intfc_name=$intfc_name_combo->get_active_text();
1521
                        my $pos=  get_scolar_pos( $intfc_name,@interfaces_name);
1522
                        #my($type,$name,$num)= split("[:\[ \\]]", $intfc_name);
1523
                        #print "$type,$name,$num\n";
1524
                        $ipgen->ipgen_set_port_intfc_name($p,$interfaces[$pos]);
1525
                        set_state($soc_state,"interface_selected",1);
1526
                });
1527
                $range_entry->signal_connect('changed'=>sub{
1528
                        my $new_range=$range_entry->get_text();
1529
                        $ipgen->ipgen_add_port($p,$new_range,$type,$intfc_name,$intfc_port);
1530
                });
1531
 
1532
                $row++;
1533
        }
1534
 
1535
 
1536
 
1537
 
1538
        return $table;
1539
 
1540
 
1541
}
1542
 
1543
 
1544
 
1545
 
1546
 
1547
 
1548
sub generate_ip{
1549
        my $ipgen=shift;
1550 24 alirezamon
        my $name=$ipgen->ipgen_get("module_name");
1551
        my $category=$ipgen->ipgen_get("category");
1552
        my $ip_name= $ipgen->ipgen_get("ip_name");
1553 16 alirezamon
        #check if name has been set
1554
        if(defined ($name) && defined ($category)){
1555
                if (!defined $ip_name) {$ip_name= $name}
1556
                #check if any source file has been added for this ip
1557 24 alirezamon
                my @l=$ipgen->ipgen_get_list("hdl_files");
1558 16 alirezamon
                if( scalar @l ==0){
1559
                        my $mwindow;
1560
                        my $dialog = Gtk2::MessageDialog->new ($mwindow,
1561
                                      'destroy-with-parent',
1562
                                      'question', # message type
1563
                                      'yes-no', # which set of buttons?
1564
                                      "No hdl library file has been set for this IP. Do you want to generate this IP?");
1565
                        my $response = $dialog->run;
1566
                        if ($response eq 'yes') {
1567
                        # Write
1568
                                open(FILE,  ">lib/ip/$ip_name.IP") || die "Can not open: $!";
1569
                                print FILE Data::Dumper->Dump([\%$ipgen],[$name]);
1570
                                close(FILE) || die "Error closing file: $!";
1571
                                my $message="IP $ip_name has been generated successfully" ;
1572
                                message_dialog($message);
1573 17 alirezamon
                                exec($^X, $0, @ARGV);# reset ProNoC to apply changes
1574 16 alirezamon
                        }
1575
                        $dialog->destroy;
1576
 
1577
 
1578
                        #$dialog->show_all;
1579
 
1580
                }else{
1581
                        # Write
1582
                        open(FILE,  ">lib/ip/$ip_name.IP") || die "Can not open: $!";
1583
                        print FILE Data::Dumper->Dump([\%$ipgen],[$name]);
1584
                        close(FILE) || die "Error closing file: $!";
1585
                        my $message="IP $ip_name has been generated successfully" ;
1586
                        message_dialog($message);
1587 17 alirezamon
                        exec($^X, $0, @ARGV);# reset ProNoC to apply changes
1588 16 alirezamon
                }
1589
        }else{
1590
                my $message;
1591
                if(!defined ($name)){ $message="Input file has not been selected yet.\nNothing has been generated!" ;}
1592
                elsif(!defined ($category)){ $message="Category must be defined!" ;}
1593
                message_dialog($message);
1594
 
1595
        }
1596
#$hashref = retrieve('file');
1597
 
1598
 
1599
 
1600
return 1;
1601
}
1602
 
1603
 
1604
 
1605
 
1606
#########
1607 17 alirezamon
#       load_ip
1608 16 alirezamon
########
1609
 
1610
sub load_ip{
1611
        my ($ipgen,$soc_state)=@_;
1612
        my $file;
1613
        my $dialog = Gtk2::FileChooserDialog->new(
1614
                'Select a File', undef,
1615
                'open',
1616
                'gtk-cancel' => 'cancel',
1617
                'gtk-ok'     => 'ok',
1618
                );
1619
 
1620
        my $filter = Gtk2::FileFilter->new();
1621
        $filter->set_name("IP");
1622
        $filter->add_pattern("*.IP");
1623
        $dialog->add_filter ($filter);
1624
        my $dir = Cwd::getcwd();
1625
        $dialog->set_current_folder ("$dir/lib/ip")     ;
1626
 
1627
 
1628
        if ( "ok" eq $dialog->run ) {
1629
                $file = $dialog->get_filename;
1630
                my ($name,$path,$suffix) = fileparse("$file",qr"\..[^.]*$");
1631
                if($suffix eq '.IP'){
1632 24 alirezamon
                        $ipgen->ipgen_add("file_name",$file);
1633 16 alirezamon
                        set_state($soc_state,"load_file",0);
1634
                }
1635
     }
1636
     $dialog->destroy;
1637
 
1638
 
1639
 
1640
}
1641
 
1642
 
1643
 
1644 24 alirezamon
 
1645
 
1646
 
1647
############
1648
#       get_source_file
1649 17 alirezamon
###########
1650 16 alirezamon
 
1651 24 alirezamon
 
1652
 
1653
sub get_source_file{
1654
        my($ipgen,$soc_state,$info,$page,$title,$dest,$page_info_ref)=@_;
1655
 
1656
 
1657
        my $var_list='${parameter_name}: Verilog module parameter values.
1658
 
1659
${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}... .
1660
 
1661
${IP}: is the peripheral device instance name.
1662
 
1663
${CORE}: is the peripheral device module name.';
1664
        my $var_help=gen_button_message($var_list,"icons/info.png","Global variables");
1665 17 alirezamon
 
1666 24 alirezamon
        my($width,$hight)=max_win_size();
1667
        my $window = def_popwin_size($width*2/3,$hight*2/3,$title);
1668 17 alirezamon
 
1669 24 alirezamon
        my $notebook=source_notebook($ipgen,$soc_state,$info,$window,$page,$dest,$page_info_ref);
1670
        my $table=def_table (15, 15, TRUE);
1671 17 alirezamon
 
1672 24 alirezamon
 
1673
        $table->attach_defaults ($var_help, 5, 7, 0, 1);
1674
        $table->attach_defaults ($notebook , 0, 15, 1, 15);
1675
 
1676
        $window->add($table);
1677
        $window->show_all;
1678
        return $window;
1679 17 alirezamon
 
1680 24 alirezamon
}
1681
 
1682
##########
1683
# source_notebook
1684
##########
1685
 
1686
sub source_notebook{
1687
        my($ipgen,$soc_state,$info,$window,$page,$dest,$page_info_ref)=@_;
1688
        my $notebook = Gtk2::Notebook->new;
1689
        my %page_info=%{$page_info_ref};
1690
        foreach my $p (sort keys %page_info){
1691
                my $page_ref;
1692
                $page_ref=get_file_folder($ipgen,$soc_state,$info,$window,$p,$page_info_ref) if($page_info{$p}{filed_type} eq "exsiting_file/folder");
1693
                $page_ref=get_file_folder($ipgen,$soc_state,$info,$window,$p,$page_info_ref) if($page_info{$p}{filed_type} eq "file_generators");
1694
                $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");
1695
                $notebook->append_page ($page_ref,Gtk2::Label->new_with_mnemonic ($page_info{$p}{page_name}));
1696
 
1697
        }
1698
        $notebook->show_all;
1699
        $notebook->set_current_page($page) if(defined $page);
1700
        return $notebook;
1701
 
1702
}
1703
 
1704
##########
1705
#  get_file_folder
1706
#########
1707
 
1708
sub get_file_folder{
1709
        my ($ipgen,$soc_state,$info,$window,$page,$page_info_ref)=@_;
1710
        my %page_info=%{$page_info_ref};
1711
        my @sw_dir = $ipgen->ipgen_get_list($page_info{$page}{filed_name});
1712
        my $table = Gtk2::Table->new (15, 15, TRUE);
1713
        my $help=gen_label_help($page_info{$page}{help});
1714
        $table->attach_defaults($help,0,2,0,1);
1715
        my ($scrwin,$ok)=gen_file_list($ipgen,$page_info{$page}{filed_name},$window,$page_info{$page}{rename_file});
1716 17 alirezamon
 
1717
        my $label=gen_label_in_left("Selecet file(s):");
1718
        my $brows=def_image_button("icons/browse.png",' Browse');
1719 24 alirezamon
        $table->attach_defaults($label,2,4,0,1);
1720
        $table->attach_defaults($brows,4,6,0,1);
1721 17 alirezamon
 
1722
        my $dir = Cwd::getcwd();
1723
        my $project_dir   = abs_path("$dir/../../"); #mpsoc directory address
1724
 
1725
 
1726
        $brows->signal_connect("clicked"=> sub {
1727
                my @files;
1728
        my $dialog = Gtk2::FileChooserDialog->new(
1729
                'Select a File',
1730
                 undef,
1731
                 'open',
1732
                'gtk-cancel' => 'cancel',
1733
                'gtk-ok'     => 'ok',
1734
                );
1735
 
1736
                my $filter = Gtk2::FileFilter->new();
1737
                        my $dir = Cwd::getcwd();
1738
                        $dialog->set_current_folder ("$dir/..") ;
1739
                        $dialog->set_select_multiple(TRUE);
1740 16 alirezamon
 
1741 17 alirezamon
                if ( "ok" eq $dialog->run ) {
1742 24 alirezamon
                        @files = $dialog->get_filenames;
1743
                        @sw_dir=$ipgen->ipgen_get_list($page_info{$page}{filed_name});
1744 17 alirezamon
                        foreach my $p (@files){
1745
                                #remove $project_dir form beginig of each file
1746 24 alirezamon
                                $p =~ s/$project_dir//;
1747
                                my ($name,$path,$suffix) = fileparse("$p",qr"\..[^.]*$");
1748
                                $p=$p.'frename_sep_t'.$name.$suffix if (defined $page_info{$page}{rename_file});
1749 17 alirezamon
                                if(! grep (/^$p$/,@sw_dir)){push(@sw_dir,$p)};
1750
 
1751 24 alirezamon
                        }
1752
                        $ipgen->ipgen_add($page_info{$page}{filed_name},\@sw_dir);
1753
                        get_source_file($ipgen,$soc_state,$info,$page,"Add software file(s)","SW",$page_info_ref);
1754 17 alirezamon
                        $window->destroy;
1755
 
1756
                 }
1757
                $dialog->destroy;
1758
        } );# # ,\$entry);
1759
 
1760 24 alirezamon
        if($page_info{$page}{folder_en} eq 1){
1761
                my $label2=gen_label_in_left("Selecet folder(s):");
1762
                my $brows2=def_image_button("icons/browse.png",' Browse');
1763
                $table->attach_defaults($label2,7,9,0,1);
1764
                $table->attach_defaults($brows2,9,11,0,1);
1765
 
1766
                $brows2->signal_connect("clicked"=> sub {
1767
                        my @files;
1768 17 alirezamon
 
1769 24 alirezamon
                         my $dialog = Gtk2::FileChooserDialog->new(
1770
                        'Select Folder(s)',
1771
                        undef,
1772
                                        'select-folder',
1773
                        'gtk-cancel' => 'cancel',
1774
                        'gtk-ok'     => 'ok',
1775
                        );
1776
 
1777
                        my $filter = Gtk2::FileFilter->new();
1778
                                my $dir = Cwd::getcwd();
1779
                                $dialog->set_current_folder ("$dir/..") ;
1780
                                $dialog->set_select_multiple(TRUE);
1781 17 alirezamon
 
1782 24 alirezamon
                        if ( "ok" eq $dialog->run ) {
1783
                                @files = $dialog->get_filenames;
1784
 
1785
                                @sw_dir=$ipgen->ipgen_get_list($page_info{$page}{filed_name});
1786
                                foreach my $p (@files){
1787
                                        #remove $project_dir form beginig of each file
1788
                                        $p =~ s/$project_dir//;
1789
                                        if(! grep (/^$p$/,@sw_dir)){push(@sw_dir,$p)};
1790
 
1791
                                }
1792
 
1793
                                $ipgen->ipgen_add($page_info{$page}{filed_name},\@sw_dir);
1794
                                get_source_file($ipgen,$soc_state,$info,$page,"Add software file(s)","SW",$page_info_ref);
1795
                                $window->destroy;
1796
 
1797
 
1798
                                                #$$entry_ref->set_text($file);
1799 17 alirezamon
 
1800 24 alirezamon
                                #print "file = $file\n";
1801
                         }
1802
                        $dialog->destroy;
1803
 
1804 17 alirezamon
 
1805
 
1806 24 alirezamon
                } );# # ,\$entry);
1807
        }
1808 17 alirezamon
 
1809
 
1810
 
1811 24 alirezamon
        $table->attach_defaults($scrwin,0,15,1,14);
1812
        $table->attach_defaults($ok,6,9,14,15);
1813 17 alirezamon
 
1814 24 alirezamon
        return ($table)
1815
 
1816 17 alirezamon
 
1817
}
1818
 
1819
 
1820
 
1821 24 alirezamon
###########
1822
#       get_file_content
1823
#########
1824 17 alirezamon
 
1825 24 alirezamon
sub get_file_content{
1826
        my ($ipgen,$soc_state,$info,$window,$page_info_ref)=@_;
1827
        my %page_info=%{$page_info_ref};
1828
        #my $hdr = $ipgen->ipgen_get_hdr();
1829
        my  $hdr = $ipgen-> ipgen_get($page_info{filed_name});
1830
        my $table = Gtk2::Table->new (14, 15, TRUE);
1831
        #my $window=def_popwin_size(600,600,"Add header file");
1832
        my ($scrwin,$text_view)=create_text();
1833 17 alirezamon
 
1834 24 alirezamon
        my $help=gen_label_help($page_info{help});
1835
        $table->attach_defaults($help,0,8,0,1);
1836
        $table->attach_defaults($scrwin,0,15,1,14);
1837
        my $text_buffer = $text_view->get_buffer;
1838
        if(defined $hdr) {$text_buffer->set_text($hdr)};
1839
 
1840
        my $ok=def_image_button("icons/select.png",' Save ');
1841
        $ok->signal_connect("clicked"=> sub {#            
1842
                 my $text = $text_buffer->get_text($text_buffer->get_bounds, TRUE);
1843
                 $ipgen->ipgen_add($page_info{filed_name},$text);
1844
                 $window->destroy;
1845
 
1846
        });
1847 17 alirezamon
 
1848 24 alirezamon
        $table->attach_defaults($ok,6,9,14,15);
1849
        return ($table);
1850
 
1851
}
1852 17 alirezamon
 
1853
 
1854
 
1855
 
1856
 
1857
 
1858
 
1859
 
1860
 
1861
 
1862
 
1863
 
1864
 
1865 24 alirezamon
 
1866
 
1867
 
1868 16 alirezamon
############
1869 17 alirezamon
#       get_unused_intfc_ports_list
1870
###########
1871
 
1872
sub get_unused_intfc_ports_list {
1873
        my($intfc,$ipgen,$soc_state,$info)=@_;
1874
        my @ports=$ipgen->ipgen_list_ports;
1875
        my ($name_ref,$ref)=get_list_of_all_interfaces($ipgen);
1876
        my @interfaces_name=@{$name_ref};
1877
        my @interfaces=@{$ref};
1878 24 alirezamon
        $ipgen->ipgen_remove("unused");
1879 17 alirezamon
        foreach my $intfc_name (@interfaces)
1880
        {
1881
                #print "$intfc_name\n";
1882
                my($type,$name,$num)= split("[:\[ \\]]", $intfc_name);
1883
                my @all_ports;
1884
                if($type eq 'socket'){
1885
                        @all_ports= $intfc->get_socket_port_list($name);
1886
 
1887
                }elsif($type eq 'plug'){
1888
                        @all_ports= $intfc->get_plug_port_list($name);
1889
                }
1890
                foreach my $p(@all_ports){
1891
                                my $r= check_intfc_port_exits($intfc,$ipgen,$soc_state,$info,$intfc_name,$p);
1892
                                if ($r eq "0"){
1893
                                        $ipgen->ipgen_add_unused_intfc_port( $intfc_name,$p );
1894
                                }
1895
 
1896
                }
1897
 
1898
        }
1899
}
1900
 
1901
sub check_intfc_port_exits{
1902
        my($intfc,$ipgen,$soc_state,$info,$intfc_name,$intfc_port)=@_;
1903
        my @ports=$ipgen->ipgen_list_ports;
1904
 
1905
 
1906
        my $result="0";
1907
        foreach my $p( @ports){
1908
                my ($range,$type,$assigned_intfc_name,$assigned_intfc_port)=$ipgen->ipgen_get_port($p);
1909
                #print "if($intfc_name eq $assigned_intfc_name && $intfc_port eq $assigned_intfc_port);\n";
1910
 
1911
                if($intfc_name eq $assigned_intfc_name && $intfc_port eq $assigned_intfc_port){
1912
                        if($result eq "1"){# one interface port has been connected to multiple IP port
1913
 
1914
                        }
1915
                        $result = "1";
1916
 
1917
                }
1918
        }
1919
        return $result;
1920
 
1921
}
1922
 
1923
 
1924 24 alirezamon
 
1925
 
1926
 
1927
 
1928
 
1929
 
1930
 
1931
 
1932
 
1933
 
1934
 
1935
 
1936
 
1937
 
1938
 
1939 17 alirezamon
############
1940 16 alirezamon
#    main
1941
############
1942
sub ipgen_main{
1943
        my $ipgen=shift;
1944
        my $intfc=interface->interface_new();
1945
        if(!defined $ipgen) { $ipgen=ip_gen->ip_gen_new();}
1946
        #my $ipgen = eval { do 'lib/ip/wishbone_bus.IP' };
1947
        my $soc_state=  def_state("ideal");
1948
        # main window
1949
        #my $window = def_win_size(1000,800,"Top");
1950
        #  The main table containg the lib tree, selected modules and info section 
1951 17 alirezamon
        my $main_table = def_table (15, 12, FALSE);
1952 16 alirezamon
 
1953
        # The box which holds the info, warning, error ...  mesages
1954
        my ($infobox,$info)= create_text();
1955
 
1956
 
1957
        my $refresh_dev_win = Gtk2::Button->new_from_stock('ref');
1958
        my $generate = def_image_button('icons/gen.png','Generate');
1959
        my $genbox=def_hbox(TRUE,5);
1960
        $genbox->pack_start($generate,   FALSE, FALSE,3);
1961
 
1962
        # A tree view for holding a library
1963
        my $tree_box = create_interface_tree  ($info,$intfc,$ipgen,$soc_state);
1964
 
1965
 
1966
        my $file_info=show_file_info($ipgen,$soc_state,$info,\$refresh_dev_win);
1967
        my $port_info=show_port_info($intfc,$ipgen,$soc_state,$info,\$refresh_dev_win);
1968
        my $intfc_info=show_interface_info($intfc,$ipgen,$soc_state,$info,\$refresh_dev_win);
1969
 
1970
 
1971
        my $open = def_image_button('icons/browse.png','Load IP');
1972
        my $openbox=def_hbox(TRUE,0);
1973
        $openbox->pack_start($open,   FALSE, FALSE,0);
1974
 
1975
        $main_table->set_row_spacings (4);
1976
        $main_table->set_col_spacings (1);
1977
 
1978
        #my  $device_win=show_active_dev($soc,$lib,$infc,$soc_state,\$refresh_dev_win,$info);
1979
 
1980
 
1981
        #$table->attach_defaults ($event_box, $col, $col+1, $row, $row+1);
1982
        $main_table->attach_defaults ($tree_box , 0, 2, 0, 13);
1983
        $main_table->attach_defaults ($file_info , 2, 12, 0, 2);
1984
        $main_table->attach_defaults ($intfc_info , 2, 12, 2, 7);
1985
 
1986
        $main_table->attach_defaults ($port_info  , 2, 12, 7,13);
1987
        $main_table->attach_defaults ($infobox  , 0, 12, 13,14);
1988
        $main_table->attach_defaults ($genbox, 6, 8, 14,15);
1989
        $main_table->attach_defaults ($openbox,0, 1, 14,15);
1990
 
1991
        #check soc status every 0.5 second. referesh device table if there is any changes 
1992
Glib::Timeout->add (100, sub{
1993
 
1994
                my ($state,$timeout)= get_state($soc_state);
1995
                if($state eq "load_file"){
1996 24 alirezamon
                        my $file=$ipgen->ipgen_get("file_name");
1997 16 alirezamon
                        my $pp= eval { do $file };
1998
                        clone_obj($ipgen,$pp);
1999
 
2000
 
2001
                        set_state($soc_state,"ref",1);
2002
 
2003
 
2004
                }elsif ($timeout>0){
2005
                        $timeout--;
2006
                        set_state($soc_state,$state,$timeout);
2007
                }
2008
                elsif( $state eq "change_parameter" ){
2009
                        get_parameter_setting($ipgen,$soc_state,$info);
2010
                        set_state($soc_state,"ideal",0);
2011
 
2012
 
2013
 
2014
                }
2015
                elsif( $state ne "ideal" ){
2016
                        $refresh_dev_win->clicked;
2017
                        set_state($soc_state,"ideal",0);
2018
 
2019
 
2020
                }
2021
                return TRUE;
2022
 
2023
                } );
2024
        $open-> signal_connect("clicked" => sub{
2025
                load_ip($ipgen,$soc_state);
2026
 
2027
        });
2028
 
2029
        $generate-> signal_connect("clicked" => sub{
2030 17 alirezamon
                get_unused_intfc_ports_list ($intfc,$ipgen,$soc_state,$info);
2031 16 alirezamon
                generate_ip($ipgen);
2032
 
2033
                $refresh_dev_win->clicked;
2034
 
2035
});
2036
 
2037
        #show_selected_dev($info,\@active_dev,\$dev_list_refresh,\$dev_table);
2038
 
2039
 
2040
 
2041
#$box->show;
2042
        #$window->add ($main_table);
2043
        #$window->show_all;
2044
        #return $main_table;
2045
my $sc_win = new Gtk2::ScrolledWindow (undef, undef);
2046
                $sc_win->set_policy( "automatic", "automatic" );
2047
                $sc_win->add_with_viewport($main_table);
2048
 
2049
        return $sc_win;
2050
 
2051
 
2052
}
2053
 
2054 17 alirezamon
 
2055
 

powered by: WebSVN 2.1.0

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