aboutsummaryrefslogtreecommitdiff
path: root/tcl/cpld
diff options
context:
space:
mode:
authorRobert Jordens <jordens@gmail.com>2017-08-03 12:25:07 +0200
committerMatthias Welwarsky <matthias@welwarsky.de>2018-03-30 10:07:49 +0100
commit7944ebb6945d01e2f603f80c5c70f349c8338950 (patch)
treeccb267caac42b771bc35b07a67aead4587dd32ca /tcl/cpld
parent2231da8ec4e7d7ae9b652f3dd1a7104f5a110f3f (diff)
downloadriscv-openocd-7944ebb6945d01e2f603f80c5c70f349c8338950.zip
riscv-openocd-7944ebb6945d01e2f603f80c5c70f349c8338950.tar.gz
riscv-openocd-7944ebb6945d01e2f603f80c5c70f349c8338950.tar.bz2
xilinx-xcu: add Xilinx Ultrascale tap data
The Ultrascale series is a bit more complicated to handle since with the stacked and interconnected dies the IR gets longer. This adds support for all currently known chips from the Ultrascale family. Change-Id: Ibac325dd6fadc76f73cc682b1c62c1a5f39f0786 Signed-off-by: Robert Jordens <jordens@gmail.com> Reviewed-on: http://openocd.zylin.com/4188 Tested-by: jenkins Reviewed-by: Matthias Welwarsky <matthias@welwarsky.de>
Diffstat (limited to 'tcl/cpld')
-rw-r--r--tcl/cpld/xilinx-xcu.cfg72
1 files changed, 72 insertions, 0 deletions
diff --git a/tcl/cpld/xilinx-xcu.cfg b/tcl/cpld/xilinx-xcu.cfg
new file mode 100644
index 0000000..3270597
--- /dev/null
+++ b/tcl/cpld/xilinx-xcu.cfg
@@ -0,0 +1,72 @@
+# Xilinx Ultrascale (Kintex, Virtex, Zynq)
+# https://www.xilinx.com/support/documentation/user_guides/ug570-ultrascale-configuration.pdf
+
+if { [info exists CHIPNAME] } {
+ set _CHIPNAME $CHIPNAME
+} else {
+ set _CHIPNAME xcu
+}
+
+# The cvarious chips in the Ultrascale family have different IR length.
+# Set $CHIP before including this file to determine the device.
+array set _XCU_DATA {
+ XCKU025 {0x03824093 6}
+ XCKU035 {0x03823093 6}
+ XCKU040 {0x03822093 6}
+ XCKU060 {0x03919093 6}
+ XCKU095 {0x03844093 6}
+ XCKU3P {0x04A63093 6}
+ XCKU5P {0x04A62093 6}
+ XCKU9P {0x0484A093 6}
+ XCKU11P {0x04A4E093 6}
+ XCKU13P {0x04A52093 6}
+ XCKU15P {0x04A56093 6}
+ XCVU065 {0x03939093 6}
+ XCVU080 {0x03843093 6}
+ XCVU095 {0x03842093 6}
+ XCVU3P {0x04B39093 6}
+ XCKU085 {0x0380F093 12}
+ XCKU115 {0x0390D093 12}
+ XCVU125 {0x0392D093 12}
+ XCVU5P {0x04B2B093 12}
+ XCVU7P {0x04B29093 12}
+ XCVU160 {0x03933093 18}
+ XCVU190 {0x03931093 18}
+ XCVU440 {0x0396D093 18}
+ XCVU9P {0x04B31093 18}
+ XCVU11P {0x04B49093 18}
+ XCVU13P {0x04B51093 24}
+}
+
+if { ![info exists CHIP] } {
+ error "set CHIP to one of "[concat [array names _XCU_DATA]]
+}
+
+if { ![llength [array names _XCU_DATA $CHIP]] } {
+ error "unknown CHIP: "$CHIP
+}
+
+set _EXPID [lindex $_XCU_DATA($CHIP) 0]
+set _IRLEN [lindex $_XCU_DATA($CHIP) 1]
+
+# the 4 top bits (28:31) are the die stepping/revisions. ignore it.
+jtag newtap $_CHIPNAME tap -irlen $_IRLEN -ignore-version -expected-id $_EXPID
+
+pld device virtex2 $_CHIPNAME.tap 1
+
+set XCU_JSHUTDOWN 0x0d
+set XCU_JPROGRAM 0x0b
+set XCU_JSTART 0x0c
+set XCU_BYPASS 0x3f
+
+proc xcu_program {tap} {
+ global XCU_JSHUTDOWN XCU_JPROGRAM XCU_JSTART XCU_BYPASS
+ irscan $tap $XCU_JSHUTDOWN
+ irscan $tap $XCU_JPROGRAM
+ runtest 60000
+ #JSTART prevents this from working...
+ #irscan $tap $XCU_JSTART
+ runtest 2000
+ irscan $tap $XCU_BYPASS
+ runtest 2000
+}