OpenCores
URL https://opencores.org/ocsvn/w11/w11/trunk

Subversion Repositories w11

[/] [w11/] [tags/] [w11a_V0.74/] [tools/] [bin/] [dmscntconv] - Blame information for rev 38

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 34 wfjm
#!/usr/bin/perl -w
2
# $Id: dmscntconv 721 2015-12-29 17:50:50Z mueller $
3
#
4
# Copyright 2015- by Walter F.J. Mueller 
5
#
6
# This program is free software; you may redistribute and/or modify it under
7
# the terms of the GNU General Public License as published by the Free
8
# Software Foundation, either version 2, or at your option any later version.
9
#
10
# This program is distributed in the hope that it will be useful, but
11
# WITHOUT ANY WARRANTY, without even the implied warranty of MERCHANTABILITY
12
# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
13
# for complete details.
14
#
15
#  Revision History:
16
# Date         Rev Version  Comment
17
# 2015-12-28   721   1.0.1  adopt to new syntax of STATE2SNUM mapper
18
# 2015-06-27   695   1.0    Initial version
19
#
20
 
21
use 5.14.0;                                 # require Perl 5.14 or higher
22
use strict;                                 # require strict checking
23
 
24
use Getopt::Long;
25
 
26
my %opts = ();
27
 
28
GetOptions(\%opts, "help", "src=s")
29
  or die "bad options";
30
 
31
sub print_help;
32
sub do_src;
33
sub do_file;
34
 
35
my @snum2nam;
36
my %snam2num;
37
my %dat_all;
38
my %dat_km;
39
my %dat_um;
40
 
41
autoflush STDOUT 1 if (-p STDOUT);          # autoflush if output into pipe
42
 
43
if (exists $opts{help}) {
44
  print_help;
45
  exit 0;
46
}
47
 
48
if (scalar(@ARGV) == 0) {
49
  print STDERR "dmscntconv-E: no input file specified\n";
50
  print_help;
51
  exit 1;
52
}
53
 
54
$opts{src} = $ENV{RETROBASE} . "/rtl/w11a/pdp11_sequencer.vhd"
55
  unless defined $opts{src};
56
 
57
do_src($opts{src});
58
 
59
foreach my $file (@ARGV) {
60
  do_file($file);
61
}
62
 
63
print "#sn state                      all          km         usm" .
64
      "    all%    km%   usm%\n";
65
 
66
my $sum_all = 0;
67
my $sum_km  = 0;
68
my $sum_um  = 0;
69
 
70
foreach (keys %dat_all) {
71
  $sum_all += $dat_all{$_};
72
  $sum_km  += $dat_km{$_};
73
  $sum_um  += $dat_um{$_};
74
}
75
 
76
my $div_all = ($sum_all>0.) ? $sum_all : 1.;
77
my $div_km  = ($sum_km >0.) ? $sum_km  : 1.;
78
my $div_um  = ($sum_um >0.) ? $sum_um  : 1.;
79
 
80
printf "#   sum_all            %11.0f %11.0f %11.0f  %6.2f %6.2f %6.2f\n",
81
    $sum_all, $sum_km, $sum_um,
82
    100., 100.*($sum_km/$sum_all), 100.*($sum_um/$sum_all);
83
 
84
for (my $snum=0; $snum
85
  my $snam = $snum2nam[$snum];
86
  next unless defined $snam;
87
  my $pc_all = 100. * ($dat_all{$snam} / $div_all);
88
  my $pc_km  = 100. * ($dat_km{$snam}  / $div_all);
89
  my $pc_um  = 100. * ($dat_um{$snam}  / $div_all);
90
  printf " %2.2x %-18s %11.0f %11.0f %11.0f  %6.2f %6.2f %6.2f\n",
91
    $snum, $snam, $dat_all{$snam}, $dat_km{$snam}, $dat_um{$snam},
92
    $pc_all, $pc_km, $pc_um;
93
}
94
 
95
 
96
#-------------------------------------------------------------------------------
97
 
98
sub do_src {
99
  my ($file) = @_;
100
 
101
  open SFILE,"<$file" or die "failed to open $file";
102
 
103
  my $begin_seen;
104
  while () {
105
    chomp;
106
    if (m/^\s*-- STATE2SNUM mapper begin/) {
107
      $begin_seen = 1;
108
      next;
109
    }
110
    next unless $begin_seen;
111
    last if m/^\s*-- STATE2SNUM mapper end/;
112
    next if m/^\s*$/;
113
    if (m/^\s+when
114
          \s+(\w+)
115
          \s+=>\s*isnum\s*:=
116
          \s*x"([[:xdigit:]]+)";/x) {
117
      my $snam=$1;
118
      my $snum=hex($2);
119
      $snum2nam[$snum] = $snam;
120
      $snam2num{$snam} = $snum;
121
    } else {
122
      printf STDERR "bad line: $_\n";
123
    }
124
 
125
  }
126
 
127
  close SFILE;
128
}
129
 
130
#-------------------------------------------------------------------------------
131
 
132
sub do_file {
133
  my ($file) = @_;
134
 
135
  %dat_km  = ();
136
  %dat_um  = ();
137
  %dat_all = ();
138
 
139
  open IFILE,"<$file" or die "failed to open $file";
140
 
141
  while () {
142
    chomp;
143
    next if m/^#/;
144
    if (m/^\s*([[:xdigit:]]+)
145
          \s+([[:xdigit:]]+)
146
          \s+([[:xdigit:]]+)
147
          \s+([[:xdigit:]]+)\s*$/x) {
148
      my $sn = hex($1);
149
      my $d2  = hex($2);
150
      my $d1  = hex($3);
151
      my $d0  = hex($4);
152
      my $cnt = 1. * $d0;
153
      $cnt += 65536. * $d1;
154
      $cnt += 65536.*65536.* $d2;
155
      my $snum = $sn % 256;
156
      my $km   = $sn < 256;
157
      my $snam = $snum2nam[$snum];
158
      if (defined $snam) {
159
        $dat_all{$snam} += $cnt;
160
        if ($km) {
161
          $dat_km{$snam}  += $cnt;
162
        } else {
163
          $dat_um{$snam}  += $cnt;
164
        }
165
      } else {
166
        printf STDERR "bad snum: $_\n" if $cnt;
167
      }
168
    } else {
169
      printf STDERR "bad line: $_\n";
170
    }
171
  }
172
 
173
  close IFILE;
174
 
175
}
176
 
177
#-------------------------------------------------------------------------------
178
 
179
sub print_help {
180
  print "usage: dmscntconv [--src=source] file\n";
181
  print "  --help           this message\n";
182
}

powered by: WebSVN 2.1.0

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