xilinx-xcu.cfg 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. # SPDX-License-Identifier: GPL-2.0-or-later
  2. # Xilinx Ultrascale (Kintex, Virtex, Zynq)
  3. # https://www.xilinx.com/support/documentation/user_guides/ug570-ultrascale-configuration.pdf
  4. if { [info exists CHIPNAME] } {
  5. set _CHIPNAME $CHIPNAME
  6. } else {
  7. set _CHIPNAME xcu
  8. }
  9. # The various chips in the Ultrascale family have different IR length.
  10. # Set $CHIP before including this file to determine the device.
  11. array set _XCU_DATA {
  12. XCKU025 {0x03824093 6}
  13. XCKU035 {0x03823093 6}
  14. XCKU040 {0x03822093 6}
  15. XCKU060 {0x03919093 6}
  16. XCKU060_CIV {0x0381b093 6}
  17. XCKU095 {0x03844093 6}
  18. XCKU095_CIV {0x03845093 6}
  19. XCKU3P {0x04A63093 6}
  20. XCKU5P {0x04A62093 6}
  21. XCKU9P {0x0484A093 6}
  22. XCKU11P {0x04A4E093 6}
  23. XCKU11P_CIV {0x04A51093 6}
  24. XCKU13P {0x04A52093 6}
  25. XCKU15P {0x04A56093 6}
  26. XCKU15P_CIV {0x04A59093 6}
  27. XCVU065 {0x03939093 6}
  28. XCVU065_CIV {0x0393b093 6}
  29. XCVU080 {0x03843093 6}
  30. XCVU080_CIV {0x03845093 6}
  31. XCVU095 {0x03842093 6}
  32. XCVU2P {0x04aea093 6}
  33. XCVU3P {0x04B39093 6}
  34. XCVU3P_CIV {0x04b3d093 6}
  35. XCAU10P {0x04AC4033 6}
  36. XCAU10P_FFVB676 {0x04AC4093 6}
  37. XCAU15P {0x04AC2033 6}
  38. XCAU15P_FFVB676 {0x04AC2093 6}
  39. XCAU20P {0x04A65093 6}
  40. XCAU25P {0x04A64093 6}
  41. XCKU5P_CIV {0x04A64093 6}
  42. XCKU19P {0x04ACF093 6}
  43. XCKU19P_CIV {0x04AD3093 6}
  44. XCKU085 {0x0380F093 12}
  45. XCKU115 {0x0390D093 12}
  46. XCVU125 {0x0392D093 12}
  47. XCVU125_CIV {0x0392f093 12}
  48. XCVU5P {0x04B2B093 12}
  49. XCVU5P_CIV {0x04b2f093 12}
  50. XCVU7P {0x04B29093 12}
  51. XCVU7P_CIV {0x04b2d093 12}
  52. XCVU160 {0x03933093 18}
  53. XCVU190 {0x03931093 18}
  54. XCVU440 {0x0396D093 18}
  55. XCVU440_CIV {0x0396f093 18}
  56. XCVU9P {0x04B31093 18}
  57. XCVU9P_CIV {0x04b35093 18}
  58. XCVU11P {0x04B49093 18}
  59. XCVU11P_CIV {0x04b4f093 18}
  60. XCU200_FSGD2104 {0x04b37093 18}
  61. XCU250 {0x04b57093 24}
  62. XCVU13P {0x04B51093 24}
  63. XCVU13P_CIV {0x04b55093 24}
  64. XCVU15P {0x04ba3093 24}
  65. XCVU19P {0x04ba1093 24}
  66. XCVU19P_CIV {0x04ba5093 24}
  67. }
  68. if { ![info exists CHIP] } {
  69. error "set CHIP to one of "[concat [array names _XCU_DATA]]
  70. }
  71. if { ![llength [array names _XCU_DATA $CHIP]] } {
  72. error "unknown CHIP: "$CHIP
  73. }
  74. set _EXPID [lindex $_XCU_DATA($CHIP) 0]
  75. set _IRLEN [lindex $_XCU_DATA($CHIP) 1]
  76. # the 4 top bits (28:31) are the die stepping/revisions. ignore it.
  77. jtag newtap $_CHIPNAME tap -irlen $_IRLEN -ignore-version -expected-id $_EXPID
  78. pld create $_CHIPNAME.pld virtex2 -chain-position $_CHIPNAME.tap -no_jstart
  79. # set the correct instruction codes for jtag hub and
  80. # at least the right code for jprogb, jstart and jshutdown for SSI devices
  81. if { $_IRLEN == 6 } {
  82. virtex2 set_user_codes $_CHIPNAME.pld 0x2 0x3 0x22 0x23
  83. } elseif {$_IRLEN == 12 } {
  84. puts "loading bitstream through jtag will not work, but reprogram (refresh)"
  85. virtex2 set_instr_codes $_CHIPNAME.pld 0x905 0x904 0x2cb 0x30c 0x34d
  86. virtex2 set_user_codes $_CHIPNAME.pld 0x0a4 0x0e4 0x8a4 0x8e4
  87. } elseif {$_IRLEN == 18 } {
  88. puts "loading bitstream through jtag will not work, but reprogram (refresh)"
  89. virtex2 set_instr_codes $_CHIPNAME.pld 0x24905 0x24904 0x0b2cb 0x0c30c 0x0d34d
  90. virtex2 set_user_codes $_CHIPNAME.pld 0x000a4 0x000e4 0x008a4 0x008e4
  91. } else {
  92. puts "loading bitstream through jtag will not work, but reprogram (refresh)"
  93. virtex2 set_instr_codes $_CHIPNAME.pld 0x924905 0x924904 0x2cb2cb 0x30c30c 0x34d34d
  94. virtex2 set_user_codes $_CHIPNAME.pld 0x0a4924 0x0e4924 0x8a4924 0x8e4924
  95. }
  96. set XCU_JSHUTDOWN 0x0d
  97. set XCU_JPROGRAM 0x0b
  98. set XCU_JSTART 0x0c
  99. set XCU_BYPASS 0x3f
  100. proc xcu_program {tap} {
  101. echo "DEPRECATED! use 'virtex2 program ...' not 'xcu_program'"
  102. global XCU_JSHUTDOWN XCU_JPROGRAM XCU_JSTART XCU_BYPASS
  103. irscan $tap $XCU_JSHUTDOWN
  104. irscan $tap $XCU_JPROGRAM
  105. runtest 60000
  106. #JSTART prevents this from working...
  107. #irscan $tap $XCU_JSTART
  108. runtest 2000
  109. irscan $tap $XCU_BYPASS
  110. runtest 2000
  111. }