From 84a4c4bb8da0db2057dababfc9500db07836edce Mon Sep 17 00:00:00 2001 From: Martin Date: Thu, 12 Mar 2015 15:22:44 +0100 Subject: [PATCH] pridan stp soubor --- pmsm-control/rpi_mc_simple_dc.stp | 1541 +++++++++++++++++++++++++++++ 1 file changed, 1541 insertions(+) create mode 100644 pmsm-control/rpi_mc_simple_dc.stp diff --git a/pmsm-control/rpi_mc_simple_dc.stp b/pmsm-control/rpi_mc_simple_dc.stp new file mode 100644 index 0000000..959b66e --- /dev/null +++ b/pmsm-control/rpi_mc_simple_dc.stp @@ -0,0 +1,1541 @@ +NOTE "CREATOR" "Designer Version: 11.3.0.112"; +NOTE "CAPTURE" "11.3.0.112"; +NOTE "DEVICE" "AGL125V5"; +NOTE "PACKAGE" "AGL125V5-vq100"; +NOTE "DATE" "2014/10/07"; +NOTE "TIME" "15:09:52"; +NOTE "STAPL_VERSION" "JESD71"; +NOTE "VENDOR" "Microsemi Corporation"; +NOTE "IDCODE" "03A121CF"; +NOTE "IDMASK" "06FFFFFF"; +NOTE "DESIGN" "rpi_mc_simple_dc"; +NOTE "DESIGN_DIRECTORY" "/home/pi/fpga/rpi-mc-1/simple-dc/"; +NOTE "CHECKSUM" "D5FF"; +NOTE "SECURITY" "Disable"; +NOTE "ALG_VERSION" "20"; +NOTE "MAP_VERSION" "1"; +NOTE "TOOL_VERSION" "1"; +NOTE "MAX_FREQ" "10000000"; +NOTE "SILSIG" "00000000"; +NOTE "SPEED_GRAD" "STD"; +NOTE "TEMP_GRAD" "COM"; +NOTE "PLAYER_VERSION_VARIABLE" "PLAYERVERSIONVARIABLE"; +NOTE "PLAYER_VERSION_SW_VARIABLE" "PLAYERVERSIONSWVARIABLE"; + +ACTION PROGRAM = + VERIFY_IDCODE, + SET_PRG_ARRAY, + W_INITIALIZE, + DO_ERASE, + DO_PROGRAM, + DO_VERIFY_BOL, + DO_PROGRAM_RLOCK, + DO_VERIFY_PGM_RLOCK, + DO_EXIT; +ACTION PROGRAM_ARRAY = + VERIFY_IDCODE, + SET_PRG_ARRAY, + AW_INITIALIZE, + DO_ERASE_ARRAY, + DO_PROGRAM, + DO_VERIFY_BOL, + DO_PROGRAM_RLOCK, + DO_VERIFY_PGM_RLOCK, + DO_EXIT; +ACTION ERASE_ARRAY = + VERIFY_IDCODE, + AW_INITIALIZE, + DO_ERASE_ARRAY_ONLY, + DO_EXIT; +ACTION ERASE = + VERIFY_IDCODE, + W_INITIALIZE, + DO_ERASE_ONLY, + DO_EXIT; +ACTION ERASE_ALL = + VERIFY_IDCODE, + INITIALIZE, + DO_ERASE_ALL, + DO_EXIT; +ACTION VERIFY = + VERIFY_IDCODE, + R_INITIALIZE, + DO_VERIFY_EOL, + DO_VERIFY_RLOCK, + DO_EXIT; +ACTION VERIFY_ARRAY = + VERIFY_IDCODE, + AR_INITIALIZE, + DO_VERIFY_EOL, + DO_VERIFY_RLOCK, + DO_EXIT; +ACTION READ_IDCODE = + DO_READ_IDCODE; +ACTION VERIFY_DEVICE_INFO = + VERIFY_IDCODE, + READ_INITIALIZE, + READ_IDCODE_ONLY, + DO_VERIFY_DEVICE_INFO, + DO_EXIT; +ACTION DEVICE_INFO = + VERIFY_IDCODE, + READ_INITIALIZE, + READ_IDCODE_ONLY, + DO_DEVICE_INFO, + DO_QUERY_SECURITY, + DO_EXIT; + + + +DATA CONSTBLOCK; + INTEGER IEEE1532=0; + INTEGER STAPL=1; + INTEGER DIRECTC=2; + INTEGER PDB=3; + INTEGER SVF=4; + INTEGER FP=0; + INTEGER FPLITE=1; + INTEGER FP3=2; + INTEGER SCULPTW=3; + INTEGER BPW=4; + INTEGER DIRECTCP=5; + INTEGER STP=6; + INTEGER FP4=7; + INTEGER FP33=0; + INTEGER FP34=1; + INTEGER FP40=2; + INTEGER FP41=3; + INTEGER FP42=4; + INTEGER FP50=5; + INTEGER FP51=6; + INTEGER FP60=7; + INTEGER FP61=8; + INTEGER FP62=9; + INTEGER FP84=11; + INTEGER FP85=12; + INTEGER FP86=13; + INTEGER FP90=14; + INTEGER FP91=15; + INTEGER FP100=16; + INTEGER FP_11=19; + INTEGER FP_11_1=20; + INTEGER FP_11_2=21; + INTEGER FP_11_3=22; + INTEGER UNKNOWN=127; + INTEGER UNSPECIFIED=0; + INTEGER QN132=1; + INTEGER VQ100=2; + INTEGER TQ144=3; + INTEGER PQ208=4; + INTEGER FG144=5; + INTEGER FG256=6; + INTEGER FG484=7; + INTEGER FG676=8; + INTEGER FG896=9; + INTEGER QN108=10; + INTEGER QN180=11; + INTEGER TQ100=12; + INTEGER CQ208=13; + INTEGER FG1152=14; + INTEGER BG456=15; + INTEGER UNDEFINED=63; + INTEGER GRADE_UNSPEC=0; + INTEGER GRADE_1=1; + INTEGER GRADE_2=2; + INTEGER GRADE_3=3; + INTEGER GRADE_F=4; + INTEGER GRADE_STD=5; + INTEGER GRADE_4=6; + INTEGER GRADE_UNDEF=7; +ENDDATA; + +DATA PARAMETERS; + INTEGER FREQ =4; +ENDDATA; + +DATA GV; + INTEGER ULOPT1_BITLOCATION =11; + INTEGER ULOPT0_BITLOCATION =10; + INTEGER ULUWE_BITLOCATION =9; + INTEGER ULARE_BITLOCATION =8; + INTEGER ULUPC_BITLOCATION =7; + INTEGER ULUFE_BITLOCATION =6; + INTEGER ULUFP_BITLOCATION =5; + INTEGER ULUFJ_BITLOCATION =4; + INTEGER ULFLR_BITLOCATION =3; + INTEGER ULULR_BITLOCATION =2; + INTEGER ULAWE_BITLOCATION =1; + INTEGER ULARD_BITLOCATION =0; + BOOLEAN BUFF128[128]; + BOOLEAN BUFF32[32]; + INTEGER I; + INTEGER J; + INTEGER TEMP; + INTEGER SDNUMBER; + INTEGER ROWNUMBER; + INTEGER DATAINDEX =0; + INTEGER FROMROWNUMBER =1; + INTEGER AESBLOCK; + BOOLEAN ID[32]; + BOOLEAN PASS = 1; + BOOLEAN FADDR[3]; + INTEGER STATUS =0; + BOOLEAN SILSIG[32] = $00000000; + BOOLEAN ISC_CONFIG_RESULT[18]; + BOOLEAN VERIFYEOL[2]; + BOOLEAN COMBERASESELECT[23]; + BOOLEAN SECKEY_OK = 1; + BOOLEAN SECREG[44]; + BOOLEAN ULUWE = 0; + BOOLEAN ULARE = 0; + BOOLEAN ULUPC = 0; + BOOLEAN ULUFE = 0; + BOOLEAN ULUFP = 0; + BOOLEAN ULUFJ = 0; + BOOLEAN ULFLR = 0; + BOOLEAN ULULR = 0; + BOOLEAN ULAWE = 0; + BOOLEAN ULARD = 0; + BOOLEAN ULOPT[2]; + BOOLEAN SUROWCHECKSUM[16]; + INTEGER SUROWCYCLECOUNT =0; + INTEGER ACT_UROW_CYCLE_COUNT =0; + BOOLEAN ACT_UROW_DESIGN_NAME[70] = $138797f6de3fb9e5db; + BOOLEAN SUROWDESIGNNAME[70]; + BOOLEAN SUROWPROGMETHOD[3]; + BOOLEAN ACT_UROW_ALGO_VERSION[7] = $14; + BOOLEAN SUROWALGOVERSION[7]; + BOOLEAN SUROW_PKG_TYPE[6]; + BOOLEAN ACT_UROW_SW_VERSION[7]; + BOOLEAN SUROW_SW_VERSION[7]; + INTEGER PLAYERVERSIONVARIABLE =0; + INTEGER PLAYERVERSIONSWVARIABLE =0; + INTEGER SCULPTORMAJORBASE =5; + INTEGER SCULPTORMINORBASE =16; + BOOLEAN ACT_UROW_PROGRAM_SW[4]; + BOOLEAN SUROWPROGRAMSW[4]; + BOOLEAN SUROW_SPEED_GRADE[3]; + BOOLEAN SUROW_SRAM_DISTURB[1]; + BOOLEAN ISERASEONLY = 0; + BOOLEAN ISRESTOREDESIGN = 0; + BOOLEAN FLAGDISPLAYCYC = 1; + BOOLEAN ISPRGARRAY = 0; + BOOLEAN BSRPATTERN[564] = $9249249249249249249249249249249249249249249249249 + 249249249249249249249249249249249249249249249249249249249249249249249249 + 24924924924924924924; + BOOLEAN SAMPLEMASK[564] = $0000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000; + BOOLEAN BSR[564]; + BOOLEAN SAMPLE_DEVICE[564]; + BOOLEAN RLOCK[832] = $7fffffcffffffbfffffeffffffbfffffefffffffffffffffffff3f + ffffcffffff3fffffcffffff3fffffcffffff3fffffdffffff3fffffcffffff3fffffcff + ffff3fffffcffffff3fffffdffffffffffffffffffffffffffffffffffffffffffffffff + ffffffffff; + BOOLEAN ARRAYRONLY = 1; + BOOLEAN CHKARRAY = 0; + BOOLEAN FROMRONLY = 1; + BOOLEAN CHKFROM = 0; + BOOLEAN CHKNVM = 0; + BOOLEAN CHKSEC = 1; + BOOLEAN PERMLOCK = 0; + INTEGER HEX[16] = 70,69,68,67,66,65,57,56,55,54,53,52,51,50,49,48; + INTEGER NUMBEROFFROMROWS =8; + BOOLEAN INITIALIZE_DATA[5] = $00; + INTEGER SDTILE; + INTEGER NUMBEROFSDTILES =4; + INTEGER NUMBEROFMAPROWS =1244; + INTEGER IDREV; + INTEGER IDFAB; + INTEGER BM7DEVICE =0; + INTEGER BM1DEVICE =0; + BOOLEAN M1BUFF[128] = $acdd6548ccb488863e291eb18fe95077; + BOOLEAN M7BUFF[128] = $e137623a2eeee91126015f3f73664945; + BOOLEAN IDCODEVALUE[32] = $03a121cf; + BOOLEAN IDMASK[32] = $06ffffff; + INTEGER SECKEYCHK =0; + INTEGER DESIGNPKGTYPE =2; + BOOLEAN ACT_UROW_PROG_METHOD[3] = $1; + INTEGER LABEL_SEPARATOR =0; + INTEGER ROWITERATION =100; + INTEGER PAGEITERATION =100; + INTEGER PERCENT_UPDATE; + INTEGER DIFFERENCE; + INTEGER UNIQUEEXITCODE =0; +ENDDATA; + +DATA BITSTREAM; + BOOLEAN UROW[128]; + BOOLEAN UROW_MASK[128] = $fffffffffffffffffffffffffe01ffc0; + BOOLEAN DATASTREAM[1035008] = @WbV00000110040W0W000020G000400108002200000Wwc + qqcso0000p@zlF999IDfjIo0000_@p@@IYaatcjj50000y_@@7HIIIGRRRR34OV@VGIIIYss + sqDGWt@@Haaa4ssqsUY1rW0fD994000u@@@xJIIYSRJYq4000a@@_VZa89P0000Y49996999 + XFI00004999W8991sW1Yaaa8aaaKZ3GIII2IIIg601WHIYa0IIa400rm3899950000400O08 + 0IIIo4OGISGNS000009999rWFQRRRP9BBnXaa4b000WssMjvoIiDB9HIU000WRpss2BMsM49 + 9910000ijjjXjjjLGIIoXHWsssMqsosrm2osoWg14OZjb8PNIYaS0000RRsscPMIoa899P00 + 00JIIIYRBAREjjjwiDDPtaa89poaaORhssJJsaSIaaaALMIYPRRRKQQI29999aWWaWsssiaa + a8Xaa49H2MDW0DaacrW2iaiGpssMYqaqWaaa4JosMSRRRrHIRpC99HIkaDRpsMjjrazk20IQ + I2418000CqTg0IJIW808144XayWC85G022IYQ01cca800008BB9f6GWca4000GW8B89_M680 + 0200989G0000IIIa480HIWa0080OYP0GI208100Pq2IL40GIIADG0I22I80000899BY4C0Ce + 6S0222Wsr28080g1900W0e6e080992000r04Wa48q9IGDDeDdaaayu1GIHJ4899H8000W000 + 0gb5RBaar04WccsAIIIASUWQJRpQW2OBJRh14i9DGfD99caaaSv1ORIIJ37GRRR3sMtcB999 + Yz@@_tssiTizORJIYa4_l@@PRss6sklj9HII2x@@@XjjjDQPPRYaaa8_@@h15Gssci6eWtsM + 4999n__@Vg14mssg4999k@@@RssscgjjjPIIIYu@@t7QRhsQR@j62i@sogTRRpsTRlsUjDRR + ijORxjPRRjPRRZcjjjabbj5ssssm__sCRRRpORRp6RRhsQxxQW2ijjjK3G0RRRMjjjniijDI + 3CmssscvssMjRRRsCRRrsljb6GWz000040030OK3uKh31x0SC04Jdm52000g1q8qWcs2d60o + CEPjI5U269822b_AUY6Ue93j0D@F0eZ8O6y63XrV7C0Ohv2k4duiOA4411jOBa1Y008D0C02 + W0YWaHq0DYJ8JuaF2efC108WZ1W5naW1080a40OPn2NCFewm1T0GO401r0Muqn51qMQUm21Q + M520GGdWaYCKGD06orIm5c62efCIIIIaaaaG999HGIIYiaa49A9922IIaaba89HIg1K0GIII + 4aaaP080IIIYWaa49999IWaa899912GIg6G2aWaW8P9BL30XE1Da6W0P999r0q8Q08r00XIM + IIW409H3aHWJX6023JCqGd0CCEn1NSOGR1p0m00uFW42So18400TSeK0DD4uaM371IW6M5Xo + 31QGYWa4aOBCX4aa49099GIGIaaaa0898bkH1r0O01180GYIInMW0X4W41999o0I2omm0IWI + Ir0KW4aa4A818H3iWWa0ae1I02I2IlY4GIGI0198P11J81999gZDgEGYC0MG080u_3CK3W1T + f4nQGEqmW6L2Q08999I100HAG06000GaaabPUGkXAimu1j7QGD0Wq9053kuGUQNC00BT2GXa + aa430000IIIa3000G99HI0000ma49920r0KW00000999vAGGD06asv1r0qHd0JKIn1caaae0 + 000KIIg@02KIIIMG01z8OID0Kq9m5X0O0GIIIK000L1G010000999o000w3uWM988HW4ECuW + Q06fJ0AobaWq0A0G99PQ04W899f608w48YQ06fJ0760u@10EgYbCMexegGM8Ti6UhRhe16Ag + m@2DOj0ET680GGS2a4oh19CCIWW_5mv@1s_Vy8s5SoS7taN8lo4qm@nmCLD0waNG41dW6100 + WW7@J999PrR8GGIKAeE6KIII6lu5r0OW2IIoQ0e8uneKGII2aa4i6W82Uisfus8Wc@3Efs_A + O8sYKabaaKU171QuX4a4ie1kG2I2Iq0NCzO1H3C1988fe1Ae6032quWg3E8mH4E4ZYQ0qeXX + LAP4240001FkKd0ACj14G0002USfE1E8un@3Uy@10_V001FN5Y0QmAQWA2GhzW7lydnC2SYh + 61Ge5Y32Uy@W7bS5262UqgJEkCU4e3Du@0qUhs_72Uiu0RnlanC2US4GIGI1FQM4Uh4@hr1d + yVmZX6RXO1QiM0QzKd85T2O12osMjD0002QRrsM0000eLRRx0000IjjjT0000g1e000ijQR3 + 0g1eWR29GRRR3001iQ0AG02RRD0A800Rpss0GQ08q9G4ijjjXaaa8tssaHIIY4QRRo299IIi + jPRda899ij6W24RRRN3W1i5IIg1W0DIIIamsci9IIY4OR3s499GIeDRR9ar0eGQ0B8nssEDW + 3w4W0RRRQE9911jjjOdaa4fsscjHIIqaRRssC9HIYRpssAHII2DRRR19999h3qWjDi1baa4W + sMsaGIQM3W18DsseDHI2a4scjjTYaa4RsssEf1010000daaaG0000IIIgK0000999Q20000b + a89H0_P4Xp3F0IIIIVaAK3W1889Dn20G00aa4f10GD08q9G28500g3W09000WIIIam@@RV89 + HIo@l@@a499n@_@VJaaWmx@@@HIIIY@@@@Q0CmZaaKD04Waaa4y@@l7IIIay@x_6IIg1W0BI + IHau@tzF99H2u@d@DaKQ0Bq9G2f1GWFIIIa0008ess6Uu0t1008WjjPQ1000escjj2000esx + 7K000mcjjD0000GsssM004Wesstc00800RRQ_0000XjjPJ0080Xscjj0GQ0BC911ORRRx4mW + Q088um@dAFfOO8hdL223O402000G002fo0G000B@zGZ9cazAAD3OGg05i9O6nziTw1Q88008 + eYb0401KTm522W02UCae1a8unnw4eZG3AeMgB2Uypu4iANvKYygpwH88un@Z6eceE8uMlE_A + 9iU4OgPW426E601201DWub57qNHe1Fswg2C4y8K@0KHmZc04ba8unC0191r372aeaa8P895y + e14a4a8991HMIIAungaWaWK3G3aXaa81994yOP7DOGGG06pbAHT0H80A4ILANM4KmZ@NH118 + 889ZjmYQDA8UnE40995yO744aa89191IYIAG38WaWWK3G1Z2GGW6E09919uHS8080yaH4xCP + GD0K4SlCbCUHmZSK3W120ORrs60040ej60280Wj5yO5C0002UaX67T8unFqms8H2IYLRQRKm + Z5K3W1ejHII30XE1QWQRRRmZ6Ko81Wsss2UCXd088uHGqM99PIej5RBa499nMDjDIh3G0iDI + IaamsT2KHmZGKou11FQY910020GIr08Hd0M8X@@laHA2U44@399GI_@r@Za899_tt@JID04m + @7IYcayVmZRKou51Fo1e0eMjfj0hGaGD0580WsEunz70uumM0gUSC_kf9W000H3uGGGEE00d + N1PGJ3V4uqGH3iGWJ2suudt5SHmzBlIK1HjNOaASkgW61QWM@bsMGmD1FgOS2e6SIDxqbHm9 + M5W6B1FMKm194ye9nnvGmZEq373r0i09809IIIGaWaa2UigQ0u8unl2WEkWJQFuniZjmgq0M + 8un9g10XW7b8GZP2USZ7rGOd6N2UyaI6F8unDg1Gak8ZeaHD2USZQ0K8uH5g10Yk8V8unQg1 + uWW7De6W7SIII2RRRhJ05g1uWW7pf603O9904yu7I0002UidQ0i8uHdg1eaW7@V0W@ZXPiOZ + 79Q0PgLXZkXezniP2Sgce1o8un@ZlQt8lMBun@33x@0q_V005wRtWU4mi_4q2iDsW7ZIGIMI + zZS4yewXK5wfDN6yu@1FcJW6b5q0Q1FwLd074y8LT2GHmZKr9041FMMd064yu@30m7100W10 + _FW6_3UixUph8unfY6WXW7@F0js11014vLPHuTO8Y@7Qm@1ePu00h5So@1FY7891fW7@Fua@ + 3Uy@W7@FuHlh1eYW7Xg6WA2UqgQ0a8uHcg1GaW7T5G00m00@F0WeHDr1010WOOGAQWD2swyG + JHBmfhYJbYI5_98a72Uy@0qgTJ3h33x@G3_Fun@3Ev@W77I2IMISSPq9G1aWWa2Uy@WJ_Fun + @3Uy@W7142qscjD0002PR1FAbbHIoE1WWDTIImZLHQejjJW3CDIIYWSRpM69PmZLHQ408uno + aWy@t9m1ktaa2U4BGKRRsK00w4u08mss1Fsp0096L8630yV0D@7yu@1FAOaNf4yu@1eP8W80 + WWJ_FCi@3Gx@W7@Fun@3UabQ0_8un@31XszZe8ua@3Uy@W7vj602u0006y8LT241nss6TIII + WORR3UCgE1Kmq899IojjW7ngJ0A2UagE1K8unjw4eXW7JU0W@ZXvpOoKV0050200C00G0200 + ANIae1Q8sle2Uy@0q_VdNjZ7nse1IeCX8gv4w0qU3200m00012008uHq1200KTWC7BmHd09i + 4W31dK6MIIoW7LGGIIImZbO99B9EEC8O9957N5O999HGII6KtBMIII4aaW4yOwXK9Om9o555 + H1F_Vq0rGGIIAunI2QOeu4g0200WijjD32001Fw4ijjDR1000assij30q9G1l9QWSQRxT49G + PRRRmZDn689f602K999HYjjLR7a49XosW7H0QIIImZ4Pcaa4XsscjGIor1EGA00G9ZE8D999 + uHgaoz@7ye3C8993Ua8NIIITHgWFIIoR88eaH5W000WfjjDuHYWORRt5f2mQRRr000C0m@1F + _VmZ@F0mfFJNGWJE5dG5VMZGG3b9400eTAP23BZq0ae3F42UqugnL8gzf3Uy@0qOlY262hyh + 0R@x7Lq2EfiuLC8mMbRSqWuukennCg1mZE1SW4aaLGTJ5yu@1qyVm9A6RXM8A993U4Z8MX8G + 3d2UKeTgU8E1Aa0008RRRpa00GmZAm1000ijjTmZSG00ocjjD0G00uW7peBo8UJq0fqssl9I + 0osssI6D8unIqqs6L301osM83U4Zk8NWqssc1III0PRR1FU0saaad0EennDGRRb889XcbjjG + D07GJIYDun7w4uWr1KeaH8qcaa4yeCqaa02Uy39O@@1Fw01IIoI6DenHEq@@GM3G32IIu3Uy + XE1E8un4E8WWW7LG2000assM5000WRRR3Ua320GjhGm0scssw7d8uH50rssM30130yVCCo79 + 9qz8ytrl4LZs91EX620000100HU9M9z@5y8hHGKNaA@7SIFZSgGpC@7qGZjCOG0DD7yufp28 + HmZU7Kt41FcS8LG7yu@7I7HmZU1I2IAsYK2Uq2P898H3SX4a4a0DkG2IIImZhKf080202g18 + Zy0_eanB2USZQ0QG00GRmZfKo851F6Ysss8IGI2QJRR19895yO8bCQ1paa49kjj1FcHD06mm + sMe602mss8L3031FUI9Z94y8Baaa001005yO7bCQXVIIoW75nx@@OD0Auz@V8unEAPCZW7ve + 6030100M3m51FoRuSBD0m@13NUgzvE0W621002SwdE0O8mfg6vFYW7@FuHA@3uX88w0400Gm + 9@t9WE1FIMaAGNGm1P@S2G02W0Q8gTz72USS20G01d0TD1P4y8MIGII2UCcq0I82FFGG2IM3 + 01IJI22UK7Y000131JylJMGWCb1amTDJ4QGL7vqI11nqnnDHT86oIIIcaaanbo3O91fOB69Q + 0X8B985eX91dWcijjD7000WsssQSy0A000DEAHmZQK3W4T2G1RRRRA999x8QWaQRx67h8uHD + g1OYE1kenn4iIIIMo81IIIIKRRR7yO9r0mHd0D4ye2O0000JIIYS00eaH2q0000899Ho00Gm + ZiK3G2T2OXa_@V@B99Io_@BPa0Iz@@_laa89@@x@NIYaazVmZQK307T2CX7IIIa100bCU0GR + RRs2000mjjpQaWW7Bf60Ew40YW7VBGm@3Gx@W6_leCAANoekk29QW92wUjW7PQZj6s0WXW7@ + FgThMjGiWJ_FWc@3Qu@W7nh60BwoqWWJqDgJB2UKA1991r0OHmZX4KND1FQJCCUL306Zhc12 + 02WQ0q8uaAhnMZWJY7300GW6K4Rn6IGIGwhm2WaWar00IW6d0HIIg9Z5Waaaq9m14a442quc + u4S1404GG3tORRRhan9O7004yODT2SnRY6Koe1DEkID0Tq905bCo0ojjjW7NgJ052UiE@III + a_@@3U4fE1Q8un6USuWW7FgJ082Uy@Wj_FeX@70ur0d6CuH1h1OpW7@Fua@Z6udTwiej0fY6 + WZW6eDE1R2Uy@WJ_FunVg18ZW7PIGI2ImZp611E04002ev@WjWDkKh81195agUn9K644Wa8K + 9W04400000IG2200000881H000e60e81900800YW5400C00Im3200C008e1H004e6WdodC1G + RRRs200Aca06000Wijj3h4dE1WW300Gd04KCv4KRRRr9995MvIT2GWjjjDdaaaWsssiJIIYK + RRx9W32hSdE1c8iI5W0000aaa4f00Gna4Ko81aaa43hKdE1cG2@@V_a7uJIIAVI2OIII2_@@ + tF99PBbUK308T2qWFIIoF28eOo4kVW0ijjjA0002haeE1Q8iot60u@sS2jUBq2hy@mA@Fio@ + 3hy@mm8lj0i2YgW226BQ082Tx@mA@Fio@3hikmzc96cp0100C0W502002f2tWJ_FioQ88995 + RX5IGIIYjGfmAXEun@3Uy@W7@V0W@3Uy@W7@Fun@h10tByQ8un@3sw@mMqE0j@3Uy@W7@Fun + @3Ev@WJ_FuHDYjmiW7@FuHKWjjjPB000WqsMd084yONi1IIw4W0LIII1FYbPIII4QRRs299N + 7u0f0001FMcK_@@W7hobaaKd07G_@@t799vD444y8LGijjx4G1OjjjQ00060u@10W@czE2sw + @W7@Fun@3Gx@W7@FUaQ3Du@0Q_Fua@3EH602001F_VCCl6So@1F_VmZ@7y8BT2OGmZ4m1008 + uno0ssss9011Fg5IjjjW7LeaHD2US9O999Iu@@3UyBm@@@k899@8WWW733KRRRD04C0m@308 + VOo26yu@1F_VmZJ32008EXlYPLXW7@FU4v3k@@W7@Fun@3EvgW7@F66z04004So@1F_VD078 + 1999un@3UKgQ088uHog1u0TIII4ORR3UigE1QWGIIImZb1A999uHiw4m0@QIIr0GWFIIoW7n + gJ082Uyuzp8Odv560u@uHQ1200GeEb5DmM1TJn00ElxN11EvK33Li8821F_VD0e4EH41efyT + 6E7yu@Dr_O0Qu52W21F_VmZ@7yeOr0G0989hW7@F22PW0W04E1FvHEHmZ@7yeZIGIIYjm429 + 191FY6WaaaW7J6WqsMd084yONi1IIa4QRt9G11FUbPIIIaQRRs299N70XW793MIIImZOvIII + gJ05SHII6y8MGijj3Uaw10_FWc@3sgk8iweS0i2S2jW7jzol62GRjuuUBun@3EXqG3_FWc@3 + Uy@W7@FUH72Uy@WJ_Fun@ZjOe0DMBuHUXjjj5yu1S0002UiCYjjjgaaa2USB4QRR1FgWK00W + W753KIIYK_@@W75p799vD444yOOmQRRr000C0m@DE_V9zG6tZj1F_VmZ7M30P0C00YjGkMpT + 8un@Z7H_e1QeoX6A8Oh0RbBun@3Uy@W7@FekS0aaa4y8mH3qmIpDKJ3q1Qe5G00WW7@FQ0RG + GGI6y8nT2eGmZaL3m1T2GGmZNr9G3r0GGmZd9X@@Fungw4e1VaaaV4GGmZKr904r0Gm00@7y + u@1F_VmZ@7yu@1ezVmZ@7yOjrdqTmZ@7y8anow0G00WWJK6B99PmZbXbaa4199P4UY5yOo1d + yVm9e6y8o1QiGmZ6t9m11F6Md074yu@1F_@00@7Gp@1RTUmZ@7yu@1F_@00D18008uaoY6ue + u44CI5e3envhGw8uHI3EPxI690IIYImZX5KtQnmCTm9@t9WDHiM6IIIouIBBunnv0004yOP4 + RRR3Uy@W7@V00r0100C0m@LXaJ2QX5DWI1F68G00W0EBFun@3Uy@W7LEGm@xHuo6LGhYYe26 + _S30001dyVm9pWbaaian5889A5yuLO999Zmhi0evj@5R3ir@AAW8f232Uy@66A12PRRmZG08 + 8RBunawYy0sssqx8MWjCIoW7jgJW3ijjbLoO2CrssU2m0RQca81nj3UCBc2001Fwbqa@@I69 + 04@@V9Z6utVIAuHi08WjPRw0ean304KR7yen30yVan@7QWq1ezNmZ@7yu@1F_VmMs7qGsTIw + H@6T4qGevCRLZ9Er5f6L7Onb2x4Ws51dKM9ZP4yuJ1rT2aaaaW7X2W00GGG_6Gp@1dWPi46K + H12aWWaYju1baaanB6KD04G2IoAD0709H95Dm5WaWaY6uYQ0g8unF8080C0m5r0yImZfKoO1 + 4400QS42I000DEk0G00vQ0A0WqsMmZRm0008un4GGijjZ81IijjBPS1qqssG2II4PRR7y86Q + QRZ8199ejjjf603K8995y85KRRR3UK1ORRRs999pQCXW79GYPPRZZ7Onaai6W34QQRp099H2 + RJRD05mos6GIII0RRRhW7JGARRRmZW0GGIgaH4a0004yu2G0003Uq3200Ir0WWK00WW7xGIo + @l@_aaI6L8uH6S@@FquO20V@@RSi0z@FaDEMW3999IyV@1Fg02_@@W71fan62US1Y0000ejj + RSy0HG00DEM010esq0A0YjjTmZA0fjjL300GmZ@73JyhhZMq0SqM050200020044q@1F_V9Z + oLGGP30u1400WW7pAEE42USBW4001rXLii@NG0W92eGe1MIG008eXFZK9faGI8dl52UaA20G + 01s_VmZlmIIIg7E24aab4yuLH3e0199XW7DA88LxVnsW7tEhe7G0006e15nMiImZK0IIGYaa + 0Ki5Eq5P41Qy299912I2254SHD09q9G44aa4YJOcyCm0404Gd0N0200GRRR23000Ct_@_aaa + 8rscAD3000ujj@@B9IIUQqsK0000mx@@V49991DjjjD0C8GG2asssK3W2scsqg1G1D000400 + 0uV000J200OA00W4000aF000Z000O0000Y4999MTb90aaa4Waa4100W108Gaaa4XaaaQ0E09 + 999899fQ001WH0m@JBW4000a00GI078000e1k3WaaaK4H359eGfX6K3G88000h1GX62EO003 + qsssoIIMc3999A1000jjjQpbiP9MIYay0000tcjj5Mijj8III20000ORRR3PPRP444a6W1ej + ibh1O1RRBGr0OW6000o000S900W1000i500Gk000I2WD0AGIIIYRIBBEjjjwijjPtaa89Z4Y + iPRhssRRssUIaaaALIIYPRRRKRRR39999iiaiWsssiqssgbaa49HoYi4RxQ0IGII6TD06810 + 0m5000t200OM000J000a900Wi100ODGG350qca4800W4G2W1080QRIY0088089039S0WW0WA + 4E0IIIY880Wx4K0G00GG774M9101802QmW65MO8W20100i942808162W0991032G08G0Ws58 + 0P0000WWW_08e6W3GG004oW2W000I3G10W04r0eGZ46a602BPMGd07e2ms4JIIY404Wp0A0a + c68IIIexGCGffjPh4A0DjjLaaaKu47eqss_aX3Qfa0JRQar0aWQIIIC100TSI00000e899Y4 + 0000aa81jjLRujhska499sV_@VRrssHpijDHIIIez@@7RRRRmsssC999Hu@@tFsscjfjjL88 + 0n@@VD0ROJII2MIIYA999Y@99Isaa8Pza89JIYa4VYaaGRssMx_ssiPRRxBPRRdjjjj_@jDl + sssCsssizssgjsscjHRxm35msss6ssscPRRR6RRRsORRh103RIIIQRRRjD99HkjjLxca49ps + MjzRIaaORrsU04XdQ1Ery00W6mvCn9KJq0P4y8iXbOGAah5en@9ocsybOaSNB1f_VD0jysW5 + 1QyV0DdlgH3Vjkmb7aKTm4X0SGW6r2X00u81CAleC2000f1Oo4AEqAd61Qe9408W0Ed9GGPY + 0e0WacanOkIKX25m9gnfTm80RCl36H3O1820W10i0G04GJJBcID41qmLCcH4OBV4aaaYjm29 + 899zLq0898e_AMWWWaKD0808999GZN889Az6G11QK1191e0DcG2IIIW6FLZO21QK30110040 + Gv0G040G0004002080022K3GK; + INTEGER CHECKSUM =54783; +ENDDATA; + + +PROCEDURE DO_EXIT USES GV; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $81; + WAIT IDLE, 250 USEC; + IRSCAN 8, $81, CAPTURE BUFF128[7..0]; + IF ( ! (BUFF128[2]==0) ) THEN GOTO Label_0; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $07; + WAIT IDLE, 1 CYCLES; + WAIT IDLE, 200 USEC; + Label_0: + IRSCAN 8, $ff; + WAIT IDLE, 200 USEC; + WAIT RESET, 3 CYCLES; + EXIT STATUS; +ENDPROC; + +PROCEDURE DO_READ_SECURITY USES GV; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $a4; + WAIT IDLE, 3 CYCLES; + DRSCAN 44, $00000000000, CAPTURE SECREG[]; + ULUWE = SECREG[ULUWE_BITLOCATION]; + ULARE = SECREG[ULARE_BITLOCATION]; + ULUPC = SECREG[ULUPC_BITLOCATION]; + ULUFE = SECREG[ULUFE_BITLOCATION]; + ULUFP = SECREG[ULUFP_BITLOCATION]; + ULUFJ = SECREG[ULUFJ_BITLOCATION]; + ULFLR = SECREG[ULFLR_BITLOCATION]; + ULULR = SECREG[ULULR_BITLOCATION]; + ULAWE = SECREG[ULAWE_BITLOCATION]; + ULARD = SECREG[ULARD_BITLOCATION]; + ULOPT[1] = SECREG[ULOPT1_BITLOCATION]; + ULOPT[0] = SECREG[ULOPT0_BITLOCATION]; +ENDPROC; + +PROCEDURE DO_OUTPUT_SECURITY USES GV; + PRINT "Security Settings :"; + IF ( ! (ULUFP==1) ) THEN GOTO Label_1; + PRINT "FlashROM Write/Erase protected by pass key."; + Label_1: + IF ( ! (ULUFJ==1) ) THEN GOTO Label_2; + PRINT "FlashROM Read protected by pass key."; + Label_2: + IF ( ! (ULAWE==1) ) THEN GOTO Label_3; + PRINT "Array Write/Erase protected by pass key."; + Label_3: + IF ( ! (ULARD==1) ) THEN GOTO Label_4; + PRINT "Array Verify protected by pass key."; + Label_4: + IF ( ! (ULUFE==1) ) THEN GOTO Label_5; + PRINT "Encrypted FlashROM Programming Enabled."; + Label_5: + IF ( ! (ULARE==1) ) THEN GOTO Label_6; + PRINT "Encrypted FPGA Array Programming Enabled."; + Label_6: + PRINT "========================================="; +ENDPROC; + +PROCEDURE DO_QUERY_SECURITY USES DO_READ_SECURITY,DO_OUTPUT_SECURITY; + CALL DO_READ_SECURITY; + CALL DO_OUTPUT_SECURITY; +ENDPROC; + +PROCEDURE READ_UROW USES BITSTREAM,GV; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $c0; + WAIT IDLE, 1 CYCLES; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $a8; + WAIT IDLE, 3 CYCLES; + WAIT IDLE, 165 USEC; + DRSCAN 128, $00000000000000000000000000000000, CAPTURE UROW[]; + SUROWALGOVERSION[6..0] = $00; + IF ( ! ( (UROW[5]==0)&&(UROW[0]==1)) ) THEN GOTO Label_7; + SUROWALGOVERSION[5..4] = UROW[24..23]; + Label_7: + IF ( ! ( (UROW[5]==1)&&(UROW[0]==0)) ) THEN GOTO Label_8; + SUROWALGOVERSION[5..4] = UROW[24..23]; + SUROWALGOVERSION[6] = 1; + Label_8: + SUROWCHECKSUM[15..0] = UROW[127..112]; + SUROWCYCLECOUNT = INT(UROW[111..102]); + SUROWDESIGNNAME[69..0] = UROW[101..32]; + SUROWPROGMETHOD[2..0] = UROW[31..29]; + SUROWALGOVERSION[3..0] = UROW[28..25]; + SUROW_PKG_TYPE[5..0] = UROW[22..17]; + SUROW_SW_VERSION[6..0] = UROW[16..10]; + SUROWPROGRAMSW[3..0] = UROW[9..6]; + SUROW_SRAM_DISTURB[0] = UROW[4]; + SUROW_SPEED_GRADE[2..0] = UROW[3..1]; + ACT_UROW_CYCLE_COUNT = SUROWCYCLECOUNT; +ENDPROC; + +PROCEDURE FIX_INT_ARRAYS USES GV; + IF ( ! (HEX[0]!=48) ) THEN GOTO Label_9; + FOR I = 0 TO 7; + TEMP = HEX[I]; + HEX[I] = HEX[(15-I)]; + HEX[(15-I)] = TEMP; + NEXT I; + Label_9: + LABEL_SEPARATOR = 0; +ENDPROC; + +PROCEDURE DISP_CHKSUM_DESIGN USES GV,FIX_INT_ARRAYS; + CALL FIX_INT_ARRAYS; + IF ( ! (INT(SUROWCHECKSUM[15..0])==65535) ) THEN GOTO Label_10; + PRINT "CHECKSUM: "; + Label_10: + IF ( ! (INT(SUROWCHECKSUM[15..0])!=65535) ) THEN GOTO Label_11; + PRINT "CHECKSUM: ",CHR$(HEX[INT(SUROWCHECKSUM[15..12])]),CHR$(HEX[INT(SUROWCHECKSUM[11..8])]) + ,CHR$(HEX[INT(SUROWCHECKSUM[7..4])]),CHR$(HEX[INT(SUROWCHECKSUM[3..0])]); + Label_11: + IF ( ! ( ( (INT(SUROWDESIGNNAME[0..30])==2147483647)&&(INT(SUROWDESIGNNAME[31..61])==2147483647))&&(INT(SUROWDESIGNNAME[62..69])==255)) ) THEN GOTO Label_12; + PRINT "Design Name: "; + Label_12: + IF ( ! ( ( (INT(SUROWDESIGNNAME[0..30])!=2147483647)||(INT(SUROWDESIGNNAME[31..61])!=2147483647))||(INT(SUROWDESIGNNAME[62..69])!=255)) ) THEN GOTO Label_13; + PRINT "Design Name: ",CHR$(INT(SUROWDESIGNNAME[63..69])),CHR$(INT(SUROWDESIGNNAME[56..62])) + ,CHR$(INT(SUROWDESIGNNAME[49..55])),CHR$(INT(SUROWDESIGNNAME[42..48])),CHR$(INT(SUROWDESIGNNAME[35..41])) + ,CHR$(INT(SUROWDESIGNNAME[28..34])),CHR$(INT(SUROWDESIGNNAME[21..27])),CHR$(INT(SUROWDESIGNNAME[14..20])) + ,CHR$(INT(SUROWDESIGNNAME[7..13])),CHR$(INT(SUROWDESIGNNAME[0..6])); + Label_13: + LABEL_SEPARATOR = 0; +ENDPROC; + +PROCEDURE DISPLAY_UROW USES BITSTREAM,CONSTBLOCK,GV,DISP_CHKSUM_DESIGN; + EXPORT "USER_ROW", UROW[127..0]; + PRINT "User information: "; + CALL DISP_CHKSUM_DESIGN; + IF ( ! (FLAGDISPLAYCYC==1) ) THEN GOTO Label_14; + PRINT "CYCLE COUNT: ",SUROWCYCLECOUNT; + Label_14: + INTEGER TMPINT =INT(SUROWPROGMETHOD[]); + INTEGER TMPINT2 =0; + INTEGER TMPINT3 =0; + INTEGER TMPINT4 =0; + INTEGER TMPINT5 =0; + IF ( ! (TMPINT==IEEE1532) ) THEN GOTO Label_15; + PRINT "Programming Method: IEEE1532"; + Label_15: + IF ( ! (TMPINT==STAPL) ) THEN GOTO Label_16; + PRINT "Programming Method: STAPL"; + Label_16: + IF ( ! (TMPINT==DIRECTC) ) THEN GOTO Label_17; + PRINT "Programming Method: DirectC"; + Label_17: + IF ( ! (TMPINT==PDB) ) THEN GOTO Label_18; + PRINT "Programming Method: PDB"; + Label_18: + IF ( ! (TMPINT==SVF) ) THEN GOTO Label_19; + PRINT "Programming Method: SVF"; + Label_19: + PRINT "Algorithm Version: ",INT(SUROWALGOVERSION[6..0]); + TMPINT = INT(SUROW_SPEED_GRADE[]); + IF ( ! (TMPINT==GRADE_UNSPEC) ) THEN GOTO Label_20; + PRINT "Device Speed Grade: speed grade information not available from device"; + Label_20: + IF ( ! (TMPINT==GRADE_1) ) THEN GOTO Label_21; + PRINT "Device Speed Grade: -1"; + Label_21: + IF ( ! (TMPINT==GRADE_2) ) THEN GOTO Label_22; + PRINT "Device Speed Grade: -2"; + Label_22: + IF ( ! (TMPINT==GRADE_3) ) THEN GOTO Label_23; + PRINT "Device Speed Grade: -3"; + Label_23: + IF ( ! (TMPINT==GRADE_F) ) THEN GOTO Label_24; + PRINT "Device Speed Grade: -F"; + Label_24: + IF ( ! (TMPINT==GRADE_STD) ) THEN GOTO Label_25; + PRINT "Device Speed Grade: STD"; + Label_25: + IF ( ! (TMPINT==GRADE_4) ) THEN GOTO Label_26; + PRINT "Device Speed Grade: -4"; + Label_26: + IF ( ! (TMPINT==GRADE_UNDEF) ) THEN GOTO Label_27; + PRINT "Device Speed Grade: speed grade information not available from device"; + Label_27: + TMPINT = INT(SUROWPROGRAMSW[]); + IF ( ! (TMPINT==FP) ) THEN GOTO Label_28; + PRINT "Programmer: FlashPro"; + Label_28: + IF ( ! (TMPINT==FPLITE) ) THEN GOTO Label_29; + PRINT "Programmer: FlashPro Lite"; + Label_29: + IF ( ! (TMPINT==FP3) ) THEN GOTO Label_30; + PRINT "Programmer: FlashPro3"; + Label_30: + IF ( ! (TMPINT==FP4) ) THEN GOTO Label_31; + PRINT "Programmer: FlashPro4"; + Label_31: + IF ( ! (TMPINT==SCULPTW) ) THEN GOTO Label_32; + PRINT "Programmer: Sculptor WIN"; + Label_32: + IF ( ! (TMPINT==BPW) ) THEN GOTO Label_33; + PRINT "Programmer: BP Programmer"; + Label_33: + IF ( ! (TMPINT==DIRECTCP) ) THEN GOTO Label_34; + PRINT "Programmer: DirectC"; + Label_34: + IF ( ! (TMPINT==STP) ) THEN GOTO Label_35; + PRINT "Programmer: Actel JAM Player"; + Label_35: + IF ( ! ( ( ( (TMPINT==FP)||(TMPINT==FPLITE))||(TMPINT==FP3))||(TMPINT==FP4)) ) THEN GOTO Label_51; + TMPINT2 = INT(SUROW_SW_VERSION[]); + IF ( ! (TMPINT2==FP33) ) THEN GOTO Label_36; + PRINT "Software: FlashPro v3.3"; + Label_36: + IF ( ! (TMPINT2==FP34) ) THEN GOTO Label_37; + PRINT "Software: FlashPro v3.4"; + Label_37: + IF ( ! (TMPINT2==FP40) ) THEN GOTO Label_38; + PRINT "Software: FlashPro v4.0"; + Label_38: + IF ( ! (TMPINT2==FP41) ) THEN GOTO Label_39; + PRINT "Software: FlashPro v4.1"; + Label_39: + IF ( ! (TMPINT2==FP42) ) THEN GOTO Label_40; + PRINT "Software: FlashPro v4.2"; + Label_40: + IF ( ! (TMPINT2==FP50) ) THEN GOTO Label_41; + PRINT "Software: FlashPro v5.0"; + Label_41: + IF ( ! (TMPINT2==FP51) ) THEN GOTO Label_42; + PRINT "Software: FlashPro v5.1"; + Label_42: + IF ( ! (TMPINT2==FP60) ) THEN GOTO Label_43; + PRINT "Software: FlashPro v6.0"; + Label_43: + IF ( ! (TMPINT2==FP61) ) THEN GOTO Label_44; + PRINT "Software: FlashPro v6.1"; + Label_44: + IF ( ! (TMPINT2==FP62) ) THEN GOTO Label_45; + PRINT "Software: FlashPro v6.2"; + Label_45: + IF ( ! (TMPINT2==FP84) ) THEN GOTO Label_46; + PRINT "Software: FlashPro v8.4"; + Label_46: + IF ( ! (TMPINT2==FP85) ) THEN GOTO Label_47; + PRINT "Software: FlashPro v8.5"; + Label_47: + IF ( ! (TMPINT2==FP86) ) THEN GOTO Label_48; + PRINT "Software: FlashPro v8.6"; + Label_48: + IF ( ! (TMPINT2==FP90) ) THEN GOTO Label_49; + PRINT "Software: FlashPro v9.0"; + Label_49: + IF ( ! (TMPINT2==FP91) ) THEN GOTO NOT_FP91; + PRINT "Software: FlashPro v9.1"; + NOT_FP91: + IF ( ! (TMPINT2==FP100) ) THEN GOTO NOT_FP100; + PRINT "Software: FlashPro v10.0"; + NOT_FP100: + IF ( ! (TMPINT2==FP_11) ) THEN GOTO NOT_FP_11; + PRINT "Software: FlashPro v11.0"; + NOT_FP_11: + IF ( ! (TMPINT2==FP_11_1) ) THEN GOTO NOT_FP_11_1; + PRINT "Software: FlashPro v11.1"; + NOT_FP_11_1: + IF ( ! (TMPINT2==FP_11_2) ) THEN GOTO NOT_FP_11_2; + PRINT "Software: FlashPro v11.2"; + NOT_FP_11_2: + IF ( ! (TMPINT2==FP_11_3) ) THEN GOTO NOT_FP_11_3; + PRINT "Software: FlashPro v11.3"; + NOT_FP_11_3: + IF ( ! (TMPINT2==UNKNOWN) ) THEN GOTO Label_50; + PRINT "Software: FlashPro vX.X"; + Label_50: + LABEL_SEPARATOR = 0; + Label_51: + IF ( ! ( (TMPINT==SCULPTW)||(TMPINT==BPW)) ) THEN GOTO Label_55; + TMPINT3 = (INT(SUROW_SW_VERSION[6..5])+SCULPTORMAJORBASE); + TMPINT4 = (INT(SUROW_SW_VERSION[4..1])+SCULPTORMINORBASE); + TMPINT5 = 0; + IF ( ! (SUROW_SW_VERSION[0]==1) ) THEN GOTO Label_52; + TMPINT5 = 1; + Label_52: + INTEGER CURRPGM =INT(ACT_UROW_PROGRAM_SW[3..0]); + IF ( ! (TMPINT==SCULPTW) ) THEN GOTO Label_53; + IF ( ! ( (CURRPGM==FP3)||(CURRPGM==FP4)) ) THEN GOTO NOT_FP3_FP4; + PRINT "NOTE: The Sculptor Windows version number below should be converted to HEX."; + NOT_FP3_FP4: + PRINT "Software: Sculptor Win v",TMPINT3,".",TMPINT4,".",TMPINT5; + Label_53: + IF ( ! (TMPINT==BPW) ) THEN GOTO Label_54; + IF ( ! ( (CURRPGM==FP3)||(CURRPGM==FP4)) ) THEN GOTO NOT_FP3_FP4_BPW; + PRINT "NOTE: The BP Windows version number below should be converted to HEX."; + NOT_FP3_FP4_BPW: + PRINT "Software: BP Win v",TMPINT3,".",TMPINT4,".",TMPINT5; + Label_54: + LABEL_SEPARATOR = 0; + Label_55: + PRINT "========================================="; +ENDPROC; + +PROCEDURE READ_F_ROW USES GV; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $c0; + WAIT IDLE, 1 CYCLES; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $f9; + DRSCAN 3, FADDR[]; + WAIT IDLE, 1 CYCLES; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $bf; + WAIT IDLE, 3 CYCLES; + WAIT IDLE, 165 USEC; + DRSCAN 128, $00000000000000000000000000000000, CAPTURE BUFF128[]; +ENDPROC; + +PROCEDURE DO_DEVICE_INFO USES GV,READ_UROW,DISPLAY_UROW,READ_F_ROW; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $0e; + WAIT IDLE, 1 CYCLES; + DRSCAN 32, $00000000, CAPTURE BUFF32[]; + EXPORT "SILSIG", BUFF32[]; + IRSCAN 8, $84, CAPTURE BUFF128[7..0]; + IF ( ! (BUFF128[2]==1) ) THEN GOTO CORE_NOT_ENABLED; + PRINT "FPGA Array is programmed and enabled."; + CORE_NOT_ENABLED: + IF ( ! (BUFF128[2]==0) ) THEN GOTO CORE_ENABLED; + PRINT "FPGA Array is not enabled."; + CORE_ENABLED: + CALL READ_UROW; + CALL DISPLAY_UROW; + FADDR[] = $0; + CALL READ_F_ROW; + EXPORT "FSN", BUFF128[55..8]; + PRINT "========================================="; +ENDPROC; + +PROCEDURE INIT_AES; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $dd; + DRSCAN 128, $00000000000000000000000000000000; + WAIT IDLE, 3 CYCLES; + WAIT IDLE, 165 USEC; +ENDPROC; + +PROCEDURE DO_VERIFY_DEVICE_INFO USES GV,BITSTREAM,DO_EXIT,DO_READ_SECURITY,READ_UROW + ,DISP_CHKSUM_DESIGN; + CALL READ_UROW; + CALL DISP_CHKSUM_DESIGN; + CALL DO_READ_SECURITY; + BUFF32[31..0] = BOOL(CHECKSUM); + UROW[127..112] = BUFF32[15..0]; + UROW[101..32] = ACT_UROW_DESIGN_NAME[69..0]; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $c0; + WAIT IDLE, 1 CYCLES; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $a8; + WAIT IDLE, 3 CYCLES; + WAIT IDLE, 165 USEC; + DRSCAN 128, $00000000000000000000000000000000,COMPARE UROW[],$ffff003fffffffffffffffff00000000 + ,PASS; + IF ( ! (PASS==0) ) THEN GOTO UROW_CMP_OK; + STATUS = -43; + PRINT "Failed to verify design information."; + UNIQUEEXITCODE = 32772; + BUFF128[15..0] = BOOL(UNIQUEEXITCODE); + EXPORT "ERROR_CODE", BUFF128[15..0]; + CALL DO_EXIT; + UROW_CMP_OK: + LABEL_SEPARATOR = 0; +ENDPROC; + +PROCEDURE READ_IDCODE_ONLY USES GV; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $0f; + WAIT IDLE, 1 CYCLES; + DRSCAN 32, $00000000, CAPTURE ID[]; + EXPORT "IDCODE", ID[]; +ENDPROC; + +PROCEDURE VERIFY_RLOCK USES GV; + IRSCAN 8, $84,COMPARE $04,$04,PASS; +ENDPROC; + +PROCEDURE DO_VERIFY_PGM_RLOCK USES GV,DO_EXIT,VERIFY_RLOCK; + CALL VERIFY_RLOCK; + IF ( ! (PASS==0) ) THEN GOTO RLOCK_PGM_PASS; + STATUS = 10; + PRINT "Failed to enable FPGA Array."; + UNIQUEEXITCODE = 32891; + BUFF128[15..0] = BOOL(UNIQUEEXITCODE); + EXPORT "ERROR_CODE", BUFF128[15..0]; + CALL DO_EXIT; + RLOCK_PGM_PASS: + LABEL_SEPARATOR = 0; +ENDPROC; + +PROCEDURE DO_VERIFY_RLOCK USES GV,DO_EXIT,VERIFY_RLOCK; + CALL VERIFY_RLOCK; + IF ( ! (PASS==0) ) THEN GOTO RLOCK_VERIFY_PASS; + STATUS = 11; + PRINT "FPGA Array is not enabled."; + UNIQUEEXITCODE = 32892; + BUFF128[15..0] = BOOL(UNIQUEEXITCODE); + EXPORT "ERROR_CODE", BUFF128[15..0]; + CALL DO_EXIT; + RLOCK_VERIFY_PASS: + LABEL_SEPARATOR = 0; +ENDPROC; + +PROCEDURE VERIFY_ID_DMK USES GV,DO_EXIT,INIT_AES; + CALL INIT_AES; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $0a; + DRSCAN 128, M7BUFF[]; + WAIT IDLE, 3 CYCLES; + WAIT IDLE, 90 USEC; + DRSCAN 128, $00000000000000000000000000000000, CAPTURE BUFF128[],COMPARE $c0000000000000000000000000000000 + ,$c0000000000000000000000000000000,PASS; + IF ( ! (BUFF128[127]==0) ) THEN GOTO M7VERDONE; + STATUS = -31; + PRINT "Failed to verify AES Sec."; + UNIQUEEXITCODE = 32775; + BUFF128[15..0] = BOOL(UNIQUEEXITCODE); + EXPORT "ERROR_CODE", BUFF128[15..0]; + CALL DO_EXIT; + M7VERDONE: + IF ( ! ( (BUFF128[126]==0)||(BM7DEVICE==0)) ) THEN GOTO MXIDOK; + IF ( ! ( (BUFF128[126]==1)&&(BM7DEVICE==0)) ) THEN GOTO LDETECTM1; + STATUS = 6; + PRINT "Failed to verify IDCODE."; + PRINT "Target is an M7 device."; + UNIQUEEXITCODE = 32776; + BUFF128[15..0] = BOOL(UNIQUEEXITCODE); + EXPORT "ERROR_CODE", BUFF128[15..0]; + CALL DO_EXIT; + LDETECTM1: + IF ( ! (BUFF128[126]==0) ) THEN GOTO Label_58; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $0a; + DRSCAN 128, M1BUFF[]; + WAIT IDLE, 3 CYCLES; + WAIT IDLE, 90 USEC; + DRSCAN 128, $00000000000000000000000000000000, CAPTURE BUFF128[],COMPARE $c0000000000000000000000000000000 + ,$c0000000000000000000000000000000,PASS; + IF ( ! (BUFF128[127]==0) ) THEN GOTO M1VERDONE; + STATUS = -31; + PRINT "Failed to verify AES Sec."; + UNIQUEEXITCODE = 32777; + BUFF128[15..0] = BOOL(UNIQUEEXITCODE); + EXPORT "ERROR_CODE", BUFF128[15..0]; + CALL DO_EXIT; + M1VERDONE: + BOOLEAN BTMPBUFFBIT126 = BUFF128[126]; + IF ( ! ( (BTMPBUFFBIT126==1)&&(BM1DEVICE==0)) ) THEN GOTO REGDEV; + STATUS = 6; + PRINT "Failed to verify IDCODE."; + PRINT "Target is an M1 device."; + UNIQUEEXITCODE = 32778; + BUFF128[15..0] = BOOL(UNIQUEEXITCODE); + EXPORT "ERROR_CODE", BUFF128[15..0]; + CALL DO_EXIT; + REGDEV: + IF ( ! ( (BTMPBUFFBIT126==0)&&(BM7DEVICE==1)) ) THEN GOTO Label_56; + STATUS = 6; + PRINT "Failed to verify IDCODE."; + PRINT "The Target is not an M7 Device."; + UNIQUEEXITCODE = 32781; + BUFF128[15..0] = BOOL(UNIQUEEXITCODE); + EXPORT "ERROR_CODE", BUFF128[15..0]; + CALL DO_EXIT; + Label_56: + IF ( ! ( (BTMPBUFFBIT126==0)&&(BM1DEVICE==1)) ) THEN GOTO Label_57; + STATUS = 6; + PRINT "Failed to verify IDCODE."; + PRINT "The Target is not an M1 Device."; + UNIQUEEXITCODE = 32782; + BUFF128[15..0] = BOOL(UNIQUEEXITCODE); + EXPORT "ERROR_CODE", BUFF128[15..0]; + CALL DO_EXIT; + Label_57: + LABEL_SEPARATOR = 0; + Label_58: + LABEL_SEPARATOR = 0; + MXIDOK: + LABEL_SEPARATOR = 0; +ENDPROC; + +PROCEDURE VERIFY_IDCODE USES GV,PARAMETERS,DO_EXIT; + FREQUENCY (FREQ*1000000); + WAIT RESET, 5 CYCLES; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $0f; + DRSCAN 32, $00000000; + WAIT IDLE, 1 CYCLES; + DRSCAN 32, $00000000, CAPTURE ID[],COMPARE IDCODEVALUE[],IDMASK[],PASS; + IF ( ! (PASS==0) ) THEN GOTO IDOK; + STATUS = 6; + PRINT "Failed to verify IDCODE"; + UNIQUEEXITCODE = 32797; + BUFF128[15..0] = BOOL(UNIQUEEXITCODE); + EXPORT "ERROR_CODE", BUFF128[15..0]; + CALL DO_EXIT; + IDOK: + IDREV = INT(ID[31..28]); + IDFAB = INT(ID[24..24]); +ENDPROC; + +PROCEDURE IS_SECOK USES GV,DO_EXIT; + IF ( ! (SECKEY_OK==0) ) THEN GOTO SECOK; + STATUS = -35; + PRINT "Failed to match pass key."; + UNIQUEEXITCODE = 32799; + BUFF128[15..0] = BOOL(UNIQUEEXITCODE); + EXPORT "ERROR_CODE", BUFF128[15..0]; + CALL DO_EXIT; + SECOK: + LABEL_SEPARATOR = 0; +ENDPROC; + +PROCEDURE DO_CHECK_R USES GV,DO_EXIT,DO_READ_SECURITY; + CALL DO_READ_SECURITY; + IF ( ! (ULARE==1) ) THEN GOTO ARRAYEPR; + STATUS = -33; + PRINT "FPGA Array Encryption is enforced. Plain text verification is prohibited."; + UNIQUEEXITCODE = 32800; + BUFF128[15..0] = BOOL(UNIQUEEXITCODE); + EXPORT "ERROR_CODE", BUFF128[15..0]; + CALL DO_EXIT; + ARRAYEPR: + IF ( ! (ULARD==1) ) THEN GOTO SKIPRCHK1; + STATUS = -30; + PRINT "FPGA Array Verification is protected by pass key."; + PRINT "A valid pass key needs to be provided."; + UNIQUEEXITCODE = 32804; + BUFF128[15..0] = BOOL(UNIQUEEXITCODE); + EXPORT "ERROR_CODE", BUFF128[15..0]; + CALL DO_EXIT; + SKIPRCHK1: + IF ( ! (ULARD==0) ) THEN GOTO Label_59; + CHKSEC = 0; + Label_59: + LABEL_SEPARATOR = 0; +ENDPROC; + +PROCEDURE DO_CHECK_W USES GV,DO_EXIT,DO_READ_SECURITY; + CALL DO_READ_SECURITY; + IF ( ! (ULAWE==1) ) THEN GOTO ARRAYWP; + STATUS = -28; + PRINT "FPGA Array Write/Erase is protected by pass key."; + PRINT "A valid pass key needs to be provided."; + UNIQUEEXITCODE = 32805; + BUFF128[15..0] = BOOL(UNIQUEEXITCODE); + EXPORT "ERROR_CODE", BUFF128[15..0]; + CALL DO_EXIT; + ARRAYWP: + IF ( ! (ULARD==1) ) THEN GOTO ARRAYRPW; + STATUS = -30; + PRINT "FPGA Array Verification is protected by pass key."; + PRINT "A valid pass key needs to be provided."; + UNIQUEEXITCODE = 32806; + BUFF128[15..0] = BOOL(UNIQUEEXITCODE); + EXPORT "ERROR_CODE", BUFF128[15..0]; + CALL DO_EXIT; + ARRAYRPW: + IF ( ! (ULARE==1) ) THEN GOTO ARRAYEPW; + STATUS = -33; + PRINT "FPGA Array Encryption is enforced. Plain text programming is prohibited."; + CALL DO_EXIT; + ARRAYEPW: + LABEL_SEPARATOR = 0; +ENDPROC; + +PROCEDURE BP_VER USES GV; + BOOLEAN PLAYER_VERSION_BOOLEAN[32]; + PLAYER_VERSION_BOOLEAN[31..0] = BOOL(PLAYERVERSIONVARIABLE); + INTEGER PLAYER_MAJOR_VERSION =(INT(PLAYER_VERSION_BOOLEAN[23..16])-SCULPTORMAJORBASE); + INTEGER PLAYER_MINOR_VERSION =(INT(PLAYER_VERSION_BOOLEAN[15..8])-SCULPTORMINORBASE); + ACT_UROW_SW_VERSION[6..5] = BOOL(PLAYER_MAJOR_VERSION); + ACT_UROW_SW_VERSION[4..1] = BOOL(PLAYER_MINOR_VERSION); + ACT_UROW_SW_VERSION[0] = PLAYER_VERSION_BOOLEAN[0]; + ACT_UROW_PROGRAM_SW[3..0] = BOOL(PLAYERVERSIONSWVARIABLE); +ENDPROC; + +PROCEDURE POLL_PROGRAM USES GV; + INTEGER ILOOP_0; + FOR ILOOP_0 = 16381 - 1 TO 0 STEP -1; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $84; + WAIT IDLE, 1 CYCLES; + WAIT IDLE, 100 USEC; + DRSCAN 5, $00,COMPARE $00,$0b,PASS; + IF PASS THEN ILOOP_0 = 0; + NEXT ILOOP_0; +ENDPROC; + +PROCEDURE SET_PRG_ARRAY USES GV; + ISPRGARRAY = 1; +ENDPROC; + +PROCEDURE DO_INITIALIZE USES GV,DO_EXIT,READ_F_ROW,VERIFY_ID_DMK,DO_CHECK_R,DO_CHECK_W + ,BP_VER; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $7f; + WAIT IDLE, 3 CYCLES; + WAIT IDLE, 50 USEC; + BSR[563..0] = BSRPATTERN[563..0]; + BOOLEAN SHIFT_DATA[564]; + IRSCAN 8, $01; + DRSCAN 564, BSR[]; + WAIT IDLE, 1 CYCLES; + DRSCAN 564, SHIFT_DATA[], CAPTURE SAMPLE_DEVICE[]; + FOR I = 0 TO 563; + IF ( ! (SAMPLEMASK[I]==1) ) THEN GOTO Label_60; + BSR[I] = SAMPLE_DEVICE[I]; + Label_60: + LABEL_SEPARATOR = 0; + NEXT I; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $01; + DRSCAN 564, BSR[]; + WAIT IDLE, 1 CYCLES; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $c0; + WAIT IDLE, 1 CYCLES; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $80; + DRSCAN 18, $00000; + WAIT IDLE, 3 CYCLES; + WAIT IDLE, 1875 USEC; + DRSCAN 18, $00000, CAPTURE ISC_CONFIG_RESULT[],COMPARE $30000,$30000,PASS; + IF ( ! (PASS==0) ) THEN GOTO CRCOK; + STATUS = 5; + PRINT "Failed to enter programming mode."; + EXPORT "ISC_Config_Result", ISC_CONFIG_RESULT[]; + UNIQUEEXITCODE = 32850; + BUFF128[15..0] = BOOL(UNIQUEEXITCODE); + EXPORT "ERROR_CODE", BUFF128[15..0]; + CALL DO_EXIT; + CRCOK: + FADDR[] = $0; + CALL READ_F_ROW; + EXPORT "FSN", BUFF128[55..8]; + CALL VERIFY_ID_DMK; + IF ( ! (CHKARRAY==1) ) THEN GOTO SKIPCHKARRAY; + IF ( ! (ARRAYRONLY==0) ) THEN GOTO Label_61; + CALL DO_CHECK_W; + Label_61: + IF ( ! (ARRAYRONLY==1) ) THEN GOTO Label_62; + CALL DO_CHECK_R; + Label_62: + LABEL_SEPARATOR = 0; + SKIPCHKARRAY: + IF ( ! (PLAYERVERSIONVARIABLE!=0) ) THEN GOTO Label_63; + CALL BP_VER; + Label_63: + LABEL_SEPARATOR = 0; +ENDPROC; + +PROCEDURE READ_INITIALIZE USES GV,DO_INITIALIZE; + CHKFROM = 0; + CHKARRAY = 0; + CHKNVM = 0; + CHKSEC = 0; + CALL DO_INITIALIZE; +ENDPROC; + +PROCEDURE NW_INITIALIZE_COMMON USES GV; + CHKFROM = 0; + CHKARRAY = 0; +ENDPROC; + +PROCEDURE NW_INITIALIZE USES DO_INITIALIZE,NW_INITIALIZE_COMMON; + CALL NW_INITIALIZE_COMMON; + CALL DO_INITIALIZE; +ENDPROC; + +PROCEDURE NR_INITIALIZE_COMMON USES GV; + CHKFROM = 0; + CHKARRAY = 0; +ENDPROC; + +PROCEDURE NR_INITIALIZE USES DO_INITIALIZE,NR_INITIALIZE_COMMON; + CALL NR_INITIALIZE_COMMON; + CALL DO_INITIALIZE; +ENDPROC; + +PROCEDURE AW_INITIALIZE USES GV,DO_INITIALIZE; + ARRAYRONLY = 0; + CHKFROM = 0; + CHKARRAY = 1; + CHKNVM = 0; + CALL DO_INITIALIZE; +ENDPROC; + +PROCEDURE AR_INITIALIZE USES GV,DO_INITIALIZE; + ARRAYRONLY = 1; + CHKFROM = 0; + CHKARRAY = 1; + CHKNVM = 0; + CALL DO_INITIALIZE; +ENDPROC; + +PROCEDURE W_INITIALIZE USES GV,DO_INITIALIZE; + ARRAYRONLY = 0; + CHKARRAY = 1; + CALL DO_INITIALIZE; +ENDPROC; + +PROCEDURE R_INITIALIZE USES GV,DO_INITIALIZE; + ARRAYRONLY = 1; + CHKARRAY = 1; + CALL DO_INITIALIZE; +ENDPROC; + +PROCEDURE INITIALIZE USES GV,DO_INITIALIZE; + ARRAYRONLY = 0; + FROMRONLY = 0; + CHKFROM = 1; + CHKARRAY = 1; + CALL DO_INITIALIZE; +ENDPROC; + +PROCEDURE POLL_ERASE USES GV; + PASS = 0; + INTEGER ILOOP_1; + FOR ILOOP_1 = 262141 - 1 TO 0 STEP -1; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $84; + WAIT IDLE, 1 CYCLES; + WAIT IDLE, 1000 USEC; + DRSCAN 5, $00,COMPARE $00,$03,PASS; + IF PASS THEN ILOOP_1 = 0; + NEXT ILOOP_1; +ENDPROC; + +PROCEDURE UFROM_DISTURB USES GV; + FOR FROMROWNUMBER = NUMBEROFFROMROWS TO 1 STEP -1; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $9f; + DRSCAN 3, BOOL((FROMROWNUMBER-1)); + WAIT IDLE, 1 CYCLES; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $9b; + DRSCAN 128, $ffffffffffffffffffffffffffffffff; + WAIT IDLE, 5 CYCLES; + WAIT IDLE, 10000 USEC; + NEXT FROMROWNUMBER; +ENDPROC; + +PROCEDURE PROGRAM_UROW USES GV,BITSTREAM,DO_EXIT,POLL_PROGRAM; + IF ( ! (ISERASEONLY==0) ) THEN GOTO SKIP_CYC_INCREMENT; + IF ( ! (ISPRGARRAY==1) ) THEN GOTO NOT_PGM_ARRAY; + 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; + ACT_UROW_CYCLE_COUNT = 0; + NOT_CORRUPTED_CYCLE_COUNT: + IF ( ! (ACT_UROW_CYCLE_COUNT<1000) ) THEN GOTO MAX_CYCLE_COUNT; + ACT_UROW_CYCLE_COUNT = (ACT_UROW_CYCLE_COUNT+1); + MAX_CYCLE_COUNT: + LABEL_SEPARATOR = 0; + NOT_PGM_ARRAY: + LABEL_SEPARATOR = 0; + SKIP_CYC_INCREMENT: + IF ( ! (ISERASEONLY==1) ) THEN GOTO Label_64; + UROW[] = $ffffffffffffffffffffffffffffffff; + Label_64: + IF ( ! ( (ISERASEONLY==0)||(ISRESTOREDESIGN==1)) ) THEN GOTO SKIP_DESIGN_INFO; + BUFF32[31..0] = BOOL(CHECKSUM); + IF ( ! ( !ISRESTOREDESIGN) ) THEN GOTO Label_65; + UROW[127..112] = BUFF32[15..0]; + Label_65: + IF ( ! ISRESTOREDESIGN ) THEN GOTO Label_66; + UROW[127..112] = SUROWCHECKSUM[15..0]; + Label_66: + IF ( ! ( !ISRESTOREDESIGN) ) THEN GOTO Label_67; + UROW[101..32] = ACT_UROW_DESIGN_NAME[69..0]; + Label_67: + IF ( ! ISRESTOREDESIGN ) THEN GOTO Label_68; + UROW[101..32] = SUROWDESIGNNAME[69..0]; + Label_68: + LABEL_SEPARATOR = 0; + SKIP_DESIGN_INFO: + BUFF32[31..0] = BOOL(ACT_UROW_CYCLE_COUNT); + UROW[111..102] = BUFF32[9..0]; + UROW[31..29] = ACT_UROW_PROG_METHOD[2..0]; + UROW[28..25] = ACT_UROW_ALGO_VERSION[3..0]; + UROW[16..10] = ACT_UROW_SW_VERSION[6..0]; + UROW[9..6] = ACT_UROW_PROGRAM_SW[3..0]; + UROW[4] = SUROW_SRAM_DISTURB[0]; + IF ( ! (ACT_UROW_ALGO_VERSION[6]==1) ) THEN GOTO Label_69; + UROW[5] = 1; + UROW[0] = 0; + UROW[24..23] = ACT_UROW_ALGO_VERSION[5..4]; + Label_69: + IF ( ! (ACT_UROW_ALGO_VERSION[6]==0) ) THEN GOTO Label_70; + UROW[5] = 0; + UROW[0] = 1; + UROW[24..23] = ACT_UROW_ALGO_VERSION[5..4]; + Label_70: + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $a7; + DRSCAN 128, UROW[]; + WAIT IDLE, 15 CYCLES; + CALL POLL_PROGRAM; + IF ( ! (PASS==0) ) THEN GOTO PROGRAM_OK3; + STATUS = -24; + PRINT "Failed to program UROW"; + UNIQUEEXITCODE = 32853; + BUFF128[15..0] = BOOL(UNIQUEEXITCODE); + EXPORT "ERROR_CODE", BUFF128[15..0]; + CALL DO_EXIT; + PROGRAM_OK3: + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $c0; + WAIT IDLE, 1 CYCLES; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $a8; + WAIT IDLE, 3 CYCLES; + WAIT IDLE, 165 USEC; + DRSCAN 128, $00000000000000000000000000000000,COMPARE UROW[],UROW_MASK[],PASS; + IF ( ! (PASS==0) ) THEN GOTO UROW_OK; + STATUS = -24; + PRINT "Failed to program UROW"; + UNIQUEEXITCODE = 32854; + BUFF128[15..0] = BOOL(UNIQUEEXITCODE); + EXPORT "ERROR_CODE", BUFF128[15..0]; + CALL DO_EXIT; + UROW_OK: + LABEL_SEPARATOR = 0; +ENDPROC; + +PROCEDURE FAIL_ERASE USES GV,DO_EXIT; + STATUS = 8; + PRINT "Failed Erase Operation"; + UNIQUEEXITCODE = 32855; + BUFF128[15..0] = BOOL(UNIQUEEXITCODE); + EXPORT "ERROR_CODE", BUFF128[15..0]; + CALL DO_EXIT; +ENDPROC; + +PROCEDURE EXE_ERASE USES BITSTREAM,GV,READ_UROW,POLL_ERASE,PROGRAM_UROW,FAIL_ERASE; + IF ( ! (COMBERASESELECT[14]==1) ) THEN GOTO SKIPRUROW; + CALL READ_UROW; + EXPORT "ACTEL_SLOG_UROW", UROW[]; + SKIPRUROW: + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $85; + DRSCAN 23, COMBERASESELECT[]; + WAIT IDLE, 3 CYCLES; + CALL POLL_ERASE; + IF ( ! (PASS==0) ) THEN GOTO ERASEOK; + CALL FAIL_ERASE; + ERASEOK: + IF ( ! (COMBERASESELECT[14]==1) ) THEN GOTO Label_71; + CALL PROGRAM_UROW; + Label_71: + LABEL_SEPARATOR = 0; +ENDPROC; + +PROCEDURE DO_ERASE USES BITSTREAM,GV,EXE_ERASE; + PRINT "Erase ..."; + COMBERASESELECT[22..0] = $004000; + COMBERASESELECT[0] = 1; + CALL EXE_ERASE; + PRINT "Completed erase"; + IF ( ! (ISPRGARRAY==1) ) THEN GOTO NOT_PGM_ARRAY_ERASE; + BUFF32[31..0] = BOOL(CHECKSUM); + EXPORT "CHECKSUM: ", BUFF32[15..0]; + NOT_PGM_ARRAY_ERASE: + LABEL_SEPARATOR = 0; +ENDPROC; + +PROCEDURE DO_ERASE_ARRAY USES GV,EXE_ERASE; + PRINT "Erase FPGA Array ..."; + COMBERASESELECT[22..0] = $004001; + CALL EXE_ERASE; +ENDPROC; + +PROCEDURE DO_ERASE_ONLY USES GV,DO_ERASE; + ISERASEONLY = 1; + CALL DO_ERASE; +ENDPROC; + +PROCEDURE DO_ERASE_ARRAY_ONLY USES GV,DO_ERASE_ARRAY; + ISERASEONLY = 1; + CALL DO_ERASE_ARRAY; +ENDPROC; + +PROCEDURE DO_ERASE_ALL USES GV,UFROM_DISTURB,EXE_ERASE; + IF ( ! ( (BM7DEVICE==1)||(BM1DEVICE==1)) ) THEN GOTO Label_72; + PRINT "Erase FPGA Array and FlashROM ..."; + Label_72: + IF ( ! ( (BM7DEVICE!=1)&&(BM1DEVICE!=1)) ) THEN GOTO Label_73; + PRINT "Erase FPGA Array, FlashROM and Security Settings ..."; + Label_73: + COMBERASESELECT[22..0] = $7fc00f; + ISERASEONLY = 1; + CALL EXE_ERASE; + CALL UFROM_DISTURB; +ENDPROC; + +PROCEDURE LOAD_ROW_DATA USES BITSTREAM,GV; + FOR SDTILE = 1 TO NUMBEROFSDTILES; + FOR I = 1 TO 8; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $89; + DRSCAN 26, DATASTREAM[(DATAINDEX+25)..DATAINDEX]; + WAIT IDLE, 3 CYCLES; + DATAINDEX = (DATAINDEX+26); + NEXT I; + NEXT SDTILE; +ENDPROC; + +PROCEDURE EXE_PROGRAM USES GV,DO_EXIT,POLL_PROGRAM; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $83; + WAIT IDLE, 3 CYCLES; + CALL POLL_PROGRAM; + IF ( ! (PASS==0) ) THEN GOTO Label_74; + STATUS = 10; + PRINT "Failed to program FPGA array at row ",ROWNUMBER,"."; + UNIQUEEXITCODE = 32856; + BUFF128[15..0] = BOOL(UNIQUEEXITCODE); + EXPORT "ERROR_CODE", BUFF128[15..0]; + CALL DO_EXIT; + Label_74: + LABEL_SEPARATOR = 0; +ENDPROC; + +PROCEDURE EXE_VERIFY USES GV,DO_EXIT,POLL_PROGRAM; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $8d; + DRSCAN 2, VERIFYEOL[]; + WAIT IDLE, 3 CYCLES; + WAIT IDLE, 132 USEC; + CALL POLL_PROGRAM; + IF ( ! (PASS==0) ) THEN GOTO Label_75; + STATUS = 11; + PRINT "Verify 0 failed at row ",ROWNUMBER,"."; + UNIQUEEXITCODE = 32857; + BUFF128[15..0] = BOOL(UNIQUEEXITCODE); + EXPORT "ERROR_CODE", BUFF128[15..0]; + CALL DO_EXIT; + Label_75: + IRSCAN 8, $8d; + DRSCAN 2, VERIFYEOL[],COMPARE $0,$3,PASS; + IF ( ! (PASS==0) ) THEN GOTO Label_76; + STATUS = 11; + PRINT "Verify 0 failed at row ",ROWNUMBER,"."; + UNIQUEEXITCODE = 32858; + BUFF128[15..0] = BOOL(UNIQUEEXITCODE); + EXPORT "ERROR_CODE", BUFF128[15..0]; + CALL DO_EXIT; + Label_76: + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $8e; + DRSCAN 2, VERIFYEOL[]; + WAIT IDLE, 3 CYCLES; + WAIT IDLE, 132 USEC; + CALL POLL_PROGRAM; + IF ( ! (PASS==0) ) THEN GOTO Label_77; + STATUS = 11; + PRINT "Verify 1 failed at row ",ROWNUMBER,"."; + UNIQUEEXITCODE = 32859; + BUFF128[15..0] = BOOL(UNIQUEEXITCODE); + EXPORT "ERROR_CODE", BUFF128[15..0]; + CALL DO_EXIT; + Label_77: + IRSCAN 8, $8e; + DRSCAN 2, VERIFYEOL[],COMPARE $0,$3,PASS; + IF ( ! (PASS==0) ) THEN GOTO Label_78; + STATUS = 11; + PRINT "Verify 1 failed at row ",ROWNUMBER,"."; + UNIQUEEXITCODE = 32860; + BUFF128[15..0] = BOOL(UNIQUEEXITCODE); + EXPORT "ERROR_CODE", BUFF128[15..0]; + CALL DO_EXIT; + Label_78: + LABEL_SEPARATOR = 0; +ENDPROC; + +PROCEDURE DO_PROGRAM USES GV,LOAD_ROW_DATA,EXE_PROGRAM; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $87; + DRSCAN 2, $2; + WAIT IDLE, 3 CYCLES; + PRINT "Programming FPGA Array"; + DATAINDEX = 0; + ROWNUMBER = (NUMBEROFMAPROWS-1); + INTEGER IREPEAT_0; + FOR IREPEAT_0 = NUMBEROFMAPROWS - 1 TO 0 STEP -1; + CALL LOAD_ROW_DATA; + CALL EXE_PROGRAM; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $87; + DRSCAN 2, $3; + WAIT IDLE, 3 CYCLES; + IF ( ! ((ROWNUMBER%ROWITERATION)==0) ) THEN GOTO Label_79; + PERCENT_UPDATE = ((100*((NUMBEROFMAPROWS-ROWNUMBER)+1))/NUMBEROFMAPROWS); + DIFFERENCE = (PERCENT_UPDATE%10); + IF ( ! (DIFFERENCE>=5) ) THEN GOTO ROUND_DOWN_PGM_A; + PERCENT_UPDATE = (PERCENT_UPDATE+(10-DIFFERENCE)); + ROUND_DOWN_PGM_A: + IF ( ! (DIFFERENCE<5) ) THEN GOTO ROUND_UP_PGM_A; + PERCENT_UPDATE = (PERCENT_UPDATE-DIFFERENCE); + ROUND_UP_PGM_A: + EXPORT "PERCENT_DONE", PERCENT_UPDATE; + Label_79: + ROWNUMBER = (ROWNUMBER-1); + NEXT IREPEAT_0; +ENDPROC; + +PROCEDURE DO_VERIFY USES GV,LOAD_ROW_DATA,EXE_VERIFY; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $87; + DRSCAN 2, $2; + WAIT IDLE, 3 CYCLES; + PRINT "Verifying FPGA Array"; + DATAINDEX = 0; + ROWNUMBER = (NUMBEROFMAPROWS-1); + INTEGER IREPEAT_1; + FOR IREPEAT_1 = NUMBEROFMAPROWS - 1 TO 0 STEP -1; + CALL LOAD_ROW_DATA; + CALL EXE_VERIFY; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $87; + DRSCAN 2, $3; + WAIT IDLE, 3 CYCLES; + IF ( ! ((ROWNUMBER%ROWITERATION)==0) ) THEN GOTO Label_80; + PERCENT_UPDATE = ((100*((NUMBEROFMAPROWS-ROWNUMBER)+1))/NUMBEROFMAPROWS); + DIFFERENCE = (PERCENT_UPDATE%10); + IF ( ! (DIFFERENCE>=5) ) THEN GOTO ROUND_DOWN_VER_ARRAY; + PERCENT_UPDATE = (PERCENT_UPDATE+(10-DIFFERENCE)); + ROUND_DOWN_VER_ARRAY: + IF ( ! (DIFFERENCE<5) ) THEN GOTO ROUND_UP_VER_ARRAY; + PERCENT_UPDATE = (PERCENT_UPDATE-DIFFERENCE); + ROUND_UP_VER_ARRAY: + EXPORT "PERCENT_DONE", PERCENT_UPDATE; + Label_80: + ROWNUMBER = (ROWNUMBER-1); + NEXT IREPEAT_1; + PRINT " Verifying FPGA Array -- pass"; +ENDPROC; + +PROCEDURE DO_VERIFY_BOL USES GV,DO_VERIFY; + VERIFYEOL[0] = 0; + CALL DO_VERIFY; +ENDPROC; + +PROCEDURE DO_VERIFY_EOL USES GV,DO_VERIFY; + VERIFYEOL[0] = 1; + CALL DO_VERIFY; +ENDPROC; + +PROCEDURE DO_PROGRAM_RLOCK USES GV,DO_EXIT,POLL_PROGRAM; + DATAINDEX = 0; + INTEGER IREPEAT_2; + FOR IREPEAT_2 = NUMBEROFSDTILES - 1 TO 0 STEP -1; + FOR I = 1 TO 8; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $89; + DRSCAN 26, RLOCK[(DATAINDEX+25)..DATAINDEX]; + WAIT IDLE, 3 CYCLES; + DATAINDEX = (DATAINDEX+26); + NEXT I; + NEXT IREPEAT_2; + IRSTOP IRPAUSE; + DRSTOP DRPAUSE; + IRSCAN 8, $8c; + WAIT IDLE, 3 CYCLES; + CALL POLL_PROGRAM; + IF ( ! (PASS==0) ) THEN GOTO Label_81; + STATUS = 10; + PRINT "Failed to enable FPGA Array."; + UNIQUEEXITCODE = 32862; + BUFF128[15..0] = BOOL(UNIQUEEXITCODE); + EXPORT "ERROR_CODE", BUFF128[15..0]; + CALL DO_EXIT; + Label_81: + LABEL_SEPARATOR = 0; +ENDPROC; + +PROCEDURE DO_READ_IDCODE USES READ_IDCODE_ONLY; + WAIT RESET, 5 CYCLES; + CALL READ_IDCODE_ONLY; + EXIT 0; +ENDPROC; + + +CRC A5F1; -- 2.39.2