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

Subversion Repositories w11

[/] [w11/] [tags/] [w11a_V0.7/] [tools/] [bin/] [ticonv_pdpcp] - Blame information for rev 28

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 19 wfjm
#!/usr/bin/perl -w
2 28 wfjm
# $Id: ticonv_pdpcp 622 2014-12-28 20:45:26Z mueller $
3 19 wfjm
#
4 25 wfjm
# Copyright 2013-2014 by Walter F.J. Mueller 
5 19 wfjm
#
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 28 wfjm
# 2014-12-27   622   1.2.1  use wmembe now
18 27 wfjm
# 2014-12-07   609   1.2    use rlink::anena (for rlink v4)
19
# 2014-07-31   576   1.1    add --cmax option (default = 3); support .sdef
20 25 wfjm
# 2014-07-26   575   1.0.4  add --tout option (sets wtcpu timeout)
21 22 wfjm
# 2013-05-19   521   1.0.3  use -be subopt of -wibrb
22 19 wfjm
# 2013-04-12   504   1.0.2  renamed from pi2ti_pdpcp; fix [rm]wi handling
23
#                           use wtcpu command; use wibrbbe command;
24
# 2013-02-05   483   1.0.1  make cpucmd parametrizable
25
# 2013-02-02   480   1.0    Initial version
26
#
27
 
28
use 5.005;                                  # require Perl 5.005 or higher
29
use strict;                                 # require strict checking
30
 
31
use Getopt::Long;
32
 
33
my %opts = ();
34
 
35 25 wfjm
GetOptions(\%opts, "tout=f", "cmax=i"
36
          )
37
  or die "bad options";
38 19 wfjm
 
39 25 wfjm
sub cmdlist_do;
40
sub add_edata;
41
 
42
my @cmdlist;
43
 
44 19 wfjm
if (scalar(@ARGV) != 2) {
45
  print STDERR "%ticonv_pdpcp-E: usage: ticonv_pdpcp  \n";
46
  exit 1;
47
}
48
 
49
my $cpu  = $ARGV[0];
50
my $fnam = $ARGV[1];
51 25 wfjm
my $tout = $opts{tout} || 10.;
52
my $cmax = $opts{cmax} || 6;
53
 
54
my $ref_sdef = 0x00;                        # by default check for 'hard' errors
55
my $msk_sdef = 0xf0;                        # ignore the status bits + attn flag
56
 
57 19 wfjm
open IFILE, $fnam or die "failed to open '$fnam'";
58
 
