#!/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"; } } }