Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / tools / perlmod / tapasm,1.4
CommitLineData
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) ;