# 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 }