#!perl
use Data::Dumper;
my %hash = ( a=>{} );
if ( !exists $hash{'a'}{'b'}{'c'} ){};
print Dumper \%hash;
####
#return(\%lastKnownSigValH, \%scopesHierH, \%scopesH, \%timeRangeH,
# \%timeIntervalBasedActivityH, $vcdFile, $timeUnits);
$self->{lastKnownSigValH} = \%lastKnownSigValH;
$self->{scopesHierH} = \%scopesHierH;
$self->{scopesH} = \%scopesH;
$self->{timeRangeH} = \%timeRangeH;
$self->{timeIntervalBasedActivityH} = \%timeIntervalBasedActivityH;
$self->{vcdFile} = $vcdFile;
$self->{timeUnits} = $timeUnits;
####
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics -verbose;
my $vcdFile = $ARGV[0];
my $datObj = Datafile->new();
$datObj->collectSignals($vcdFile);
package Datafile;
sub new {
my $class = shift;
my $self = {
inTimeRangeSignalsH => {},
sigsNotInTimeRangeH => {},
timeRng => {},
hierScope => {},
};
return bless $self, $class;
}
sub collectSignals {
my $self = shift;
my $vcdFileOrig = shift;
$self->parseData($vcdFileOrig);
if (exists $self->{timeRangeH}{$vcdFile}) {
my $timeRng = $self->{timeRangeH}{$vcdFile}{'TIMERANGES'}[-1];
$self->{timeRng} = $timeRng;
if (exists $self->{timeIntervalBasedActivityH}{$vcdFile}) {
my $hr1 = $self->{timeIntervalBasedActivityH}{$vcdFile};
if (exists $hr1->{$timeRng}) {
my $hr2 = $hr1->{$timeRng};
for my $sigId (keys %$hr2) {
for my $sigName (keys %{$hr2->{$sigId}}) {
for my $scopeNm (keys %{$hr2->{$sigId}{$sigName}}) {
if ( ($scopeNm =~ /_TB/)
&& (exists $hr2->{$sigId}{$sigName}{$scopeNm}{'EXPANDEDVAL'}) ) {
$self->{hierScope} = $scopeNm;
my $sigValue = $hr2->{$sigId}{$sigName}{$scopeNm}{'EXPANDEDVAL'}[-1];
$self->{inTimeRangeSignalsH}{$vcdFile}{$sigName}{$sigId}{$timeRng}{$scopeNm} = $sigValue;
}
}
}
}
}
foreach my $signal (keys %{$self->{inTimeRangeSignalsH}{$vcdFile}}) {
print "Line 51 ::Dbg:: $signal $vcdFile\n";
}
}
}
if (exists $self->{lastKnownSigValH}{$vcdFile}) {
my $hr1 = $self->{lastKnownSigValH}{$vcdFile};
foreach my $signalId (keys %$hr1) {
foreach my $signalNm (keys %{$hr1->{$signalId}}) {
if (exists $self->{inTimeRangeSignalsH}{$vcdFile}{$signalNm}){
if (exists $self->{inTimeRangeSignalsH}{$vcdFile}{$signalNm}{$signalId}){
next;
}
}
#if(!exists $self->{inTimeRangeSignalsH}{$vcdFile}{$signalNm}{$signalId}) {
$self->{sigsNotInTimeRangeH}{$vcdFile}{$signalNm}{$signalId}
= $hr1->{$signalId}{$signalNm}{$self->{hierScope}}[0];
#}
}
}
}
my $hr = $self->{inTimeRangeSignalsH};
for my $vcdFile (keys %$hr) {
for my $sig (keys %{$hr->{$vcdFile}}) {
print "Line 75 ::Dbg:: $sig $vcdFile\n";
}
}
}