From 922d3b0b567779fb53b0648ea72cc337a72c804e Mon Sep 17 00:00:00 2001 From: Gwenhael Goavec-Merou Date: Tue, 8 Dec 2020 07:32:30 +0100 Subject: [PATCH] xilinx: add xca50t support --- CMakeLists.txt | 1 + README.md | 2 +- spiOverJtag/Makefile | 2 +- spiOverJtag/constr_xc7a50t.xdc | 10 ++++++++++ spiOverJtag/spiOverJtag_xc7a50t.bit | Bin 0 -> 236790 bytes spiOverJtag/xilinx_spiOverJtag.tcl | 1 + src/part.hpp | 1 + 7 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 spiOverJtag/constr_xc7a50t.xdc create mode 100644 spiOverJtag/spiOverJtag_xc7a50t.bit diff --git a/CMakeLists.txt b/CMakeLists.txt index 37c770c..b527f24 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -175,6 +175,7 @@ install(TARGETS openFPGALoader DESTINATION bin) install(FILES test_sfl.svf spiOverJtag/spiOverJtag_xc7a35.bit + spiOverJtag/spiOverJtag_xc7a50t.bit spiOverJtag/spiOverJtag_xc7a100.bit spiOverJtag/spiOverJtag_xc7a200.bit spiOverJtag/spiOverJtag_xc7s50.bit diff --git a/README.md b/README.md index 735524e..0799bca 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ __Supported (tested) FPGA:__ * Lattice [MachXO3D](http://www.latticesemi.com/en/Products/FPGAandCPLD/MachXO3D.aspx) (SRAM and Flash) * Lattice [ECP5 (25F, 5G 85F](http://www.latticesemi.com/Products/FPGAandCPLD/ECP5) (SRAM and Flash) * Lattice [ECP5 (25F, 5G 85F, CrossLink-NX (LIFCL-40)](https://www.latticesemi.com/en/Products/FPGAandCPLD/CrossLink-NX) (SRAM and Flash) -* Xilinx Artix 7 [xc7a35ti, xc7a100t, xc7a200t](https://www.xilinx.com/products/silicon-devices/fpga/artix-7.html) (memory and spi flash) +* Xilinx Artix 7 [xc7a35ti, xc7a50t, xc7a100t, xc7a200t](https://www.xilinx.com/products/silicon-devices/fpga/artix-7.html) (memory and spi flash) * Xilinx Spartan 6 [xc6slx45](https://www.xilinx.com/products/silicon-devices/fpga/spartan-6.html) (memory) * Xilinx Spartan 7 [xc7s15, xc7s25, xc7s50](https://www.xilinx.com/products/silicon-devices/fpga/spartan-7.html) (memory (all) and spi flash (xc7s50)) * Intel Cyclone IV CE [EP4CE22](https://www.intel.com/content/www/us/en/products/programmable/fpga/cyclone-iv/features.html) (memory. See note below) diff --git a/spiOverJtag/Makefile b/spiOverJtag/Makefile index d874a86..7747e7b 100644 --- a/spiOverJtag/Makefile +++ b/spiOverJtag/Makefile @@ -1,5 +1,5 @@ VIVADO := vivado -nolog -nojournal -mode batch -source -MODELS := xc7a35 xc7a100 xc7s50 xc7a200 +MODELS := xc7a35 xc7a50t xc7a100 xc7s50 xc7a200 BIT_FILES := $(addsuffix .bit,$(addprefix spiOverJtag_, $(MODELS))) all: $(BIT_FILES) diff --git a/spiOverJtag/constr_xc7a50t.xdc b/spiOverJtag/constr_xc7a50t.xdc new file mode 100644 index 0000000..7b1edbf --- /dev/null +++ b/spiOverJtag/constr_xc7a50t.xdc @@ -0,0 +1,10 @@ +set_property CFGBVS VCCO [current_design] +set_property CONFIG_VOLTAGE 3.3 [current_design] +set_property BITSTREAM.CONFIG.SPI_BUSWIDTH {4} [current_design] +set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design] +set_property -dict {PACKAGE_PIN K19 IOSTANDARD LVCMOS33} [get_ports {csn}]; +set_property -dict {PACKAGE_PIN D18 IOSTANDARD LVCMOS33} [get_ports {sdi_dq0}]; +set_property -dict {PACKAGE_PIN D19 IOSTANDARD LVCMOS33} [get_ports {sdo_dq1}]; +set_property -dict {PACKAGE_PIN G18 IOSTANDARD LVCMOS33} [get_ports {wpn_dq2}]; +set_property -dict {PACKAGE_PIN F18 IOSTANDARD LVCMOS33} [get_ports {hldn_dq3}]; + diff --git a/spiOverJtag/spiOverJtag_xc7a50t.bit b/spiOverJtag/spiOverJtag_xc7a50t.bit new file mode 100644 index 0000000000000000000000000000000000000000..4e4453b7141227702b3a2852766ff816f814bfcb GIT binary patch literal 236790 zcmeI*2b`r>S;z5n&fCu0J1vE~yD1+Zkt(r3NsxtCw@ z0QD@DU%qkq#(gil{JtCaQ_oiEWtTtX^7}tz<3Z|r6}MY9s7E$rjFK*eV=T7fAnW_?Xhk2LL2q4 z_it!-{O3&_Jk!1Y`1Pj8vRk!KZ>YnouhHu3*3ZrAKB%K#Z@tdBuN!Ky+HQ5fj@<{n zwcUnVUcdUX{y4|>!0}^b7OVSpDxVvAX;1c0jz16dYTI!8w#RD*Y5~+js6|kVp_V|+ zLM??_2DKb&1=LEYRZy#;)!NU zp>}tuEueM)Y6qcq2x=EW?P9210<}w_b`PlC6Kb1K`+TTPP`eRoUjVgNK00Z-UyJq4t$f zdkfUw3bn7AuW1D}@LhxN8hqE_y9VDi_^!cs4ZdseU4!o$eAnQ+2H!RKuEBQ=zH9JZ zgYO!A*WkMb-!=HI!FLV5Yw%rz?;3p9;JXIjHTbT=1HK#Z-GJ`~d^g~`0pAVy zZoqc~z8mn}fbRx;H{iPg-wpU~z;^?_8}QwL?*@D~;JX3e4ft-rcLTl~@ZEs#27EW* zy8+(~_-?>=1HK#Z-GJ`~d^g~`0pAVyZoqc~z8mn}fbRx;H{iPg-wpU~z;^?_8}QwL z?*@D~;JX3e4ft-rcLTl~@ZEs#27EW*y8+(~_-?>=1HK#Z-GJ`~d=J3)0DKR?_W*nk z!1n-r55V^Td=J3)0DKR?_W*nk!1n-r55V^Td=J3)0DKR?_W*nk!1n-r55V^Td=J3) z0DKR?_W*nkz`p?e3&6hs{0qRp0Q?KUzX1FTz`p?e3&6hs{0qRp0Q?KUzX1FTz`p?e z3&6hs{0qRp0Q?KUzX1FTz`p?e3&6hs{0qRp0Q?KUzX1FTz`p?e3&6hs{0qUq)$cjX zu1|;HUkLt%;9m&-h2UQZ{)OOQ2>ylOUkLt%;9m&-h2UQZ{)OOQ2>ylOUkLt%;9m&- zh2UQZ{)OOQ2>ylOUkLt%Fux69ejCF4HiY?YxPWu)0Mrgb?GV(!_Yiy!!S@h+55e~k zd=J6*5PT28_Yiy!!S@h+55e~kd=J6*5PT28_Yiy!!S@h+55e~kd=J6*5PT28_Yiy! z!S@h+kHEjx@Au967lD5f_!ohH5%?E@e-Zc>fqxPB7lD5f_!ohH5%?E@e-Zc>fqxPB z7lD5f_!ohH5%?E@e-Zc>fqxPB7lD5f_!ohH5%?E@e-Zc>fqxPB7lD5f_!ohH5%?E@ ze-Zc>fqxPB7lD5f_!ohH5%?E@e-Zc>fqxPB7lD5f_!ohH5%?E@e-Zc>fqxPB7lD5f z_!ohH5%?E@e-Zfy^V_+@j?C9$@I40KWAHr&-(&DS2H#`w zJqF)n@I40KWAHr&-(&DS2H#`wJqF)n@I40KWAHr&-(&DS2H#`wJqF)n@I40KWAHr& z-(&DS2H#`wJqF)n@I40KWAHr&-(&DS2H#`wJqF)n@I40KWAHr&-(&DS2H#`wJqF)n z@I40KWAHr&-(&DS2H#`wJqF)n@I40KWAHr&-(&DS2H#`wJqF)n@I40KWAHr&-(&DS z2H#`wJqF(s@I3+F6YxC&-xKgX0pAnwJptbn@I3+F6YxC&-xKgX0pAnwJptbn@I3+F z6YxC&-xKgX0pAnwJptbn@I3+F6YxC&-xKgX0pAnwJptbn@I3+F6YxC&-xKgX0pAnw zJptbn@I3+F6YxC&-xKgX0pAnwJptbn@I3+F6YxC&-xKgX0pAnwJptbn@I3+F6YxC& z-xKgX0pAnwJptbn@I3+F6YxC&-xKgX0pAnwJptb>_-?^>3%*Y_B zZozj8zFY9!g6|f5x8S=4-!1rV!FLP3Tkze2?-qQw;JXFiE%3%*Y_BZozj8zFY9!g6|f5x8S=4-!1rV!FLP3Tkze2 z?-qQw;JXFiE%3%*aNfJq6!W z@I3|JQ}8_n-&62C1>aNfJq6!W@I3|JQ}8_n-&62C1>aNfJq6!W@I3|JQ}8_n-&62C z1>aNfJq6!W@I3|JQ}8_n-&1fi1vgW0GX*zOa5DurQ*bi{H&bvk1vgW0GX*zOa5Dur zQ*bi{H&bvk1vgW0GX*zOa5DurQ*bi{H&bvk1vgW0GX*zOa5DurQ*bi{H&bvk1vgW0 zGX*y@a5DopGjKBlH#2ZE12;2pGXpm>a5DopGjKBlH#2ZE12;2pGXpm>a5DopGjKBl zH#2ZE12;2pGXpm>a5DopGjKBlH#2ZE12;367iTap&KC2(bCMl^+Ciutf*Saqf$tgk zo`LTf_@0698Tg)o?-}@>f$tgko`LTf_@0698Tg)o?-}@>f$tgko`LTf_@0698Tg)o z?-}@>f$tgko`LTf_@0698Tg)o?-}@>f$tgko`LT<_@0CBIryG~?>YFMgYP-`o`df> z_@0CBIryG~?>YFMgYP-`o`df>_@0CBIryG~?>YFMgYP-`o`df>_@0CBIryG~?>YFM zgYP-`o`df>_@0CBIryG~?>YFMgYP-`o`df>_@0CBIryG~?>YFMgYP-`o`df>_@0CB zIryG~?>YFMgYP-`o`df>_@0CBIryG~?>YFMgYP-`o`df>_@0CB1-My&n+3R8fSU!l zS%8}bxLJUk1-My&n+3R8fSU!lS%8}bxLJUk1-My&n+3R8fSU!lS%8}bxLJUk1-My& zn+3R8fSU!lS%8}bxLJUk1-My&n+3R8fSU!lS%8}bxLJUk1-My&n+3R8fSU!lS%8}b zxLJUk1-My&n+3R8fSU!lS%8}bxLJUk1-My&n+3R8fSU!lS%8}bxLJUk1-My|n=mgf zU|w7to`27(xEX4Wy#(J&@Vx}zOYpq}-%Iel z1m8>Wy#(J&@Vx}zOYpq}-%Iel1m8>Wy#(J&@Vx}zOYpq}-%Iel1m8>Wy#(J&@Vx}z zOYpq}-%Iel1m8>Wy#(J&@Vx}zOYpq}-%Iel1m8>Wy#(J&@Vx}zOYpq}-%Iel1m8>W zy#(J&@Vx}zOYpq}-%Iel1m8>Wy#(J&@Vx}zOYpq}-%Iel1m8>Wy#n7W@Vx@xEAYJn z-z)IF0^cj}y#n7W@Vx@xEAYJn-z)IF0^cj}y#n7W@Vx@xEAYJn-z)IF0^cj}y#n7W z@Vx@xEAYJn-z)IF0^cj}y#n7W@Vx@xEAYJn-z)IF0^cj}y#n7W@Vx@xEAYJn-z)IF z0^cj}y#n7W@Vx@xEAYJn-z)IF0^cj}y#n7W@Vx@xEAYJn-z)IF0^cj}y#n7W@Vx@x zEAYJn-z)IF0^cj}y$0WF@Vy4#Yw*1W-)r!_2H$J&y$0WF@Vy4#Yw*1W-)r!_2H$J& zy$0WF@Vy4#Yw*1W-)r!_2H$J&y$0WF@Vy4#Yw*1W|7!5B2LEdCuLl2W@UI5{YVfZH z|7!5B2LEdCuLl2W@UI5{YVfZH|7!5B2LEdCuLl2W@UI5{YVfZH|7!5B2LEdCuLl2W z@UI5{YVfZH|7!5B2LEdCZ}o45&;Cu(2K;NlzXtqkz`q9kYrww-{A<9!2K;NlzXtqk zz`q9kYrww-{A<9!2K;NlzXtqkz`q9kYrww-{A<9!2K;NlzXtqkV1C=c{I-GlZ3FY$ zW&!8l0jM2>+99Zc?+y6gfbR|X-hl57_}+l;4fx)G?+y6gfbR|X-hl57_}+l;4fx)G z?+y6gfbR|X-hl57_}+l;4fx)G?+y6gfbR|X-hl57_}+l;4fx)G?+y6gfbR|X-h%Hf z_}+r=E%@Go?=AS=g6}Q(-h%Hf_}+r=E%@Go?=AS=g6}Q(-h%Hf_}+r=E%@Go?=AS= zg6}Q(-h%Hf_}+r=E%@Goe=Ydef`2Xe*Mfg7_}7AeE%?`he=Ydef`2Xe*Mfg7_}7Ae zE%?`he=Ydef`2Xe*Mfg7_}7AeE%?`he=Ydef`2Xe*Mfg7_}7AeE%?`he=Ydef`2Xe z*MWZ>_}77d9r)LQe;xSOfqxzN*MWZ>_}77d9r)LQe;xSOfqxzN*MWZ>_}77d9r)LQ ze;xSOfqxzN*MWZ>_}77d9r)M5{I-MnZ3pw)4(7MrVty{#9e~+d}gMU5v*MomO_}7DfJ^0sye?9ougMU5v*MomO_}7DfJ^0sye?9ou zgMU5v*MomO_}7DfJ^0sye?9ougMU5v*MomO_}7DfJ^0sye?9ougMU5v*MomO_}7Df zJ^0sye?9ougMU5v*MomO_}7DfJ^0sye?9ougMU5v*MomO_}7DfJ^0sye?9ougMU5v z*MomO_}7DfJ^0s?e=xu8VSd}g{I-YrZGU)vY}(%pwOgQeWWF|l?*sTgfbRqNK7j87 z_&$K|1Nc6G?*sTgfbRqNK7j87_&$K|1Nc6G?*sTgfbRqNK7j87_&$K|1Nc6G?*sTg zfbRqNK7j87_&$K|1Nc6G?*sTgfbRqNK7j87_&$K|1Nc6G?*sTgfbRqNK7j87_&$K| z1Nc6G?*sTgfbRqNK7j87_&$K|1Nc6G?*sTgfbRqNK7j87_&$K|1Nc6G?*sTgfbRqN zK7j87_&$K|1Nc6I?<4p=g6|{vK7#Kf_&$Q~Bltdo?<4p=g6|{vK7#Kf_&$Q~Bltdo z?<4p=g6|{vK7#Kf_&$Q~Bltdo?<4p=g6|{vK7#Kf_&$Q0Be*$&n)%h z{{0%G7CXNdAAS8j0JVcqI|Q|hpms6TE`i#mP`d}z?g_Q|@v%|!<71=d$Hzv^kB^O- zA0HbvKRz~Uetc}y{P@_Y`SGz)^W$Tq=EuiI&5w_bnjaq=1HK#Z-GJ`~d^g~`0pAVyZoqc~ zz8mn}fbRx;H{iPg-wpU~z;^?_8}QwL?*@D~;JX3e4ft-rcLTl~@ZEs#27EW*y8+(~ z_-?>=1HK#Z-GJ`~d^g~`0pAVyZoqc~z8mn}fbRx;H{iPg-wpU4fbRkL9)Rxw_#S}o z0r(z(?*aH8fbRkL9)Rxw_#S}o0r(z(?*aH8fbRkL9)Rxw_#S}o0r(z(?*aH8fbRkL z9)Rxw_#S|N0r(eye*yRxfPVq_7l3~O_!oeG0r(eye*yRxfPVq_7l3~O_!oeG0r(ey ze*yRxfPVq_7l3~O_!oeG0r(eye*yRxfPVq_7l3~O_!oeG0r(eye*yRxf`1|S7lMBw z_!okIA@~=9egq{zX<$`z`qFmi@?7K{ENW92>gq{zX<$`z`qFmi@?7K{ENW92>gq{ zzX<$`z`qFmi@?7K{ENW92>gq{zX<$`z`qFmi@?7K{ENW92>gq{zX<$`z`qFmi@?7K z{ENW92>gq{zX<$`z`qFmi@?7K{ENW92>gq{zX<$`z`qFmi@?7K{ENW92>gq{zX<$` zz`uz6gZXU)^VxK)97ZX-2$~E^R*a!kHPmCe2>BR7<`Yx_ZWPS!S@(^ zkHPmCe2>BR7<`Yx_ZWPS!S@(^kHPmCe2>BR7<`Yx_ZWPS!S@(^kHPmCe2>BR7<`Yx z_ZWPS!S@(^kHPmCe2>BR7<`Yx_ZWPS!S@(^kHPmCe2>BR7<`Yx_ZWPS!S@(^kHPmC ze2>BR7<`Yx_ZWPS!S@(^kHPmCe2>BR7<`Yx_ZWPS!S@(^kHPmCe2>BR7<`Yx_ZWPS z!S@7wPr&yCd{4ml1bk1x_XK=T!1n}vPr&yCd{4ml1bk1x_XK=T!1n}vPr&yCd{4ml z1bk1x_XK=T!1n}vPr&yCd{4ml1bk1x_XK=T!1n}vPr&yCd{4ml1bk1x_XK=T!1n}v zPr&yCd{4ml1bk1x_XK=T!1n}vPr&yCd{4ml1bk1x_XK=T!1n}vPr&yCd{4ml1bk1x z_XK=T!1n}vPr&yCd{4ml1bk1x_XK=Tz;_G2Tkze2?-qQw;JXFiE%3%*Y_BZozj8zFY9!g6|f5x8S=4-!1rV!FLP3 zTkze2?-qQw;JXFiE%3%*Y_B zZozj8zFY9!g6|f5x8S=4-!1rV!FLP3Tkze2?-qQw;JXFiE%&T zd{4pm6nsy?_Y{0j!S@t=Pr>&Td{4pm6nsy?_Y{0j!S@t=Pr>&Td{4pm6nsy?_Y{0j z!S@t=Pr>&Td{4pm6x>X~%@o{B!OaxhOu@|*+)TmE6x>X~%@o{B!OaxhOu@|*+)TmE z6x>X~%@o{B!OaxhOu@|*+)TmE6x>X~%@o{B!OaxhOu@|*+)TmE6x>X~%@o{B!OaZZ z%)reI+|0nu4BX7X%?#Ykz|9QY%)reI+|0nu4BX7X%?#Ykz|9QY%)reI+|0nu4BX7X z%?#Ykz|9QY%)reI+|0nu4BX7X%?#$n8O)2b#r*G_WCx&j5Nd~@2EJ$Ddj`H|;ClwX zXW)AVzGvWj2EJ$Ddj`H|;ClwXXW)AVzGvWj2EJ$Ddj`H|;ClwXXW)AVzGvWj2EJ$D zdj`H|;ClwXXW)AVzGvWj2EJ$Ddj`H|;Cl|f=iqw|zUSb34!-B$dk((m;Cl|f=iqw| zzUSb34!-B$dk((m;Cl|f=iqw|zUSb34!-B$dk((m;Cl|f=iqw|zUSb34!-B$dk((m z;Cl|f=iqw|zUSb34!-B$dk((m;Cl|f=iqw|zUSb34!-B$dk((m;Cl|f=iqw|zUSb3 z4!-B$dk((m;Cl|f=iqw|zUSb34!-B$dk((m;Cl|f=iqw*ZWiEX0d5xHW&v&%;AR1C z7T{(9ZWiEX0d5xHW&v&%;AR1C7T{(9ZWiEX0d5xHW&v&%;AR1C7T{(9ZWiEX0d5xH zW&v&%;AR1C7T{(9ZWiEX0d5xHW&v&%;AR1C7T{(9ZWiEX0d5xHW&v&%;AR1C7T{(9 zZWiEX0d5xHW&v&%;AR1C7T{(9ZWiEX0d5xHW&v&%;AR1C7T{(9ZWiPw%!><{7Z-=; z-?J)ihT1JqJ2GD@!S@n;FTwW`d@sTG5_~Vg_Y!Te6PUw3Vg4? z_X>Qk!1oG#ufX>Te6PUw3Vg4?_X>Qk!1oG#ufX>Te6PUw3Vg4?_X>Qk!1oG#ufX>T ze6PUw3Vg4?_X>Qk!1oG#ufX>Te6PUw3Vg4?_X>Qk!1oG#ufX>Te6PUw3Vg4?_X>Qk z!1oG#ufX>Te6PUw3Vg4?_X>Qk!1oG#ufX>Te6PUw3Vg4?_X>Qk!1oG#ufX>Te6PUw z3Vg4?_X>Qk!S@<`ufg{ke6PXx8ho$8_Zob!!S@<`ufg{ke6PXx8ho$8_Zob!!S@<` zufg{ke6PXx8ho$8_Zob!!S@<`ufg{ke6PX38vLulzZ(3j!M_^(tHHk-{Hwvg8vLul zzZ(3j!M_^(tHHk-{Hwvg8vLulzZ(3j!M_^(tHHk-{Hwvg8vLulzZ(3j!M_^(tHHk- z{Hwvg8vLulzZ(2&z`q9kYrww-{A<9!2K;NlzXtqkz`q9kYrww-{A<9!2K;NlzXtqk zz`q9kYrww-{A<9!2K;NlzXtqkz`q9kYrww-{A*x-+ra#`f%$C%^V?=IzqZsIfZ9Q* z9fBJ8-hl57_}+l;4fx)G?+y6gfbR|X-hl57_}+l;4fx)G?+y6gfbR|X-hl57_}+l; z4fx)G?+y6gfbR|X-hl57_}+l;4fx)G?+y6gfbR|X-hl57_}+l;E%@Go?=AS=g6}Q( z-h%Hf_}+r=E%@Go?=AS=g6}Q(-h%Hf_}+r=E%@Go?=AS=g6}Q(-h%Hf_}+r=E%@Go z?=AS=g6}Q(*Mfg7_}7AeE%?`he=Ydef`2Xe*Mfg7_}7AeE%?`he=Ydef`2Xe*Mfg7 z_}7AeE%?`he=Ydef`2Xe*Mfg7_}7AeE%?`he=Ydef`2Xe*Mfg7_}7Ae9r)LQe;xSO zfqxzN*MWZ>_}77d9r)LQe;xSOfqxzN*MWZ>_}77d9r)LQe;xSOfqxzN*MWZ>_}77d z9r)LQe;xSOfqxy$Z#$UZb}+x~V1C;z=I5f_0jM2>+99Zc?;ZHwf$tso-huBO_}+o< z9r)gX?;ZHwf$tso-huBO_}+o<9r)gX?;ZHwf$tso-huBO_}+o<9r)gX?;ZHwf$tso z-huBO_}+o<-Hh*>S}CO$tN(4Ng;qHNQq7OAmTG={wN&%ttEHMBUoF-A_-d)<$5%@=KZaVW`7zW| z&5xm$YJLp0RP*DcrJ5fnE!F&ZXQ}4LJ4-b`-dU>ovB^@+k4=_pe*Cdi^W%Y~nja4= z)kU*og{8U}YWINJJ)t%~{#dH{@yAllk3W`be*Cdi^W%@Dnje2G)%^HlspiKYOEo{n zSgQFk#!}6XF_vn69I;gMh#}P|4KaNMX|PIzRT`|)V3h`|G+3p< zDh*a?uu6kfdVW5<)Zmx~$23@_!72?_X|PIzRT`|)V3h`|G+3psRm3nV5$LA4a^MYrtCr-Wu@MfVT#`HQ=oQZw+{Bz*_^}8t^s%Zv*f)05=1$F#!Jp@Gk)W0+@>i zU}FID)BxNJz|8>M48Y9*+zi0Y0Nf0~%>djCz|8>M48Y9*+zi0Y09*;cl>l4`Zk#tD z0CNJE#|7X~03HS4Q2-tV;86e`1>jKt9tGf003HS4Q2-tV;86e`1>jKt9tGf003HS4 zQ2-tV;86e`1>jKt9tGf003HS4Q2-tV;86e`h2T*L9)-dDIURykAa3um)B5)-FS0ZpF0#_n%B?4C> za3um)B5)-FS0ZpF0#_n%B_dZ~9v8tpE`oVn1oOD)Fq{uJLk;F}(UJLF3~t8YW^CX( z!PFS$crncJVz4-db-Wmyj=|{|oQ}ci7@Us5=@^`j!RZ*Bj=|{|oQ}ci7@Us5=@^`j z!RZ*Bj=|{|oQ}ci7@Us5=@^`j!RZ*Bj=|{|oQ}ci7@Us5>3D+k9So1b@E8n_!SER7 zjWPHhgYPl;9)s^O_#T7rG58*X?=kougYPl;9)s^O_#T7rG58*X?=kougYPl;9)s^O z_#T7rG58*X?=kougYPl;9)s@*_@0383HY9X?+N&xfbR+To`CNO_@0383HY9X?+N&x zfbR+To`CNO_@0383HY9X?+N&xfbR+To`CNO_@0383HY9X?+N&xfbR+To`CNO_@038 z3HY9X?+N&xfbR+To`CNO_@0383HY9X?+N&xfbR+To`CNO_@0383HY9X?+N&xfbR+T zo`CNO_@0383HY9X?+N&xfbR+To`CNO_@0383HY9X?+N&xfbR+To`CNbe7E4c1>Y_B zZozj8zFY9!g6|f5x8S=4-!1rV!FLP3Tkze2?-qQw;JXFiE%3%*Y_BZozj8zFY9!g6|f5x8S=4-!1rV!FLP3Tkze2 z?-qQw;JXFiE%3%*Y_BZozj8 zzFY9!g6}CQ(2IHj+#!DHDmogYHWpGYsa8741Udmv+l)-o@gYi-ZAjKOm7HV1EW@HPi;b9g@_2a9vCIEVK`a(F)^hxbEr@I43LbMQR} z-*fOi2j6q>JqO=&@I43LbMQR}-*fOi2j6q>JqO=&@I43LbMQR}-*fOi2j6q>JqO=& z@I43LbMQR}-*fOi2j6q>JqO=&@I43LbMQR}-*fOi2j6q>JqO=&@I43LbMQR}-*fOi z2j6q>JqO=&@I43LbMQR}-wSZF05=P8vj8^>aI*k63vjalHw$pH05=P8vj8^>aI*k6 z3vjalHw$pH05=P8vj8^>aI*k63vjalHw$pH05=P8vj8^>aI*k63vjalHw$pH05=P8 zvj8^>aI*k63vjalHw$pH05=P8vj8^>aI*k63vjalHw$pH05=P8vj8^>aI*k63vjal zHw$pH05=P8vj8^>aI*k63vjalHw$pHAU9!NT)@1zI6Ob!EN+I{El@i$Un{})5_~Vg z_Y!Qk!1oG#ufX>Te6PUw3Vg4?_X>Qk!1oG# zufX>Te6PUw3Vg4?_X>Qk!1oG#ufX>Te6PUw3Vg4?_X>Qk!1oG#ufX>Te6PUw3Vg4? z_X>Qk!1oG#ufX>Te6PUw3Vg4?_X>Qk!1oG#ufX>Te6PUw3Vg4?_X>Qk!1oG#ufX>T ze6PUw3Vg4?_X>Qk!1oG#ufX>Te6PUw3Vg4?_X>Qk!1oG#ufX>Te6PXx8ho$8_Zob! z!S@<`ufg{ke6PXx8ho$8_Zob!!S@<`ufg{ke6PXx8ho$8_Zob!!S@<`ufg{ke6PXx z8ho$8_Zob!!M_^(tHHk-{Hwvg8vLulzZ(3j!M_^(tHHk-{Hwvg8vLulzZ(3j!M_^( ztHHk-{Hwvg8vLulzZ(3j!M_^(tHHk-{Hwvg8vLulzZ(3j!M_^(tHHk-{A<9!2K;Nl zzXtqkz`q9kYrww-{A<9!2K;NlzXtqkz`q9kYrww-{A<9!2K;NlzXtqkz`q9kYrww- z{A<9!2K;NlzXtqkV1C=c{I-GlZ3FY$W--6E)Et1?L8u*q8u;FT?+y6gfbR|X-hl57 z_}+l;4fx)G?+y6gfbR|X-hl57_}+l;4fx)G?+y6gfbR|X-hl57_}+l;4fx)G?+y6g zfbR|X-hl57_}+l;4fx)G?+y6gfbT8%-h%Hf_}+r=E%@Go?=AS=g6}Q(-h%Hf_}+r= zE%@Go?=AS=g6}Q(-h%Hf_}+r=E%@Go?=AS=g6}Q(-h%Hf_}+r=E%?`he=Ydef`2Xe z*Mfg7_}7AeE%?`he=Ydef`2Xe*Mfg7_}7AeE%?`he=Ydef`2Xe*Mfg7_}7AeE%?`h ze=Ydef`2Xe*Mfg7_}7AeE%?`he=Ydef`1+O*MWZ>_}77d9r)LQe;xSOfqxzN*MWZ> z_}77d9r)LQe;xSOfqxzN*MWZ>_}77d9r)LQe;xSOfqxzN*MWZ>_}77d9n5b#nBR6V zzwKat+b!njqTK24E~vd5YVX;(wyBj;da?T7hFWN~RN1lbm)EZ@+9x0NqxRqfS?+Y7H`LMNWfrUA zseG=Ez1`{hZhzVF<3BTwIN^EHZQcHcdiZ^Be;s@K`}z%g_Wn0}_MV^Qj+etpHaLCd zeY+1&-!9s3*L3{#R4-N!?D*^7osWILpZvRETs^$A^RYOyH**&Jo0%`3;NM-g9_of# z{?wU$#Aox`&E{FVwZ&<^rPFYDb*$N3LFi+9u< zRtI-|bBn{PwUBAG`9Zby28LOEcRYXe+uQxTs;ocG$vv>c>)K6=)ji!`?+skA^;|q# zAFJ1+^~W7)5A1Lby?U|Q0sHG5Duc6lOi#LIeirY``limp9yswF(!pYNyZh@LYHpjA zpM`yTdT!!up7y8b9^X-~WruSpU95J-{yK;1*X`ZoySaDo`W@t+?{E$ki`8S_U+2)> zU%Ph?=W_4f^*hKt-{Bm(^*x3C^t;VB?%~7v|K?Z6kC$1j9?+?L?*4b1^-OQa_TNh} z`PS{PUTgQ$^JKYtNPF#L$9c+`f1a3`9=sEtCpRuudvt$2PcGPTpP!*8&KZ3_^vpj` z!kON?6P_op*niKH@(evCcD&j%`kXuq&y$&c%I(jS;HZ83Yc02W#EwVwgL~l}d~KwD z^apqM``r2&rNZY9tur%w;P~sQUaacJdTN5`*!TOXSK{v1tRCJT`#7VF?y-GwZr|M< z&Y@(ny370P{l5zzc@7?h|M#B6Ie7opcWIY<;KXw%JU+hOPY#tIjPdmyeEhu2C*VHV zY=?7bA3Aiw2g9MYGyCBD*v&&Y@f?cwp+nJYcCjxucd^Y`++@wzS=`y8o7&+V3Ky$u z++XjNj=TAtqI2x8)a-Z0&Oa05>-7td=+$8Vgm-vd+lS-p;!KRM_xlUa{&|w0;YYH= zIW#R+x4FOGD=kjv0@&K0GyI&~YgfO+IrPf?cMhE&oW|p__UAP2%>8gxC!Ry8I(7~{ zeDD5U*%J;-`qS5JljxdTw=wHe;?`YpcE6@Sd(qKn+HJRb(FeZ0_5SU(*aO-7;chHewOc=7vvtXH4{WY-Tc6uLf@`;3a0Y(dJjLrg z)$LF5>d*Pj&%5{(@8aSVw_k65%6mZnD@8VUEb1LEU0-;rd*JANeTVmg^&a{A%cuHy z_ssS?3^Mz-%-#FVxx)JL)42zBI41VJb2qTLb78Ub#p_E?-yX<2xUOcY)Yfs_b}ZMP zz&<;L(%k#M_AgK2O4gg6{yngR@#(gA@lXGauCMWqy9ai7f3jb!cE{fScS^Rgq57+L zKEmr$Yv=uPHZIM+o^EBaIQm`~ZL+SN_C3(Q;Mi5}IL=z0_M2N@;SPIXvF)svF}?ZfYrhSnRv9ymR}3wtfx!n$;a-2*%LzqwfLjlDhp zKjCmjCtNaf!8J3NuP;8`d!U(n6Z(W3y6EU7=G7+@))$nub zwg;BC#k;F+`~IZg?XZ4u(#(2;JMbRZ!T(n*R{LXr`G4N_NhTff^`Zdnol~tX<^sX4 z*P54eSFyhQwCsV~PLBRfyS&2NBD)N%H{0DFIPtBM^!!~UH&@$ieXc*&d*GDzzz+Vu zda=5OJ^A;Vww*k;L7qQkHO<;56-l9bVU7w^&{G z{+ib`TMy}EADgQUwm#P%XJrrM>F#f4&CTxjm1N7j-EBHlo7+YayG^dQJGDJ<-l1J@ ze^t0TChK!$*ZXU|;mY~Vt@kMOV)egc|F%u~hGXA9;)hok?URr5?tN+xWc|{1YWvG) z>!v@YlvV5Z(oSiI`E1S2wUeBtCoj6f+Ol?e?KEi`BO4gRPfV^d_Vo$TX}E_hkDn) zmv#!*x!!ai?|~iWnuiyw$GgAYYu^0UU$Z@V zuKj%ccpW`Pi`AXm?dOJGo^)<-Y^@;+R@IG-vwYJ>lYi+SuJ@WnaT6?!&JL$pP zJn0te4c2>L$31YuYwhN-vC{r}t=;jV@5u|#wMXdl=(u-N>78DSDYsQSo;8B( zj^piJ-fk$k-AIs)1=&Q9wSsIa$Yz3UF31*w?2coLT|TcW!R^+9Y$M3Ff@~+q_JZsn z$c}>SodnrC3$k|+WbZ1--c67_Pmn!dki9^Vy-<+7yCAy|WDf|k2L;(fg6u_t?8SoY zC4%gwg6us6*?S7IA0o)!OOU;{Ap4<$?0p2;`wFrfg6w62?B#;&6@u*j1ljuwvJVhs zA1KH^NRWN7Ao~zO_Mw98hY7M*3bG$A$UaPvT?(=f7i1qH$Uah#y-JY1T9AE|Ao~%5 z>@|YyqXpT=2(lk3$Uat(eVicsQG)E_1=%MEvL7wTK2eZ;k|6tJLG~$v>{A8Vj}c^_ zCdfWrko{Oe_TvQEj~8S=L6H4KLG~Gf?6rdIb%N|O1=(i_vdW?57K|FBfD# zLy-MULH4r*+0PbaKSz-LTtW8p1ldhN_VWeVNszr!ko^Kd_7#Hc7Yeek6l8A_WWPv| zeU%{l#e(ds1=-gKvac0nUnj_Zi6Hx>g6x+Gvac6p-yq0-xgh&SLG~*I**6KYZx&>~ zQjmR%Ap2H9_NxThw+XUeEyx}gWN#K^ZxLjV2(oV%WZxmkzEhBWmmvFYLH0d@?AHjg zUn|Idogn-5g6ua4vfn7kev=^k&4TQ=2(sTQ$bOq3`|X14cL=iIDad}8Ap6~d?Dq(= z-z&&|pCJ4Fg6w+**&h&Oogn*zg6t0ovOg@y{)iy^qk`;@39>&f$o_;N`;&s~PYJR= zEy%u4ko_4!_GbmzpA%$%UXc9-LG~8~* z5@df{ko_G&_ICx@-xFkiUy%I+LG}*?**_9w|5%WHzaaZ3g6y9PvVSJX{<$Fg7lQ0x z3bKDC$o{n;`!|B@-wLvSC&>Q2Ao~x3>^};!|0Kx%vmpB~g6zKvvi~N?{<|RiAA; zfFOHNkUb>GUL?p~EXZCW$X+VQ-b0YRry%eS#qS(Sqy~1=%MF zvQHLdpCZUURgnD{LH22a?9&C=j}>G;PLTb0LG}{_*-sQ?pCQOzE683a$Uak$eU>2m zY(e&VLH0R<>~jU#PZDHr5M)1DkbRyY`+Pz6Qv}%;2(m8}WM3r6eySk*VnOyLg6vBL z*-sN>Unad7Fr2N_-_fN`yy?;{v>;04RU+d7Fr2N_-_fN`yy?;{v>;04RU+d7Fr2N_-_fN`yy?;{v z>;04RU+d7Fr2N_-_fN`yy?;{v>;04RU+?;J>FBD{7DahU=$bOL^`zk^9iv`(N3$m{fWM3=DzD|(+ z5<&J$1=%kXWM41HzCn=vazXZug6vlavTqV(-z>;}r6BtjLH4bJ>{ki0Zxdv{T97>~ z$lff--Xh2z5oF&k$i736eWxJ%EK~1lfNTWdBW&{dYn3KLpwT6lDKPko|8#_J0J~|Mkmm>-To+ ze(!U(*?V=zKIr}4PSEe|1pVGl(C_U8{oYQ{@9hNr-cHc(?F9YaPSEe|1pVGl(C_U8 z{oYQ{@9hNr-cHc(?F9YaPSEe|1pVGl(C_U8{oYQ{@9hNr-cHc(?F9YaPSEe|1pVGl z(C_U8{oYQ{@9hNr-cHc(?F9YaPSEe|1pVGl(C_U8{oYQ{@9hNr-cHc(?F9YaPSEe| z1pVGl(C_U8{oYQ{@9hNr-cHc(?F9YaPSEe|1pVGl(C_U8{oYQ{@9hNr-cHc(?F9Ya zPSEe|1pVGl(C_U8{oYQ{@9hNr-cHc(?F9YaPSEe|1pVGl(C_U8{oYQ{@9hNr-cHc( z?F9YaPSEe|1pVGl(C_U8{oYQ{@9hNr-cHc(?F9YaPSEe|1pVGl(C_U8{oYQ{@9hNr z-cHc(?F9YaPSEe|1pVGl(C_U8{oYQ{@9hNr-cHc(?F9YaPSEe|1pVGl(C_U8{oYQ{ z@9hNr-cHc(?F9YaPSEe|1pVGl(C_U8{oYQ{@9hNr-cHc(?F9YaPSEe|1pVGl(C_U8 z{oYQ{@9hNr-cHc(?F9YaPSEe|1pVGl(C_U8{oYQ{@9hNr-cHc(?F9YaPWktHJLTW+ z?UaANw^RQ8-cI@VdpqUd@9mU-zqeEV{oYRb_j^0#-|y{|f4{d={{7xg`S*J}<=^k^ zlz+dsQ~v$lPWktHJLTW+?UaANw^RQ8-cI@VdpqUd@9mU-zqeEV{oYRb_j^0#-|y{| zf4{d={{7xg`S*J}<=^k^lz+dsQ~v$lPWktHJLTW+?UaANw^RQ8-cI@VdpqUd@9mU- zzqeEV{oYRb_j^0#-|y{|f4{d={{7xg`S*J}<=^k^lz+dsQ~v$lPWktHJLTW+?UaAN zw^RQ8-cI@VdpqUd@9mU-zqeEV{oYRb_j^0#-|y{|f4{d={{7xg`S*J}<=^k^lz+ds zQ~v$lPWktHJLTW+?UaANw^RQ8-cI@VdpqUd@9mU-zqeEV{oYRb_j^0#-|y{|f4{d= z{{7xg`S*J}<=^k^lz+dsQ~v$lPWktHJLTW+?UaANw^RQ8-cI@VdpqUd@9mU-zqeEV z{oYRb_j^0#-|y{|f4{d={{7xg`S*J}<=^k^lz+dsQ~v$lPWktHJLTW+?UaANw^RQ8 z-cI@VdpqUd@9mU-zqeEV{oYRb_j^0#-|y{|f4{d={{7xg`S*J}<=^k^lz+dsQ~v$l zPWktHJLTW+?UaANw^RQ8-cI@VdpqUd@9mU-zqeEV{oYRb_j^0#-|y{|f4{d={{7xg z`S*J}<=^k^lxM&9>Th;Ct^9h$k7l(XYXsRqkPQXdNRW*M*+h`Ff@~_tW`b-k$QFWZ zDaclWY%Rz(f@~|uc7kj#$PR++D9GMPkiD}Ydly0Wu7d2{1ljWh+4BY23k2B<1=+g` zvI{}>fFOHNkUb>GUL?p~EXZCW$X+VQ-b0YRry%eS#qS(Sqy~ z1=%MFvQHLdpCZUURgnD{LH22a?9&C=j}>G;PLTb0LG}{_*-sQ?pCQOzE683a$Uak$ zeU>2mY(e&VLH0R<>~jU#PZDHr5M)1DkbRyY`+Pz6Qv}%;2(m8}WM3r6eySk*VnOyL zg6vBL*-sN>Una~PV%4aPK&`$W+it7A{yaDK!SQ1jZ5@vdwa~$Px4yd7v5NGDI(+=A m($_s9edn#m?0BZU_2>21bK_X9kHh*nte*qx=fJu69QZ$MN fpga_list = { {0x0a014c35, {"anlogic", "eagle s20", "EG4S20BG256"}}, {0x0362D093, {"xilinx", "artix a7 35t", "xc7a35"}}, + {0x0362c093, {"xilinx", "artix a7 50t", "xc7a50t"}}, {0x13631093, {"xilinx", "artix a7 100t", "xc7a100"}}, {0x13636093, {"xilinx", "artix a7 200t", "xc7a200"}},