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 17

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

powered by: WebSVN 2.1.0

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