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

Subversion Repositories jtag_stapl_player

[/] [jtag_stapl_player/] [trunk/] [idcode.jam] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 sukhanov
NOTE "CREATOR" "Altera Chain Interrogation Version 5.0";
2
'               Copyright (c) 1999-2007 Altera Corporation.  All Rights Reserved.
3
'               File name:  IDCODE.JAM
4
 
5
NOTE "DATE" "2007/12/24";
6
NOTE "ALG_VERSION" "1";
7
NOTE "STAPL_VERSION" "JESD71";
8
NOTE "MAX_FREQ" "10000000";
9
 
10
ACTION read_idcode = header                    RECOMMENDED,
11
                     check_chain               RECOMMENDED,
12
                     compute_number_of_devices RECOMMENDED,
13
                     compute_ir_length         RECOMMENDED,
14
                     read_the_idcode           RECOMMENDED,
15
                     device_identifier         RECOMMENDED,
16
                     exiting;
17
 
18
DATA data_chain;
19
  ' Global Constants
20
  INTEGER max_num_devices = 100;
21
  INTEGER max_ir_length = 1020; 'Suggested value (max_devices)*10 + ~20 extra
22
  INTEGER max_idlength = max_num_devices * 32;
23
  BOOLEAN all_zeros[3200];
24
  BOOLEAN all_ones[3200] =   $FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
25
                              FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
26
                              FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
27
                              FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
28
                              FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
29
                              FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
30
                              FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
31
                              FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
32
  BOOLEAN zeros_ones[max_ir_length*2]
33
                           = $FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
34
                              FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
35
                              FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
36
                              0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
37
                              0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
38
                              0000000000000000000000000000000000000000000000000000000;
39
  BOOLEAN patterns[3200] =   $FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
40
                              FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
41
                              FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
42
                              FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
43
                              FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
44
                              FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
45
                              FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
46
                              FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4321;
47
  BOOLEAN id_capture[3200] = $FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
48
                              FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
49
                              FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
50
                              FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
51
                              FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
52
                              FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
53
                              FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
54
                              FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
55
  ' Global Variables
56
  INTEGER num_devices = max_num_devices; 'Initialize to max_num_devices in case compute_number_of_devices is skipped.
57
  BOOLEAN read_instruction[1600];
58
  INTEGER ir_length;
59
  BOOLEAN ir_capture[max_ir_length];
60
  INTEGER device_list[max_num_devices]; 'Stores a list of integers representing the device names
61
  BOOLEAN read_data[2*max_ir_length];
62
  BOOLEAN stuck_tdo_flag; 'temporary flag
63
  INTEGER i_device;
64
  INTEGER offset;
65
  BOOLEAN idval[32];
66
  BOOLEAN id_match;
67
  BOOLEAN id_match_cum;
68
ENDDATA;
69
 
70
PROCEDURE header;
71
  PRINT "******************************************************************************";
72
  PRINT "* Altera Chain Interrogation Version 5.0                                     *";
73
  PRINT "*   Copyright (c) 1999-2007 Altera Corporation.  All Rights Reserved.        *";
74
ENDPROC;
75
 
76
PROCEDURE check_chain USES data_chain;
77
  PRINT "******************************************************************************";
78
  PRINT "Chain Continuity Checker";
79
  STATE RESET;
80
  IRSCAN max_ir_length, all_ones[(max_ir_length-1)..0], COMPARE all_ones[(max_ir_length-1)..0], all_ones[(max_ir_length-1)..0], stuck_tdo_flag;
81
  IF (stuck_tdo_flag == 1) THEN PRINT "  ****************************************************************************";
82
  IF (stuck_tdo_flag == 1) THEN PRINT "  *** Chain Continuity Failure (1) -- IR is returning TDO with all ones    ***";
83
  IF (stuck_tdo_flag == 1) THEN PRINT "  *** Check Cable Connection; Check Cable Power; Check Signal Integrity    ***";
84
  IF (stuck_tdo_flag == 1) THEN PRINT "  *** Check TDO connection; Check TDO polarity of Player                   ***";
85
  IF (stuck_tdo_flag == 1) THEN PRINT "  ****************************************************************************";
86
  IF (stuck_tdo_flag == 1) THEN EXIT (1);
87
  STATE RESET;
88
  IRSCAN max_ir_length, all_ones[(max_ir_length-1)..0], COMPARE all_zeros[(max_ir_length-1)..0], all_ones[(max_ir_length-1)..0], stuck_tdo_flag;
89
  IF (stuck_tdo_flag == 1) THEN PRINT "  ****************************************************************************";
90
  IF (stuck_tdo_flag == 1) THEN PRINT "  *** Chain Continuity Failure (2) -- IR is returning with TDO all zeros   ***";
