很幸运,官网有很多人反馈类似的问题,先把问题和解决方式放出来:
出现这个问题的原因:
以下行为是Vivado2016.1硬件管理器的新增功能(还是新功能,滋滋...):当板断电或断开电缆连接时,Vivado将在硬件管理器中关闭硬件目标。
重新打开板电源或重新连接电缆后,Vivado现在将自动尝试在HardwareManager中重新打开硬件目标。
除了重新打开硬件目标之外,硬件管理器还将尝试刷新所有设备寄存器,包括读取配置状态寄存器。
由于此新行为,如果满足以下所有条件,则可能会看到间歇性配置失败:
使用JTAG以外的任何配置接口(我们使用的是FLASH)
Vivado硬件管理器在连接Digilent或XilinxUSB编程电缆的情况下打开
电路板上电或正在上电
(上面描述的就是我们说的;在JTAG下载器连接时FPGA不加载flash里的程序,基本就一样不差)
如果使用了任何配置接口(JTAG除外),并且还连接了JTAG电缆,则JTAG链自动检测和/或寄存器读取可能会中断配置,并且在加电或重启后将无法完成配置。
有关更多详细信息,请参阅(UG908)。
在以下三种情况下可能会发生此问题(上面情况时必发生的):
设备上电或重启。脉冲PROGRAM_B不会导致此问题,因为Vivado硬件管理器看不到电缆断开连接并执行了电缆自动检测。
用户发出“refresh_hw_devices”命令
用户插入JTAG电缆
解决办法:
一、通过Vivado_init.tcl脚本避免情况发生
1)新建一个Vivado_init.tcl脚本,添加一下内容:
set_paramlabtools.auto_update_hardware0
2)将脚本放到:
installdir/Vivado/version/scripts/Vivado_init.tcl
目录下
installdir是VivadoDesignSuite的安装目录。
或者
添加本地用户目录:
对于Windows7:%APPDATA%/Roaming/Xilinx/Vivado/Vivado_init.tcl
对于Linux:$HOME/.Xilinx/Vivado/Vivado_init.tcl
如果这两个位置都存在Vivado_init.tcl,则Vivado首先从安装目录中获取文件,然后从您的主目录中获取文件。
有关更多信息,请参见《(UG894)VivadoDesignSuite用户指南中的使用Tcl脚本》中的“加载和运行Tcl脚本”一章。
二、在加电或重新启动电源之前,请拔下电缆。
三、减慢轮询的发生。
例如,每小时轮询一次,请使用以下选项启动hw_server:
ThiscommandshouldbecalledintheCMDwindowinsteadofVivadoTclconsole.
四、按以下步骤在JTAG模式下关闭并重新打开目标,以防止发生任何轮询,然后恢复到正常模式:
1)在JTAG模式下关闭并重新打开目标:
settmp_target[get_hw_targets-filter{IS_OPENED==1}]
close_hw_target$tmp_target
open_hw_target-jtag_modeon$tmp_target
set_propertyLOCKtrue[get_propertyHW_JTAG$tmp_target]
2)软件启动后,恢复到正常模式:
set_propertyLOCKfalse[get_propertyHW_JTAG$tmp_target
open_hw_target$tmp_target
我试过第一种方式,同时用两种方式加载了Vivado_init.tcl,问题可以解决。
也试过在重新上电的过程中关闭Vivado(不让JTAG工作),也是可以正常启动的,其他方式大家可以多去尝试。
官方这种处理方式有一定便携性和局限性,各有优缺点,不知道大家怎么看。