1 # Xilinx Ultrascale (Kintex, Virtex, Zynq)
2 # https://www.xilinx.com/support/documentation/user_guides/ug570-ultrascale-configuration.pdf
4 if { [info exists CHIPNAME] } {
5 set _CHIPNAME $CHIPNAME
10 # The cvarious chips in the Ultrascale family have different IR length.
11 # Set $CHIP before including this file to determine the device.
13 XCKU025 {0x03824093 6}
14 XCKU035 {0x03823093 6}
15 XCKU040 {0x03822093 6}
16 XCKU060 {0x03919093 6}
17 XCKU095 {0x03844093 6}
21 XCKU11P {0x04A4E093 6}
22 XCKU13P {0x04A52093 6}
23 XCKU15P {0x04A56093 6}
24 XCVU065 {0x03939093 6}
25 XCVU080 {0x03843093 6}
26 XCVU095 {0x03842093 6}
28 XCKU085 {0x0380F093 12}
29 XCKU115 {0x0390D093 12}
30 XCVU125 {0x0392D093 12}
31 XCVU5P {0x04B2B093 12}
32 XCVU7P {0x04B29093 12}
33 XCVU160 {0x03933093 18}
34 XCVU190 {0x03931093 18}
35 XCVU440 {0x0396D093 18}
36 XCVU9P {0x04B31093 18}
37 XCVU11P {0x04B49093 18}
38 XCVU13P {0x04B51093 24}
41 if { ![info exists CHIP] } {
42 error "set CHIP to one of "[concat [array names _XCU_DATA]]
45 if { ![llength [array names _XCU_DATA $CHIP]] } {
46 error "unknown CHIP: "$CHIP
49 set _EXPID [lindex $_XCU_DATA($CHIP) 0]
50 set _IRLEN [lindex $_XCU_DATA($CHIP) 1]
52 # the 4 top bits (28:31) are the die stepping/revisions. ignore it.
53 jtag newtap $_CHIPNAME tap -irlen $_IRLEN -ignore-version -expected-id $_EXPID
55 pld device virtex2 $_CHIPNAME.tap 1
57 set XCU_JSHUTDOWN 0x0d
62 proc xcu_program {tap} {
63 global XCU_JSHUTDOWN XCU_JPROGRAM XCU_JSTART XCU_BYPASS
64 irscan $tap $XCU_JSHUTDOWN
65 irscan $tap $XCU_JPROGRAM
67 #JSTART prevents this from working...
68 #irscan $tap $XCU_JSTART
70 irscan $tap $XCU_BYPASS