91
  IF (stuck_tdo_flag == 1) THEN PRINT "  *** Check Board Power; Check Cable Power; Check Signal Integrity         ***";
92
  IF (stuck_tdo_flag == 1) THEN PRINT "  ****************************************************************************";
93
  IF (stuck_tdo_flag == 1) THEN EXIT (1);
94
  'XXXXXXXXX Should add test for leading 10 for IR capture of first device
95
  PRINT "  Chain Continuity during IR is not stuck at zero or one";
96
  'XXXXXXXXX Should add test for known pattern coming out of TDO
97
ENDPROC;
98
 
99
PROCEDURE compute_number_of_devices USES data_chain;
100
  PRINT "******************************************************************************";
101
  PRINT "Chain Length -- Load IR of all ones then count DR length";
102
  INTEGER device_count;
103
  num_devices = 0;
104
  STATE RESET;
105
  IRSCAN max_ir_length, all_ones[max_ir_length-1..0], CAPTURE ir_capture[max_ir_length-1..0];
106
  DRSCAN (max_num_devices+1+16), patterns[max_num_devices+16..0], CAPTURE read_data[max_num_devices+16..0];
107
  FOR device_count=0 TO max_num_devices - 1;
108
    IF (read_data[device_count] == 0) THEN num_devices = num_devices + 1;
109
    IF (read_data[device_count] != 0) THEN device_count = max_num_devices - 1; 'terminating condition
110
  NEXT device_count;
111
  BOOLEAN pattern_det;
112
  pattern_det =   (read_data[num_devices     ] == 1)  'Array compare to value $4321
113
               && (read_data[num_devices +  1] == 0)
114
               && (read_data[num_devices +  2] == 0)
115
               && (read_data[num_devices +  3] == 0)
116
               && (read_data[num_devices +  4] == 0)
117
               && (read_data[num_devices +  5] == 1)
118
               && (read_data[num_devices +  6] == 0)
119
               && (read_data[num_devices +  7] == 0)
120
               && (read_data[num_devices +  8] == 1)
121
               && (read_data[num_devices +  9] == 1)
122
               && (read_data[num_devices + 10] == 0)
123
               && (read_data[num_devices + 11] == 0)
124
               && (read_data[num_devices + 12] == 0)
125
               && (read_data[num_devices + 13] == 0)
126
               && (read_data[num_devices + 14] == 1)
127
               && (read_data[num_devices + 15] == 0);
128
 
129
  IF (pattern_det == 0) THEN PRINT "  ****************************************************************************";
130
  IF (pattern_det == 0) THEN PRINT "  *** Chain Continuity Failure (3) -- DR of Bypass detects an unexpected   ***";
131
  IF (pattern_det == 0) THEN PRINT "  *** non-zero pattern                                                     ***";
132
  IF (pattern_det == 0) THEN PRINT "  *** Check JTAG Chain -- Probably a break in TDI to TDO chain between     ***";
133
  IF (pattern_det == 0) THEN PRINT "  *** devices #",num_devices," and #", num_devices+1, " (counting from TDO) because ", num_devices, " zeros were shifted   ***";
134
  IF (pattern_det == 0) THEN PRINT "  *** out successfully before encountering the unexpected values.          ***";
135
  IF (pattern_det == 0) THEN PRINT "  *** Check Signal Integrity                                               ***";
136
  IF (pattern_det == 0) THEN PRINT "  ****************************************************************************";
137
  IF (pattern_det == 0) THEN EXIT(2);
138
  PRINT "  Number of Devices is ", num_devices;
139
  IF (num_devices == 0) THEN PRINT "  ****************************************************************************";
140
  IF (num_devices == 0) THEN PRINT "  *** Chain Continuity Failure (4) -- DR of Bypass shows Chain length of   ***";
141
  IF (num_devices == 0) THEN PRINT "  *** zero devices                                                         ***";
142
  IF (num_devices == 0) THEN PRINT "  *** Check JTAG Chain; Check Signal Integrity                             ***";
143
  IF (num_devices == 0) THEN PRINT "  ****************************************************************************";
144
  IF (num_devices == 0) THEN EXIT(2);
145
  IF (num_devices > 100) THEN PRINT "  ****************************************************************************";
146
  IF (num_devices > 100) THEN PRINT "  *** Error: Number devices in chain exceeds maximum number of devices     ***";
147
  IF (num_devices > 100) THEN PRINT "  *** that this file can support.                                          ***";
148
  IF (num_devices > 100) THEN PRINT "  ****************************************************************************";
149
  IF (num_devices > 100) THEN EXIT(2);
