]> rtime.felk.cvut.cz Git - fpga/rpi-motor-control.git/blob - pmsm-control/rpi_mc_simple_dc.stp
pridan stp soubor
[fpga/rpi-motor-control.git] / pmsm-control / rpi_mc_simple_dc.stp
1 NOTE "CREATOR" "Designer Version: 11.3.0.112";\r
2 NOTE "CAPTURE" "11.3.0.112";\r
3 NOTE "DEVICE" "AGL125V5";\r
4 NOTE "PACKAGE" "AGL125V5-vq100";\r
5 NOTE "DATE" "2014/10/07";\r
6 NOTE "TIME" "15:09:52";\r
7 NOTE "STAPL_VERSION" "JESD71";\r
8 NOTE "VENDOR" "Microsemi Corporation";\r
9 NOTE "IDCODE" "03A121CF";\r
10 NOTE "IDMASK" "06FFFFFF";\r
11 NOTE "DESIGN" "rpi_mc_simple_dc";\r
12 NOTE "DESIGN_DIRECTORY" "/home/pi/fpga/rpi-mc-1/simple-dc/";\r
13 NOTE "CHECKSUM" "D5FF";\r
14 NOTE "SECURITY" "Disable";\r
15 NOTE "ALG_VERSION" "20";\r
16 NOTE "MAP_VERSION" "1";\r
17 NOTE "TOOL_VERSION" "1";\r
18 NOTE "MAX_FREQ" "10000000";\r
19 NOTE "SILSIG" "00000000";\r
20 NOTE "SPEED_GRAD" "STD";\r
21 NOTE "TEMP_GRAD" "COM";\r
22 NOTE "PLAYER_VERSION_VARIABLE" "PLAYERVERSIONVARIABLE";\r
23 NOTE "PLAYER_VERSION_SW_VARIABLE" "PLAYERVERSIONSWVARIABLE";\r
24 \r
25 ACTION PROGRAM = \r
26        VERIFY_IDCODE,\r
27        SET_PRG_ARRAY,\r
28        W_INITIALIZE,\r
29        DO_ERASE,\r
30        DO_PROGRAM,\r
31        DO_VERIFY_BOL,\r
32        DO_PROGRAM_RLOCK,\r
33        DO_VERIFY_PGM_RLOCK,\r
34        DO_EXIT;\r
35 ACTION PROGRAM_ARRAY = \r
36        VERIFY_IDCODE,\r
37        SET_PRG_ARRAY,\r
38        AW_INITIALIZE,\r
39        DO_ERASE_ARRAY,\r
40        DO_PROGRAM,\r
41        DO_VERIFY_BOL,\r
42        DO_PROGRAM_RLOCK,\r
43        DO_VERIFY_PGM_RLOCK,\r
44        DO_EXIT;\r
45 ACTION ERASE_ARRAY = \r
46        VERIFY_IDCODE,\r
47        AW_INITIALIZE,\r
48        DO_ERASE_ARRAY_ONLY,\r
49        DO_EXIT;\r
50 ACTION ERASE = \r
51        VERIFY_IDCODE,\r
52        W_INITIALIZE,\r
53        DO_ERASE_ONLY,\r
54        DO_EXIT;\r
55 ACTION ERASE_ALL = \r
56        VERIFY_IDCODE,\r
57        INITIALIZE,\r
58        DO_ERASE_ALL,\r
59        DO_EXIT;\r
60 ACTION VERIFY = \r
61        VERIFY_IDCODE,\r
62        R_INITIALIZE,\r
63        DO_VERIFY_EOL,\r
64        DO_VERIFY_RLOCK,\r
65        DO_EXIT;\r
66 ACTION VERIFY_ARRAY = \r
67        VERIFY_IDCODE,\r
68        AR_INITIALIZE,\r
69        DO_VERIFY_EOL,\r
70        DO_VERIFY_RLOCK,\r
71        DO_EXIT;\r
72 ACTION READ_IDCODE = \r
73        DO_READ_IDCODE;\r
74 ACTION VERIFY_DEVICE_INFO = \r
75        VERIFY_IDCODE,\r
76        READ_INITIALIZE,\r
77        READ_IDCODE_ONLY,\r
78        DO_VERIFY_DEVICE_INFO,\r
79        DO_EXIT;\r
80 ACTION DEVICE_INFO = \r
81        VERIFY_IDCODE,\r
82        READ_INITIALIZE,\r
83        READ_IDCODE_ONLY,\r
84        DO_DEVICE_INFO,\r
85        DO_QUERY_SECURITY,\r
86        DO_EXIT;\r
87 \r
88 \r
89 \r
90 DATA CONSTBLOCK;\r
91     INTEGER IEEE1532=0;\r
92     INTEGER STAPL=1;\r
93     INTEGER DIRECTC=2;\r
94     INTEGER PDB=3;\r
95     INTEGER SVF=4;\r
96     INTEGER FP=0;\r
97     INTEGER FPLITE=1;\r
98     INTEGER FP3=2;\r
99     INTEGER SCULPTW=3;\r
100     INTEGER BPW=4;\r
101     INTEGER DIRECTCP=5;\r
102     INTEGER STP=6;\r
103     INTEGER FP4=7;\r
104     INTEGER FP33=0;\r
105     INTEGER FP34=1;\r
106     INTEGER FP40=2;\r
107     INTEGER FP41=3;\r
108     INTEGER FP42=4;\r
109     INTEGER FP50=5;\r
110     INTEGER FP51=6;\r
111     INTEGER FP60=7;\r
112     INTEGER FP61=8;\r
113     INTEGER FP62=9;\r
114     INTEGER FP84=11;\r
115     INTEGER FP85=12;\r
116     INTEGER FP86=13;\r
117     INTEGER FP90=14;\r
118     INTEGER FP91=15;\r
119     INTEGER FP100=16;\r
120     INTEGER FP_11=19;\r
121     INTEGER FP_11_1=20;\r
122     INTEGER FP_11_2=21;\r
123     INTEGER FP_11_3=22;\r
124     INTEGER UNKNOWN=127;\r
125     INTEGER UNSPECIFIED=0;\r
126     INTEGER QN132=1;\r
127     INTEGER VQ100=2;\r
128     INTEGER TQ144=3;\r
129     INTEGER PQ208=4;\r
130     INTEGER FG144=5;\r
131     INTEGER FG256=6;\r
132     INTEGER FG484=7;\r
133     INTEGER FG676=8;\r
134     INTEGER FG896=9;\r
135     INTEGER QN108=10;\r
136     INTEGER QN180=11;\r
137     INTEGER TQ100=12;\r
138     INTEGER CQ208=13;\r
139     INTEGER FG1152=14;\r
140     INTEGER BG456=15;\r
141     INTEGER UNDEFINED=63;\r
142     INTEGER GRADE_UNSPEC=0;\r
143     INTEGER GRADE_1=1;\r
144     INTEGER GRADE_2=2;\r
145     INTEGER GRADE_3=3;\r
146     INTEGER GRADE_F=4;\r
147     INTEGER GRADE_STD=5;\r
148     INTEGER GRADE_4=6;\r
149     INTEGER GRADE_UNDEF=7;\r
150 ENDDATA;\r
151 \r
152 DATA PARAMETERS;\r
153     INTEGER FREQ =4;\r
154 ENDDATA;\r
155 \r
156 DATA GV;\r
157     INTEGER ULOPT1_BITLOCATION =11;\r
158     INTEGER ULOPT0_BITLOCATION =10;\r
159     INTEGER ULUWE_BITLOCATION =9;\r
160     INTEGER ULARE_BITLOCATION =8;\r
161     INTEGER ULUPC_BITLOCATION =7;\r
162     INTEGER ULUFE_BITLOCATION =6;\r
163     INTEGER ULUFP_BITLOCATION =5;\r
164     INTEGER ULUFJ_BITLOCATION =4;\r
165     INTEGER ULFLR_BITLOCATION =3;\r
166     INTEGER ULULR_BITLOCATION =2;\r
167     INTEGER ULAWE_BITLOCATION =1;\r
168     INTEGER ULARD_BITLOCATION =0;\r
169     BOOLEAN BUFF128[128];\r
170     BOOLEAN BUFF32[32];\r
171     INTEGER I;\r
172     INTEGER J;\r
173     INTEGER TEMP;\r
174     INTEGER SDNUMBER;\r
175     INTEGER ROWNUMBER;\r
176     INTEGER DATAINDEX =0;\r
177     INTEGER FROMROWNUMBER =1;\r
178     INTEGER AESBLOCK;\r
179     BOOLEAN ID[32];\r
180     BOOLEAN PASS = 1;\r
181     BOOLEAN FADDR[3];\r
182     INTEGER STATUS =0;\r
183     BOOLEAN SILSIG[32] = $00000000;\r
184     BOOLEAN ISC_CONFIG_RESULT[18];\r
185     BOOLEAN VERIFYEOL[2];\r
186     BOOLEAN COMBERASESELECT[23];\r
187     BOOLEAN SECKEY_OK = 1;\r
188     BOOLEAN SECREG[44];\r
189     BOOLEAN ULUWE = 0;\r
190     BOOLEAN ULARE = 0;\r
191     BOOLEAN ULUPC = 0;\r
192     BOOLEAN ULUFE = 0;\r
193     BOOLEAN ULUFP = 0;\r
194     BOOLEAN ULUFJ = 0;\r
195     BOOLEAN ULFLR = 0;\r
196     BOOLEAN ULULR = 0;\r
197     BOOLEAN ULAWE = 0;\r
198     BOOLEAN ULARD = 0;\r
199     BOOLEAN ULOPT[2];\r
200     BOOLEAN SUROWCHECKSUM[16];\r
201     INTEGER SUROWCYCLECOUNT =0;\r
202     INTEGER ACT_UROW_CYCLE_COUNT =0;\r
203     BOOLEAN ACT_UROW_DESIGN_NAME[70] = $138797f6de3fb9e5db;\r
204     BOOLEAN SUROWDESIGNNAME[70];\r
205     BOOLEAN SUROWPROGMETHOD[3];\r
206     BOOLEAN ACT_UROW_ALGO_VERSION[7] = $14;\r
207     BOOLEAN SUROWALGOVERSION[7];\r
208     BOOLEAN SUROW_PKG_TYPE[6];\r
209     BOOLEAN ACT_UROW_SW_VERSION[7];\r
210     BOOLEAN SUROW_SW_VERSION[7];\r
211     INTEGER PLAYERVERSIONVARIABLE =0;\r
212     INTEGER PLAYERVERSIONSWVARIABLE =0;\r
213     INTEGER SCULPTORMAJORBASE =5;\r
214     INTEGER SCULPTORMINORBASE =16;\r
215     BOOLEAN ACT_UROW_PROGRAM_SW[4];\r
216     BOOLEAN SUROWPROGRAMSW[4];\r
217     BOOLEAN SUROW_SPEED_GRADE[3];\r
218     BOOLEAN SUROW_SRAM_DISTURB[1];\r
219     BOOLEAN ISERASEONLY = 0;\r
220     BOOLEAN ISRESTOREDESIGN = 0;\r
221     BOOLEAN FLAGDISPLAYCYC = 1;\r
222     BOOLEAN ISPRGARRAY = 0;\r
223     BOOLEAN BSRPATTERN[564] = $9249249249249249249249249249249249249249249249249\r
224         249249249249249249249249249249249249249249249249249249249249249249249249\r
225         24924924924924924924;\r
226     BOOLEAN SAMPLEMASK[564] = $0000000000000000000000000000000000000000000000000\r
227         000000000000000000000000000000000000000000000000000000000000000000000000\r
228         00000000000000000000;\r
229     BOOLEAN BSR[564];\r
230     BOOLEAN SAMPLE_DEVICE[564];\r
231     BOOLEAN RLOCK[832] = $7fffffcffffffbfffffeffffffbfffffefffffffffffffffffff3f\r
232         ffffcffffff3fffffcffffff3fffffcffffff3fffffdffffff3fffffcffffff3fffffcff\r
233         ffff3fffffcffffff3fffffdffffffffffffffffffffffffffffffffffffffffffffffff\r
234         ffffffffff;\r
235     BOOLEAN ARRAYRONLY = 1;\r
236     BOOLEAN CHKARRAY = 0;\r
237     BOOLEAN FROMRONLY = 1;\r
238     BOOLEAN CHKFROM = 0;\r
239     BOOLEAN CHKNVM = 0;\r
240     BOOLEAN CHKSEC = 1;\r
241     BOOLEAN PERMLOCK = 0;\r
242     INTEGER HEX[16] = 70,69,68,67,66,65,57,56,55,54,53,52,51,50,49,48;\r
243     INTEGER NUMBEROFFROMROWS =8;\r
244     BOOLEAN INITIALIZE_DATA[5] = $00;\r
245     INTEGER SDTILE;\r
246     INTEGER NUMBEROFSDTILES =4;\r
247     INTEGER NUMBEROFMAPROWS =1244;\r
248     INTEGER IDREV;\r
249     INTEGER IDFAB;\r
250     INTEGER BM7DEVICE =0;\r
251     INTEGER BM1DEVICE =0;\r
252     BOOLEAN M1BUFF[128] = $acdd6548ccb488863e291eb18fe95077;\r
253     BOOLEAN M7BUFF[128] = $e137623a2eeee91126015f3f73664945;\r
254     BOOLEAN IDCODEVALUE[32] = $03a121cf;\r
255     BOOLEAN IDMASK[32] = $06ffffff;\r
256     INTEGER SECKEYCHK =0;\r
257     INTEGER DESIGNPKGTYPE =2;\r
258     BOOLEAN ACT_UROW_PROG_METHOD[3] = $1;\r
259     INTEGER LABEL_SEPARATOR =0;\r
260     INTEGER ROWITERATION =100;\r
261     INTEGER PAGEITERATION =100;\r
262     INTEGER PERCENT_UPDATE;\r
263     INTEGER DIFFERENCE;\r
264     INTEGER UNIQUEEXITCODE =0;\r
265 ENDDATA;\r
266 \r
267 DATA BITSTREAM;\r
268     BOOLEAN UROW[128];\r
269     BOOLEAN UROW_MASK[128] = $fffffffffffffffffffffffffe01ffc0;\r
270     BOOLEAN DATASTREAM[1035008] = @WbV00000110040W0W000020G000400108002200000Wwc\r
271         qqcso0000p@zlF999IDfjIo0000_@p@@IYaatcjj50000y_@@7HIIIGRRRR34OV@VGIIIYss\r
272         sqDGWt@@Haaa4ssqsUY1rW0fD994000u@@@xJIIYSRJYq4000a@@_VZa89P0000Y49996999\r
273         XFI00004999W8991sW1Yaaa8aaaKZ3GIII2IIIg601WHIYa0IIa400rm3899950000400O08\r
274         0IIIo4OGISGNS000009999rWFQRRRP9BBnXaa4b000WssMjvoIiDB9HIU000WRpss2BMsM49\r
275         9910000ijjjXjjjLGIIoXHWsssMqsosrm2osoWg14OZjb8PNIYaS0000RRsscPMIoa899P00\r
276         00JIIIYRBAREjjjwiDDPtaa89poaaORhssJJsaSIaaaALMIYPRRRKQQI29999aWWaWsssiaa\r
277         a8Xaa49H2MDW0DaacrW2iaiGpssMYqaqWaaa4JosMSRRRrHIRpC99HIkaDRpsMjjrazk20IQ\r
278         I2418000CqTg0IJIW808144XayWC85G022IYQ01cca800008BB9f6GWca4000GW8B89_M680\r
279         0200989G0000IIIa480HIWa0080OYP0GI208100Pq2IL40GIIADG0I22I80000899BY4C0Ce\r
280         6S0222Wsr28080g1900W0e6e080992000r04Wa48q9IGDDeDdaaayu1GIHJ4899H8000W000\r
281         0gb5RBaar04WccsAIIIASUWQJRpQW2OBJRh14i9DGfD99caaaSv1ORIIJ37GRRR3sMtcB999\r
282         Yz@@_tssiTizORJIYa4_l@@PRss6sklj9HII2x@@@XjjjDQPPRYaaa8_@@h15Gssci6eWtsM\r
283         4999n__@Vg14mssg4999k@@@RssscgjjjPIIIYu@@t7QRhsQR@j62i@sogTRRpsTRlsUjDRR\r
284         ijORxjPRRjPRRZcjjjabbj5ssssm__sCRRRpORRp6RRhsQxxQW2ijjjK3G0RRRMjjjniijDI\r
285         3CmssscvssMjRRRsCRRrsljb6GWz000040030OK3uKh31x0SC04Jdm52000g1q8qWcs2d60o\r
286         CEPjI5U269822b_AUY6Ue93j0D@F0eZ8O6y63XrV7C0Ohv2k4duiOA4411jOBa1Y008D0C02\r
287         W0YWaHq0DYJ8JuaF2efC108WZ1W5naW1080a40OPn2NCFewm1T0GO401r0Muqn51qMQUm21Q\r
288         M520GGdWaYCKGD06orIm5c62efCIIIIaaaaG999HGIIYiaa49A9922IIaaba89HIg1K0GIII\r
289         4aaaP080IIIYWaa49999IWaa899912GIg6G2aWaW8P9BL30XE1Da6W0P999r0q8Q08r00XIM\r
290         IIW409H3aHWJX6023JCqGd0CCEn1NSOGR1p0m00uFW42So18400TSeK0DD4uaM371IW6M5Xo\r
291         31QGYWa4aOBCX4aa49099GIGIaaaa0898bkH1r0O01180GYIInMW0X4W41999o0I2omm0IWI\r
292         Ir0KW4aa4A818H3iWWa0ae1I02I2IlY4GIGI0198P11J81999gZDgEGYC0MG080u_3CK3W1T\r
293         f4nQGEqmW6L2Q08999I100HAG06000GaaabPUGkXAimu1j7QGD0Wq9053kuGUQNC00BT2GXa\r
294         aa430000IIIa3000G99HI0000ma49920r0KW00000999vAGGD06asv1r0qHd0JKIn1caaae0\r
295         000KIIg@02KIIIMG01z8OID0Kq9m5X0O0GIIIK000L1G010000999o000w3uWM988HW4ECuW\r
296         Q06fJ0AobaWq0A0G99PQ04W899f608w48YQ06fJ0760u@10EgYbCMexegGM8Ti6UhRhe16Ag\r
297         m@2DOj0ET680GGS2a4oh19CCIWW_5mv@1s_Vy8s5SoS7taN8lo4qm@nmCLD0waNG41dW6100\r
298         WW7@J999PrR8GGIKAeE6KIII6lu5r0OW2IIoQ0e8uneKGII2aa4i6W82Uisfus8Wc@3Efs_A\r
299         O8sYKabaaKU171QuX4a4ie1kG2I2Iq0NCzO1H3C1988fe1Ae6032quWg3E8mH4E4ZYQ0qeXX\r
300         LAP4240001FkKd0ACj14G0002USfE1E8un@3Uy@10_V001FN5Y0QmAQWA2GhzW7lydnC2SYh\r
301         61Ge5Y32Uy@W7bS5262UqgJEkCU4e3Du@0qUhs_72Uiu0RnlanC2US4GIGI1FQM4Uh4@hr1d\r
302         yVmZX6RXO1QiM0QzKd85T2O12osMjD0002QRrsM0000eLRRx0000IjjjT0000g1e000ijQR3\r
303         0g1eWR29GRRR3001iQ0AG02RRD0A800Rpss0GQ08q9G4ijjjXaaa8tssaHIIY4QRRo299IIi\r
304         jPRda899ij6W24RRRN3W1i5IIg1W0DIIIamsci9IIY4OR3s499GIeDRR9ar0eGQ0B8nssEDW\r
305         3w4W0RRRQE9911jjjOdaa4fsscjHIIqaRRssC9HIYRpssAHII2DRRR19999h3qWjDi1baa4W\r
306         sMsaGIQM3W18DsseDHI2a4scjjTYaa4RsssEf1010000daaaG0000IIIgK0000999Q20000b\r
307         a89H0_P4Xp3F0IIIIVaAK3W1889Dn20G00aa4f10GD08q9G28500g3W09000WIIIam@@RV89\r
308         HIo@l@@a499n@_@VJaaWmx@@@HIIIY@@@@Q0CmZaaKD04Waaa4y@@l7IIIay@x_6IIg1W0BI\r
309         IHau@tzF99H2u@d@DaKQ0Bq9G2f1GWFIIIa0008ess6Uu0t1008WjjPQ1000escjj2000esx\r
310         7K000mcjjD0000GsssM004Wesstc00800RRQ_0000XjjPJ0080Xscjj0GQ0BC911ORRRx4mW\r
311         Q088um@dAFfOO8hdL223O402000G002fo0G000B@zGZ9cazAAD3OGg05i9O6nziTw1Q88008\r
312         eYb0401KTm522W02UCae1a8unnw4eZG3AeMgB2Uypu4iANvKYygpwH88un@Z6eceE8uMlE_A\r
313         9iU4OgPW426E601201DWub57qNHe1Fswg2C4y8K@0KHmZc04ba8unC0191r372aeaa8P895y\r
314         e14a4a8991HMIIAungaWaWK3G3aXaa81994yOP7DOGGG06pbAHT0H80A4ILANM4KmZ@NH118\r
315         889ZjmYQDA8UnE40995yO744aa89191IYIAG38WaWWK3G1Z2GGW6E09919uHS8080yaH4xCP\r
316         GD0K4SlCbCUHmZSK3W120ORrs60040ej60280Wj5yO5C0002UaX67T8unFqms8H2IYLRQRKm\r
317         Z5K3W1ejHII30XE1QWQRRRmZ6Ko81Wsss2UCXd088uHGqM99PIej5RBa499nMDjDIh3G0iDI\r
318         IaamsT2KHmZGKou11FQY910020GIr08Hd0M8X@@laHA2U44@399GI_@r@Za899_tt@JID04m\r
319         @7IYcayVmZRKou51Fo1e0eMjfj0hGaGD0580WsEunz70uumM0gUSC_kf9W000H3uGGGEE00d\r
320         N1PGJ3V4uqGH3iGWJ2suudt5SHmzBlIK1HjNOaASkgW61QWM@bsMGmD1FgOS2e6SIDxqbHm9\r
321         M5W6B1FMKm194ye9nnvGmZEq373r0i09809IIIGaWaa2UigQ0u8unl2WEkWJQFuniZjmgq0M\r
322         8un9g10XW7b8GZP2USZ7rGOd6N2UyaI6F8unDg1Gak8ZeaHD2USZQ0K8uH5g10Yk8V8unQg1\r
323         uWW7De6W7SIII2RRRhJ05g1uWW7pf603O9904yu7I0002UidQ0i8uHdg1eaW7@V0W@ZXPiOZ\r
324         79Q0PgLXZkXezniP2Sgce1o8un@ZlQt8lMBun@33x@0q_V005wRtWU4mi_4q2iDsW7ZIGIMI\r
325         zZS4yewXK5wfDN6yu@1FcJW6b5q0Q1FwLd074y8LT2GHmZKr9041FMMd064yu@30m7100W10\r
326         _FW6_3UixUph8unfY6WXW7@F0js11014vLPHuTO8Y@7Qm@1ePu00h5So@1FY7891fW7@Fua@\r
327         3Uy@W7@FuHlh1eYW7Xg6WA2UqgQ0a8uHcg1GaW7T5G00m00@F0WeHDr1010WOOGAQWD2swyG\r
328         JHBmfhYJbYI5_98a72Uy@0qgTJ3h33x@G3_Fun@3Ev@W77I2IMISSPq9G1aWWa2Uy@WJ_Fun\r
329         @3Uy@W7142qscjD0002PR1FAbbHIoE1WWDTIImZLHQejjJW3CDIIYWSRpM69PmZLHQ408uno\r
330         aWy@t9m1ktaa2U4BGKRRsK00w4u08mss1Fsp0096L8630yV0D@7yu@1FAOaNf4yu@1eP8W80\r
331         WWJ_FCi@3Gx@W7@Fun@3UabQ0_8un@31XszZe8ua@3Uy@W7vj602u0006y8LT241nss6TIII\r
332         WORR3UCgE1Kmq899IojjW7ngJ0A2UagE1K8unjw4eXW7JU0W@ZXvpOoKV0050200C00G0200\r
333         ANIae1Q8sle2Uy@0q_VdNjZ7nse1IeCX8gv4w0qU3200m00012008uHq1200KTWC7BmHd09i\r
334         4W31dK6MIIoW7LGGIIImZbO99B9EEC8O9957N5O999HGII6KtBMIII4aaW4yOwXK9Om9o555\r
335         H1F_Vq0rGGIIAunI2QOeu4g0200WijjD32001Fw4ijjDR1000assij30q9G1l9QWSQRxT49G\r
336         PRRRmZDn689f602K999HYjjLR7a49XosW7H0QIIImZ4Pcaa4XsscjGIor1EGA00G9ZE8D999\r
337         uHgaoz@7ye3C8993Ua8NIIITHgWFIIoR88eaH5W000WfjjDuHYWORRt5f2mQRRr000C0m@1F\r
338         _VmZ@F0mfFJNGWJE5dG5VMZGG3b9400eTAP23BZq0ae3F42UqugnL8gzf3Uy@0qOlY262hyh\r
339         0R@x7Lq2EfiuLC8mMbRSqWuukennCg1mZE1SW4aaLGTJ5yu@1qyVm9A6RXM8A993U4Z8MX8G\r
340         3d2UKeTgU8E1Aa0008RRRpa00GmZAm1000ijjTmZSG00ocjjD0G00uW7peBo8UJq0fqssl9I\r
341         0osssI6D8unIqqs6L301osM83U4Zk8NWqssc1III0PRR1FU0saaad0EennDGRRb889XcbjjG\r
342         D07GJIYDun7w4uWr1KeaH8qcaa4yeCqaa02Uy39O@@1Fw01IIoI6DenHEq@@GM3G32IIu3Uy\r
343         XE1E8un4E8WWW7LG2000assM5000WRRR3Ua320GjhGm0scssw7d8uH50rssM30130yVCCo79\r
344         9qz8ytrl4LZs91EX620000100HU9M9z@5y8hHGKNaA@7SIFZSgGpC@7qGZjCOG0DD7yufp28\r
345         HmZU7Kt41FcS8LG7yu@7I7HmZU1I2IAsYK2Uq2P898H3SX4a4a0DkG2IIImZhKf080202g18\r
346         Zy0_eanB2USZQ0QG00GRmZfKo851F6Ysss8IGI2QJRR19895yO8bCQ1paa49kjj1FcHD06mm\r
347         sMe602mss8L3031FUI9Z94y8Baaa001005yO7bCQXVIIoW75nx@@OD0Auz@V8unEAPCZW7ve\r
348         6030100M3m51FoRuSBD0m@13NUgzvE0W621002SwdE0O8mfg6vFYW7@FuHA@3uX88w0400Gm\r
349         9@t9WE1FIMaAGNGm1P@S2G02W0Q8gTz72USS20G01d0TD1P4y8MIGII2UCcq0I82FFGG2IM3\r
350         01IJI22UK7Y000131JylJMGWCb1amTDJ4QGL7vqI11nqnnDHT86oIIIcaaanbo3O91fOB69Q\r
351         0X8B985eX91dWcijjD7000WsssQSy0A000DEAHmZQK3W4T2G1RRRRA999x8QWaQRx67h8uHD\r
352         g1OYE1kenn4iIIIMo81IIIIKRRR7yO9r0mHd0D4ye2O0000JIIYS00eaH2q0000899Ho00Gm\r
353         ZiK3G2T2OXa_@V@B99Io_@BPa0Iz@@_laa89@@x@NIYaazVmZQK307T2CX7IIIa100bCU0GR\r
354         RRs2000mjjpQaWW7Bf60Ew40YW7VBGm@3Gx@W6_leCAANoekk29QW92wUjW7PQZj6s0WXW7@\r
355         FgThMjGiWJ_FWc@3Qu@W7nh60BwoqWWJqDgJB2UKA1991r0OHmZX4KND1FQJCCUL306Zhc12\r
356         02WQ0q8uaAhnMZWJY7300GW6K4Rn6IGIGwhm2WaWar00IW6d0HIIg9Z5Waaaq9m14a442quc\r
357         u4S1404GG3tORRRhan9O7004yODT2SnRY6Koe1DEkID0Tq905bCo0ojjjW7NgJ052UiE@III\r
358         a_@@3U4fE1Q8un6USuWW7FgJ082Uy@Wj_FeX@70ur0d6CuH1h1OpW7@Fua@Z6udTwiej0fY6\r
359         WZW6eDE1R2Uy@WJ_FunVg18ZW7PIGI2ImZp611E04002ev@WjWDkKh81195agUn9K644Wa8K\r
360         9W04400000IG2200000881H000e60e81900800YW5400C00Im3200C008e1H004e6WdodC1G\r
361         RRRs200Aca06000Wijj3h4dE1WW300Gd04KCv4KRRRr9995MvIT2GWjjjDdaaaWsssiJIIYK\r
362         RRx9W32hSdE1c8iI5W0000aaa4f00Gna4Ko81aaa43hKdE1cG2@@V_a7uJIIAVI2OIII2_@@\r
363         tF99PBbUK308T2qWFIIoF28eOo4kVW0ijjjA0002haeE1Q8iot60u@sS2jUBq2hy@mA@Fio@\r
364         3hy@mm8lj0i2YgW226BQ082Tx@mA@Fio@3hikmzc96cp0100C0W502002f2tWJ_FioQ88995\r
365         RX5IGIIYjGfmAXEun@3Uy@W7@V0W@3Uy@W7@Fun@h10tByQ8un@3sw@mMqE0j@3Uy@W7@Fun\r
366         @3Ev@WJ_FuHDYjmiW7@FuHKWjjjPB000WqsMd084yONi1IIw4W0LIII1FYbPIII4QRRs299N\r
367         7u0f0001FMcK_@@W7hobaaKd07G_@@t799vD444y8LGijjx4G1OjjjQ00060u@10W@czE2sw\r
368         @W7@Fun@3Gx@W7@FUaQ3Du@0Q_Fua@3EH602001F_VCCl6So@1F_VmZ@7y8BT2OGmZ4m1008\r
369         uno0ssss9011Fg5IjjjW7LeaHD2US9O999Iu@@3UyBm@@@k899@8WWW733KRRRD04C0m@308\r
370         VOo26yu@1F_VmZJ32008EXlYPLXW7@FU4v3k@@W7@Fun@3EvgW7@F66z04004So@1F_VD078\r
371         1999un@3UKgQ088uHog1u0TIII4ORR3UigE1QWGIIImZb1A999uHiw4m0@QIIr0GWFIIoW7n\r
372         gJ082Uyuzp8Odv560u@uHQ1200GeEb5DmM1TJn00ElxN11EvK33Li8821F_VD0e4EH41efyT\r
373         6E7yu@Dr_O0Qu52W21F_VmZ@7yeOr0G0989hW7@F22PW0W04E1FvHEHmZ@7yeZIGIIYjm429\r
374         191FY6WaaaW7J6WqsMd084yONi1IIa4QRt9G11FUbPIIIaQRRs299N70XW793MIIImZOvIII\r
375         gJ05SHII6y8MGijj3Uaw10_FWc@3sgk8iweS0i2S2jW7jzol62GRjuuUBun@3EXqG3_FWc@3\r
376         Uy@W7@FUH72Uy@WJ_Fun@ZjOe0DMBuHUXjjj5yu1S0002UiCYjjjgaaa2USB4QRR1FgWK00W\r
377         W753KIIYK_@@W75p799vD444yOOmQRRr000C0m@DE_V9zG6tZj1F_VmZ7M30P0C00YjGkMpT\r
378         8un@Z7H_e1QeoX6A8Oh0RbBun@3Uy@W7@FekS0aaa4y8mH3qmIpDKJ3q1Qe5G00WW7@FQ0RG\r
379         GGI6y8nT2eGmZaL3m1T2GGmZNr9G3r0GGmZd9X@@Fungw4e1VaaaV4GGmZKr904r0Gm00@7y\r
380         u@1F_VmZ@7yu@1ezVmZ@7yOjrdqTmZ@7y8anow0G00WWJK6B99PmZbXbaa4199P4UY5yOo1d\r
381         yVm9e6y8o1QiGmZ6t9m11F6Md074yu@1F_@00@7Gp@1RTUmZ@7yu@1F_@00D18008uaoY6ue\r
382         u44CI5e3envhGw8uHI3EPxI690IIYImZX5KtQnmCTm9@t9WDHiM6IIIouIBBunnv0004yOP4\r
383         RRR3Uy@W7@V00r0100C0m@LXaJ2QX5DWI1F68G00W0EBFun@3Uy@W7LEGm@xHuo6LGhYYe26\r
384         _S30001dyVm9pWbaaian5889A5yuLO999Zmhi0evj@5R3ir@AAW8f232Uy@66A12PRRmZG08\r
385         8RBunawYy0sssqx8MWjCIoW7jgJW3ijjbLoO2CrssU2m0RQca81nj3UCBc2001Fwbqa@@I69\r
386         04@@V9Z6utVIAuHi08WjPRw0ean304KR7yen30yVan@7QWq1ezNmZ@7yu@1F_VmMs7qGsTIw\r
387         H@6T4qGevCRLZ9Er5f6L7Onb2x4Ws51dKM9ZP4yuJ1rT2aaaaW7X2W00GGG_6Gp@1dWPi46K\r
388         H12aWWaYju1baaanB6KD04G2IoAD0709H95Dm5WaWaY6uYQ0g8unF8080C0m5r0yImZfKoO1\r
389         4400QS42I000DEk0G00vQ0A0WqsMmZRm0008un4GGijjZ81IijjBPS1qqssG2II4PRR7y86Q\r
390         QRZ8199ejjjf603K8995y85KRRR3UK1ORRRs999pQCXW79GYPPRZZ7Onaai6W34QQRp099H2\r
391         RJRD05mos6GIII0RRRhW7JGARRRmZW0GGIgaH4a0004yu2G0003Uq3200Ir0WWK00WW7xGIo\r
392         @l@_aaI6L8uH6S@@FquO20V@@RSi0z@FaDEMW3999IyV@1Fg02_@@W71fan62US1Y0000ejj\r
393         RSy0HG00DEM010esq0A0YjjTmZA0fjjL300GmZ@73JyhhZMq0SqM050200020044q@1F_V9Z\r
394         oLGGP30u1400WW7pAEE42USBW4001rXLii@NG0W92eGe1MIG008eXFZK9faGI8dl52UaA20G\r
395         01s_VmZlmIIIg7E24aab4yuLH3e0199XW7DA88LxVnsW7tEhe7G0006e15nMiImZK0IIGYaa\r
396         0Ki5Eq5P41Qy299912I2254SHD09q9G44aa4YJOcyCm0404Gd0N0200GRRR23000Ct_@_aaa\r
397         8rscAD3000ujj@@B9IIUQqsK0000mx@@V49991DjjjD0C8GG2asssK3W2scsqg1G1D000400\r
398         0uV000J200OA00W4000aF000Z000O0000Y4999MTb90aaa4Waa4100W108Gaaa4XaaaQ0E09\r
399         999899fQ001WH0m@JBW4000a00GI078000e1k3WaaaK4H359eGfX6K3G88000h1GX62EO003\r
400         qsssoIIMc3999A1000jjjQpbiP9MIYay0000tcjj5Mijj8III20000ORRR3PPRP444a6W1ej\r
401         ibh1O1RRBGr0OW6000o000S900W1000i500Gk000I2WD0AGIIIYRIBBEjjjwijjPtaa89Z4Y\r
402         iPRhssRRssUIaaaALIIYPRRRKRRR39999iiaiWsssiqssgbaa49HoYi4RxQ0IGII6TD06810\r
403         0m5000t200OM000J000a900Wi100ODGG350qca4800W4G2W1080QRIY0088089039S0WW0WA\r
404         4E0IIIY880Wx4K0G00GG774M9101802QmW65MO8W20100i942808162W0991032G08G0Ws58\r
405         0P0000WWW_08e6W3GG004oW2W000I3G10W04r0eGZ46a602BPMGd07e2ms4JIIY404Wp0A0a\r
406         c68IIIexGCGffjPh4A0DjjLaaaKu47eqss_aX3Qfa0JRQar0aWQIIIC100TSI00000e899Y4\r
407         0000aa81jjLRujhska499sV_@VRrssHpijDHIIIez@@7RRRRmsssC999Hu@@tFsscjfjjL88\r
408         0n@@VD0ROJII2MIIYA999Y@99Isaa8Pza89JIYa4VYaaGRssMx_ssiPRRxBPRRdjjjj_@jDl\r
409         sssCsssizssgjsscjHRxm35msss6ssscPRRR6RRRsORRh103RIIIQRRRjD99HkjjLxca49ps\r
410         MjzRIaaORrsU04XdQ1Ery00W6mvCn9KJq0P4y8iXbOGAah5en@9ocsybOaSNB1f_VD0jysW5\r
411         1QyV0DdlgH3Vjkmb7aKTm4X0SGW6r2X00u81CAleC2000f1Oo4AEqAd61Qe9408W0Ed9GGPY\r
412         0e0WacanOkIKX25m9gnfTm80RCl36H3O1820W10i0G04GJJBcID41qmLCcH4OBV4aaaYjm29\r
413         899zLq0898e_AMWWWaKD0808999GZN889Az6G11QK1191e0DcG2IIIW6FLZO21QK30110040\r
414         Gv0G040G0004002080022K3GK;\r
415     INTEGER CHECKSUM =54783;\r
416 ENDDATA;\r
417 \r
418 \r
419 PROCEDURE DO_EXIT USES GV;\r
420     IRSTOP IRPAUSE;\r
421     DRSTOP DRPAUSE;\r
422     IRSCAN 8, $81;\r
423     WAIT IDLE, 250 USEC;\r
424     IRSCAN 8, $81, CAPTURE BUFF128[7..0];\r
425     IF ( ! (BUFF128[2]==0) ) THEN GOTO Label_0;\r
426     IRSTOP IRPAUSE;\r
427     DRSTOP DRPAUSE;\r
428     IRSCAN 8, $07;\r
429     WAIT IDLE, 1 CYCLES;\r
430     WAIT IDLE, 200 USEC;\r
431     Label_0:\r
432     IRSCAN 8, $ff;\r
433     WAIT IDLE, 200 USEC;\r
434     WAIT RESET, 3 CYCLES;\r
435     EXIT STATUS;\r
436 ENDPROC;\r
437 \r
438 PROCEDURE DO_READ_SECURITY USES GV;\r
439     IRSTOP IRPAUSE;\r
440     DRSTOP DRPAUSE;\r
441     IRSCAN 8, $a4;\r
442     WAIT IDLE, 3 CYCLES;\r
443     DRSCAN 44, $00000000000, CAPTURE SECREG[];\r
444     ULUWE = SECREG[ULUWE_BITLOCATION];\r
445     ULARE = SECREG[ULARE_BITLOCATION];\r
446     ULUPC = SECREG[ULUPC_BITLOCATION];\r
447     ULUFE = SECREG[ULUFE_BITLOCATION];\r
448     ULUFP = SECREG[ULUFP_BITLOCATION];\r
449     ULUFJ = SECREG[ULUFJ_BITLOCATION];\r
450     ULFLR = SECREG[ULFLR_BITLOCATION];\r
451     ULULR = SECREG[ULULR_BITLOCATION];\r
452     ULAWE = SECREG[ULAWE_BITLOCATION];\r
453     ULARD = SECREG[ULARD_BITLOCATION];\r
454     ULOPT[1] = SECREG[ULOPT1_BITLOCATION];\r
455     ULOPT[0] = SECREG[ULOPT0_BITLOCATION];\r
456 ENDPROC;\r
457 \r
458 PROCEDURE DO_OUTPUT_SECURITY USES GV;\r
459     PRINT "Security Settings :";\r
460     IF ( ! (ULUFP==1) ) THEN GOTO Label_1;\r
461     PRINT "FlashROM Write/Erase protected by pass key.";\r
462     Label_1:\r
463     IF ( ! (ULUFJ==1) ) THEN GOTO Label_2;\r
464     PRINT "FlashROM Read protected by pass key.";\r
465     Label_2:\r
466     IF ( ! (ULAWE==1) ) THEN GOTO Label_3;\r
467     PRINT "Array Write/Erase protected by pass key.";\r
468     Label_3:\r
469     IF ( ! (ULARD==1) ) THEN GOTO Label_4;\r
470     PRINT "Array Verify protected by pass key.";\r
471     Label_4:\r
472     IF ( ! (ULUFE==1) ) THEN GOTO Label_5;\r
473     PRINT "Encrypted FlashROM Programming Enabled.";\r
474     Label_5:\r
475     IF ( ! (ULARE==1) ) THEN GOTO Label_6;\r
476     PRINT "Encrypted FPGA Array Programming Enabled.";\r
477     Label_6:\r
478     PRINT "=========================================";\r
479 ENDPROC;\r
480 \r
481 PROCEDURE DO_QUERY_SECURITY USES DO_READ_SECURITY,DO_OUTPUT_SECURITY;\r
482     CALL DO_READ_SECURITY;\r
483     CALL DO_OUTPUT_SECURITY;\r
484 ENDPROC;\r
485 \r
486 PROCEDURE READ_UROW USES BITSTREAM,GV;\r
487     IRSTOP IRPAUSE;\r
488     DRSTOP DRPAUSE;\r
489     IRSCAN 8, $c0;\r
490     WAIT IDLE, 1 CYCLES;\r
491     IRSTOP IRPAUSE;\r
492     DRSTOP DRPAUSE;\r
493     IRSCAN 8, $a8;\r
494     WAIT IDLE, 3 CYCLES;\r
495     WAIT IDLE, 165 USEC;\r
496     DRSCAN 128, $00000000000000000000000000000000, CAPTURE UROW[];\r
497     SUROWALGOVERSION[6..0] = $00;\r
498     IF ( ! ( (UROW[5]==0)&&(UROW[0]==1)) ) THEN GOTO Label_7;\r
499     SUROWALGOVERSION[5..4] = UROW[24..23];\r
500     Label_7:\r
501     IF ( ! ( (UROW[5]==1)&&(UROW[0]==0)) ) THEN GOTO Label_8;\r
502     SUROWALGOVERSION[5..4] = UROW[24..23];\r
503     SUROWALGOVERSION[6] = 1;\r
504     Label_8:\r
505     SUROWCHECKSUM[15..0] = UROW[127..112];\r
506     SUROWCYCLECOUNT = INT(UROW[111..102]);\r
507     SUROWDESIGNNAME[69..0] = UROW[101..32];\r
508     SUROWPROGMETHOD[2..0] = UROW[31..29];\r
509     SUROWALGOVERSION[3..0] = UROW[28..25];\r
510     SUROW_PKG_TYPE[5..0] = UROW[22..17];\r
511     SUROW_SW_VERSION[6..0] = UROW[16..10];\r
512     SUROWPROGRAMSW[3..0] = UROW[9..6];\r
513     SUROW_SRAM_DISTURB[0] = UROW[4];\r
514     SUROW_SPEED_GRADE[2..0] = UROW[3..1];\r
515     ACT_UROW_CYCLE_COUNT = SUROWCYCLECOUNT;\r
516 ENDPROC;\r
517 \r
518 PROCEDURE FIX_INT_ARRAYS USES GV;\r
519     IF ( ! (HEX[0]!=48) ) THEN GOTO Label_9;\r
520     FOR I = 0 TO 7;\r
521         TEMP = HEX[I];\r
522         HEX[I] = HEX[(15-I)];\r
523         HEX[(15-I)] = TEMP;\r
524     NEXT I;\r
525     Label_9:\r
526     LABEL_SEPARATOR = 0;\r
527 ENDPROC;\r
528 \r
529 PROCEDURE DISP_CHKSUM_DESIGN USES GV,FIX_INT_ARRAYS;\r
530     CALL FIX_INT_ARRAYS;\r
531     IF ( ! (INT(SUROWCHECKSUM[15..0])==65535) ) THEN GOTO Label_10;\r
532     PRINT "CHECKSUM: ";\r
533     Label_10:\r
534     IF ( ! (INT(SUROWCHECKSUM[15..0])!=65535) ) THEN GOTO Label_11;\r
535     PRINT "CHECKSUM: ",CHR$(HEX[INT(SUROWCHECKSUM[15..12])]),CHR$(HEX[INT(SUROWCHECKSUM[11..8])])\r
536         ,CHR$(HEX[INT(SUROWCHECKSUM[7..4])]),CHR$(HEX[INT(SUROWCHECKSUM[3..0])]);\r
537     Label_11:\r
538     IF ( ! ( ( (INT(SUROWDESIGNNAME[0..30])==2147483647)&&(INT(SUROWDESIGNNAME[31..61])==2147483647))&&(INT(SUROWDESIGNNAME[62..69])==255)) ) THEN GOTO Label_12;\r
539     PRINT "Design Name: ";\r
540     Label_12:\r
541     IF ( ! ( ( (INT(SUROWDESIGNNAME[0..30])!=2147483647)||(INT(SUROWDESIGNNAME[31..61])!=2147483647))||(INT(SUROWDESIGNNAME[62..69])!=255)) ) THEN GOTO Label_13;\r
542     PRINT "Design Name: ",CHR$(INT(SUROWDESIGNNAME[63..69])),CHR$(INT(SUROWDESIGNNAME[56..62]))\r
543         ,CHR$(INT(SUROWDESIGNNAME[49..55])),CHR$(INT(SUROWDESIGNNAME[42..48])),CHR$(INT(SUROWDESIGNNAME[35..41]))\r
544         ,CHR$(INT(SUROWDESIGNNAME[28..34])),CHR$(INT(SUROWDESIGNNAME[21..27])),CHR$(INT(SUROWDESIGNNAME[14..20]))\r
545         ,CHR$(INT(SUROWDESIGNNAME[7..13])),CHR$(INT(SUROWDESIGNNAME[0..6]));\r
546     Label_13:\r
547     LABEL_SEPARATOR = 0;\r
548 ENDPROC;\r
549 \r
550 PROCEDURE DISPLAY_UROW USES BITSTREAM,CONSTBLOCK,GV,DISP_CHKSUM_DESIGN;\r
551     EXPORT "USER_ROW", UROW[127..0];\r
552     PRINT "User information: ";\r
553     CALL DISP_CHKSUM_DESIGN;\r
554     IF ( ! (FLAGDISPLAYCYC==1) ) THEN GOTO Label_14;\r
555     PRINT "CYCLE COUNT: ",SUROWCYCLECOUNT;\r
556     Label_14:\r
557     INTEGER TMPINT =INT(SUROWPROGMETHOD[]);\r
558     INTEGER TMPINT2 =0;\r
559     INTEGER TMPINT3 =0;\r
560     INTEGER TMPINT4 =0;\r
561     INTEGER TMPINT5 =0;\r
562     IF ( ! (TMPINT==IEEE1532) ) THEN GOTO Label_15;\r
563     PRINT "Programming Method: IEEE1532";\r
564     Label_15:\r
565     IF ( ! (TMPINT==STAPL) ) THEN GOTO Label_16;\r
566     PRINT "Programming Method: STAPL";\r
567     Label_16:\r
568     IF ( ! (TMPINT==DIRECTC) ) THEN GOTO Label_17;\r
569     PRINT "Programming Method: DirectC";\r
570     Label_17:\r
571     IF ( ! (TMPINT==PDB) ) THEN GOTO Label_18;\r
572     PRINT "Programming Method: PDB";\r
573     Label_18:\r
574     IF ( ! (TMPINT==SVF) ) THEN GOTO Label_19;\r
575     PRINT "Programming Method: SVF";\r
576     Label_19:\r
577     PRINT "Algorithm Version: ",INT(SUROWALGOVERSION[6..0]);\r
578     TMPINT = INT(SUROW_SPEED_GRADE[]);\r
579     IF ( ! (TMPINT==GRADE_UNSPEC) ) THEN GOTO Label_20;\r
580     PRINT "Device Speed Grade: speed grade information not available from device";\r
581     Label_20:\r
582     IF ( ! (TMPINT==GRADE_1) ) THEN GOTO Label_21;\r
583     PRINT "Device Speed Grade: -1";\r
584     Label_21:\r
585     IF ( ! (TMPINT==GRADE_2) ) THEN GOTO Label_22;\r
586     PRINT "Device Speed Grade: -2";\r
587     Label_22:\r
588     IF ( ! (TMPINT==GRADE_3) ) THEN GOTO Label_23;\r
589     PRINT "Device Speed Grade: -3";\r
590     Label_23:\r
591     IF ( ! (TMPINT==GRADE_F) ) THEN GOTO Label_24;\r
592     PRINT "Device Speed Grade: -F";\r
593     Label_24:\r
594     IF ( ! (TMPINT==GRADE_STD) ) THEN GOTO Label_25;\r
595     PRINT "Device Speed Grade: STD";\r
596     Label_25:\r
597     IF ( ! (TMPINT==GRADE_4) ) THEN GOTO Label_26;\r
598     PRINT "Device Speed Grade: -4";\r
599     Label_26:\r
600     IF ( ! (TMPINT==GRADE_UNDEF) ) THEN GOTO Label_27;\r
601     PRINT "Device Speed Grade: speed grade information not available from device";\r
602     Label_27:\r
603     TMPINT = INT(SUROWPROGRAMSW[]);\r
604     IF ( ! (TMPINT==FP) ) THEN GOTO Label_28;\r
605     PRINT "Programmer: FlashPro";\r
606     Label_28:\r
607     IF ( ! (TMPINT==FPLITE) ) THEN GOTO Label_29;\r
608     PRINT "Programmer: FlashPro Lite";\r
609     Label_29:\r
610     IF ( ! (TMPINT==FP3) ) THEN GOTO Label_30;\r
611     PRINT "Programmer: FlashPro3";\r
612     Label_30:\r
613     IF ( ! (TMPINT==FP4) ) THEN GOTO Label_31;\r
614     PRINT "Programmer: FlashPro4";\r
615     Label_31:\r
616     IF ( ! (TMPINT==SCULPTW) ) THEN GOTO Label_32;\r
617     PRINT "Programmer: Sculptor WIN";\r
618     Label_32:\r
619     IF ( ! (TMPINT==BPW) ) THEN GOTO Label_33;\r
620     PRINT "Programmer: BP Programmer";\r
621     Label_33:\r
622     IF ( ! (TMPINT==DIRECTCP) ) THEN GOTO Label_34;\r
623     PRINT "Programmer: DirectC";\r
624     Label_34:\r
625     IF ( ! (TMPINT==STP) ) THEN GOTO Label_35;\r
626     PRINT "Programmer: Actel JAM Player";\r
627     Label_35:\r
628     IF ( ! ( ( ( (TMPINT==FP)||(TMPINT==FPLITE))||(TMPINT==FP3))||(TMPINT==FP4)) ) THEN GOTO Label_51;\r
629     TMPINT2 = INT(SUROW_SW_VERSION[]);\r
630     IF ( ! (TMPINT2==FP33) ) THEN GOTO Label_36;\r
631     PRINT "Software: FlashPro v3.3";\r
632     Label_36:\r
633     IF ( ! (TMPINT2==FP34) ) THEN GOTO Label_37;\r
634     PRINT "Software: FlashPro v3.4";\r
635     Label_37:\r
636     IF ( ! (TMPINT2==FP40) ) THEN GOTO Label_38;\r
637     PRINT "Software: FlashPro v4.0";\r
638     Label_38:\r
639     IF ( ! (TMPINT2==FP41) ) THEN GOTO Label_39;\r
640     PRINT "Software: FlashPro v4.1";\r
641     Label_39:\r
642     IF ( ! (TMPINT2==FP42) ) THEN GOTO Label_40;\r
643     PRINT "Software: FlashPro v4.2";\r
644     Label_40:\r
645     IF ( ! (TMPINT2==FP50) ) THEN GOTO Label_41;\r
646     PRINT "Software: FlashPro v5.0";\r
647     Label_41:\r
648     IF ( ! (TMPINT2==FP51) ) THEN GOTO Label_42;\r
649     PRINT "Software: FlashPro v5.1";\r
650     Label_42:\r
651     IF ( ! (TMPINT2==FP60) ) THEN GOTO Label_43;\r
652     PRINT "Software: FlashPro v6.0";\r
653     Label_43:\r
654     IF ( ! (TMPINT2==FP61) ) THEN GOTO Label_44;\r
655     PRINT "Software: FlashPro v6.1";\r
656     Label_44:\r
657     IF ( ! (TMPINT2==FP62) ) THEN GOTO Label_45;\r
658     PRINT "Software: FlashPro v6.2";\r
659     Label_45:\r
660     IF ( ! (TMPINT2==FP84) ) THEN GOTO Label_46;\r
661     PRINT "Software: FlashPro v8.4";\r
662     Label_46:\r
663     IF ( ! (TMPINT2==FP85) ) THEN GOTO Label_47;\r
664     PRINT "Software: FlashPro v8.5";\r
665     Label_47:\r
666     IF ( ! (TMPINT2==FP86) ) THEN GOTO Label_48;\r
667     PRINT "Software: FlashPro v8.6";\r
668     Label_48:\r
669     IF ( ! (TMPINT2==FP90) ) THEN GOTO Label_49;\r
670     PRINT "Software: FlashPro v9.0";\r
671     Label_49:\r
672     IF ( ! (TMPINT2==FP91) ) THEN GOTO NOT_FP91;\r
673     PRINT "Software: FlashPro v9.1";\r
674     NOT_FP91:\r
675     IF ( ! (TMPINT2==FP100) ) THEN GOTO NOT_FP100;\r
676     PRINT "Software: FlashPro v10.0";\r
677     NOT_FP100:\r
678     IF ( ! (TMPINT2==FP_11) ) THEN GOTO NOT_FP_11;\r
679     PRINT "Software: FlashPro v11.0";\r
680     NOT_FP_11:\r
681     IF ( ! (TMPINT2==FP_11_1) ) THEN GOTO NOT_FP_11_1;\r
682     PRINT "Software: FlashPro v11.1";\r
683     NOT_FP_11_1:\r
684     IF ( ! (TMPINT2==FP_11_2) ) THEN GOTO NOT_FP_11_2;\r
685     PRINT "Software: FlashPro v11.2";\r
686     NOT_FP_11_2:\r
687     IF ( ! (TMPINT2==FP_11_3) ) THEN GOTO NOT_FP_11_3;\r
688     PRINT "Software: FlashPro v11.3";\r
689     NOT_FP_11_3:\r
690     IF ( ! (TMPINT2==UNKNOWN) ) THEN GOTO Label_50;\r
691     PRINT "Software: FlashPro vX.X";\r
692     Label_50:\r
693     LABEL_SEPARATOR = 0;\r
694     Label_51:\r
695     IF ( ! ( (TMPINT==SCULPTW)||(TMPINT==BPW)) ) THEN GOTO Label_55;\r
696     TMPINT3 = (INT(SUROW_SW_VERSION[6..5])+SCULPTORMAJORBASE);\r
697     TMPINT4 = (INT(SUROW_SW_VERSION[4..1])+SCULPTORMINORBASE);\r
698     TMPINT5 = 0;\r
699     IF ( ! (SUROW_SW_VERSION[0]==1) ) THEN GOTO Label_52;\r
700     TMPINT5 = 1;\r
701     Label_52:\r
702     INTEGER CURRPGM =INT(ACT_UROW_PROGRAM_SW[3..0]);\r
703     IF ( ! (TMPINT==SCULPTW) ) THEN GOTO Label_53;\r
704     IF ( ! ( (CURRPGM==FP3)||(CURRPGM==FP4)) ) THEN GOTO NOT_FP3_FP4;\r
705     PRINT "NOTE: The Sculptor Windows version number below should be converted to HEX.";\r
706     NOT_FP3_FP4:\r
707     PRINT "Software: Sculptor Win v",TMPINT3,".",TMPINT4,".",TMPINT5;\r
708     Label_53:\r
709     IF ( ! (TMPINT==BPW) ) THEN GOTO Label_54;\r
710     IF ( ! ( (CURRPGM==FP3)||(CURRPGM==FP4)) ) THEN GOTO NOT_FP3_FP4_BPW;\r
711     PRINT "NOTE: The BP Windows version number below should be converted to HEX.";\r
712     NOT_FP3_FP4_BPW:\r
713     PRINT "Software: BP Win v",TMPINT3,".",TMPINT4,".",TMPINT5;\r
714     Label_54:\r
715     LABEL_SEPARATOR = 0;\r
716     Label_55:\r
717     PRINT "=========================================";\r
718 ENDPROC;\r
719 \r
720 PROCEDURE READ_F_ROW USES GV;\r
721     IRSTOP IRPAUSE;\r
722     DRSTOP DRPAUSE;\r
723     IRSCAN 8, $c0;\r
724     WAIT IDLE, 1 CYCLES;\r
725     IRSTOP IRPAUSE;\r
726     DRSTOP DRPAUSE;\r
727     IRSCAN 8, $f9;\r
728     DRSCAN 3, FADDR[];\r
729     WAIT IDLE, 1 CYCLES;\r
730     IRSTOP IRPAUSE;\r
731     DRSTOP DRPAUSE;\r
732     IRSCAN 8, $bf;\r
733     WAIT IDLE, 3 CYCLES;\r
734     WAIT IDLE, 165 USEC;\r
735     DRSCAN 128, $00000000000000000000000000000000, CAPTURE BUFF128[];\r
736 ENDPROC;\r
737 \r
738 PROCEDURE DO_DEVICE_INFO USES GV,READ_UROW,DISPLAY_UROW,READ_F_ROW;\r
739     IRSTOP IRPAUSE;\r
740     DRSTOP DRPAUSE;\r
741     IRSCAN 8, $0e;\r
742     WAIT IDLE, 1 CYCLES;\r
743     DRSCAN 32, $00000000, CAPTURE BUFF32[];\r
744     EXPORT "SILSIG", BUFF32[];\r
745     IRSCAN 8, $84, CAPTURE BUFF128[7..0];\r
746     IF ( ! (BUFF128[2]==1) ) THEN GOTO CORE_NOT_ENABLED;\r
747     PRINT "FPGA Array is programmed and enabled.";\r
748     CORE_NOT_ENABLED:\r
749     IF ( ! (BUFF128[2]==0) ) THEN GOTO CORE_ENABLED;\r
750     PRINT "FPGA Array is not enabled.";\r
751     CORE_ENABLED:\r
752     CALL READ_UROW;\r
753     CALL DISPLAY_UROW;\r
754     FADDR[] = $0;\r
755     CALL READ_F_ROW;\r
756     EXPORT "FSN", BUFF128[55..8];\r
757     PRINT "=========================================";\r
758 ENDPROC;\r
759 \r
760 PROCEDURE INIT_AES;\r
761     IRSTOP IRPAUSE;\r
762     DRSTOP DRPAUSE;\r
763     IRSCAN 8, $dd;\r
764     DRSCAN 128, $00000000000000000000000000000000;\r
765     WAIT IDLE, 3 CYCLES;\r
766     WAIT IDLE, 165 USEC;\r
767 ENDPROC;\r
768 \r
769 PROCEDURE DO_VERIFY_DEVICE_INFO USES GV,BITSTREAM,DO_EXIT,DO_READ_SECURITY,READ_UROW\r
770     ,DISP_CHKSUM_DESIGN;\r
771     CALL READ_UROW;\r
772     CALL DISP_CHKSUM_DESIGN;\r
773     CALL DO_READ_SECURITY;\r
774     BUFF32[31..0] = BOOL(CHECKSUM);\r
775     UROW[127..112] = BUFF32[15..0];\r
776     UROW[101..32] = ACT_UROW_DESIGN_NAME[69..0];\r
777     IRSTOP IRPAUSE;\r
778     DRSTOP DRPAUSE;\r
779     IRSCAN 8, $c0;\r
780     WAIT IDLE, 1 CYCLES;\r
781     IRSTOP IRPAUSE;\r
782     DRSTOP DRPAUSE;\r
783     IRSCAN 8, $a8;\r
784     WAIT IDLE, 3 CYCLES;\r
785     WAIT IDLE, 165 USEC;\r
786     DRSCAN 128, $00000000000000000000000000000000,COMPARE UROW[],$ffff003fffffffffffffffff00000000\r
787         ,PASS;\r
788     IF ( ! (PASS==0) ) THEN GOTO UROW_CMP_OK;\r
789     STATUS = -43;\r
790     PRINT "Failed to verify design information.";\r
791     UNIQUEEXITCODE = 32772;\r
792     BUFF128[15..0] = BOOL(UNIQUEEXITCODE);\r
793     EXPORT "ERROR_CODE", BUFF128[15..0];\r
794     CALL DO_EXIT;\r
795     UROW_CMP_OK:\r
796     LABEL_SEPARATOR = 0;\r
797 ENDPROC;\r
798 \r
799 PROCEDURE READ_IDCODE_ONLY USES GV;\r
800     IRSTOP IRPAUSE;\r
801     DRSTOP DRPAUSE;\r
802     IRSCAN 8, $0f;\r
803     WAIT IDLE, 1 CYCLES;\r
804     DRSCAN 32, $00000000, CAPTURE ID[];\r
805     EXPORT "IDCODE", ID[];\r
806 ENDPROC;\r
807 \r
808 PROCEDURE VERIFY_RLOCK USES GV;\r
809     IRSCAN 8, $84,COMPARE $04,$04,PASS;\r
810 ENDPROC;\r
811 \r
812 PROCEDURE DO_VERIFY_PGM_RLOCK USES GV,DO_EXIT,VERIFY_RLOCK;\r
813     CALL VERIFY_RLOCK;\r
814     IF ( ! (PASS==0) ) THEN GOTO RLOCK_PGM_PASS;\r
815     STATUS = 10;\r
816     PRINT "Failed to enable FPGA Array.";\r
817     UNIQUEEXITCODE = 32891;\r
818     BUFF128[15..0] = BOOL(UNIQUEEXITCODE);\r
819     EXPORT "ERROR_CODE", BUFF128[15..0];\r
820     CALL DO_EXIT;\r
821     RLOCK_PGM_PASS:\r
822     LABEL_SEPARATOR = 0;\r
823 ENDPROC;\r
824 \r
825 PROCEDURE DO_VERIFY_RLOCK USES GV,DO_EXIT,VERIFY_RLOCK;\r
826     CALL VERIFY_RLOCK;\r
827     IF ( ! (PASS==0) ) THEN GOTO RLOCK_VERIFY_PASS;\r
828     STATUS = 11;\r
829     PRINT "FPGA Array is not enabled.";\r
830     UNIQUEEXITCODE = 32892;\r
831     BUFF128[15..0] = BOOL(UNIQUEEXITCODE);\r
832     EXPORT "ERROR_CODE", BUFF128[15..0];\r
833     CALL DO_EXIT;\r
834     RLOCK_VERIFY_PASS:\r
835     LABEL_SEPARATOR = 0;\r
836 ENDPROC;\r
837 \r
838 PROCEDURE VERIFY_ID_DMK USES GV,DO_EXIT,INIT_AES;\r
839     CALL INIT_AES;\r
840     IRSTOP IRPAUSE;\r
841     DRSTOP DRPAUSE;\r
842     IRSCAN 8, $0a;\r
843     DRSCAN 128, M7BUFF[];\r
844     WAIT IDLE, 3 CYCLES;\r
845     WAIT IDLE, 90 USEC;\r
846     DRSCAN 128, $00000000000000000000000000000000, CAPTURE BUFF128[],COMPARE $c0000000000000000000000000000000\r
847         ,$c0000000000000000000000000000000,PASS;\r
848     IF ( ! (BUFF128[127]==0) ) THEN GOTO M7VERDONE;\r
849     STATUS = -31;\r
850     PRINT "Failed to verify AES Sec.";\r
851     UNIQUEEXITCODE = 32775;\r
852     BUFF128[15..0] = BOOL(UNIQUEEXITCODE);\r
853     EXPORT "ERROR_CODE", BUFF128[15..0];\r
854     CALL DO_EXIT;\r
855     M7VERDONE:\r
856     IF ( ! ( (BUFF128[126]==0)||(BM7DEVICE==0)) ) THEN GOTO MXIDOK;\r
857     IF ( ! ( (BUFF128[126]==1)&&(BM7DEVICE==0)) ) THEN GOTO LDETECTM1;\r
858     STATUS = 6;\r
859     PRINT "Failed to verify IDCODE.";\r
860     PRINT "Target is an M7 device.";\r
861     UNIQUEEXITCODE = 32776;\r
862     BUFF128[15..0] = BOOL(UNIQUEEXITCODE);\r
863     EXPORT "ERROR_CODE", BUFF128[15..0];\r
864     CALL DO_EXIT;\r
865     LDETECTM1:\r
866     IF ( ! (BUFF128[126]==0) ) THEN GOTO Label_58;\r
867     IRSTOP IRPAUSE;\r
868     DRSTOP DRPAUSE;\r
869     IRSCAN 8, $0a;\r
870     DRSCAN 128, M1BUFF[];\r
871     WAIT IDLE, 3 CYCLES;\r
872     WAIT IDLE, 90 USEC;\r
873     DRSCAN 128, $00000000000000000000000000000000, CAPTURE BUFF128[],COMPARE $c0000000000000000000000000000000\r
874         ,$c0000000000000000000000000000000,PASS;\r
875     IF ( ! (BUFF128[127]==0) ) THEN GOTO M1VERDONE;\r
876     STATUS = -31;\r
877     PRINT "Failed to verify AES Sec.";\r
878     UNIQUEEXITCODE = 32777;\r
879     BUFF128[15..0] = BOOL(UNIQUEEXITCODE);\r
880     EXPORT "ERROR_CODE", BUFF128[15..0];\r
881     CALL DO_EXIT;\r
882     M1VERDONE:\r
883     BOOLEAN BTMPBUFFBIT126 = BUFF128[126];\r
884     IF ( ! ( (BTMPBUFFBIT126==1)&&(BM1DEVICE==0)) ) THEN GOTO REGDEV;\r
885     STATUS = 6;\r
886     PRINT "Failed to verify IDCODE.";\r
887     PRINT "Target is an M1 device.";\r
888     UNIQUEEXITCODE = 32778;\r
889     BUFF128[15..0] = BOOL(UNIQUEEXITCODE);\r
890     EXPORT "ERROR_CODE", BUFF128[15..0];\r
891     CALL DO_EXIT;\r
892     REGDEV:\r
893     IF ( ! ( (BTMPBUFFBIT126==0)&&(BM7DEVICE==1)) ) THEN GOTO Label_56;\r
894     STATUS = 6;\r
895     PRINT "Failed to verify IDCODE.";\r
896     PRINT "The Target is not an M7 Device.";\r
897     UNIQUEEXITCODE = 32781;\r
898     BUFF128[15..0] = BOOL(UNIQUEEXITCODE);\r
899     EXPORT "ERROR_CODE", BUFF128[15..0];\r
900     CALL DO_EXIT;\r
901     Label_56:\r
902     IF ( ! ( (BTMPBUFFBIT126==0)&&(BM1DEVICE==1)) ) THEN GOTO Label_57;\r
903     STATUS = 6;\r
904     PRINT "Failed to verify IDCODE.";\r
905     PRINT "The Target is not an M1 Device.";\r
906     UNIQUEEXITCODE = 32782;\r
907     BUFF128[15..0] = BOOL(UNIQUEEXITCODE);\r
908     EXPORT "ERROR_CODE", BUFF128[15..0];\r
909     CALL DO_EXIT;\r
910     Label_57:\r
911     LABEL_SEPARATOR = 0;\r
912     Label_58:\r
913     LABEL_SEPARATOR = 0;\r
914     MXIDOK:\r
915     LABEL_SEPARATOR = 0;\r
916 ENDPROC;\r
917 \r
918 PROCEDURE VERIFY_IDCODE USES GV,PARAMETERS,DO_EXIT;\r
919     FREQUENCY (FREQ*1000000);\r
920     WAIT RESET, 5 CYCLES;\r
921     IRSTOP IRPAUSE;\r
922     DRSTOP DRPAUSE;\r
923     IRSCAN 8, $0f;\r
924     DRSCAN 32, $00000000;\r
925     WAIT IDLE, 1 CYCLES;\r
926     DRSCAN 32, $00000000, CAPTURE ID[],COMPARE IDCODEVALUE[],IDMASK[],PASS;\r
927     IF ( ! (PASS==0) ) THEN GOTO IDOK;\r
928     STATUS = 6;\r
929     PRINT "Failed to verify IDCODE";\r
930     UNIQUEEXITCODE = 32797;\r
931     BUFF128[15..0] = BOOL(UNIQUEEXITCODE);\r
932     EXPORT "ERROR_CODE", BUFF128[15..0];\r
933     CALL DO_EXIT;\r
934     IDOK:\r
935     IDREV = INT(ID[31..28]);\r
936     IDFAB = INT(ID[24..24]);\r
937 ENDPROC;\r
938 \r
939 PROCEDURE IS_SECOK USES GV,DO_EXIT;\r
940     IF ( ! (SECKEY_OK==0) ) THEN GOTO SECOK;\r
941     STATUS = -35;\r
942     PRINT "Failed to match pass key.";\r
943     UNIQUEEXITCODE = 32799;\r
944     BUFF128[15..0] = BOOL(UNIQUEEXITCODE);\r
945     EXPORT "ERROR_CODE", BUFF128[15..0];\r
946     CALL DO_EXIT;\r
947     SECOK:\r
948     LABEL_SEPARATOR = 0;\r
949 ENDPROC;\r
950 \r
951 PROCEDURE DO_CHECK_R USES GV,DO_EXIT,DO_READ_SECURITY;\r
952     CALL DO_READ_SECURITY;\r
953     IF ( ! (ULARE==1) ) THEN GOTO ARRAYEPR;\r
954     STATUS = -33;\r
955     PRINT "FPGA Array Encryption is enforced. Plain text verification is prohibited.";\r
956     UNIQUEEXITCODE = 32800;\r
957     BUFF128[15..0] = BOOL(UNIQUEEXITCODE);\r
958     EXPORT "ERROR_CODE", BUFF128[15..0];\r
959     CALL DO_EXIT;\r
960     ARRAYEPR:\r
961     IF ( ! (ULARD==1) ) THEN GOTO SKIPRCHK1;\r
962     STATUS = -30;\r
963     PRINT "FPGA Array Verification is protected by pass key.";\r
964     PRINT "A valid pass key needs to be provided.";\r
965     UNIQUEEXITCODE = 32804;\r
966     BUFF128[15..0] = BOOL(UNIQUEEXITCODE);\r
967     EXPORT "ERROR_CODE", BUFF128[15..0];\r
968     CALL DO_EXIT;\r
969     SKIPRCHK1:\r
970     IF ( ! (ULARD==0) ) THEN GOTO Label_59;\r
971     CHKSEC = 0;\r
972     Label_59:\r
973     LABEL_SEPARATOR = 0;\r
974 ENDPROC;\r
975 \r
976 PROCEDURE DO_CHECK_W USES GV,DO_EXIT,DO_READ_SECURITY;\r
977     CALL DO_READ_SECURITY;\r
978     IF ( ! (ULAWE==1) ) THEN GOTO ARRAYWP;\r
979     STATUS = -28;\r
980     PRINT "FPGA Array Write/Erase is protected by pass key.";\r
981     PRINT "A valid pass key needs to be provided.";\r
982     UNIQUEEXITCODE = 32805;\r
983     BUFF128[15..0] = BOOL(UNIQUEEXITCODE);\r
984     EXPORT "ERROR_CODE", BUFF128[15..0];\r
985     CALL DO_EXIT;\r
986     ARRAYWP:\r
987     IF ( ! (ULARD==1) ) THEN GOTO ARRAYRPW;\r
988     STATUS = -30;\r
989     PRINT "FPGA Array Verification is protected by pass key.";\r
990     PRINT "A valid pass key needs to be provided.";\r
991     UNIQUEEXITCODE = 32806;\r
992     BUFF128[15..0] = BOOL(UNIQUEEXITCODE);\r
993     EXPORT "ERROR_CODE", BUFF128[15..0];\r
994     CALL DO_EXIT;\r
995     ARRAYRPW:\r
996     IF ( ! (ULARE==1) ) THEN GOTO ARRAYEPW;\r
997     STATUS = -33;\r
998     PRINT "FPGA Array Encryption is enforced. Plain text programming is prohibited.";\r
999     CALL DO_EXIT;\r
1000     ARRAYEPW:\r
1001     LABEL_SEPARATOR = 0;\r
1002 ENDPROC;\r
1003 \r
1004 PROCEDURE BP_VER USES GV;\r
1005     BOOLEAN PLAYER_VERSION_BOOLEAN[32];\r
1006     PLAYER_VERSION_BOOLEAN[31..0] = BOOL(PLAYERVERSIONVARIABLE);\r
1007     INTEGER PLAYER_MAJOR_VERSION =(INT(PLAYER_VERSION_BOOLEAN[23..16])-SCULPTORMAJORBASE);\r
1008     INTEGER PLAYER_MINOR_VERSION =(INT(PLAYER_VERSION_BOOLEAN[15..8])-SCULPTORMINORBASE);\r
1009     ACT_UROW_SW_VERSION[6..5] = BOOL(PLAYER_MAJOR_VERSION);\r
1010     ACT_UROW_SW_VERSION[4..1] = BOOL(PLAYER_MINOR_VERSION);\r
1011     ACT_UROW_SW_VERSION[0] = PLAYER_VERSION_BOOLEAN[0];\r
1012     ACT_UROW_PROGRAM_SW[3..0] = BOOL(PLAYERVERSIONSWVARIABLE);\r
1013 ENDPROC;\r
1014 \r
1015 PROCEDURE POLL_PROGRAM USES GV;\r
1016     INTEGER ILOOP_0;\r
1017     FOR ILOOP_0 = 16381 - 1 TO 0 STEP -1;\r
1018         IRSTOP IRPAUSE;\r
1019         DRSTOP DRPAUSE;\r
1020         IRSCAN 8, $84;\r
1021         WAIT IDLE, 1 CYCLES;\r
1022         WAIT IDLE, 100 USEC;\r
1023         DRSCAN 5, $00,COMPARE $00,$0b,PASS;\r
1024         IF PASS THEN ILOOP_0 = 0;\r
1025     NEXT ILOOP_0;\r
1026 ENDPROC;\r
1027 \r
1028 PROCEDURE SET_PRG_ARRAY USES GV;\r
1029     ISPRGARRAY = 1;\r
1030 ENDPROC;\r
1031 \r
1032 PROCEDURE DO_INITIALIZE USES GV,DO_EXIT,READ_F_ROW,VERIFY_ID_DMK,DO_CHECK_R,DO_CHECK_W\r
1033     ,BP_VER;\r
1034     IRSTOP IRPAUSE;\r
1035     DRSTOP DRPAUSE;\r
1036     IRSCAN 8, $7f;\r
1037     WAIT IDLE, 3 CYCLES;\r
1038     WAIT IDLE, 50 USEC;\r
1039     BSR[563..0] = BSRPATTERN[563..0];\r
1040     BOOLEAN SHIFT_DATA[564];\r
1041     IRSCAN 8, $01;\r
1042     DRSCAN 564, BSR[];\r
1043     WAIT IDLE, 1 CYCLES;\r
1044     DRSCAN 564, SHIFT_DATA[], CAPTURE SAMPLE_DEVICE[];\r
1045     FOR I = 0 TO 563;\r
1046         IF ( ! (SAMPLEMASK[I]==1) ) THEN GOTO Label_60;\r
1047         BSR[I] = SAMPLE_DEVICE[I];\r
1048         Label_60:\r
1049         LABEL_SEPARATOR = 0;\r
1050     NEXT I;\r
1051     IRSTOP IRPAUSE;\r
1052     DRSTOP DRPAUSE;\r
1053     IRSCAN 8, $01;\r
1054     DRSCAN 564, BSR[];\r
1055     WAIT IDLE, 1 CYCLES;\r
1056     IRSTOP IRPAUSE;\r
1057     DRSTOP DRPAUSE;\r
1058     IRSCAN 8, $c0;\r
1059     WAIT IDLE, 1 CYCLES;\r
1060     IRSTOP IRPAUSE;\r
1061     DRSTOP DRPAUSE;\r
1062     IRSCAN 8, $80;\r
1063     DRSCAN 18, $00000;\r
1064     WAIT IDLE, 3 CYCLES;\r
1065     WAIT IDLE, 1875 USEC;\r
1066     DRSCAN 18, $00000, CAPTURE ISC_CONFIG_RESULT[],COMPARE $30000,$30000,PASS;\r
1067     IF ( ! (PASS==0) ) THEN GOTO CRCOK;\r
1068     STATUS = 5;\r
1069     PRINT "Failed to enter programming mode.";\r
1070     EXPORT "ISC_Config_Result", ISC_CONFIG_RESULT[];\r
1071     UNIQUEEXITCODE = 32850;\r
1072     BUFF128[15..0] = BOOL(UNIQUEEXITCODE);\r
1073     EXPORT "ERROR_CODE", BUFF128[15..0];\r
1074     CALL DO_EXIT;\r
1075     CRCOK:\r
1076     FADDR[] = $0;\r
1077     CALL READ_F_ROW;\r
1078     EXPORT "FSN", BUFF128[55..8];\r
1079     CALL VERIFY_ID_DMK;\r
1080     IF ( ! (CHKARRAY==1) ) THEN GOTO SKIPCHKARRAY;\r
1081     IF ( ! (ARRAYRONLY==0) ) THEN GOTO Label_61;\r
1082     CALL DO_CHECK_W;\r
1083     Label_61:\r
1084     IF ( ! (ARRAYRONLY==1) ) THEN GOTO Label_62;\r
1085     CALL DO_CHECK_R;\r
1086     Label_62:\r
1087     LABEL_SEPARATOR = 0;\r
1088     SKIPCHKARRAY:\r
1089     IF ( ! (PLAYERVERSIONVARIABLE!=0) ) THEN GOTO Label_63;\r
1090     CALL BP_VER;\r
1091     Label_63:\r
1092     LABEL_SEPARATOR = 0;\r
1093 ENDPROC;\r
1094 \r
1095 PROCEDURE READ_INITIALIZE USES GV,DO_INITIALIZE;\r
1096     CHKFROM = 0;\r
1097     CHKARRAY = 0;\r
1098     CHKNVM = 0;\r
1099     CHKSEC = 0;\r
1100     CALL DO_INITIALIZE;\r
1101 ENDPROC;\r
1102 \r
1103 PROCEDURE NW_INITIALIZE_COMMON USES GV;\r
1104     CHKFROM = 0;\r
1105     CHKARRAY = 0;\r
1106 ENDPROC;\r
1107 \r
1108 PROCEDURE NW_INITIALIZE USES DO_INITIALIZE,NW_INITIALIZE_COMMON;\r
1109     CALL NW_INITIALIZE_COMMON;\r
1110     CALL DO_INITIALIZE;\r
1111 ENDPROC;\r
1112 \r
1113 PROCEDURE NR_INITIALIZE_COMMON USES GV;\r
1114     CHKFROM = 0;\r
1115     CHKARRAY = 0;\r
1116 ENDPROC;\r
1117 \r
1118 PROCEDURE NR_INITIALIZE USES DO_INITIALIZE,NR_INITIALIZE_COMMON;\r
1119     CALL NR_INITIALIZE_COMMON;\r
1120     CALL DO_INITIALIZE;\r
1121 ENDPROC;\r
1122 \r
1123 PROCEDURE AW_INITIALIZE USES GV,DO_INITIALIZE;\r
1124     ARRAYRONLY = 0;\r
1125     CHKFROM = 0;\r
1126     CHKARRAY = 1;\r
1127     CHKNVM = 0;\r
1128     CALL DO_INITIALIZE;\r
1129 ENDPROC;\r
1130 \r
1131 PROCEDURE AR_INITIALIZE USES GV,DO_INITIALIZE;\r
1132     ARRAYRONLY = 1;\r
1133     CHKFROM = 0;\r
1134     CHKARRAY = 1;\r
1135     CHKNVM = 0;\r
1136     CALL DO_INITIALIZE;\r
1137 ENDPROC;\r
1138 \r
1139 PROCEDURE W_INITIALIZE USES GV,DO_INITIALIZE;\r
1140     ARRAYRONLY = 0;\r
1141     CHKARRAY = 1;\r
1142     CALL DO_INITIALIZE;\r
1143 ENDPROC;\r
1144 \r
1145 PROCEDURE R_INITIALIZE USES GV,DO_INITIALIZE;\r
1146     ARRAYRONLY = 1;\r
1147     CHKARRAY = 1;\r
1148     CALL DO_INITIALIZE;\r
1149 ENDPROC;\r
1150 \r
1151 PROCEDURE INITIALIZE USES GV,DO_INITIALIZE;\r
1152     ARRAYRONLY = 0;\r
1153     FROMRONLY = 0;\r
1154     CHKFROM = 1;\r
1155     CHKARRAY = 1;\r
1156     CALL DO_INITIALIZE;\r
1157 ENDPROC;\r
1158 \r
1159 PROCEDURE POLL_ERASE USES GV;\r
1160     PASS = 0;\r
1161     INTEGER ILOOP_1;\r
1162     FOR ILOOP_1 = 262141 - 1 TO 0 STEP -1;\r
1163         IRSTOP IRPAUSE;\r
1164         DRSTOP DRPAUSE;\r
1165         IRSCAN 8, $84;\r
1166         WAIT IDLE, 1 CYCLES;\r
1167         WAIT IDLE, 1000 USEC;\r
1168         DRSCAN 5, $00,COMPARE $00,$03,PASS;\r
1169         IF PASS THEN ILOOP_1 = 0;\r
1170     NEXT ILOOP_1;\r
1171 ENDPROC;\r
1172 \r
1173 PROCEDURE UFROM_DISTURB USES GV;\r
1174     FOR FROMROWNUMBER = NUMBEROFFROMROWS TO 1 STEP -1;\r
1175         IRSTOP IRPAUSE;\r
1176         DRSTOP DRPAUSE;\r
1177         IRSCAN 8, $9f;\r
1178         DRSCAN 3, BOOL((FROMROWNUMBER-1));\r
1179         WAIT IDLE, 1 CYCLES;\r
1180         IRSTOP IRPAUSE;\r
1181         DRSTOP DRPAUSE;\r
1182         IRSCAN 8, $9b;\r
1183         DRSCAN 128, $ffffffffffffffffffffffffffffffff;\r
1184         WAIT IDLE, 5 CYCLES;\r
1185         WAIT IDLE, 10000 USEC;\r
1186     NEXT FROMROWNUMBER;\r
1187 ENDPROC;\r
1188 \r
1189 PROCEDURE PROGRAM_UROW USES GV,BITSTREAM,DO_EXIT,POLL_PROGRAM;\r
1190     IF ( ! (ISERASEONLY==0) ) THEN GOTO SKIP_CYC_INCREMENT;\r
1191     IF ( ! (ISPRGARRAY==1) ) THEN GOTO NOT_PGM_ARRAY;\r
1192     IF ( ! ( ( ( (INT(UROW[31..0])==-1)&&(INT(UROW[63..32])==-1))&&(INT(UROW[95..64])==-1))&&(INT(UROW[127..96])==-1)) ) THEN GOTO NOT_CORRUPTED_CYCLE_COUNT;\r
1193     ACT_UROW_CYCLE_COUNT = 0;\r
1194     NOT_CORRUPTED_CYCLE_COUNT:\r
1195     IF ( ! (ACT_UROW_CYCLE_COUNT<1000) ) THEN GOTO MAX_CYCLE_COUNT;\r
1196     ACT_UROW_CYCLE_COUNT = (ACT_UROW_CYCLE_COUNT+1);\r
1197     MAX_CYCLE_COUNT:\r
1198     LABEL_SEPARATOR = 0;\r
1199     NOT_PGM_ARRAY:\r
1200     LABEL_SEPARATOR = 0;\r
1201     SKIP_CYC_INCREMENT:\r
1202     IF ( ! (ISERASEONLY==1) ) THEN GOTO Label_64;\r
1203     UROW[] = $ffffffffffffffffffffffffffffffff;\r
1204     Label_64:\r
1205     IF ( ! ( (ISERASEONLY==0)||(ISRESTOREDESIGN==1)) ) THEN GOTO SKIP_DESIGN_INFO;\r
1206     BUFF32[31..0] = BOOL(CHECKSUM);\r
1207     IF ( ! ( !ISRESTOREDESIGN) ) THEN GOTO Label_65;\r
1208     UROW[127..112] = BUFF32[15..0];\r
1209     Label_65:\r
1210     IF ( ! ISRESTOREDESIGN ) THEN GOTO Label_66;\r
1211     UROW[127..112] = SUROWCHECKSUM[15..0];\r
1212     Label_66:\r
1213     IF ( ! ( !ISRESTOREDESIGN) ) THEN GOTO Label_67;\r
1214     UROW[101..32] = ACT_UROW_DESIGN_NAME[69..0];\r
1215     Label_67:\r
1216     IF ( ! ISRESTOREDESIGN ) THEN GOTO Label_68;\r
1217     UROW[101..32] = SUROWDESIGNNAME[69..0];\r
1218     Label_68:\r
1219     LABEL_SEPARATOR = 0;\r
1220     SKIP_DESIGN_INFO:\r
1221     BUFF32[31..0] = BOOL(ACT_UROW_CYCLE_COUNT);\r
1222     UROW[111..102] = BUFF32[9..0];\r
1223     UROW[31..29] = ACT_UROW_PROG_METHOD[2..0];\r
1224     UROW[28..25] = ACT_UROW_ALGO_VERSION[3..0];\r
1225     UROW[16..10] = ACT_UROW_SW_VERSION[6..0];\r
1226     UROW[9..6] = ACT_UROW_PROGRAM_SW[3..0];\r
1227     UROW[4] = SUROW_SRAM_DISTURB[0];\r
1228     IF ( ! (ACT_UROW_ALGO_VERSION[6]==1) ) THEN GOTO Label_69;\r
1229     UROW[5] = 1;\r
1230     UROW[0] = 0;\r
1231     UROW[24..23] = ACT_UROW_ALGO_VERSION[5..4];\r
1232     Label_69:\r
1233     IF ( ! (ACT_UROW_ALGO_VERSION[6]==0) ) THEN GOTO Label_70;\r
1234     UROW[5] = 0;\r
1235     UROW[0] = 1;\r
1236     UROW[24..23] = ACT_UROW_ALGO_VERSION[5..4];\r
1237     Label_70:\r
1238     IRSTOP IRPAUSE;\r
1239     DRSTOP DRPAUSE;\r
1240     IRSCAN 8, $a7;\r
1241     DRSCAN 128, UROW[];\r
1242     WAIT IDLE, 15 CYCLES;\r
1243     CALL POLL_PROGRAM;\r
1244     IF ( ! (PASS==0) ) THEN GOTO PROGRAM_OK3;\r
1245     STATUS = -24;\r
1246     PRINT "Failed to program UROW";\r
1247     UNIQUEEXITCODE = 32853;\r
1248     BUFF128[15..0] = BOOL(UNIQUEEXITCODE);\r
1249     EXPORT "ERROR_CODE", BUFF128[15..0];\r
1250     CALL DO_EXIT;\r
1251     PROGRAM_OK3:\r
1252     IRSTOP IRPAUSE;\r
1253     DRSTOP DRPAUSE;\r
1254     IRSCAN 8, $c0;\r
1255     WAIT IDLE, 1 CYCLES;\r
1256     IRSTOP IRPAUSE;\r
1257     DRSTOP DRPAUSE;\r
1258     IRSCAN 8, $a8;\r
1259     WAIT IDLE, 3 CYCLES;\r
1260     WAIT IDLE, 165 USEC;\r
1261     DRSCAN 128, $00000000000000000000000000000000,COMPARE UROW[],UROW_MASK[],PASS;\r
1262     IF ( ! (PASS==0) ) THEN GOTO UROW_OK;\r
1263     STATUS = -24;\r
1264     PRINT "Failed to program UROW";\r
1265     UNIQUEEXITCODE = 32854;\r
1266     BUFF128[15..0] = BOOL(UNIQUEEXITCODE);\r
1267     EXPORT "ERROR_CODE", BUFF128[15..0];\r
1268     CALL DO_EXIT;\r
1269     UROW_OK:\r
1270     LABEL_SEPARATOR = 0;\r
1271 ENDPROC;\r
1272 \r
1273 PROCEDURE FAIL_ERASE USES GV,DO_EXIT;\r
1274     STATUS = 8;\r
1275     PRINT "Failed Erase Operation";\r
1276     UNIQUEEXITCODE = 32855;\r
1277     BUFF128[15..0] = BOOL(UNIQUEEXITCODE);\r
1278     EXPORT "ERROR_CODE", BUFF128[15..0];\r
1279     CALL DO_EXIT;\r
1280 ENDPROC;\r
1281 \r
1282 PROCEDURE EXE_ERASE USES BITSTREAM,GV,READ_UROW,POLL_ERASE,PROGRAM_UROW,FAIL_ERASE;\r
1283     IF ( ! (COMBERASESELECT[14]==1) ) THEN GOTO SKIPRUROW;\r
1284     CALL READ_UROW;\r
1285     EXPORT "ACTEL_SLOG_UROW", UROW[];\r
1286     SKIPRUROW:\r
1287     IRSTOP IRPAUSE;\r
1288     DRSTOP DRPAUSE;\r
1289     IRSCAN 8, $85;\r
1290     DRSCAN 23, COMBERASESELECT[];\r
1291     WAIT IDLE, 3 CYCLES;\r
1292     CALL POLL_ERASE;\r
1293     IF ( ! (PASS==0) ) THEN GOTO ERASEOK;\r
1294     CALL FAIL_ERASE;\r
1295     ERASEOK:\r
1296     IF ( ! (COMBERASESELECT[14]==1) ) THEN GOTO Label_71;\r
1297     CALL PROGRAM_UROW;\r
1298     Label_71:\r
1299     LABEL_SEPARATOR = 0;\r
1300 ENDPROC;\r
1301 \r
1302 PROCEDURE DO_ERASE USES BITSTREAM,GV,EXE_ERASE;\r
1303     PRINT "Erase ...";\r
1304     COMBERASESELECT[22..0] = $004000;\r
1305     COMBERASESELECT[0] = 1;\r
1306     CALL EXE_ERASE;\r
1307     PRINT "Completed erase";\r
1308     IF ( ! (ISPRGARRAY==1) ) THEN GOTO NOT_PGM_ARRAY_ERASE;\r
1309     BUFF32[31..0] = BOOL(CHECKSUM);\r
1310     EXPORT "CHECKSUM: ", BUFF32[15..0];\r
1311     NOT_PGM_ARRAY_ERASE:\r
1312     LABEL_SEPARATOR = 0;\r
1313 ENDPROC;\r
1314 \r
1315 PROCEDURE DO_ERASE_ARRAY USES GV,EXE_ERASE;\r
1316     PRINT "Erase FPGA Array ...";\r
1317     COMBERASESELECT[22..0] = $004001;\r
1318     CALL EXE_ERASE;\r
1319 ENDPROC;\r
1320 \r
1321 PROCEDURE DO_ERASE_ONLY USES GV,DO_ERASE;\r
1322     ISERASEONLY = 1;\r
1323     CALL DO_ERASE;\r
1324 ENDPROC;\r
1325 \r
1326 PROCEDURE DO_ERASE_ARRAY_ONLY USES GV,DO_ERASE_ARRAY;\r
1327     ISERASEONLY = 1;\r
1328     CALL DO_ERASE_ARRAY;\r
1329 ENDPROC;\r
1330 \r
1331 PROCEDURE DO_ERASE_ALL USES GV,UFROM_DISTURB,EXE_ERASE;\r
1332     IF ( ! ( (BM7DEVICE==1)||(BM1DEVICE==1)) ) THEN GOTO Label_72;\r
1333     PRINT "Erase FPGA Array and FlashROM ...";\r
1334     Label_72:\r
1335     IF ( ! ( (BM7DEVICE!=1)&&(BM1DEVICE!=1)) ) THEN GOTO Label_73;\r
1336     PRINT "Erase FPGA Array, FlashROM and Security Settings ...";\r
1337     Label_73:\r
1338     COMBERASESELECT[22..0] = $7fc00f;\r
1339     ISERASEONLY = 1;\r
1340     CALL EXE_ERASE;\r
1341     CALL UFROM_DISTURB;\r
1342 ENDPROC;\r
1343 \r
1344 PROCEDURE LOAD_ROW_DATA USES BITSTREAM,GV;\r
1345     FOR SDTILE = 1 TO NUMBEROFSDTILES;\r
1346         FOR I = 1 TO 8;\r
1347             IRSTOP IRPAUSE;\r
1348             DRSTOP DRPAUSE;\r
1349             IRSCAN 8, $89;\r
1350             DRSCAN 26, DATASTREAM[(DATAINDEX+25)..DATAINDEX];\r
1351             WAIT IDLE, 3 CYCLES;\r
1352             DATAINDEX = (DATAINDEX+26);\r
1353         NEXT I;\r
1354     NEXT SDTILE;\r
1355 ENDPROC;\r
1356 \r
1357 PROCEDURE EXE_PROGRAM USES GV,DO_EXIT,POLL_PROGRAM;\r
1358     IRSTOP IRPAUSE;\r
1359     DRSTOP DRPAUSE;\r
1360     IRSCAN 8, $83;\r
1361     WAIT IDLE, 3 CYCLES;\r
1362     CALL POLL_PROGRAM;\r
1363     IF ( ! (PASS==0) ) THEN GOTO Label_74;\r
1364     STATUS = 10;\r
1365     PRINT "Failed to program FPGA array at row ",ROWNUMBER,".";\r
1366     UNIQUEEXITCODE = 32856;\r
1367     BUFF128[15..0] = BOOL(UNIQUEEXITCODE);\r
1368     EXPORT "ERROR_CODE", BUFF128[15..0];\r
1369     CALL DO_EXIT;\r
1370     Label_74:\r
1371     LABEL_SEPARATOR = 0;\r
1372 ENDPROC;\r
1373 \r
1374 PROCEDURE EXE_VERIFY USES GV,DO_EXIT,POLL_PROGRAM;\r
1375     IRSTOP IRPAUSE;\r
1376     DRSTOP DRPAUSE;\r
1377     IRSCAN 8, $8d;\r
1378     DRSCAN 2, VERIFYEOL[];\r
1379     WAIT IDLE, 3 CYCLES;\r
1380     WAIT IDLE, 132 USEC;\r
1381     CALL POLL_PROGRAM;\r
1382     IF ( ! (PASS==0) ) THEN GOTO Label_75;\r
1383     STATUS = 11;\r
1384     PRINT "Verify 0 failed at row ",ROWNUMBER,".";\r
1385     UNIQUEEXITCODE = 32857;\r
1386     BUFF128[15..0] = BOOL(UNIQUEEXITCODE);\r
1387     EXPORT "ERROR_CODE", BUFF128[15..0];\r
1388     CALL DO_EXIT;\r
1389     Label_75:\r
1390     IRSCAN 8, $8d;\r
1391     DRSCAN 2, VERIFYEOL[],COMPARE $0,$3,PASS;\r
1392     IF ( ! (PASS==0) ) THEN GOTO Label_76;\r
1393     STATUS = 11;\r
1394     PRINT "Verify 0 failed at row ",ROWNUMBER,".";\r
1395     UNIQUEEXITCODE = 32858;\r
1396     BUFF128[15..0] = BOOL(UNIQUEEXITCODE);\r
1397     EXPORT "ERROR_CODE", BUFF128[15..0];\r
1398     CALL DO_EXIT;\r
1399     Label_76:\r
1400     IRSTOP IRPAUSE;\r
1401     DRSTOP DRPAUSE;\r
1402     IRSCAN 8, $8e;\r
1403     DRSCAN 2, VERIFYEOL[];\r
1404     WAIT IDLE, 3 CYCLES;\r
1405     WAIT IDLE, 132 USEC;\r
1406     CALL POLL_PROGRAM;\r
1407     IF ( ! (PASS==0) ) THEN GOTO Label_77;\r
1408     STATUS = 11;\r
1409     PRINT "Verify 1 failed at row ",ROWNUMBER,".";\r
1410     UNIQUEEXITCODE = 32859;\r
1411     BUFF128[15..0] = BOOL(UNIQUEEXITCODE);\r
1412     EXPORT "ERROR_CODE", BUFF128[15..0];\r
1413     CALL DO_EXIT;\r
1414     Label_77:\r
1415     IRSCAN 8, $8e;\r
1416     DRSCAN 2, VERIFYEOL[],COMPARE $0,$3,PASS;\r
1417     IF ( ! (PASS==0) ) THEN GOTO Label_78;\r
1418     STATUS = 11;\r
1419     PRINT "Verify 1 failed at row ",ROWNUMBER,".";\r
1420     UNIQUEEXITCODE = 32860;\r
1421     BUFF128[15..0] = BOOL(UNIQUEEXITCODE);\r
1422     EXPORT "ERROR_CODE", BUFF128[15..0];\r
1423     CALL DO_EXIT;\r
1424     Label_78:\r
1425     LABEL_SEPARATOR = 0;\r
1426 ENDPROC;\r
1427 \r
1428 PROCEDURE DO_PROGRAM USES GV,LOAD_ROW_DATA,EXE_PROGRAM;\r
1429     IRSTOP IRPAUSE;\r
1430     DRSTOP DRPAUSE;\r
1431     IRSCAN 8, $87;\r
1432     DRSCAN 2, $2;\r
1433     WAIT IDLE, 3 CYCLES;\r
1434     PRINT "Programming FPGA Array";\r
1435     DATAINDEX = 0;\r
1436     ROWNUMBER = (NUMBEROFMAPROWS-1);\r
1437     INTEGER IREPEAT_0;\r
1438     FOR IREPEAT_0 = NUMBEROFMAPROWS - 1 TO 0 STEP -1;\r
1439         CALL LOAD_ROW_DATA;\r
1440         CALL EXE_PROGRAM;\r
1441         IRSTOP IRPAUSE;\r
1442         DRSTOP DRPAUSE;\r
1443         IRSCAN 8, $87;\r
1444         DRSCAN 2, $3;\r
1445         WAIT IDLE, 3 CYCLES;\r
1446         IF ( ! ((ROWNUMBER%ROWITERATION)==0) ) THEN GOTO Label_79;\r
1447         PERCENT_UPDATE = ((100*((NUMBEROFMAPROWS-ROWNUMBER)+1))/NUMBEROFMAPROWS);\r
1448         DIFFERENCE = (PERCENT_UPDATE%10);\r
1449         IF ( ! (DIFFERENCE>=5) ) THEN GOTO ROUND_DOWN_PGM_A;\r
1450         PERCENT_UPDATE = (PERCENT_UPDATE+(10-DIFFERENCE));\r
1451         ROUND_DOWN_PGM_A:\r
1452         IF ( ! (DIFFERENCE<5) ) THEN GOTO ROUND_UP_PGM_A;\r
1453         PERCENT_UPDATE = (PERCENT_UPDATE-DIFFERENCE);\r
1454         ROUND_UP_PGM_A:\r
1455         EXPORT "PERCENT_DONE", PERCENT_UPDATE;\r
1456         Label_79:\r
1457         ROWNUMBER = (ROWNUMBER-1);\r
1458     NEXT IREPEAT_0;\r
1459 ENDPROC;\r
1460 \r
1461 PROCEDURE DO_VERIFY USES GV,LOAD_ROW_DATA,EXE_VERIFY;\r
1462     IRSTOP IRPAUSE;\r
1463     DRSTOP DRPAUSE;\r
1464     IRSCAN 8, $87;\r
1465     DRSCAN 2, $2;\r
1466     WAIT IDLE, 3 CYCLES;\r
1467     PRINT "Verifying FPGA Array";\r
1468     DATAINDEX = 0;\r
1469     ROWNUMBER = (NUMBEROFMAPROWS-1);\r
1470     INTEGER IREPEAT_1;\r
1471     FOR IREPEAT_1 = NUMBEROFMAPROWS - 1 TO 0 STEP -1;\r
1472         CALL LOAD_ROW_DATA;\r
1473         CALL EXE_VERIFY;\r
1474         IRSTOP IRPAUSE;\r
1475         DRSTOP DRPAUSE;\r
1476         IRSCAN 8, $87;\r
1477         DRSCAN 2, $3;\r
1478         WAIT IDLE, 3 CYCLES;\r
1479         IF ( ! ((ROWNUMBER%ROWITERATION)==0) ) THEN GOTO Label_80;\r
1480         PERCENT_UPDATE = ((100*((NUMBEROFMAPROWS-ROWNUMBER)+1))/NUMBEROFMAPROWS);\r
1481         DIFFERENCE = (PERCENT_UPDATE%10);\r
1482         IF ( ! (DIFFERENCE>=5) ) THEN GOTO ROUND_DOWN_VER_ARRAY;\r
1483         PERCENT_UPDATE = (PERCENT_UPDATE+(10-DIFFERENCE));\r
1484         ROUND_DOWN_VER_ARRAY:\r
1485         IF ( ! (DIFFERENCE<5) ) THEN GOTO ROUND_UP_VER_ARRAY;\r
1486         PERCENT_UPDATE = (PERCENT_UPDATE-DIFFERENCE);\r
1487         ROUND_UP_VER_ARRAY:\r
1488         EXPORT "PERCENT_DONE", PERCENT_UPDATE;\r
1489         Label_80:\r
1490         ROWNUMBER = (ROWNUMBER-1);\r
1491     NEXT IREPEAT_1;\r
1492     PRINT "        Verifying FPGA Array -- pass";\r
1493 ENDPROC;\r
1494 \r
1495 PROCEDURE DO_VERIFY_BOL USES GV,DO_VERIFY;\r
1496     VERIFYEOL[0] = 0;\r
1497     CALL DO_VERIFY;\r
1498 ENDPROC;\r
1499 \r
1500 PROCEDURE DO_VERIFY_EOL USES GV,DO_VERIFY;\r
1501     VERIFYEOL[0] = 1;\r
1502     CALL DO_VERIFY;\r
1503 ENDPROC;\r
1504 \r
1505 PROCEDURE DO_PROGRAM_RLOCK USES GV,DO_EXIT,POLL_PROGRAM;\r
1506     DATAINDEX = 0;\r
1507     INTEGER IREPEAT_2;\r
1508     FOR IREPEAT_2 = NUMBEROFSDTILES - 1 TO 0 STEP -1;\r
1509         FOR I = 1 TO 8;\r
1510             IRSTOP IRPAUSE;\r
1511             DRSTOP DRPAUSE;\r
1512             IRSCAN 8, $89;\r
1513             DRSCAN 26, RLOCK[(DATAINDEX+25)..DATAINDEX];\r
1514             WAIT IDLE, 3 CYCLES;\r
1515             DATAINDEX = (DATAINDEX+26);\r
1516         NEXT I;\r
1517     NEXT IREPEAT_2;\r
1518     IRSTOP IRPAUSE;\r
1519     DRSTOP DRPAUSE;\r
1520     IRSCAN 8, $8c;\r
1521     WAIT IDLE, 3 CYCLES;\r
1522     CALL POLL_PROGRAM;\r
1523     IF ( ! (PASS==0) ) THEN GOTO Label_81;\r
1524     STATUS = 10;\r
1525     PRINT "Failed to enable FPGA Array.";\r
1526     UNIQUEEXITCODE = 32862;\r
1527     BUFF128[15..0] = BOOL(UNIQUEEXITCODE);\r
1528     EXPORT "ERROR_CODE", BUFF128[15..0];\r
1529     CALL DO_EXIT;\r
1530     Label_81:\r
1531     LABEL_SEPARATOR = 0;\r
1532 ENDPROC;\r
1533 \r
1534 PROCEDURE DO_READ_IDCODE USES READ_IDCODE_ONLY;\r
1535     WAIT RESET, 5 CYCLES;\r
1536     CALL READ_IDCODE_ONLY;\r
1537     EXIT 0;\r
1538 ENDPROC;\r
1539 \r
1540 \r
1541 CRC A5F1;\r