
Recently, many people in the group have encountered the above situation, which has been quite puzzling. I had never faced such a situation before. If it were a common issue, there would surely be feedback on the official website. If it is a very specific case, then it can only be treated as a bug.
Fortunately, many people have reported similar issues on the official website. Here are the problems and solutions:
https://www.xilinx.com/support/answers/66954.html (You can also read the original text for reference)
The reason for this issue:
The following behavior is a new feature of the Vivado 2016.1 Hardware Manager (still a new feature, buzzing…): When the board is powered off or the cable connection is disconnected, Vivado will close the hardware target in the Hardware Manager.
After re-powering the board or reconnecting the cable, Vivado will now automatically attempt to reopen the hardware target in the Hardware Manager.
In addition to reopening the hardware target, the Hardware Manager will also attempt to refresh all device registers, including reading the configuration status register.
Due to this new behavior, if all of the following conditions are met, you may experience intermittent configuration failures:
- Using any configuration interface other than JTAG (we are using FLASH)
- The Vivado Hardware Manager is open while connected to a Digilent or Xilinx USB programming cable
- The board is powered on or is in the process of powering on
(The above description is what we refer to; when connected to the JTAG downloader, the FPGA does not load the program from flash, essentially the same issue)
If any configuration interface (other than JTAG) is used and the JTAG cable is also connected, the automatic detection of the JTAG chain and/or register reads may interrupt the configuration, and the configuration will not complete after powering on or rebooting.
For more details, please refer to(UG908).
This issue may occur in the following three scenarios (it must occur in the above situations):
- The device is powered on or rebooted. The pulse PROGRAM_B does not cause this issue because the Vivado Hardware Manager does not see the cable disconnection and performs cable auto-detection.
- The user issues the “refresh_hw_devices” command
- The user inserts the JTAG cable
Solutions:1. Avoid the situation by using the Vivado_init.tcl script:1) Create a new Vivado_init.tcl script and add the following content:
set_param labtools.auto_update_hardware 0
2) Place the script in:installdir/Vivado/version/scripts/Vivado_init.tcl directory. installdir is the installation directory of the Vivado Design Suite. Alternatively, add a local user directory:
- For Windows 7: %APPDATA%/Roaming/Xilinx/Vivado/Vivado_init.tcl
- For Linux: $HOME/.Xilinx/Vivado/Vivado_init.tcl
If both locations exist, Vivado will first retrieve the file from the installation directory, then from your home directory.
For more information, see the chapter “Loading and Running Tcl Scripts” in the Vivado Design Suite User Guide (UG894).
http://www.xilinx.com/cgi-bin/docs/rdoc?v=latest;d=ug894-vivado-tcl-scripting.pdf2. Disconnect the cable before powering on or rebooting.3. Slow down the polling frequency.For example, to poll once an hour, start the hw_server with the following option:
hw_server -e "set jtag-poll-delay 3600000000"
This command should be called in the CMD window instead of the Vivado Tcl console.
4. Follow these steps to close and reopen the target in JTAG mode to prevent any polling, then return to normal mode:1) Close and reopen the target in JTAG mode:
set tmp_target [ get_hw_targets -filter { IS_OPENED == 1 }]
close_hw_target $tmp_target
open_hw_target -jtag_mode on $tmp_target
set_property LOCK true [get_property HW_JTAG $tmp_target]
2) After the software starts, return to normal mode:
set_property LOCK false [get_property HW_JTAG $tmp_target
close_hw_target $tmp_target
open_hw_target $tmp_target
I have tried the first method and loaded using both methods of Vivado_init.tcl, and the issue can be resolved.
I also tried closing Vivado during the power-up process (preventing JTAG from working), and it started normally as well. Others can try various methods.
The official handling method has certain portability and limitations, each with its pros and cons. I wonder what everyone thinks.

NOW let’s take action!