150
ENDPROC;
151
 
152
PROCEDURE compute_ir_length USES data_chain;
153
  PRINT "******************************************************************************";
154
  PRINT "IR Length Calculator";
155
  IRSCAN max_ir_length*2, zeros_ones[(max_ir_length*2-1)..0], CAPTURE read_data[(max_ir_length*2-1)..0];
156
  ir_length = 0;
157
  INTEGER i_irlen;
158
  FOR i_irlen = (max_ir_length) TO (max_ir_length*2-1);
159
    IF (read_data[i_irlen] == 0) THEN ir_length = ir_length + 1;
160
  NEXT i_irlen;
161
  PRINT "  Instruction Register Length is ", ir_length;
162
ENDPROC;
163
 
164
PROCEDURE read_the_idcode USES data_chain;
165
  PRINT "******************************************************************************";
166
  PRINT "IDCODE Reader";
167
  STATE RESET;
168
  DRSCAN max_idlength, all_ones[max_idlength-1..0], CAPTURE id_capture[max_idlength-1..0];
169
  PRINT "  ---------- | ---- ------------------- ------------- - |";
170
  PRINT "  TDO -> TDI | Rev  Device              Mfgr          1 |";
171
  PRINT "  ---------- | ---- ------------------- ------------- - |";
172
  offset = 0;
173
  FOR i_device = 1 to num_devices;
174
    IF (id_capture[offset] == 0) THEN GOTO no_optional_idcode_read;
175
      'IDCODE supported
176
      PRINT "  Device #", i_device, "  | " ,
177
        'revision
178
        id_capture[offset + 31], id_capture[offset + 30], id_capture[offset + 29], id_capture[offset + 28], " ",
179
        'device
180
        id_capture[offset + 27], id_capture[offset + 26], id_capture[offset + 25], id_capture[offset + 24], " ",
181
        id_capture[offset + 23], id_capture[offset + 22], id_capture[offset + 21], id_capture[offset + 20], " ",
182
        id_capture[offset + 19], id_capture[offset + 18], id_capture[offset + 17], id_capture[offset + 16], " ",
183
        id_capture[offset + 15], id_capture[offset + 14], id_capture[offset + 13], id_capture[offset + 12], " ",
184
        'vendor
185
        id_capture[offset + 11], id_capture[offset + 10], id_capture[offset +  9], id_capture[offset +  8], " ",
186
        id_capture[offset +  7], id_capture[offset +  6], id_capture[offset +  5], id_capture[offset +  4], " ",
187
        id_capture[offset +  3], id_capture[offset +  2], id_capture[offset +  1], " ",
188
        'mandatory 1
189
        id_capture[offset], " | ";
190
       offset = offset + 32;
191
        GOTO end_device_idcode_read;
192
      'IDCODE not supported
193
      no_optional_idcode_read:
194
        PRINT "  Device #", i_device, "  | .... .... .... .... .... .... .... ... 0 | No IDCODE support";
195
        offset = offset+1;
196
    end_device_idcode_read:
197
  NEXT i_device;
198
  PRINT "  ---------- | ---- ------------------- ------------- - |";
199
  ' Should add test for remaining bits being 1
200
ENDPROC;
201
 
202
PROCEDURE device_identifier USES data_chain, compare_one_idval, compare_known_idvals;
203
  PRINT "******************************************************************************";
204
  PRINT "Device Identifier -- Search for device name from list of device IDCODE values";
205
  PRINT "  ---------- |      ------------------- -------------   |";
206
  PRINT "  TDO -> TDI |      Device              Mfgr            |";
207
  PRINT "  ---------- |      ------------------- -------------   |";
208
  offset = 0;
209
  FOR i_device = 1 to num_devices;
210
    IF (id_capture[offset] == 0) THEN GOTO no_optional_idcode_ident;
211
    'IDCODE supported
212
      CALL compare_known_idvals;
213
      offset = offset + 32;
214
      GOTO end_device_idcode_ident;
215
    'IDCODE not supported
216
    no_optional_idcode_ident:
217
      PRINT "  Device #", i_device, "  |      No IDCODE support                   |";
218
      offset = offset+1;
219
    end_device_idcode_ident:
220
  NEXT i_device;
221
  PRINT "  ---------- |      ------------------- ------------- - |";
222
  ' Should add test for remaining bits being 1
223
ENDPROC;
224
 
225
PROCEDURE compare_known_idvals USES data_chain, compare_one_idval;
226
  id_match_cum = 0;
227
  '***** Altera MAX 7000 *****
228
  idval[31..0] = $070320DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPM7032S            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 1;
229
  idval[31..0] = $070640DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPM7064S            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 2;
