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 18

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

powered by: WebSVN 2.1.0

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