diff --git a/spiOverJtag/Makefile b/spiOverJtag/Makefile index 49557d2..b05e267 100644 --- a/spiOverJtag/Makefile +++ b/spiOverJtag/Makefile @@ -1,4 +1,4 @@ -XILINX_PARTS := xc6slx16ftg256 xc6slx16csg324 xc6slx45csg324 xc6slx100fgg484 \ +XILINX_PARTS := xc3s500evq100 xc6slx16ftg256 xc6slx16csg324 xc6slx45csg324 xc6slx100fgg484 \ xc6slx150tfgg484 \ xc7a35tcpg236 xc7a35tcsg324 xc7a35tftg256 \ xc7a50tcpg236 xc7a75tfgg484 xc7a100tcsg324 xc7a100tfgg484 xc7a200tsbg484 \ diff --git a/spiOverJtag/build.py b/spiOverJtag/build.py index c8bb554..33af234 100755 --- a/spiOverJtag/build.py +++ b/spiOverJtag/build.py @@ -44,12 +44,18 @@ elif subpart == "xc7s": elif subpart == "xc6s": family = "Spartan6" tool = "ise" + speed = -3 +elif subpart == "xc3s": + family = "Spartan3E" + tool = "ise" + speed = -4 else: print("Error: unknown device") os.sys.exit() if tool in ["ise", "vivado"]: pkg_name = { + "xc3s500evq100" : "xc3s_vq100", "xc6slx16ftg256" : "xc6s_ftg256", "xc6slx16csg324" : "xc6s_csg324", "xc6slx45csg324" : "xc6s_csg324", @@ -73,18 +79,20 @@ if tool in ["ise", "vivado"]: cst_type = "UCF" tool_options = {'family': family, 'device': { + "xc3s500evq100": "xc3s500e", "xc6slx16ftg256": "xc6slx16", "xc6slx16csg324": "xc6slx16", "xc6slx45csg324": "xc6slx45", "xc6slx100fgg484": "xc6slx100", "xc6slx150tfgg484": "xc6slx150t"}[part], 'package': { + "xc3s500evq100": "vq100", "xc6slx16ftg256": "ftg256", "xc6slx16csg324": "csg324", "xc6slx45csg324": "csg324", "xc6slx100fgg484": "fgg384", "xc6slx150tfgg484": "fgg484"}[part], - 'speed' : -3 + 'speed' : speed } else: cst_type = "xdc" diff --git a/spiOverJtag/constr_xc3s_vq100.ucf b/spiOverJtag/constr_xc3s_vq100.ucf new file mode 100644 index 0000000..14ce462 --- /dev/null +++ b/spiOverJtag/constr_xc3s_vq100.ucf @@ -0,0 +1,5 @@ +NET "sdi_dq0" LOC = P27 | IOSTANDARD = LVCMOS33; +NET "sdo_dq1" LOC = P44 | IOSTANDARD = LVCMOS33; +NET "csn" LOC = P24 | IOSTANDARD = LVCMOS33; +NET "sck" LOC = P50 | IOSTANDARD = LVCMOS33; + diff --git a/spiOverJtag/spiOverJtag_xc3s500evq100.bit.gz b/spiOverJtag/spiOverJtag_xc3s500evq100.bit.gz new file mode 100644 index 0000000..0326c0e Binary files /dev/null and b/spiOverJtag/spiOverJtag_xc3s500evq100.bit.gz differ diff --git a/spiOverJtag/xilinx_spiOverJtag.v b/spiOverJtag/xilinx_spiOverJtag.v index 8730967..e982489 100644 --- a/spiOverJtag/xilinx_spiOverJtag.v +++ b/spiOverJtag/xilinx_spiOverJtag.v @@ -1,8 +1,12 @@ module spiOverJtag ( output csn, + `ifdef spartan6 output sck, +`endif +`ifdef spartan3e + output sck, `endif output sdi_dq0, input sdo_dq1, @@ -41,6 +45,10 @@ module spiOverJtag `ifdef spartan6 assign sck = drck; +`else +`ifdef spartan3e + assign sck = drck; + assign runtest = tmp_up_s; `else STARTUPE2 #( .PROG_USR("FALSE"), // Activate program event security feature. Requires encrypted bitstreams. @@ -61,7 +69,27 @@ module spiOverJtag .USRDONETS(1'b1) // 1-bit input: User DONE 3-state enable output ); `endif +`endif +`ifdef spartan3e + BSCAN_SPARTAN3 bscane2_inst ( + .CAPTURE(capture), // 1-bit output: CAPTURE output from TAP controller. + .DRCK1 (drck), // 1-bit output: Gated TCK output. When SEL + // is asserted, DRCK toggles when + // CAPTURE or SHIFT are asserted. + .DRCK2 (), // 1-bit output: USER2 function + .RESET (), // 1-bit output: Reset output for TAP controller. + .SEL1 (sel), // 1-bit output: USER1 instruction active output. + .SEL2 (), // 1-bit output: USER2 instruction active output. + .SHIFT (), // 1-bit output: SHIFT output from TAP controller. + .TDI (tdi), // 1-bit output: Test Data Input (TDI) output + // from TAP controller. + .UPDATE (update), // 1-bit output: UPDATE output from TAP controller + .TDO1 (tdo), // 1-bit input: Test Data Output (TDO) input + // for USER1 function. + .TDO2 () // 1-bit input: USER2 function + ); +`else `ifdef spartan6 BSCAN_SPARTAN6 #( `else @@ -88,5 +116,6 @@ module spiOverJtag .TDO (tdo) // 1-bit input: Test Data Output (TDO) input // for USER function. ); +`endif endmodule