230
  idval[31..0] = $070960DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPM7096S            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 3;
231
  idval[31..0] = $071280DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPM7128S/A          Altera          |"; IF id_match == 1 THEN device_list[i_device] = 4;
232
  idval[31..0] = $071600DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPM7160S            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 5;
233
  idval[31..0] = $071920DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPM7192S            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 6;
234
  idval[31..0] = $072560DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPM7256S/A          Altera          |"; IF id_match == 1 THEN device_list[i_device] = 7;
235
  idval[31..0] = $170320DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPM7032AE/EPM3032A  Altera          |"; IF id_match == 1 THEN device_list[i_device] = 8;
236
  idval[31..0] = $170640DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPM7064AE/EPM3064A  Altera          |"; IF id_match == 1 THEN device_list[i_device] = 9;
237
  idval[31..0] = $171280DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPM7128AE/EPM3128A  Altera          |"; IF id_match == 1 THEN device_list[i_device] = 10;
238
  idval[31..0] = $172560DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPM7256AE/EPM3256A  Altera          |"; IF id_match == 1 THEN device_list[i_device] = 11;
239
  idval[31..0] = $175120DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPM7512AE/EPM3512A  Altera          |"; IF id_match == 1 THEN device_list[i_device] = 12;
240
  idval[31..0] = $270320DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPM7032B            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 13;
241
  idval[31..0] = $270640DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPM7064B            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 14;
242
  idval[31..0] = $271280DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPM7128B            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 15;
243
  idval[31..0] = $272560DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPM7256B            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 16;
244
  idval[31..0] = $275120DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPM7512B            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 17;
245
 
246
  '***** Altera MAX 9000 *****
247
  idval[31..0] = $093200DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPM9320/A           Altera          |"; IF id_match == 1 THEN device_list[i_device] = 18;
248
  idval[31..0] = $094000DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPM9400             Altera          |"; IF id_match == 1 THEN device_list[i_device] = 19;
249
  idval[31..0] = $094800DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPM9480             Altera          |"; IF id_match == 1 THEN device_list[i_device] = 20;
250
  idval[31..0] = $095600DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPM9560/A           Altera          |"; IF id_match == 1 THEN device_list[i_device] = 21;
251
 
252
  '***** Altera MAX II *****
253
  idval[31..0] = $020A10DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPM240              Altera          |"; IF id_match == 1 THEN device_list[i_device] = 22;
254
  idval[31..0] = $020A20DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPM570              Altera          |"; IF id_match == 1 THEN device_list[i_device] = 23;
255
  idval[31..0] = $020A30DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPM1270             Altera          |"; IF id_match == 1 THEN device_list[i_device] = 24;
256
  idval[31..0] = $020A40DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPM2210             Altera          |"; IF id_match == 1 THEN device_list[i_device] = 25;
257
  idval[31..0] = $020A50DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPM240Z             Altera          |"; IF id_match == 1 THEN device_list[i_device] = 26;
258
  idval[31..0] = $020A60DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPM570Z             Altera          |"; IF id_match == 1 THEN device_list[i_device] = 27;
259
 
260
  '***** Altera EPC *****
261
  idval[31..0] = $010020DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPC2                Altera          |"; IF id_match == 1 THEN device_list[i_device] = 28;
262
  idval[31..0] = $0100A0DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPC4/EPC8/EPC16     Altera          |"; IF id_match == 1 THEN device_list[i_device] = 29;
263
 
264
  '***** Altera APEX 20K/E/C *****
265
  idval[31..0] = $004160DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP20K100            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 30;
266
  idval[31..0] = $008320DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP20K200            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 31;
267
  idval[31..0] = $016640DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP20K400            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 32;
268
  idval[31..0] = $080300DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP20K30E            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 33;
269
  idval[31..0] = $080600DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP20K60E            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 34;
270
  idval[31..0] = $081000DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP20K100E           Altera          |"; IF id_match == 1 THEN device_list[i_device] = 35;
271
  idval[31..0] = $081600DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP20K160E           Altera          |"; IF id_match == 1 THEN device_list[i_device] = 36;
272
  idval[31..0] = $082000DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP20K200E/C         Altera          |"; IF id_match == 1 THEN device_list[i_device] = 37;
273
  idval[31..0] = $083000DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP20K300E           Altera          |"; IF id_match == 1 THEN device_list[i_device] = 38;
274
  idval[31..0] = $084000DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP20K400E/C         Altera          |"; IF id_match == 1 THEN device_list[i_device] = 39;
275
  idval[31..0] = $086000DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP20K600E/C         Altera          |"; IF id_match == 1 THEN device_list[i_device] = 40;
