7 use PTF
::SystemPTF
::CPU
;
8 use PTF
::SystemPTF
::Board
;
9 use PTF
::SystemPTF
::Module
;
17 my $class = ref($invocant) || $invocant;
23 my $parser = PTFParser
->new;
24 $self->{root
} = $parser->readPTF($self->{filename
});
26 # if the specified PTF file could not be read properly, return undef;
27 $self->{root
} or return;
29 # if the specified PTF file is not a SYSTEM, return undef.
30 if ($self->{root
}->type ne 'SYSTEM') {
34 # initialize the modulemap
35 my @modules = $self->{root
}->getSections ("MODULE");
37 foreach my $module (@modules) {
38 # if the module is not enabled then do not add
39 my $SBI = $module->getSection ('SYSTEM_BUILDER_INFO', '');
40 if ($SBI->getAssignment ('Is_Enabled') eq "1") {
41 $self->{modules
}->{$module->name} = $module;
42 $module_order{$module->name} = $index;
47 bless ($self, $class);
53 return $self->{root
}->name;
57 my ($self, @classes) = @_;
60 foreach my $module_name (keys (%{$self->{modules
}})) {
61 my $module = $self->{modules
}->{$module_name};
62 my $module_class = $module->getAssignment ('class');
63 foreach my $class (@classes) {
64 if ($module_class eq $class) {
65 push @cpulist, $module->name;
74 my ($self, $name) = @_;
76 my $cpu = CPU
->new (ptf
=> $self->{modules
}->{$name});
80 my ($self, $name) = @_;
82 my $module = Module
->new (ptf
=> $self->{modules
}->{$name});
86 my ($self, $master, $type) = @_;
88 # create %connected set with just the master
89 # value of hash key is inconsequential
91 $connected{$master} = ( );
93 # create %pool set with all modules
94 # value of hash key is inconsequential
96 @pool{keys (%{$self->{modules
}})} = ( );
100 # %pool = difference (%pool, %connected)
101 delete @pool{ keys %connected };
105 foreach my $name (keys %pool) {
106 my $mod = $self->getModule ($name);
108 @mod_masters{ $mod->getMasters ($type) } = ( );
110 # if intersection (%masters, %connected) is not empty
112 grep ( ! exists $connected{ $_ },
113 keys %mod_masters) };
115 if (scalar(keys(%mod_masters)) > 0) {
116 $connected{$name} = ( );
122 delete $connected{$master};
124 return sort module_comparison
keys (%connected);
127 sub getClockFreq
() {
130 my $wsa = $self->{root
}->getSection ('WIZARD_SCRIPT_ARGUMENTS', '');
133 my $result = $wsa->getAssignment ('clock_freq');
137 # This is not really a class method... more of a helper function really...
138 sub module_comparison
{
139 if ($module_order{$a} > $module_order{$b}) {
141 } elsif ($module_order{$a} < $module_order{$b}) {