59
while () {
60
  chomp;
61
  s/--.*//;                                 # drop all -- style comments
62
  s/\s*$//;                                 # drop traing blanks
63
  next if m/^#/;
64
 
65
  # print "$_\n";
66
 
67
  my $cmd = $_;
68
 
69
  $cmd =~ s/^rsp/rr6/;                      # rsp -> rr6
70
  $cmd =~ s/^rpc/rr7/;                      # rpc -> rr7
71
  $cmd =~ s/^wsp/wr6/;                      # wsp -> wr6
72
  $cmd =~ s/^wpc/wr7/;                      # wpc -> wr7
73
 
74
  # C... comments -> write to rlc log --------------------------------
75
  if ($cmd =~ /^C(.*)/) {
76 25 wfjm
    cmdlist_do();
77 19 wfjm
    my $msg = $1;
78
    $msg =~ s/"/'/g;
79
    $msg =~ s/\[/\{/g;
80
    $msg =~ s/\]/\}/g;
81
    print "rlc log \"C $msg\"\n";
82
 
83
  # .tocmd,.tostp,.togo,.cerr,.merr -> ignore, like pi_rri -----------
84 25 wfjm
  } elsif ($cmd =~ /^\.(tocmd|tostp|togo|[cm]err)\s+(\d*)$/) {
85 19 wfjm
    print "# $cmd currently ignored\n";
86
 
87
  # .mode mode -> accept only 'pdpcp', quit otherwise ----------------
88 25 wfjm
  } elsif ($cmd =~ /^\.mode\s+(.*)$/) {
89 19 wfjm
    if ($1 ne "pdpcp") {
90
      print "# FAIL: $cmd not supported\n";
91
      exit 1;
92
    }
93
 
94 25 wfjm
  # .sdef s=ref[,msk] ------------------------------------------------
95
  } elsif ($cmd =~ /^\.sdef\s+s=([01]+),?([01]*)$/) {
96
    cmdlist_do();
97
    $ref_sdef = oct("0b$1");
98
    $msk_sdef = oct("0b$2");
99
 
100 19 wfjm
  # .rlmon,.rbmon ----------------------------------------------------
101 25 wfjm
  } elsif ($cmd =~ /^\.(r[lb]mon)\s+(\d)$/) {
102
    cmdlist_do();
103 19 wfjm
    print "rlc oob -$1 $2\n";
104
 
105
  # .scntl -----------------------------------------------------------
106 25 wfjm
  } elsif ($cmd =~ /^\.scntl\s+(\d+)\s+(\d)$/) {
107
    cmdlist_do();
108 19 wfjm
    print "rlc oob -sbcntl $1 $2\n";
109
 
110 27 wfjm
  # .anena (0|1) -> rlink::anena n -----------------------------------
111 25 wfjm
  } elsif ($cmd =~ /^\.anena\s+(\d)$/) {
112
    cmdlist_do();
113 27 wfjm
    print "rlink::anena $1\n";
114 19 wfjm
    print "rlc exec -attn\n";
115
 
116
  # .reset -----------------------------------------------------------
117 25 wfjm
  } elsif ($cmd =~ /^\.reset$/) {
118
    cmdlist_do();
119 19 wfjm
    print "rlc exec -init 0 1\n";
120
 
121
  # (write) data type commands: wrx,wps,wal,wah,wm,wmi,stapc ---
122 25 wfjm
  # Note: 'stapc' must be decoded before 'sta' !!
123 19 wfjm
  # Note: 'wibrb' must be handled separately
124
  # Note: 'wmi' must be matched before 'wm'
125 25 wfjm
  } elsif ($cmd =~ /^(wr[0-7]|wps|wal|wah|wmi|wm|stapc)\s+([0-7]+)$/) {
126
    push @cmdlist, "-$1 0$2";
127 19 wfjm
 
128 28 wfjm
  # (write) data type commands: wmembe ---
129
  } elsif ($cmd =~ /^wmembe\s+([01]+)/) {
130
    my $val   = oct("0b$1");
131
    my $be    = $val & 0x3;
132
    my $stick = $val & 0x4;
133
    if ($stick == 0) {
134
      push @cmdlist, "-wmembe $be";
135 19 wfjm
    } else {
136 28 wfjm
      push @cmdlist, "-wmembe $be -stick";
137 19 wfjm
    }
138
 
139
  # (read) [d=data] type commands: rrx,rps,rm,rmi --------------------
140
  # Note: 'rmi' must be matched before 'rm'
141
  } elsif ($cmd =~ /^(rr[0-7]|rps|rmi|rm)/) {
142 25 wfjm
    push @cmdlist, "-$1 ";
143 19 wfjm
    add_edata($');
144
 
145
  # bwm n ------------------------------------------------------------
146 25 wfjm
  } elsif ($cmd =~ /^bwm\s+(\d+)$/) {
147 19 wfjm
    my $nw = $1;
148 25 wfjm
    push @cmdlist, "-bwm {";
149 19 wfjm
    for (my $i=0; $i<$nw;) {
150
      my $dat = ;
151
      $dat =~ s/--.*//;
152
      $dat =~ s/\s*//g;
153
      next if $dat =~ m/^#/;
154 25 wfjm
      $cmdlist[-1] .= " 0$dat";
155 19 wfjm
      $i++;
156
    }
157 25 wfjm
    $cmdlist[-1] .= "}";
158
    cmdlist_do();
159 19 wfjm
 
160
  # brm n ------------------------------------------------------------
161 25 wfjm
  } elsif ($cmd =~ /^brm\s+(\d+)$/) {
162 19 wfjm
    my $nw = $1;
163 25 wfjm
    push @cmdlist, "-brm $1";
164 19 wfjm
    my @data;
165
    my @mask;
166
    my $domask;
167
    for (my $i=0; $i<$nw;) {
168
      my $dat = ;
169
      $dat =~ s/--.*//;
170
      $dat =~ s/\s*//g;
171
      next if $dat =~ m/^#/;
172
      if ($dat =~ m/d=([0-7]+)/ ) {
173
        push @data, "0$1";
174
        push @mask, "0";
175
      } elsif ($dat =~ m/d=-/) {
176
        push @data, "0";
177
        push @mask, "0177777";
178
        $domask = 1;
179
      } else {
180
        exit 1;
181
      }
182
      $i++;
183
    }
184 25 wfjm
    $cmdlist[-1] .= " -edata {" . join(" ",@data) . "}";
185
    $cmdlist[-1] .= " {" . join(" ",@mask) . "}" if $domask;
186
    cmdlist_do();
187 19 wfjm
 
188
  # wibr off data ---------------------------------------------------
189 25 wfjm
  } elsif ($cmd =~ /^(wibr)\s+([0-7]+)\s+([0-7]+)$/) {
190
    push @cmdlist, "-$1 0$2 0$3";
191 19 wfjm
 
192
  # ribr off [d=data] ------------------------------------------------
193
  } elsif ($cmd =~ /^(ribr)\s+([0-7]+)/) {
194 25 wfjm
    push @cmdlist, "-$1 0$2";
195 19 wfjm
    add_edata($');
196
 
197
  # simple action commands: sta,sto,cont,step,rst --------------------
198 25 wfjm
  } elsif ($cmd =~ /^(sta|sto|cont|step|rst)$/) {
199 19 wfjm
    my %cmdmap = (sta  => 'start',
200
                  sto  => 'stop',
201
                  cont => 'continue',
202
                  step => 'step',
203
                  rst  => 'reset');
204 25 wfjm
    push @cmdlist, sprintf "-%s", $cmdmap{$1};
205 19 wfjm
 
206
  # wtgo -> wtcpu ----------------------------------------------------
207 25 wfjm
  } elsif ($cmd =~ /^(wtgo)$/) {
208
    cmdlist_do();
209
    print "$cpu wtcpu $tout";
210 19 wfjm
    print "\n";
211
 
212
  # wtlam apat -------------------------------------------------------
213
  # Note: apat currently ignored !!
214
  } elsif ($cmd =~ /^(wtlam)/) {
215 25 wfjm
    cmdlist_do();
216
    print "$cpu wtcpu $tout";
217 19 wfjm
    print "\n";
218
 
219
  # currently unimplemented commands ... -----------------------------
220 25 wfjm
  } elsif ($cmd =~ /^(\.wait)/) {
221 19 wfjm
    print "## TODO... $cmd\n";
222
 
223
  } else {
224
    print "# FAIL: no match for '$cmd'\n";
225
    exit 1;
226
  }
227
 
228 25 wfjm
  cmdlist_do() if scalar(@cmdlist) >= $cmax;
229
 
230 19 wfjm
}
231
 
232 25 wfjm
cmdlist_do();
233
exit 0;
234
 
235
#-------------------------------------------------------------------------------
236 19 wfjm
sub add_edata {
237
  my ($crest) = @_;
238
  $crest =~ s/\s+//;
239
  if ($crest =~ m/d=([0-7]+)/) {
240 25 wfjm
    $cmdlist[-1] .= " -edata 0$1";
241 19 wfjm
  }
242
}
243 25 wfjm
 
244
#-------------------------------------------------------------------------------
245
sub cmdlist_do {
246
  return unless scalar(@cmdlist);
247
 
248
#  printf "$cpu cp \\\n";
249
  printf "$cpu cp -estatdef 0x%2.2x 0x%2.2x \\\n", $ref_sdef, $msk_sdef;
250
  while (scalar(@cmdlist)) {
251
    print "        ";
252
    print shift @cmdlist;
253
    print " \\\n" if scalar(@cmdlist);
254
  }
255
  print "\n";
256
  @cmdlist = ();
257
  return;
258
}
259
 

powered by: WebSVN 2.1.0

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