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 16

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

powered by: WebSVN 2.1.0

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