Commit | Line | Data |
---|---|---|
86530b38 AT |
1 | ################################################################################ |
2 | # | |
3 | # tap diag assembler for OpenSPARC T1 | |
4 | # | |
5 | ################################################################################ | |
6 | ||
7 | # compile the tap diag | |
8 | open (TAP_IN, "< diag.tap") or die ("DIE. could not open diag.tap") ; | |
9 | open (TAP_OUT, "> tap.cmd") or die ("DIE. could not open tap.cmd") ; | |
10 | ||
11 | my $count = 0 ; | |
12 | ||
13 | while (<TAP_IN>) | |
14 | { | |
15 | $count++ ; | |
16 | my $line = $_ ; | |
17 | $line =~ s/\/\/.*?$// ; | |
18 | $line =~ s/^\s+// ; | |
19 | $line =~ s/\s+$// ; | |
20 | ||
21 | if ($line =~ /^\s*$/) { next ; } | |
22 | elsif ($line =~ /^rd/i) | |
23 | { | |
24 | $line =~ s/^rdo/1/i ; | |
25 | $line =~ s/^rdc/2/i ; | |
26 | $line =~ s/^rdm/3/i ; | |
27 | ||
28 | my ($code, $addr, $data, $mask) = split (/\s+/, $line) ; | |
29 | ||
30 | die ("DIE. Tap cmd address must be 40 bits wide at line $count") if (length ($addr) != 10) ; | |
31 | die ("DIE. Tap cmd data must be 64 bits wide at line $count") if (length ($data) != 16) ; | |
32 | die ("DIE. Tap cmd mask must be 64 bits wide at line $count") if (length ($mask) != 16) ; | |
33 | $line = "${code}_${addr}_${data}_${mask}" ; | |
34 | } | |
35 | elsif ($line =~ /^wri/i) | |
36 | { | |
37 | $line =~ s/^wri/4/i ; | |
38 | ||
39 | my ($code, $addr, $data) = split (/\s+/, $line) ; | |
40 | ||
41 | die ("DIE. Tap cmd address must be 40 bits wide at line $count") if (length ($addr) != 10) ; | |
42 | die ("DIE. Tap cmd data must be 64 bits wide at line $count") if (length ($data) != 16) ; | |
43 | ||
44 | $line = "${code}_${addr}_${data}_ffffffffffffffff" ; | |
45 | } | |
46 | elsif ($line =~ /^ssc/i) | |
47 | { | |
48 | $line =~ s/^ssc/8/i ; | |
49 | ||
50 | my ($code, $addr, $data, $mask) = split (/\s+/, $line) ; | |
51 | ||
52 | die ("DIE. Tap cmd address must be 40 bits wide at line $count") if (length ($addr) != 10) ; | |
53 | die ("DIE. Tap cmd data must be 64 bits wide at line $count") if (length ($data) != 16) ; | |
54 | die ("DIE. Tap cmd mask must be 64 bits wide at line $count") if (length ($mask) != 16) ; | |
55 | $line = "${code}_${addr}_${data}_${mask}" ; | |
56 | } | |
57 | elsif ($line =~ /^sid/i) | |
58 | { | |
59 | $line =~ s/^sid/9/i ; | |
60 | ||
61 | my ($code, $addr, $data, $mask) = split (/\s+/, $line) ; | |
62 | ||
63 | die ("DIE. Tap cmd address must be 40 bits wide at line $count") if (length ($addr) != 10) ; | |
64 | die ("DIE. Tap cmd data must be 64 bits wide at line $count") if (length ($data) != 16) ; | |
65 | die ("DIE. Tap cmd mask must be 64 bits wide at line $count") if (length ($mask) != 16) ; | |
66 | $line = "${code}_${addr}_${data}_${mask}" ; | |
67 | } | |
68 | elsif ($line =~ /^shs/i) | |
69 | { | |
70 | $line =~ s/^shs/a/i ; | |
71 | ||
72 | my ($code, $addr, $data, $mask) = split (/\s+/, $line) ; | |
73 | ||
74 | die ("DIE. Tap cmd address must be 40 bits wide at line $count") if (length ($addr) != 10) ; | |
75 | die ("DIE. Tap cmd data must be 64 bits wide at line $count") if (length ($data) != 16) ; | |
76 | die ("DIE. Tap cmd mask must be 64 bits wide at line $count") if (length ($mask) != 16) ; | |
77 | $line = "${code}_${addr}_${data}_${mask}" ; | |
78 | } | |
79 | elsif ($line =~ /^tpb/i) | |
80 | { | |
81 | $line = "b_0000000000_0000000000000000_0000000000000000" ; | |
82 | } | |
83 | elsif ($line =~ /^efc_byp/i) | |
84 | { | |
85 | $line =~ s/^efc_byp/c/i ; | |
86 | ||
87 | my ($code, $addr, $data, $mask) = split (/\s+/, $line) ; | |
88 | ||
89 | die ("DIE. Tap cmd address must be 40 bits wide at line $count") if (length ($addr) != 10) ; | |
90 | die ("DIE. Tap cmd data must be 64 bits wide at line $count") if (length ($data) != 16) ; | |
91 | die ("DIE. Tap cmd mask must be 64 bits wide at line $count") if (length ($mask) != 16) ; | |
92 | $line = "${code}_${addr}_${data}_${mask}" ; | |
93 | } | |
94 | elsif ($line =~ /^bis_abrt/i) | |
95 | { | |
96 | $line = "d_0000000000_0000000000000000_0000000000000000" ; | |
97 | } | |
98 | elsif ($line =~ /^end/i) { $line = "5_0000000000_0000000000000000_0000000000000000" ; } | |
99 | elsif ($line =~ /^del/i) | |
100 | { | |
101 | $line =~ s/^del/7/i ; | |
102 | ||
103 | my ($code, $addr) = split (/\s+/, $line) ; | |
104 | ||
105 | die ("DIE. Tap cmd address must be 40 bits wide at line $count") if (length ($addr) != 10) ; | |
106 | ||
107 | $line = "${code}_${addr}_0000000000000000_0000000000000000" ; | |
108 | } | |
109 | elsif ($line =~ /^stc/i) ## clk stretch | |
110 | { | |
111 | $line =~ s/^stc/6/i ; | |
112 | ||
113 | my ($code, $addr) = split (/\s+/, $line) ; | |
114 | ||
115 | die ("DIE. Tap cmd address must be 40 bits wide at line $count") if (length ($addr) != 10) ; | |
116 | ||
117 | $line = "${code}_${addr}_0000000000000000_0000000000000000" ; | |
118 | } | |
119 | else { die ("DIE. Illegal command in diag.tap at line $count") ; } | |
120 | ||
121 | $line =~ s/\s+/_/g ; | |
122 | print TAP_OUT "$line\n" ; | |
123 | } | |
124 | ||
125 | # force the end command | |
126 | print TAP_OUT "5_0000000000_0000000000000000_0000000000000000\n" ; | |
127 | ||
128 | close (TAP_IN) ; | |
129 | close (TAP_OUT) ; |