276
  idval[31..0] = $090000DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP20K1000E/C        Altera          |"; IF id_match == 1 THEN device_list[i_device] = 41;
277
  idval[31..0] = $095000DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP20K1500E          Altera          |"; IF id_match == 1 THEN device_list[i_device] = 42;
278
 
279
  '***** Altera APEX II *****
280
  idval[31..0] = $0C4000DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP2A15              Altera          |"; IF id_match == 1 THEN device_list[i_device] = 43;
281
  idval[31..0] = $0C6000DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP2A25              Altera          |"; IF id_match == 1 THEN device_list[i_device] = 44;
282
  idval[31..0] = $0D0000DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP2A40              Altera          |"; IF id_match == 1 THEN device_list[i_device] = 45;
283
  idval[31..0] = $0E0000DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP2A70              Altera          |"; IF id_match == 1 THEN device_list[i_device] = 46;
284
 
285
  '***** Altera FLEX10K/E and ACEX 1K *****
286
  idval[31..0] = $010100DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPF10K10/A          Altera          |"; IF id_match == 1 THEN device_list[i_device] = 47;
287
  idval[31..0] = $010200DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPF10K20            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 48;
288
  idval[31..0] = $010300DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPF10K30/A          Altera          |"; IF id_match == 1 THEN device_list[i_device] = 49;
289
  idval[31..0] = $010400DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPF10K40            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 50;
290
  idval[31..0] = $010500DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPF10K50/V          Altera          |"; IF id_match == 1 THEN device_list[i_device] = 51;
291
  idval[31..0] = $010700DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPF10K70            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 52;
292
  idval[31..0] = $001000DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPF10K100/A         Altera          |"; IF id_match == 1 THEN device_list[i_device] = 53;
293
  idval[31..0] = $001300DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPF10K130V          Altera          |"; IF id_match == 1 THEN device_list[i_device] = 54;
294
  idval[31..0] = $002500DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPF10K250A          Altera          |"; IF id_match == 1 THEN device_list[i_device] = 55;
295
  idval[31..0] = $101000DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPF10K100B          Altera          |"; IF id_match == 1 THEN device_list[i_device] = 56;
296
  idval[31..0] = $110100DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP1K10              Altera          |"; IF id_match == 1 THEN device_list[i_device] = 57;
297
  idval[31..0] = $110300DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP1K30/EPF10K30E    Altera          |"; IF id_match == 1 THEN device_list[i_device] = 58;
298
  idval[31..0] = $110500DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP1K50/EPF10K50E/S  Altera          |"; IF id_match == 1 THEN device_list[i_device] = 59;
299
  idval[31..0] = $201000DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP1K100/EPF10K100E  Altera          |"; IF id_match == 1 THEN device_list[i_device] = 60;
300
  idval[31..0] = $101300DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPF10K130E          Altera          |"; IF id_match == 1 THEN device_list[i_device] = 61;
301
  idval[31..0] = $102000DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EPF10K200E/S        Altera          |"; IF id_match == 1 THEN device_list[i_device] = 62;
302
 
303
  '***** Altera Stratix *****
304
  idval[31..0] = $020010DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP1S10              Altera          |"; IF id_match == 1 THEN device_list[i_device] = 63;
305
  idval[31..0] = $020020DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP1S20              Altera          |"; IF id_match == 1 THEN device_list[i_device] = 64;
306
  idval[31..0] = $020030DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP1S25              Altera          |"; IF id_match == 1 THEN device_list[i_device] = 65;
307
  idval[31..0] = $020040DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP1S30              Altera          |"; IF id_match == 1 THEN device_list[i_device] = 66;
308
  idval[31..0] = $020050DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP1S40              Altera          |"; IF id_match == 1 THEN device_list[i_device] = 67;
309
  idval[31..0] = $020060DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP1S60              Altera          |"; IF id_match == 1 THEN device_list[i_device] = 68;
310
  idval[31..0] = $020070DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP1S80              Altera          |"; IF id_match == 1 THEN device_list[i_device] = 69;
311
 
312
  '***** Altera Stratix II*****
313
  idval[31..0] = $020910DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP2S15              Altera          |"; IF id_match == 1 THEN device_list[i_device] = 70;
314
  idval[31..0] = $020920DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP2S30              Altera          |"; IF id_match == 1 THEN device_list[i_device] = 71;
315
  idval[31..0] = $120930DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP2S60              Altera          |"; IF id_match == 1 THEN device_list[i_device] = 72;
316
  idval[31..0] = $020940DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP2S90              Altera          |"; IF id_match == 1 THEN device_list[i_device] = 73;
317
  idval[31..0] = $020950DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP2S130             Altera          |"; IF id_match == 1 THEN device_list[i_device] = 74;
