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

Subversion Repositories w11

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

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

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