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
33 DO_VERIFY_PGM_RLOCK,
\r
35 ACTION PROGRAM_ARRAY =
\r
43 DO_VERIFY_PGM_RLOCK,
\r
45 ACTION ERASE_ARRAY =
\r
48 DO_ERASE_ARRAY_ONLY,
\r
66 ACTION VERIFY_ARRAY =
\r
72 ACTION READ_IDCODE =
\r
74 ACTION VERIFY_DEVICE_INFO =
\r
78 DO_VERIFY_DEVICE_INFO,
\r
80 ACTION DEVICE_INFO =
\r
101 INTEGER DIRECTCP=5;
\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
141 INTEGER UNDEFINED=63;
\r
142 INTEGER GRADE_UNSPEC=0;
\r
147 INTEGER GRADE_STD=5;
\r
149 INTEGER GRADE_UNDEF=7;
\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
176 INTEGER DATAINDEX =0;
\r
177 INTEGER FROMROWNUMBER =1;
\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
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
230 BOOLEAN SAMPLE_DEVICE[564];
\r
231 BOOLEAN RLOCK[832] = $7fffffcffffffbfffffeffffffbfffffefffffffffffffffffff3f
\r
232 ffffcffffff3fffffcffffff3fffffcffffff3fffffdffffff3fffffcffffff3fffffcff
\r
233 ffff3fffffcffffff3fffffdffffffffffffffffffffffffffffffffffffffffffffffff
\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
246 INTEGER NUMBEROFSDTILES =4;
\r
247 INTEGER NUMBEROFMAPROWS =1244;
\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
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
419 PROCEDURE DO_EXIT USES GV;
\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
429 WAIT IDLE, 1 CYCLES;
\r
430 WAIT IDLE, 200 USEC;
\r
433 WAIT IDLE, 200 USEC;
\r
434 WAIT RESET, 3 CYCLES;
\r
438 PROCEDURE DO_READ_SECURITY USES GV;
\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
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
463 IF ( ! (ULUFJ==1) ) THEN GOTO Label_2;
\r
464 PRINT "FlashROM Read protected by pass key.";
\r
466 IF ( ! (ULAWE==1) ) THEN GOTO Label_3;
\r
467 PRINT "Array Write/Erase protected by pass key.";
\r
469 IF ( ! (ULARD==1) ) THEN GOTO Label_4;
\r
470 PRINT "Array Verify protected by pass key.";
\r
472 IF ( ! (ULUFE==1) ) THEN GOTO Label_5;
\r
473 PRINT "Encrypted FlashROM Programming Enabled.";
\r
475 IF ( ! (ULARE==1) ) THEN GOTO Label_6;
\r
476 PRINT "Encrypted FPGA Array Programming Enabled.";
\r
478 PRINT "=========================================";
\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
486 PROCEDURE READ_UROW USES BITSTREAM,GV;
\r
490 WAIT IDLE, 1 CYCLES;
\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
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
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
518 PROCEDURE FIX_INT_ARRAYS USES GV;
\r
519 IF ( ! (HEX[0]!=48) ) THEN GOTO Label_9;
\r
522 HEX[I] = HEX[(15-I)];
\r
523 HEX[(15-I)] = TEMP;
\r
526 LABEL_SEPARATOR = 0;
\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
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
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
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
547 LABEL_SEPARATOR = 0;
\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
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
565 IF ( ! (TMPINT==STAPL) ) THEN GOTO Label_16;
\r
566 PRINT "Programming Method: STAPL";
\r
568 IF ( ! (TMPINT==DIRECTC) ) THEN GOTO Label_17;
\r
569 PRINT "Programming Method: DirectC";
\r
571 IF ( ! (TMPINT==PDB) ) THEN GOTO Label_18;
\r
572 PRINT "Programming Method: PDB";
\r
574 IF ( ! (TMPINT==SVF) ) THEN GOTO Label_19;
\r
575 PRINT "Programming Method: SVF";
\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
582 IF ( ! (TMPINT==GRADE_1) ) THEN GOTO Label_21;
\r
583 PRINT "Device Speed Grade: -1";
\r
585 IF ( ! (TMPINT==GRADE_2) ) THEN GOTO Label_22;
\r
586 PRINT "Device Speed Grade: -2";
\r
588 IF ( ! (TMPINT==GRADE_3) ) THEN GOTO Label_23;
\r
589 PRINT "Device Speed Grade: -3";
\r
591 IF ( ! (TMPINT==GRADE_F) ) THEN GOTO Label_24;
\r
592 PRINT "Device Speed Grade: -F";
\r
594 IF ( ! (TMPINT==GRADE_STD) ) THEN GOTO Label_25;
\r
595 PRINT "Device Speed Grade: STD";
\r
597 IF ( ! (TMPINT==GRADE_4) ) THEN GOTO Label_26;
\r
598 PRINT "Device Speed Grade: -4";
\r
600 IF ( ! (TMPINT==GRADE_UNDEF) ) THEN GOTO Label_27;
\r
601 PRINT "Device Speed Grade: speed grade information not available from device";
\r
603 TMPINT = INT(SUROWPROGRAMSW[]);
\r
604 IF ( ! (TMPINT==FP) ) THEN GOTO Label_28;
\r
605 PRINT "Programmer: FlashPro";
\r
607 IF ( ! (TMPINT==FPLITE) ) THEN GOTO Label_29;
\r
608 PRINT "Programmer: FlashPro Lite";
\r
610 IF ( ! (TMPINT==FP3) ) THEN GOTO Label_30;
\r
611 PRINT "Programmer: FlashPro3";
\r
613 IF ( ! (TMPINT==FP4) ) THEN GOTO Label_31;
\r
614 PRINT "Programmer: FlashPro4";
\r
616 IF ( ! (TMPINT==SCULPTW) ) THEN GOTO Label_32;
\r
617 PRINT "Programmer: Sculptor WIN";
\r
619 IF ( ! (TMPINT==BPW) ) THEN GOTO Label_33;
\r
620 PRINT "Programmer: BP Programmer";
\r
622 IF ( ! (TMPINT==DIRECTCP) ) THEN GOTO Label_34;
\r
623 PRINT "Programmer: DirectC";
\r
625 IF ( ! (TMPINT==STP) ) THEN GOTO Label_35;
\r
626 PRINT "Programmer: Actel JAM Player";
\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
633 IF ( ! (TMPINT2==FP34) ) THEN GOTO Label_37;
\r
634 PRINT "Software: FlashPro v3.4";
\r
636 IF ( ! (TMPINT2==FP40) ) THEN GOTO Label_38;
\r
637 PRINT "Software: FlashPro v4.0";
\r
639 IF ( ! (TMPINT2==FP41) ) THEN GOTO Label_39;
\r
640 PRINT "Software: FlashPro v4.1";
\r
642 IF ( ! (TMPINT2==FP42) ) THEN GOTO Label_40;
\r
643 PRINT "Software: FlashPro v4.2";
\r
645 IF ( ! (TMPINT2==FP50) ) THEN GOTO Label_41;
\r
646 PRINT "Software: FlashPro v5.0";
\r
648 IF ( ! (TMPINT2==FP51) ) THEN GOTO Label_42;
\r
649 PRINT "Software: FlashPro v5.1";
\r
651 IF ( ! (TMPINT2==FP60) ) THEN GOTO Label_43;
\r
652 PRINT "Software: FlashPro v6.0";
\r
654 IF ( ! (TMPINT2==FP61) ) THEN GOTO Label_44;
\r
655 PRINT "Software: FlashPro v6.1";
\r
657 IF ( ! (TMPINT2==FP62) ) THEN GOTO Label_45;
\r
658 PRINT "Software: FlashPro v6.2";
\r
660 IF ( ! (TMPINT2==FP84) ) THEN GOTO Label_46;
\r
661 PRINT "Software: FlashPro v8.4";
\r
663 IF ( ! (TMPINT2==FP85) ) THEN GOTO Label_47;
\r
664 PRINT "Software: FlashPro v8.5";
\r
666 IF ( ! (TMPINT2==FP86) ) THEN GOTO Label_48;
\r
667 PRINT "Software: FlashPro v8.6";
\r
669 IF ( ! (TMPINT2==FP90) ) THEN GOTO Label_49;
\r
670 PRINT "Software: FlashPro v9.0";
\r
672 IF ( ! (TMPINT2==FP91) ) THEN GOTO NOT_FP91;
\r
673 PRINT "Software: FlashPro v9.1";
\r
675 IF ( ! (TMPINT2==FP100) ) THEN GOTO NOT_FP100;
\r
676 PRINT "Software: FlashPro v10.0";
\r
678 IF ( ! (TMPINT2==FP_11) ) THEN GOTO NOT_FP_11;
\r
679 PRINT "Software: FlashPro v11.0";
\r
681 IF ( ! (TMPINT2==FP_11_1) ) THEN GOTO NOT_FP_11_1;
\r
682 PRINT "Software: FlashPro v11.1";
\r
684 IF ( ! (TMPINT2==FP_11_2) ) THEN GOTO NOT_FP_11_2;
\r
685 PRINT "Software: FlashPro v11.2";
\r
687 IF ( ! (TMPINT2==FP_11_3) ) THEN GOTO NOT_FP_11_3;
\r
688 PRINT "Software: FlashPro v11.3";
\r
690 IF ( ! (TMPINT2==UNKNOWN) ) THEN GOTO Label_50;
\r
691 PRINT "Software: FlashPro vX.X";
\r
693 LABEL_SEPARATOR = 0;
\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
699 IF ( ! (SUROW_SW_VERSION[0]==1) ) THEN GOTO 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
707 PRINT "Software: Sculptor Win v",TMPINT3,".",TMPINT4,".",TMPINT5;
\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
713 PRINT "Software: BP Win v",TMPINT3,".",TMPINT4,".",TMPINT5;
\r
715 LABEL_SEPARATOR = 0;
\r
717 PRINT "=========================================";
\r
720 PROCEDURE READ_F_ROW USES GV;
\r
724 WAIT IDLE, 1 CYCLES;
\r
729 WAIT IDLE, 1 CYCLES;
\r
733 WAIT IDLE, 3 CYCLES;
\r
734 WAIT IDLE, 165 USEC;
\r
735 DRSCAN 128, $00000000000000000000000000000000, CAPTURE BUFF128[];
\r
738 PROCEDURE DO_DEVICE_INFO USES GV,READ_UROW,DISPLAY_UROW,READ_F_ROW;
\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
749 IF ( ! (BUFF128[2]==0) ) THEN GOTO CORE_ENABLED;
\r
750 PRINT "FPGA Array is not enabled.";
\r
756 EXPORT "FSN", BUFF128[55..8];
\r
757 PRINT "=========================================";
\r
760 PROCEDURE INIT_AES;
\r
764 DRSCAN 128, $00000000000000000000000000000000;
\r
765 WAIT IDLE, 3 CYCLES;
\r
766 WAIT IDLE, 165 USEC;
\r
769 PROCEDURE DO_VERIFY_DEVICE_INFO USES GV,BITSTREAM,DO_EXIT,DO_READ_SECURITY,READ_UROW
\r
770 ,DISP_CHKSUM_DESIGN;
\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
780 WAIT IDLE, 1 CYCLES;
\r
784 WAIT IDLE, 3 CYCLES;
\r
785 WAIT IDLE, 165 USEC;
\r
786 DRSCAN 128, $00000000000000000000000000000000,COMPARE UROW[],$ffff003fffffffffffffffff00000000
\r
788 IF ( ! (PASS==0) ) THEN GOTO UROW_CMP_OK;
\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
796 LABEL_SEPARATOR = 0;
\r
799 PROCEDURE READ_IDCODE_ONLY USES GV;
\r
803 WAIT IDLE, 1 CYCLES;
\r
804 DRSCAN 32, $00000000, CAPTURE ID[];
\r
805 EXPORT "IDCODE", ID[];
\r
808 PROCEDURE VERIFY_RLOCK USES GV;
\r
809 IRSCAN 8, $84,COMPARE $04,$04,PASS;
\r
812 PROCEDURE DO_VERIFY_PGM_RLOCK USES GV,DO_EXIT,VERIFY_RLOCK;
\r
814 IF ( ! (PASS==0) ) THEN GOTO RLOCK_PGM_PASS;
\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
822 LABEL_SEPARATOR = 0;
\r
825 PROCEDURE DO_VERIFY_RLOCK USES GV,DO_EXIT,VERIFY_RLOCK;
\r
827 IF ( ! (PASS==0) ) THEN GOTO RLOCK_VERIFY_PASS;
\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
835 LABEL_SEPARATOR = 0;
\r
838 PROCEDURE VERIFY_ID_DMK USES GV,DO_EXIT,INIT_AES;
\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
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
856 IF ( ! ( (BUFF128[126]==0)||(BM7DEVICE==0)) ) THEN GOTO MXIDOK;
\r
857 IF ( ! ( (BUFF128[126]==1)&&(BM7DEVICE==0)) ) THEN GOTO LDETECTM1;
\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
866 IF ( ! (BUFF128[126]==0) ) THEN GOTO Label_58;
\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
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
883 BOOLEAN BTMPBUFFBIT126 = BUFF128[126];
\r
884 IF ( ! ( (BTMPBUFFBIT126==1)&&(BM1DEVICE==0)) ) THEN GOTO REGDEV;
\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
893 IF ( ! ( (BTMPBUFFBIT126==0)&&(BM7DEVICE==1)) ) THEN GOTO Label_56;
\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
902 IF ( ! ( (BTMPBUFFBIT126==0)&&(BM1DEVICE==1)) ) THEN GOTO Label_57;
\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
911 LABEL_SEPARATOR = 0;
\r
913 LABEL_SEPARATOR = 0;
\r
915 LABEL_SEPARATOR = 0;
\r
918 PROCEDURE VERIFY_IDCODE USES GV,PARAMETERS,DO_EXIT;
\r
919 FREQUENCY (FREQ*1000000);
\r
920 WAIT RESET, 5 CYCLES;
\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
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
935 IDREV = INT(ID[31..28]);
\r
936 IDFAB = INT(ID[24..24]);
\r
939 PROCEDURE IS_SECOK USES GV,DO_EXIT;
\r
940 IF ( ! (SECKEY_OK==0) ) THEN GOTO SECOK;
\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
948 LABEL_SEPARATOR = 0;
\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
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
961 IF ( ! (ULARD==1) ) THEN GOTO SKIPRCHK1;
\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
970 IF ( ! (ULARD==0) ) THEN GOTO Label_59;
\r
973 LABEL_SEPARATOR = 0;
\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
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
987 IF ( ! (ULARD==1) ) THEN GOTO ARRAYRPW;
\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
996 IF ( ! (ULARE==1) ) THEN GOTO ARRAYEPW;
\r
998 PRINT "FPGA Array Encryption is enforced. Plain text programming is prohibited.";
\r
1001 LABEL_SEPARATOR = 0;
\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
1015 PROCEDURE POLL_PROGRAM USES GV;
\r
1017 FOR ILOOP_0 = 16381 - 1 TO 0 STEP -1;
\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
1028 PROCEDURE SET_PRG_ARRAY USES GV;
\r
1032 PROCEDURE DO_INITIALIZE USES GV,DO_EXIT,READ_F_ROW,VERIFY_ID_DMK,DO_CHECK_R,DO_CHECK_W
\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
1042 DRSCAN 564, BSR[];
\r
1043 WAIT IDLE, 1 CYCLES;
\r
1044 DRSCAN 564, SHIFT_DATA[], CAPTURE SAMPLE_DEVICE[];
\r
1046 IF ( ! (SAMPLEMASK[I]==1) ) THEN GOTO Label_60;
\r
1047 BSR[I] = SAMPLE_DEVICE[I];
\r
1049 LABEL_SEPARATOR = 0;
\r
1054 DRSCAN 564, BSR[];
\r
1055 WAIT IDLE, 1 CYCLES;
\r
1059 WAIT IDLE, 1 CYCLES;
\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
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
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
1084 IF ( ! (ARRAYRONLY==1) ) THEN GOTO Label_62;
\r
1087 LABEL_SEPARATOR = 0;
\r
1089 IF ( ! (PLAYERVERSIONVARIABLE!=0) ) THEN GOTO Label_63;
\r
1092 LABEL_SEPARATOR = 0;
\r
1095 PROCEDURE READ_INITIALIZE USES GV,DO_INITIALIZE;
\r
1100 CALL DO_INITIALIZE;
\r
1103 PROCEDURE NW_INITIALIZE_COMMON USES GV;
\r
1108 PROCEDURE NW_INITIALIZE USES DO_INITIALIZE,NW_INITIALIZE_COMMON;
\r
1109 CALL NW_INITIALIZE_COMMON;
\r
1110 CALL DO_INITIALIZE;
\r
1113 PROCEDURE NR_INITIALIZE_COMMON USES GV;
\r
1118 PROCEDURE NR_INITIALIZE USES DO_INITIALIZE,NR_INITIALIZE_COMMON;
\r
1119 CALL NR_INITIALIZE_COMMON;
\r
1120 CALL DO_INITIALIZE;
\r
1123 PROCEDURE AW_INITIALIZE USES GV,DO_INITIALIZE;
\r
1128 CALL DO_INITIALIZE;
\r
1131 PROCEDURE AR_INITIALIZE USES GV,DO_INITIALIZE;
\r
1136 CALL DO_INITIALIZE;
\r
1139 PROCEDURE W_INITIALIZE USES GV,DO_INITIALIZE;
\r
1142 CALL DO_INITIALIZE;
\r
1145 PROCEDURE R_INITIALIZE USES GV,DO_INITIALIZE;
\r
1148 CALL DO_INITIALIZE;
\r
1151 PROCEDURE INITIALIZE USES GV,DO_INITIALIZE;
\r
1156 CALL DO_INITIALIZE;
\r
1159 PROCEDURE POLL_ERASE USES GV;
\r
1162 FOR ILOOP_1 = 262141 - 1 TO 0 STEP -1;
\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
1173 PROCEDURE UFROM_DISTURB USES GV;
\r
1174 FOR FROMROWNUMBER = NUMBEROFFROMROWS TO 1 STEP -1;
\r
1178 DRSCAN 3, BOOL((FROMROWNUMBER-1));
\r
1179 WAIT IDLE, 1 CYCLES;
\r
1183 DRSCAN 128, $ffffffffffffffffffffffffffffffff;
\r
1184 WAIT IDLE, 5 CYCLES;
\r
1185 WAIT IDLE, 10000 USEC;
\r
1186 NEXT FROMROWNUMBER;
\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
1198 LABEL_SEPARATOR = 0;
\r
1200 LABEL_SEPARATOR = 0;
\r
1201 SKIP_CYC_INCREMENT:
\r
1202 IF ( ! (ISERASEONLY==1) ) THEN GOTO Label_64;
\r
1203 UROW[] = $ffffffffffffffffffffffffffffffff;
\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
1210 IF ( ! ISRESTOREDESIGN ) THEN GOTO Label_66;
\r
1211 UROW[127..112] = SUROWCHECKSUM[15..0];
\r
1213 IF ( ! ( !ISRESTOREDESIGN) ) THEN GOTO Label_67;
\r
1214 UROW[101..32] = ACT_UROW_DESIGN_NAME[69..0];
\r
1216 IF ( ! ISRESTOREDESIGN ) THEN GOTO Label_68;
\r
1217 UROW[101..32] = SUROWDESIGNNAME[69..0];
\r
1219 LABEL_SEPARATOR = 0;
\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
1231 UROW[24..23] = ACT_UROW_ALGO_VERSION[5..4];
\r
1233 IF ( ! (ACT_UROW_ALGO_VERSION[6]==0) ) THEN GOTO Label_70;
\r
1236 UROW[24..23] = ACT_UROW_ALGO_VERSION[5..4];
\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
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
1255 WAIT IDLE, 1 CYCLES;
\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
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
1270 LABEL_SEPARATOR = 0;
\r
1273 PROCEDURE FAIL_ERASE USES GV,DO_EXIT;
\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
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
1285 EXPORT "ACTEL_SLOG_UROW", UROW[];
\r
1290 DRSCAN 23, COMBERASESELECT[];
\r
1291 WAIT IDLE, 3 CYCLES;
\r
1293 IF ( ! (PASS==0) ) THEN GOTO ERASEOK;
\r
1296 IF ( ! (COMBERASESELECT[14]==1) ) THEN GOTO Label_71;
\r
1297 CALL PROGRAM_UROW;
\r
1299 LABEL_SEPARATOR = 0;
\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
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
1315 PROCEDURE DO_ERASE_ARRAY USES GV,EXE_ERASE;
\r
1316 PRINT "Erase FPGA Array ...";
\r
1317 COMBERASESELECT[22..0] = $004001;
\r
1321 PROCEDURE DO_ERASE_ONLY USES GV,DO_ERASE;
\r
1326 PROCEDURE DO_ERASE_ARRAY_ONLY USES GV,DO_ERASE_ARRAY;
\r
1328 CALL DO_ERASE_ARRAY;
\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
1335 IF ( ! ( (BM7DEVICE!=1)&&(BM1DEVICE!=1)) ) THEN GOTO Label_73;
\r
1336 PRINT "Erase FPGA Array, FlashROM and Security Settings ...";
\r
1338 COMBERASESELECT[22..0] = $7fc00f;
\r
1341 CALL UFROM_DISTURB;
\r
1344 PROCEDURE LOAD_ROW_DATA USES BITSTREAM,GV;
\r
1345 FOR SDTILE = 1 TO NUMBEROFSDTILES;
\r
1350 DRSCAN 26, DATASTREAM[(DATAINDEX+25)..DATAINDEX];
\r
1351 WAIT IDLE, 3 CYCLES;
\r
1352 DATAINDEX = (DATAINDEX+26);
\r
1357 PROCEDURE EXE_PROGRAM USES GV,DO_EXIT,POLL_PROGRAM;
\r
1361 WAIT IDLE, 3 CYCLES;
\r
1362 CALL POLL_PROGRAM;
\r
1363 IF ( ! (PASS==0) ) THEN GOTO Label_74;
\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
1371 LABEL_SEPARATOR = 0;
\r
1374 PROCEDURE EXE_VERIFY USES GV,DO_EXIT,POLL_PROGRAM;
\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
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
1391 DRSCAN 2, VERIFYEOL[],COMPARE $0,$3,PASS;
\r
1392 IF ( ! (PASS==0) ) THEN GOTO Label_76;
\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
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
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
1416 DRSCAN 2, VERIFYEOL[],COMPARE $0,$3,PASS;
\r
1417 IF ( ! (PASS==0) ) THEN GOTO Label_78;
\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
1425 LABEL_SEPARATOR = 0;
\r
1428 PROCEDURE DO_PROGRAM USES GV,LOAD_ROW_DATA,EXE_PROGRAM;
\r
1433 WAIT IDLE, 3 CYCLES;
\r
1434 PRINT "Programming FPGA Array";
\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
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
1452 IF ( ! (DIFFERENCE<5) ) THEN GOTO ROUND_UP_PGM_A;
\r
1453 PERCENT_UPDATE = (PERCENT_UPDATE-DIFFERENCE);
\r
1455 EXPORT "PERCENT_DONE", PERCENT_UPDATE;
\r
1457 ROWNUMBER = (ROWNUMBER-1);
\r
1461 PROCEDURE DO_VERIFY USES GV,LOAD_ROW_DATA,EXE_VERIFY;
\r
1466 WAIT IDLE, 3 CYCLES;
\r
1467 PRINT "Verifying FPGA Array";
\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
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
1490 ROWNUMBER = (ROWNUMBER-1);
\r
1492 PRINT " Verifying FPGA Array -- pass";
\r
1495 PROCEDURE DO_VERIFY_BOL USES GV,DO_VERIFY;
\r
1500 PROCEDURE DO_VERIFY_EOL USES GV,DO_VERIFY;
\r
1505 PROCEDURE DO_PROGRAM_RLOCK USES GV,DO_EXIT,POLL_PROGRAM;
\r
1507 INTEGER IREPEAT_2;
\r
1508 FOR IREPEAT_2 = NUMBEROFSDTILES - 1 TO 0 STEP -1;
\r
1513 DRSCAN 26, RLOCK[(DATAINDEX+25)..DATAINDEX];
\r
1514 WAIT IDLE, 3 CYCLES;
\r
1515 DATAINDEX = (DATAINDEX+26);
\r
1521 WAIT IDLE, 3 CYCLES;
\r
1522 CALL POLL_PROGRAM;
\r
1523 IF ( ! (PASS==0) ) THEN GOTO Label_81;
\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
1531 LABEL_SEPARATOR = 0;
\r
1534 PROCEDURE DO_READ_IDCODE USES READ_IDCODE_ONLY;
\r
1535 WAIT RESET, 5 CYCLES;
\r
1536 CALL READ_IDCODE_ONLY;
\r