318
  idval[31..0] = $020960DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP2S180             Altera          |"; IF id_match == 1 THEN device_list[i_device] = 75;
319
 
320
'***** Altera Stratix III *****
321
  idval[31..0] = $021080DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP3SL50             Altera          |"; IF id_match == 1 THEN device_list[i_device] = 76;
322
  idval[31..0] = $021010DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP3SL70             Altera          |"; IF id_match == 1 THEN device_list[i_device] = 77;
323
  idval[31..0] = $021090DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP3SL110            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 78;
324
  idval[31..0] = $021020DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP3SL150            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 79;
325
  idval[31..0] = $021030DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP3SL200            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 80;
326
  idval[31..0] = $021050DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP3SL340            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 81;
327
  idval[31..0] = $021060DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP3SE50             Altera          |"; IF id_match == 1 THEN device_list[i_device] = 82;
328
  idval[31..0] = $0210A0DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP3SE80             Altera          |"; IF id_match == 1 THEN device_list[i_device] = 83;
329
  idval[31..0] = $021070DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP3SE110            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 84;
330
  idval[31..0] = $021040DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP3SE260            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 85;
331
 
332
  '***** Altera Stratix GX *****
333
  idval[31..0] = $020410DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP1SGX10            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 86;
334
  idval[31..0] = $020430DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP1SGX25            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 87;
335
  idval[31..0] = $020450DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP1SGX40            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 88;
336
 
337
'***** Altera Stratix II GX *****
338
  idval[31..0] = $020E10DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP2SGX30            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 89;
339
  idval[31..0] = $020E20DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP2SGX60            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 90;
340
  idval[31..0] = $020E30DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP2SGX90            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 91;
341
  idval[31..0] = $020E40DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP2SGX130           Altera          |"; IF id_match == 1 THEN device_list[i_device] = 92;
342
 
343
'***** Altera Arria GX *****
344
  idval[31..0] = $021210DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP1AGX20            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 93;
345
  idval[31..0] = $021210DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP1AGX35            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 94;
346
  idval[31..0] = $021220DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP1AGX50            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 95;
347
  idval[31..0] = $021220DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP1AGX60            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 96;
348
  idval[31..0] = $021230DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP1AGX90            Altera          |"; IF id_match == 1 THEN device_list[i_device] = 97;
349
 
350
  '***** Altera Cyclone *****
351
  idval[31..0] = $020810DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP1C3               Altera          |"; IF id_match == 1 THEN device_list[i_device] = 98;
352
  idval[31..0] = $020850DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP1C4               Altera          |"; IF id_match == 1 THEN device_list[i_device] = 99;
353
  idval[31..0] = $020820DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP1C6               Altera          |"; IF id_match == 1 THEN device_list[i_device] = 100;
354
  idval[31..0] = $020830DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP1C12              Altera          |"; IF id_match == 1 THEN device_list[i_device] = 101;
355
  idval[31..0] = $020840DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP1C20              Altera          |"; IF id_match == 1 THEN device_list[i_device] = 102;
356
 
357
  '***** Altera Cyclone II*****
358
  idval[31..0] = $020B10DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP2C5               Altera          |"; IF id_match == 1 THEN device_list[i_device] = 103;
359
  idval[31..0] = $020B20DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP2C8               Altera          |"; IF id_match == 1 THEN device_list[i_device] = 104;
360
  idval[31..0] = $020B30DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP2C20              Altera          |"; IF id_match == 1 THEN device_list[i_device] = 105;
361
  idval[31..0] = $020B40DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP2C35              Altera          |"; IF id_match == 1 THEN device_list[i_device] = 106;
362
  idval[31..0] = $020B50DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP2C50              Altera          |"; IF id_match == 1 THEN device_list[i_device] = 107;
363
  idval[31..0] = $020B60DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP2C70              Altera          |"; IF id_match == 1 THEN device_list[i_device] = 108;
364
 
365
  '***** Altera Cyclone III*****
366
  idval[31..0] = $020F10DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP3C5               Altera          |"; IF id_match == 1 THEN device_list[i_device] = 109;
367
  idval[31..0] = $020F10DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP3C10              Altera          |"; IF id_match == 1 THEN device_list[i_device] = 110;
368
  idval[31..0] = $020F20DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP3C16              Altera          |"; IF id_match == 1 THEN device_list[i_device] = 111;
369
  idval[31..0] = $020F30DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP3C25              Altera          |"; IF id_match == 1 THEN device_list[i_device] = 112;
370
  idval[31..0] = $020F40DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP3C40              Altera          |"; IF id_match == 1 THEN device_list[i_device] = 113;
