From 21c2264382451229e5c41f957cbf657ec8b2e9ef Mon Sep 17 00:00:00 2001 From: Uwe Bonnes Date: Thu, 23 Mar 2023 12:00:54 +0100 Subject: [PATCH] xc7vx330tffg1157: Allow to build and provide spiOverJtag_xc7vx330tffg1157.bit --- spiOverJtag/Makefile | 1 + spiOverJtag/build.py | 4 ++++ spiOverJtag/constr_xc7v_ffg1157.ucf | 5 +++++ spiOverJtag/constr_xc7v_ffg1157.xdc | 11 +++++++++++ spiOverJtag/spiOverJtag_xc7vx330tffg1157.bit.gz | Bin 0 -> 94357 bytes 5 files changed, 21 insertions(+) create mode 100644 spiOverJtag/constr_xc7v_ffg1157.ucf create mode 100644 spiOverJtag/constr_xc7v_ffg1157.xdc create mode 100644 spiOverJtag/spiOverJtag_xc7vx330tffg1157.bit.gz diff --git a/spiOverJtag/Makefile b/spiOverJtag/Makefile index 8990ae4..3d24a73 100644 --- a/spiOverJtag/Makefile +++ b/spiOverJtag/Makefile @@ -15,6 +15,7 @@ XILINX_PARTS := xc3s500evq100 \ xc7k325tffg676 xc7k325tffg900 \ xc7k420tffg901 \ xcku3p-ffva676 \ + xc7vx330tffg1157 \ xcku5p-ffvb676 \ xcvu9p-flga2104 xcvu37p-fsvh2892 XILINX_BIT_FILES := $(addsuffix .bit.gz,$(addprefix spiOverJtag_, $(XILINX_PARTS))) diff --git a/spiOverJtag/build.py b/spiOverJtag/build.py index d51c693..36b43fe 100755 --- a/spiOverJtag/build.py +++ b/spiOverJtag/build.py @@ -35,6 +35,9 @@ elif subpart[0:2] == '5c': elif subpart == "xc7a": family = "Artix" tool = "vivado" +elif subpart == "xc7v": + family = "Virtex 7" + tool = "vivado" elif subpart == "xc7k": device_size = int(part.split('k')[1].split('t')[0]) if device_size <= 160: @@ -100,6 +103,7 @@ if tool in ["ise", "vivado"]: "xc7k325tffg676" : "xc7k_ffg676", "xc7k325tffg900" : "xc7k_ffg900", "xc7k420tffg901" : "xc7k_ffg901", + "xc7vx330tffg1157" : "xc7v_ffg1157", "xc7s25csga225" : "xc7s_csga225", "xc7s25csga324" : "xc7s_csga324", "xc7s50csga324" : "xc7s_csga324", diff --git a/spiOverJtag/constr_xc7v_ffg1157.ucf b/spiOverJtag/constr_xc7v_ffg1157.ucf new file mode 100644 index 0000000..2901887 --- /dev/null +++ b/spiOverJtag/constr_xc7v_ffg1157.ucf @@ -0,0 +1,5 @@ +NET "csn" LOC = AL33 | IOSTANDARD = LVCMOS18; +NET "sdi_dq0" LOC = AN33 | IOSTANDARD = LVCMOS18; +NET "sdo_dq1" LOC = AN34 | IOSTANDARD = LVCMOS18; +NET "wpn_dq2" LOC = AK34 | IOSTANDARD = LVCMOS18; +NET "hldn_dq3" LOC = AL34 | IOSTANDARD = LVCMOS18; diff --git a/spiOverJtag/constr_xc7v_ffg1157.xdc b/spiOverJtag/constr_xc7v_ffg1157.xdc new file mode 100644 index 0000000..729913e --- /dev/null +++ b/spiOverJtag/constr_xc7v_ffg1157.xdc @@ -0,0 +1,11 @@ +set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design] +set_property CONFIG_VOLTAGE 1.8 [current_design] +# Table 1-2 from UG570 +set_property CFGBVS GND [current_design] +set_property BITSTREAM.CONFIG.CONFIGRATE 33 [current_design] + +set_property -dict {PACKAGE_PIN AL33 IOSTANDARD LVCMOS18} [get_ports {csn}] +set_property -dict {PACKAGE_PIN AN33 IOSTANDARD LVCMOS18} [get_ports {sdi_dq0}] +set_property -dict {PACKAGE_PIN AN34 IOSTANDARD LVCMOS18} [get_ports {sdo_dq1}] +set_property -dict {PACKAGE_PIN AK34 IOSTANDARD LVCMOS18} [get_ports {wpn_dq2}] +set_property -dict {PACKAGE_PIN AL34 IOSTANDARD LVCMOS18} [get_ports {hldn_dq3}] diff --git a/spiOverJtag/spiOverJtag_xc7vx330tffg1157.bit.gz b/spiOverJtag/spiOverJtag_xc7vx330tffg1157.bit.gz new file mode 100644 index 0000000000000000000000000000000000000000..fc864b799b48ac083eaca47d7d85564e5226a753 GIT binary patch literal 94357 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 z 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 WU)_5qgA;azCO!QzQTyxrM*TlWBfJR! literal 0 HcmV?d00001