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/] [interface_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 Data::Dumper;
6
use intfc_gen;
7
use rvp;
8
use Gtk2;
9
 
10
 
11
 
12
require "widget.pl";
13
 
14
 
15
sub read_file_modules{
16
        my ($file,$intfc_gen,$soc_state,$info)=@_;
17
 
18
        if (!defined $file) {return; }
19
        if (-e $file) {
20
                my $vdb =  read_file($file);
21
                my @modules=sort $vdb->get_modules($file);
22
                #foreach my $p(@module_list) {print "$p\n"}
23
                $intfc_gen->intfc_set_interface_file($file);
24
                $intfc_gen->intfc_set_module_name($modules[0]);
25
                $intfc_gen->intfc_add_module_list(@modules);
26
 
27
                set_state($soc_state,"file_selected",1);
28
                show_info(\$info,"Select the module which contain the interface ports\n ");
29
 
30
        }
31
        else {
32
                show_info(\$info,"File $file doese not exsit!\n ");
33
 
34
        }
35
}
36
 
37
 
38
################
39
#  check_input_intfc_file
40
################
41
 
42
sub check_input_intfc_file{
43
        my ($file,$intfc_gen,$soc_state,$info)=@_;
44
        my ($name,$path,$suffix) = fileparse("$file",qr"\..[^.]*$");
45
        if($suffix eq '.ITC'){
46
                $intfc_gen->intfc_set_interface_file($file);
47
                set_state($soc_state,"load_file",0);
48
 
49
 
50
        }else{
51
                read_file_modules($file,$intfc_gen,$soc_state,$info);
52
 
53
        }
54
 
55
 
56
}
57
 
58
sub file_box {
59
        my ($intfc_gen,$soc_state,$info,$table,$row)=@_;
60
        my $label = gen_label_in_left("Select file:");
61
        my $entry = Gtk2::Entry->new;
62
        my $open= def_image_button("icons/select.png","Open");
63
        my $browse= def_image_button("icons/browse.png","Browse");
64
        my $file= $intfc_gen->intfc_get_interface_file();
65 17 alirezamon
        my $intfc_info= def_image_button("icons/info.png","Description");
66
        $intfc_info->signal_connect("clicked"=> sub{
67
                get_intfc_description($intfc_gen,$soc_state,$info);
68
 
69
 
70
        });
71
 
72 16 alirezamon
        if(defined $file){$entry->set_text($file);}
73
        show_info(\$info,"Please select the verilog file containig the interface\n");
74
        $browse->signal_connect("clicked"=> sub{
75
                my $entry_ref=$_[1];
76
                my $file;
77
        my $dialog = Gtk2::FileChooserDialog->new(
78
                'Select a File', undef,
79
                'open',
80
                'gtk-cancel' => 'cancel',
81
                'gtk-ok'     => 'ok',
82
                );
83
 
84
                        my $filter = Gtk2::FileFilter->new();
85
                        $filter->set_name("Verilog");
86
                        $filter->add_pattern("*.v");
87
                        my $filter2 = Gtk2::FileFilter->new();
88
                        $filter2->set_name("Interface");
89
                        $filter2->add_pattern("*.ITC");
90
                        $dialog->add_filter ($filter);
91
                        $dialog->add_filter ($filter2);
92
 
93
 
94
                if ( "ok" eq $dialog->run ) {
95
                        $file = $dialog->get_filename;
96
                                        $$entry_ref->set_text($file);
97
                                        check_input_intfc_file($file,$intfc_gen,$soc_state,$info);
98
                                        #read_file_modules($file,$intfc_gen,$soc_state,$info);
99
                        #print "file = $file\n";
100
                 }
101
                $dialog->destroy;
102
 
103
 
104
 
105
        } , \$entry);
106
 
107
        $open->signal_connect("clicked"=> sub{
108
                my $file_name=$entry->get_text();
109
                check_input_intfc_file($file,$intfc_gen,$soc_state,$info);
110
                #read_file_modules($file_name,$intfc_gen,$soc_state,$info);
111
 
112
                });
113
        $entry->signal_connect("activate"=>sub{
114
                my $file_name=$entry->get_text();
115
                read_file_modules($file_name,$intfc_gen,$soc_state,$info);
116
        });
117
 
118
        $entry->signal_connect("changed"=>sub{
119
                show_info(\$info,"Please select the verilog file containig the interface\n");
120
        });
121
 
122 17 alirezamon
        $table->attach_defaults ($label, 0, 1 , $row, $row+1);
123
        $table->attach_defaults ($entry, 1, 7 , $row, $row+1);
124
        $table->attach_defaults ($browse, 7, 8, $row, $row+1);
125
        $table->attach_defaults ($intfc_info, 8, 9 , $row, $row+1);
126
        #$table->attach_defaults ($open,  9, 10, $row, $row+1);
127 16 alirezamon
        #$table->attach_defaults ($entry, $col, $col+1, $row, $row+1);
128
        #return $table;
129
 
130
 
131
}
132
 
133
 
134
 
135
sub get_ports_type{
136
        my ($vdb,$top_module)=@_;
137
        my %ports;
138
 
139
        foreach my $sig (sort $vdb->get_modules_signals($top_module)) {
140
        my ($line,$a_line,$i_line,$type,$file,$posedge,$negedge,
141
         $type2,$s_file,$s_line,$range,$a_file,$i_file,$dims) =
142
           $vdb->get_module_signal($top_module,$sig);
143
 
144
                if($type eq "input" or $type eq "inout" or $type eq "output" ){
145
                        $ports{$sig}=$type;
146
 
147
                }
148
        }
149
        return %ports;
150
}
151
 
152
 
153
 
154
sub get_ports_rang{
155
        my ($vdb,$top_module)=@_;
156
        my %ports;
157
 
158
        foreach my $sig (sort $vdb->get_modules_signals($top_module)) {
159
        my ($line,$a_line,$i_line,$type,$file,$posedge,$negedge,
160
         $type2,$s_file,$s_line,$range,$a_file,$i_file,$dims) =
161
           $vdb->get_module_signal($top_module,$sig);
162
 
163
                if($type eq "input" or $type eq "inout" or $type eq "output" ){
164
 
165
 
166
 
167
                        $ports{$sig}=remove_all_white_spaces($range);
168
 
169
                }
170
        }
171
        return %ports;
172
}
173
 
174
 
175
 
176
sub get_interface_ports {
177
        my ($infc_gen,$soc_state,$info)=@_;
178
        my $window=def_popwin_size(800,600,"Import Ports");
179
 
180
        my $file=$infc_gen->intfc_get_interface_file();
181
        if (!defined $file){show_info(\$info,"File name has not been defined yet!");  return;}
182
        my $module=$infc_gen->intfc_get_module_name();
183
        if (!defined $module){  show_info(\$info,"Module name has not been selected yet!");  return;}
184
        my $vdb=read_file($file);
185
        my %port_type=get_ports_type($vdb,$module);
186
        my %port_range=get_ports_rang($vdb,$module);
187
 
188
        my $table=def_table(8,8,TRUE);
189
        my $scrolled_win = new Gtk2::ScrolledWindow (undef, undef);
190
        $scrolled_win->set_policy( "automatic", "automatic" );
191
        $scrolled_win->add_with_viewport($table);
192
 
193
 
194
 
195
        my $title=gen_label_in_center("Select the ports included in the interface");
196
        my $title1=gen_label_in_center("Type");
197
        my $title2=gen_label_in_center("Range");
198
        my $title3=gen_label_in_center("Name");
199
        my $title4=gen_label_in_center("Select");
200
 
201
        my $row =0;
202
        $table->attach_defaults($title, 0,8, $row, $row+1);
203
        $row++;
204
        $table->attach_defaults($title1, 0,1, $row, $row+1);
205
        $table->attach_defaults($title2, 1,4, $row, $row+1);
206
        $table->attach_defaults($title3, 4,7, $row, $row+1);
207
        $table->attach_defaults($title4, 7,8, $row, $row+1);
208
 
209
        my $separator = Gtk2::HSeparator->new;
210
        $row++;
211
 
212
        $table->attach_defaults($separator, 0,8, $row, $row+1);
213
 
214
        $row++;
215
        $infc_gen->intfc_remove_ports();
216
        foreach my $p (sort keys %port_type){
217
                my $port_id= $p;
218
                my $porttype=$port_type{$p};
219
                my $label1= gen_label_in_center("$porttype");
220
                $table->attach_defaults($label1, 0,1, $row, $row+1);
221
                my $portrange=$port_range{$p};
222
                if (  $port_range{$p} ne ''){
223
 
224
                        my $label2= gen_label_in_center("\[$portrange\]");
225
                        $table->attach_defaults($label2, 1,4, $row, $row+1);
226
                }
227
 
228
                my $label3= gen_label_in_center($p);
229
                $table->attach_defaults($label3, 4,7, $row, $row+1);
230
 
231
                my $check= Gtk2::CheckButton->new;
232
                $table->attach_defaults($check, 7,8, $row, $row+1);
233
 
234
                $row++;
235
                if($row>8){$table->resize ($row, 8);}
236
                #print "$p\:$port_type{$p}\n";
237
 
238
                $check->signal_connect("toggled"=>sub{
239
                        my $widget=shift;
240
                        my $in=$widget->get_active();
241
                        if ($in eq 1){
242
                                my $connect_type=($porttype eq "input")? "output" : ($porttype eq "output")? "input" : $porttype;
243 17 alirezamon
                                $infc_gen->intfc_add_port($port_id,$porttype,$portrange,$p,$connect_type,$portrange,$p,"concatenate","Active low");
244 16 alirezamon
 
245
 
246
 
247
                                #print "chanhed to $in \n";
248
                        }else {
249
                                $infc_gen->intfc_remove_port($port_id);
250
 
251
                                #print "chanhed to 0 \n";
252
 
253
                        }
254
 
255
 
256
                });
257
 
258
        }
259
 
260
 
261
        my $ok= def_image_button("icons/select.png","ok");
262
        $table->attach_defaults($ok, 3,5, $row, $row+1);
263
 
264
        $ok->signal_connect("clicked"=>sub{
265
                $window->destroy;
266
                set_state($soc_state,"refresh",1);
267
 
268
 
269
                });
270
 
271
        $window->add($scrolled_win);
272
 
273
        $window->show_all();
274
}
275
 
276
 
277
 
278
 
279
 
280
 
281
sub module_select{
282
        my ($infc_gen,$soc_state,$info,$table,$row)=@_;
283
        my $file= $infc_gen->intfc_get_interface_file();
284
        my $label = gen_label_in_left("Select module:");
285
 
286
        my @modules= $infc_gen->intfc_get_module_list();
287
        my $saved_module=$infc_gen->intfc_get_module_name();
288
        my $pos=(defined $saved_module ) ? get_scolar_pos( $saved_module,@modules) : 0;
289
        my $combo = gen_combo(\@modules, $pos);
290
        my $port= def_image_button("icons/import.png","Import Ports");
291
        my $label2= gen_label_in_left(" Select Category:");
292
        my ($category,$category_entry)=gen_entry_help('Define the Interface category:e.g RAM, wishbone,...');
293
        my $saved_category=$infc_gen->intfc_get_category();
294
        if(defined $saved_category){$category_entry->set_text($saved_category);}
295
 
296
 
297 17 alirezamon
        $table->attach_defaults ($label, 0, 1 , $row, $row+1);
298
        $table->attach_defaults ($combo, 1, 3 , $row,$row+1);
299
        $table->attach_defaults ($port, 3, 4 , $row, $row+1);
300
        $table->attach_defaults ($label2, 4, 5 , $row, $row+1);
301
        $table->attach_defaults ($category, 5, 6 , $row, $row+1);
302 16 alirezamon
 
303 17 alirezamon
 
304
 
305 16 alirezamon
        $combo->signal_connect("changed"=> sub{
306
                my $module= $combo->get_active_text();
307
                $infc_gen->intfc_set_module_name($module);
308
 
309
 
310
        });
311
 
312
        $port->signal_connect("clicked"=> sub{
313
                get_interface_ports($infc_gen,$soc_state,$info);
314
 
315
 
316
        });
317
        $category_entry->signal_connect("changed"=> sub{
318
                my $name=$category_entry->get_text();
319
                $infc_gen->intfc_set_category($name);
320
 
321
        });
322
 
323
 
324
 
325
 
326 17 alirezamon
 
327 16 alirezamon
}
328
 
329
sub interface_type_select {
330
        my ($infc_gen,$soc_state,$info,$table,$row)=@_;
331
        my $saved_intfc_type= $infc_gen->intfc_get_interface_type();
332
        my $label = gen_label_in_left("Interface name:");
333
 
334 17 alirezamon
 
335 16 alirezamon
        my $saved_name=$infc_gen->intfc_get_interface_name();
336
        my $entry=gen_entry($saved_name);
337 17 alirezamon
 
338 16 alirezamon
        $entry->signal_connect("changed"=>sub{
339
                my $widget=shift;
340
                my $name=$widget->get_text();
341
                $infc_gen->intfc_set_interface_name($name);
342
                set_state($soc_state,"refresh",50);
343
 
344
        }
345
        );
346
 
347
        my $saved_connection_num= $infc_gen->intfc_get_connection_num();
348
        my $label2 = gen_label_in_left("Select soket type:");
349 17 alirezamon
 
350 16 alirezamon
        my @connection_nums=("single connection","multi connection");
351
        my $pos;
352
        if(defined $saved_connection_num){
353
                $pos= get_scolar_pos( $saved_connection_num,@connection_nums);
354
        }
355
        else {
356
                $pos= 0;
357
                $infc_gen->intfc_set_connection_num($connection_nums[0]);
358
        }
359
        my $combo=gen_combo(\@connection_nums,$pos);
360 17 alirezamon
 
361 16 alirezamon
        $combo->signal_connect("changed"=>sub{
362
                my $widget=shift;
363
                my $connection_num=$widget->get_active_text();
364
                $infc_gen->intfc_set_connection_num($connection_num);
365
                set_state($soc_state,"refresh",1);
366
 
367
        });
368 17 alirezamon
        $table->attach_defaults ($label, 0, 1 , $row, $row+1);
369
        $table->attach_defaults ($entry, 1, 2 , $row, $row+1);
370
        $table->attach_defaults ($label2, 2, 3 , $row, $row+1);
371
        $table->attach_defaults ($combo, 3, 4 , $row, $row+1);
372 16 alirezamon
 
373
 
374
 
375
}
376
 
377
 
378
 
379
 
380
 
381 18 alirezamon
 
382 16 alirezamon
sub port_select{
383
        my ($infc_gen,$soc_state,$info,$table,$row)=@_;
384 17 alirezamon
        my(%types,%ranges,%names,%connect_types,%connect_ranges,%connect_names,%outport_types,%default_outs);
385
        $infc_gen->intfc_get_ports(\%types,\%ranges,\%names,\%connect_types,\%connect_ranges,\%connect_names,\%outport_types,\%default_outs);
386 16 alirezamon
 
387
        my $size = keys %types;
388
        if($size >0){
389
                my $sep = Gtk2::HSeparator->new;
390
                $table->attach_defaults ($sep, 0, 10 , $row, $row+1);    $row++;
391
 
392
 
393 17 alirezamon
                my $swap= def_image_button("icons/swap.png","swap");
394
 
395 16 alirezamon
                $swap->signal_connect('clicked'=>sub{
396
                        my $type=$infc_gen->intfc_get_interface_type();
397
                        if($type eq 'plug'){
398
                                        $infc_gen->intfc_set_interface_type('socket');
399
                        }
400
                        else {
401
                                        $infc_gen->intfc_set_interface_type('plug');
402
                        }
403
                        set_state($soc_state,"refresh",1);
404
 
405
                });
406
 
407
 
408
                my @intfcs=("plug","socket");
409
                my $inttype=$infc_gen->intfc_get_interface_type();
410
                if (!defined $inttype){
411
                        $inttype='plug';
412
                        $infc_gen->intfc_set_interface_type($inttype);
413
                }
414
 
415
                #my $lab1= gen_label_in_center($inttype);
416
                my ($lab1,$lab2);
417
                if ($inttype eq 'plug'){
418
                        $lab1=def_image_label('icons/plug.png'  ,'plug  ');
419
                        $lab2=def_image_label('icons/socket.png','socket');
420
                }else {
421
                        $lab2=def_image_label('icons/plug.png','plug');
422
                        $lab1=def_image_label('icons/socket.png','socket');
423
 
424
                }
425
 
426 17 alirezamon
                my $sep2 = Gtk2::HSeparator->new;
427 16 alirezamon
 
428
 
429 17 alirezamon
                $table->attach_defaults ($lab1, 1, 2 , $row, $row+1);
430
                $table->attach_defaults ($swap, 3, 4 , $row, $row+1);
431
                $table->attach_defaults ($lab2, 5, 6 , $row, $row+1);   $row++;
432
                $table->attach_defaults ($sep2, 0, 9 , $row, $row+1);    $row++;
433 16 alirezamon
 
434
 
435
                my $lab3= gen_label_in_center("Type");
436
                my $lab4= gen_label_in_center("Range");
437
                my $lab5= gen_label_in_center("Name");
438
                $table->attach_defaults ($lab3, 0, 1 , $row, $row+1);
439 17 alirezamon
                $table->attach_defaults ($lab4, 1, 2 , $row, $row+1);
440
                $table->attach_defaults ($lab5, 2, 3 , $row, $row+1);
441 16 alirezamon
                my $lab6= gen_label_in_center("Type");
442
                my $lab7= gen_label_in_center("Range");
443
                my $lab8= gen_label_in_center("Name");
444 17 alirezamon
                $table->attach_defaults ($lab6, 4, 5 , $row, $row+1);
445
                $table->attach_defaults ($lab7, 5, 6 , $row, $row+1);
446
                $table->attach_defaults ($lab8, 6, 7 , $row, $row+1);
447
                my $lab9= gen_label_help ("When an IP core does not have any of interface output port, the default value will be send to the IP core's input port which is supposed to be connected to that port","Output port Default ");
448
                $table->attach_defaults ($lab9, 8, 9 , $row, $row+1);
449 16 alirezamon
                $row++;
450
 
451
                foreach my $id (sort keys %ranges){
452
                        my $type=$types{$id};
453
                        my $range=$ranges{$id};
454
                        my $name=$names{$id};
455
                        my $connect_type=$connect_types{$id};
456
                        my $connect_range=$connect_ranges{$id};
457
                        my $connect_name=$connect_names{$id};
458
                        my $outport_type=$outport_types{$id};
459 17 alirezamon
                        my $default_out=$default_outs{$id};
460
                        if(! defined $default_out){
461
                                $default_out = "Active low"; # port_width_repeat($connect_range,"1\'b0");
462
                                $infc_gen->intfc_add_port($id,$type,$range,$name,$connect_type,$connect_range,$connect_name,$outport_type,$default_out);
463
                                print "\$default_out is set to: $default_out\n ";
464
                        }
465 16 alirezamon
 
466 17 alirezamon
                        #my $box=def_hbox(FALSE,0);
467
 
468 16 alirezamon
                        my @ports_type=("input","output","inout");
469
                        my $pos=get_scolar_pos($type,@ports_type);
470
                        my $combo1=gen_combo(\@ports_type,$pos);
471
                        my $entry2=gen_entry($range);
472
                        my $entry3=gen_entry($name);
473
                        my $separator = Gtk2::VSeparator->new;
474
                        my $connect_type_lable= gen_label_in_center($connect_type);
475
                        my $entry4=gen_entry($connect_range);
476
                        my $entry5=gen_entry($connect_name);
477
                        my @outport_types=("shared","concatenate");
478 17 alirezamon
                        my $pos2=get_scolar_pos($outport_type,@outport_types);
479 16 alirezamon
                        my $combo2=gen_combo(\@outport_types,$pos2);
480 17 alirezamon
 
481 16 alirezamon
 
482 17 alirezamon
                        #my @list=(port_width_repeat($range,"1\'b0"),port_width_repeat($range,"1\'b1"),port_width_repeat($range,"1\'bx"));
483
                        my @list=("Active low","Active high","Don't care");
484
 
485
                        my $combentry=gen_combo_entry(\@list);
486
                        $pos2=get_scolar_pos($default_out,@list);
487
                        if( defined $pos2){
488
                                $combentry->set_active($pos2);
489
                        } else {
490
                                ($combentry->child)->set_text($default_out);
491
                        }
492
 
493
 
494
                        #$box->pack_start($entry3,TRUE,FALSE,3);
495
                        #$box->pack_start($separator,TRUE,FALSE,3);
496 16 alirezamon
 
497
                        $table->attach_defaults ($combo1, 0, 1 , $row, $row+1);
498 17 alirezamon
                        $table->attach_defaults ($entry2, 1, 2 , $row, $row+1);
499
                        $table->attach_defaults ($entry3, 2, 3 , $row, $row+1);
500 16 alirezamon
 
501
 
502 17 alirezamon
                        $table->attach_defaults ($connect_type_lable, 4, 5 , $row, $row+1);
503
                        $table->attach_defaults ($entry4, 5, 6 , $row, $row+1);
504
                        $table->attach_defaults ($entry5, 6, 7 , $row, $row+1);
505
                        $table->attach_defaults ($combentry, 8, 9 , $row, $row+1);
506 16 alirezamon
 
507
                        $combo1->signal_connect("changed"=>sub{
508
                                my $new_type=$combo1->get_active_text();
509
                                my $new_connect_type=($new_type eq "input")? "output" : ($new_type eq "output")? "input" : $new_type;
510 17 alirezamon
                                $infc_gen->intfc_add_port($id,$new_type,$range,$name,$new_connect_type,$connect_range,$connect_name,$outport_type,$default_out);
511 16 alirezamon
                                set_state($soc_state,"refresh",1);
512
 
513
                        });
514
                        $entry2->signal_connect("changed"=>sub{
515
                                $range=$entry2->get_text();
516 17 alirezamon
                                $infc_gen->intfc_add_port($id,$type,$range,$name,$connect_type,$connect_range,$connect_name,$outport_type,$default_out);
517 16 alirezamon
                                set_state($soc_state,"refresh",50);
518
 
519
                        });
520
                        $entry3->signal_connect("changed"=>sub{
521
                                $name=$entry3->get_text();
522 17 alirezamon
                                $infc_gen->intfc_add_port($id,$type,$range,$name,$connect_type,$connect_range,$connect_name,$outport_type,$default_out);
523 16 alirezamon
                                set_state($soc_state,"refresh",50);
524
 
525
                        });
526
 
527
                        $entry4->signal_connect("changed"=>sub{
528
                                $connect_range=$entry4->get_text();
529 17 alirezamon
                                $infc_gen->intfc_add_port($id,$type,$range,$name,$connect_type,$connect_range,$connect_name,$outport_type,$default_out);
530 16 alirezamon
                                set_state($soc_state,"refresh",50);
531
 
532
                        });
533
                        $entry5->signal_connect("changed"=>sub{
534
                                $connect_name=$entry5->get_text();
535 17 alirezamon
                                $infc_gen->intfc_add_port($id,$type,$range,$name,$connect_type,$connect_range,$connect_name,$outport_type,$default_out);
536 16 alirezamon
                                set_state($soc_state,"refresh",50);
537
 
538
                        });
539
                        $combo2->signal_connect("changed"=>sub{
540
                                my $new_outport_type=$combo2->get_active_text();
541 17 alirezamon
                                $infc_gen->intfc_add_port($id,$type,$range,$name,$connect_type,$connect_range,$connect_name,$new_outport_type,$default_out);
542 16 alirezamon
                                set_state($soc_state,"refresh",1);
543
 
544
                        });
545 17 alirezamon
                        ($combentry->child)->signal_connect('changed' => sub {
546
                                my ($entry) = @_;
547
                                $default_out=$entry->get_text();
548
                                $infc_gen->intfc_add_port($id,$type,$range,$name,$connect_type,$connect_range,$connect_name,$outport_type,$default_out);
549 16 alirezamon
 
550 17 alirezamon
 
551
                        });
552 16 alirezamon
 
553 17 alirezamon
 
554
 
555 16 alirezamon
                        $row++;
556
 
557
 
558
                }#foreach port  
559
 
560
 
561
        }
562
        return $row;
563
}
564
 
565
 
566
 
567
 
568
 
569
 
570
 
571
 
572
 
573
 
574
sub dev_box_gen{
575
        my($infc_gen,$soc_state,$info)=@_;
576
        my $table = def_table(20,10,FALSE);
577
 
578
        file_box($infc_gen,$soc_state,$info,$table,0);
579
        module_select($infc_gen,$soc_state,$info,$table,1);
580
        interface_type_select($infc_gen,$soc_state,$info,$table,2);
581
        my $row=port_select($infc_gen,$soc_state,$info,$table,3);
582
        for (my $i=$row; $i<20; $i++){
583
                my $temp=gen_label_in_center("");
584
                $table->attach_defaults ($temp, 0, 1 , $i, $i+1);
585
        }
586
 
587
        return  $table;
588
}
589
 
590
 
591
 
592
 
593
 
594
sub dev_box_show{
595
        my($infc_gen,$soc_state,$info,$refresh_ref)=@_;
596
        my $box= def_table (1, 1, TRUE);
597
        my $dev_table = dev_box_gen($infc_gen,$soc_state,$info);
598
        my $scrolled_win = new Gtk2::ScrolledWindow (undef, undef);
599
        $scrolled_win->set_policy( "automatic", "automatic" );
600
        $scrolled_win->add_with_viewport($dev_table);
601
 
602
 
603
 
604
        $$refresh_ref-> signal_connect("clicked" => sub{
605
                $dev_table->destroy;
606
                $dev_table = dev_box_gen($infc_gen,$soc_state,$info);
607
                #$box->attach_defaults ($dev_table, 0, 1, 0, 1);#( $dev_table, FALSE, FALSE, 3);
608
                $scrolled_win->add_with_viewport($dev_table);
609
                $dev_table->show;
610
                $scrolled_win->show_all;
611
 
612
 
613 17 alirezamon
 
614 16 alirezamon
        });
615
        #$box->attach_defaults ($dev_table, 0, 1, 0, 1);#$box->pack_start( $dev_table, FALSE, FALSE, 3);
616
        #$box->show_all;
617
        return $scrolled_win;
618
 
619
}
620
 
621
 
622
 
623
 
624
sub check_intfc{
625
        my $intfc_gen=shift;
626
        my $result;
627
        my $message;
628
 
629
 
630
        $result=$intfc_gen->intfc_ckeck_ports_available();
631
        if(!defined $result){$message="No port connection has been selected for this interface!";}
632
        $result=$intfc_gen->intfc_get_interface_name();
633
        if(!defined $result){$message="The interface name is empty!";}
634
        $result=$intfc_gen->intfc_get_interface_file();
635
        if(!defined $result){$message="The verilog file containig the interface has not been selected!";}
636
 
637
        if(!defined $message){return 1;}
638
        else {message_dialog($message); return 0;}
639
 
640
 
641
}
642
 
643
 
644
 
645
sub generate_lib{
646
        my $intfc_gen=shift;
647
        my $name=$intfc_gen->intfc_get_interface_name();
648
        my $category=$intfc_gen->intfc_get_category();
649
        # Write
650
        if(defined ($category)){
651
                open(FILE,  ">lib/interface/$name.ITC") || die "Can not open: $!";
652
                print FILE Data::Dumper->Dump([\%$intfc_gen],["HashRef"]);
653
                close(FILE) || die "Error closing file: $!";
654
                #store \%$intfc_gen, "lib/$name.ITC";
655
                my $message="Interface $name has been generated successfully" ;
656
                message_dialog($message);
657 17 alirezamon
                exec($^X, $0, @ARGV);# reset ProNoC to apply changes
658 16 alirezamon
                #$hashref = retrieve('file');
659
        }else{
660
                my $message="Category must be defined!";
661
                message_dialog($message);
662
 
663
        }
664
 
665
 
666
return 1;
667
}
668
 
669
 
670
 
671
###########
672
#       get description
673
#########
674
 
675
sub get_intfc_description{
676
        my ($intfc_gen,$soc_state,$info)=@_;
677
        my $description = $intfc_gen->intfc_get_description();
678
        my $table = Gtk2::Table->new (15, 15, TRUE);
679
        my $window=def_popwin_size(500,500,"Add description");
680
        my ($scrwin,$text_view)=create_text();
681
        #my $buffer = $textbox->get_buffer();
682
        my $ok=def_image_button("icons/select.png",' Ok ');
683
 
684
        $table->attach_defaults($scrwin,0,15,0,14);
685
        $table->attach_defaults($ok,6,9,14,15);
686
        my $text_buffer = $text_view->get_buffer;
687
        if(defined $description) {$text_buffer->set_text($description)};
688
 
689
        $ok->signal_connect("clicked"=> sub {
690
                $window->destroy;
691
 
692
                 my $text = $text_buffer->get_text($text_buffer->get_bounds, TRUE);
693
                 $intfc_gen->intfc_set_description($text);
694
                #print "$text\n";
695
 
696
        });
697
 
698
        $window->add($table);
699
        $window->show_all();
700
 
701
}
702
 
703
 
704
 
705 17 alirezamon
sub load_interface{
706
        my ($intfc_gen,$soc_state)=@_;
707
        my $file;
708
        my $dialog = Gtk2::FileChooserDialog->new(
709
                'Select a File', undef,
710
                'open',
711
                'gtk-cancel' => 'cancel',
712
                'gtk-ok'     => 'ok',
713
                );
714 16 alirezamon
 
715 17 alirezamon
        my $filter = Gtk2::FileFilter->new();
716
        $filter->set_name("ITC");
717
        $filter->add_pattern("*.ITC");
718
        $dialog->add_filter ($filter);
719
        my $dir = Cwd::getcwd();
720
        $dialog->set_current_folder ("$dir/lib/interface")      ;
721 16 alirezamon
 
722
 
723 17 alirezamon
        if ( "ok" eq $dialog->run ) {
724
                $file = $dialog->get_filename;
725
                my ($name,$path,$suffix) = fileparse("$file",qr"\..[^.]*$");
726
                if($suffix eq '.ITC'){
727
                        $intfc_gen->intfc_set_interface_file($file);
728
                        set_state($soc_state,"load_file",0);
729
                }
730
     }
731
     $dialog->destroy;
732
 
733
 
734
 
735
}
736
 
737
 
738
 
739 16 alirezamon
############
740
#    main
741
############
742
sub intfc_main{
743
 
744
        my $intfc_gen= intfc_gen->interface_generator();
745
 
746
        my $soc_state=  def_state("ideal");
747
        # main window
748
        #my $window = def_win_size(1000,800,"Top");
749
        #  The main table containg the lib tree, selected modules and info section 
750 17 alirezamon
        my $main_table = Gtk2::Table->new (15, 12, FALSE);
751 16 alirezamon
 
752
        # The box which holds the info, warning, error ...  mesages
753
        my ($infobox,$info)= create_text();
754
 
755
 
756
        my $refresh = Gtk2::Button->new_from_stock('ref');
757
        my $generate = def_image_button('icons/gen.png','Generate');
758
        my $genbox=def_hbox(TRUE,5);
759
        $genbox->pack_start($generate,   FALSE, FALSE,3);
760
 
761
        # A tree view for holding a library
762
        #my $tree_box = create_tree ($info,$lib,$soc,$soc_state);
763
 
764
 
765
 
766
        $main_table->set_row_spacings (4);
767
        $main_table->set_col_spacings (1);
768
 
769
        my $devbox=dev_box_show($intfc_gen,$soc_state,$info,\$refresh);
770
 
771
        $main_table->attach_defaults ($devbox , 0, 12, 0,12);
772
        $main_table->attach_defaults ($infobox  , 0, 12, 12,14);
773
        $main_table->attach_defaults ($genbox   , 6, 8, 14,15);
774
 
775 17 alirezamon
 
776
        my $open = def_image_button('icons/browse.png','Load Interface');
777
        my $openbox=def_hbox(TRUE,0);
778
        $openbox->pack_start($open,   FALSE, FALSE,0);
779
        $main_table->attach_defaults ($openbox,0, 2, 14,15);
780
 
781 16 alirezamon
        #check soc status every 0.5 second. referesh gui if there is any changes 
782
Glib::Timeout->add (100, sub{
783
 
784
                my ($state,$timeout)= get_state($soc_state);
785
                if ($timeout>0){
786
                        $timeout--;
787
                        set_state($soc_state,$state,$timeout);
788
                }
789
                elsif($state eq "load_file"){
790
                        my $file=$intfc_gen->intfc_get_interface_file();
791
                        my $pp= eval { do $file };
792
                        clone_obj($intfc_gen,$pp);
793
 
794
 
795
                        set_state($soc_state,"ref",1);
796
 
797
 
798
                }
799
                elsif( $state ne "ideal" ){
800
                        $refresh->clicked;
801
                        set_state($soc_state,"ideal",0);
802
 
803
                }
804
                return TRUE;
805
 
806
                } );
807 17 alirezamon
 
808
        $open-> signal_connect("clicked" => sub{
809
                load_interface($intfc_gen,$soc_state);
810
 
811
        });
812 16 alirezamon
 
813
        $generate-> signal_connect("clicked" => sub{
814 17 alirezamon
                if( check_intfc($intfc_gen)) {
815
                        generate_lib($intfc_gen);
816
 
817
                }
818 16 alirezamon
 
819
                $refresh->clicked;
820
 
821
});
822
 
823
        #show_selected_dev($info,\@active_dev,\$dev_list_refresh,\$dev_table);
824
 
825
 
826
 
827
#$box->show;
828
        #$window->add ($main_table);
829
        #$window->show_all;
830
        #return $main_table;
831
 
832
        my $sc_win = new Gtk2::ScrolledWindow (undef, undef);
833
                $sc_win->set_policy( "automatic", "automatic" );
834
                $sc_win->add_with_viewport($main_table);
835
 
836
        return $sc_win;
837
 
838
 
839
}
840
 
841
 
842
 
843
 
844
 
845
1
846
 

powered by: WebSVN 2.1.0

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