371
  idval[31..0] = $020F50DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP3C55              Altera          |"; IF id_match == 1 THEN device_list[i_device] = 114;
372
  idval[31..0] = $020F60DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP3C80              Altera          |"; IF id_match == 1 THEN device_list[i_device] = 115;
373
  idval[31..0] = $020F70DD;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      EP3C120             Altera          |"; IF id_match == 1 THEN device_list[i_device] = 116;
374
 
375
  '***** Xilinx XC9500 (Xilinx does weird stuff with their version number) *****
376
  idval[31..0] = $09502093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XC9536              Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 117;
377
  idval[31..0] = $29502093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XC9536(rev2)        Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 118;
378
  idval[31..0] = $09504093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XC9572              Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 119;
379
  idval[31..0] = $19504093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XC9572(rev1)        Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 120;
380
  idval[31..0] = $29504093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XC9572(rev2)        Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 121;
381
  idval[31..0] = $09506093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XC95108             Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 122;
382
  idval[31..0] = $19506093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XC95108(rev1)       Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 123;
383
  idval[31..0] = $29506093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XC95108(rev2)       Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 124;
384
  idval[31..0] = $09508093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XC95144             Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 125;
385
  idval[31..0] = $09512093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XC95216             Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 126;
386
  idval[31..0] = $19512093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XC95216(rev1)       Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 127;
387
  idval[31..0] = $29512093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XC95216(rev2)       Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 128;
388
  idval[31..0] = $09516093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XC95288             Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 129;
389
  idval[31..0] = $29516093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XC95288(rev2)       Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 130;
390
 
391
  '***** Xilinx XC9500XL (Xilinx does weird stuff with their version number) *****
392
  idval[31..0] = $09602093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XC9536XL            Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 131;
393
  idval[31..0] = $19602093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XC9536XL(rev1)      Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 132;
394
  idval[31..0] = $29602093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XC9536XL(rev2)      Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 133;
395
  idval[31..0] = $09604093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XC9572XL            Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 134;
396
  idval[31..0] = $29504093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XC9572(rev2)        Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 135;
397
  idval[31..0] = $09616093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XC95288XL           Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 136;
398
  idval[31..0] = $29616093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XC95288XL(rev2)     Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 137;
399
 
400
  '***** Xilinx Virtex (Xilinx does weird stuff with their version number) *****
401
  idval[31..0] = $20610093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XCV50               Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 138;
402
  idval[31..0] = $20614093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XCV100              Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 139;
403
  idval[31..0] = $20618093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XCV150              Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 140;
404
  idval[31..0] = $2061C093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XCV200              Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 141;
405
  idval[31..0] = $20620093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XCV300              Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 142;
406
  idval[31..0] = $20628093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XCV400              Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 143;
407
  idval[31..0] = $20630093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XCV600              Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 144;
408
  idval[31..0] = $20638093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XCV800              Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 145;
409
  idval[31..0] = $20640093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XCV1000             Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 146;
410
 
411
  '***** Xilinx Virtex-E (Xilinx does weird stuff with their version number) *****
412
  idval[31..0] = $20A10093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XCV50E              Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 147;
413
  idval[31..0] = $20A14093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XCV100E             Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 148;
414
  idval[31..0] = $20A1C093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XCV200E             Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 149;
415
  idval[31..0] = $20A20093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XCV300E             Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 150;
416
  idval[31..0] = $20A28093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XCV400E             Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 151;
417
  idval[31..0] = $20A30093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XCV600E             Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 152;
418
  idval[31..0] = $20A40093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XCV1000E            Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 153;
419
  idval[31..0] = $20A48093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XCV1600E            Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 154;
420
  idval[31..0] = $20A50093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XCV2000E            Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 155;
421
  idval[31..0] = $20A5C093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XCV2600E            Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 156;
422
  idval[31..0] = $20A68093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XCV3200E            Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 157;
423
 
424
  '***** Xilinx Config Device (Xilinx does weird stuff with their version number) *****
425
  idval[31..0] = $05024093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XC18V01             Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 158;
426
  idval[31..0] = $05025093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XC18V02             Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 159;
427
  idval[31..0] = $05026093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XC18V04             Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 160;
428
  idval[31..0] = $05022093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XC18V256            Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 161;
429
  idval[31..0] = $05023093;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      XC18V512            Xilinx          |"; IF id_match == 1 THEN device_list[i_device] = 162;
430
 
431
  '***** Lattice Mach-5 *****
432
  idval[31..0] = $07815003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5-128/68-T100      Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 163;
433
  idval[31..0] = $07817003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5-128/68-P100      Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 164;
434
  idval[31..0] = $07819003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5-128/104-P144     Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 165;
435
  idval[31..0] = $0781B003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5-128/120-P160     Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 166;
