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 22

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

powered by: WebSVN 2.1.0

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