436
  idval[31..0] = $07825003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5-192/68-T100      Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 167;
437
  idval[31..0] = $07827003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5-192/68-P100      Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 168;
438
  idval[31..0] = $07829003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5-192/104-P144     Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 169;
439
  idval[31..0] = $0782B003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5-192/120-P160     Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 170;
440
  idval[31..0] = $0782F003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5-192/160-P208     Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 171;
441
  idval[31..0] = $07845003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5-256/68-T100      Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 172;
442
  idval[31..0] = $07847003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5-256/68-P100      Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 173;
443
  idval[31..0] = $07849003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5-256/104-P144     Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 174;
444
  idval[31..0] = $0784B003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5-256/120-P160     Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 175;
445
  idval[31..0] = $0784F003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5-256/160-P208     Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 176;
446
  idval[31..0] = $07851003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5-320/120-P160     Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 177;
447
  idval[31..0] = $07853003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5-320/160-P208     Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 178;
448
  idval[31..0] = $07857003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5-320/192-B256     Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 179;
449
  idval[31..0] = $07863003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5-384/160-P208     Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 180;
450
  idval[31..0] = $07873003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5-512/160-P208     Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 181;
451
  idval[31..0] = $07879003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5-512/256-B352     Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 182;
452
 
453
  '***** Lattice Mach-5LV *****
454
  idval[31..0] = $07814003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5LV-128/68-T100    Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 183;
455
  idval[31..0] = $07816003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5LV-128/68-P100    Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 184;
456
  idval[31..0] = $07810003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5LV-128/74-T100    Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 185;
457
  idval[31..0] = $07812003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5LV-128/104-T144   Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 186;
458
  idval[31..0] = $07818003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5LV-128/104-P144   Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 187;
459
  idval[31..0] = $0781A003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5LV-128/120-P160   Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 188;
460
  idval[31..0] = $07846003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5LV-256/68-P100    Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 189;
461
  idval[31..0] = $07840003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5LV-256/74-T100    Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 190;
462
  idval[31..0] = $07848003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5LV-256/104-P144   Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 191;
463
  idval[31..0] = $07842003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5LV-256/104-T144   Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 192;
464
  idval[31..0] = $0784B003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5LV-256/120-P160   Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 193;
465
  idval[31..0] = $0784E003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5LV-256/160-P208   Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 194;
466
  idval[31..0] = $07850003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5LV-320/120-P160   Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 195;
467
  idval[31..0] = $07852003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5LV-320/160-P208   Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 196;
468
  idval[31..0] = $07856003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5LV-320/192-B256   Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 197;
469
  idval[31..0] = $07860003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5LV-384/120-P160   Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 198;
470
  idval[31..0] = $07862003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5LV-384/160-P208   Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 199;
471
  idval[31..0] = $07870003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5LV-512/120-P160   Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 200;
472
  idval[31..0] = $07872003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5LV-512/160-P208   Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 201;
473
  idval[31..0] = $07878003;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      M5LV-512/256-B352   Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 202;
474
 
475
  '***** Lattice ispLSI5000VE *****
476
  idval[31..0] = $0036A043;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      ISPLSI5512VE        Lattice         |"; IF id_match == 1 THEN device_list[i_device] = 203;
477
 
478
'***** Cypress Delta 39K *****
479
  idval[31..0] = $00031069;  CALL compare_one_idval; IF id_match == 1 THEN PRINT "  Device #", i_device, "  |      CY39100             Cypress         |"; IF id_match == 1 THEN device_list[i_device] = 204;
480
 
481
  '***** ADDING ADDITIONAL DEVICES                                                       *****
482
  '***** Users of this file are welcome to add as many other devices as they wish here.  *****
483
  '***** Each additional entry must be for a particular unique 32-bit value for IDCODE.  *****
484
  '***** Suggest copying one of the above lines and edit the idval, string and device    *****
485
  '***** list index.
486
 
487
  IF id_match_cum == 0 THEN                                                PRINT "  Device #", i_device, "  |      Unknown IDCODE                      |"; IF id_match == 1 THEN device_list[i_device] = 0;
488
ENDPROC;
489
 
490
PROCEDURE compare_one_idval USES data_chain;
491
' This entire function exists because boolean array comparisons are not supported.
492
  id_match = 1;
493
  INTEGER i_32;
494
  FOR i_32 = 0 to 31;
495
    id_match = id_match && (idval[i_32] == id_capture[offset + i_32]);
496
  NEXT i_32;
497
  id_match_cum = id_match || id_match_cum;
498
ENDPROC;
499
 
500
PROCEDURE exiting;
501
  PRINT "******************************************************************************";
502
  EXIT (0);
503
ENDPROC;
504
 
505
CRC F760;

powered by: WebSVN 2.1.0

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