Vivado错误提示可能的解决方法
时间 | 版本 | 内容 |
---|---|---|
2024/03/20 | V0 | 初版 |
只记录实际造成影响的报错。实际上Vivado项目编译后不可能没有Warning,很多都是不用处理的。
Simulator
Error
[Simulator 45-1] A fatal run-time error was detected. Simulation cannot continue.
此错误表示仿真时间出了问题。最常见的问题就是,出现了类似always #0 clk=~clk;
这样的0延时循环。
Synthesize
Critical Warning
[Synth 8-196] conditional expression could not be resolved to a constant
此警告直接指向某个generate块。但是这不代表generate有错,错误往往是被generate的模块内部出了问题。
[Synth 8-3352] multi-driven net
此警告表示某个变量有多个驱动源。可能有如下情况:
- 一个变量在多个always块中充当左值(被赋值的)变量。这样的Verilog有问题,应该给予纠正。
- 端口的方向定义错误。比如在底层模块中定义a是input,但是顶层调用时给它接了b端口,定义是output。这样方向不匹配就会出现该问题。
- 某些IP可能就是会导致这样的问题[1]。
[Vivado 12-1815] setting property 'IOSTANDARD' is not allowed for GT terminals
此警告表示对不允许定义电平的管脚定义了电平。这种管脚往往是开发板上已存在的特殊管脚,比如时钟。
此警告只会出现在通过xdc编写管脚约束的情况下。如果在Synthesized Design中修改管脚约束并由此生成xdc文件是不会出错的。
Implement
Error
[IP_Flow 19-3805] Failed to generate and synthesize debug IPs. error copying "xxx": no such file or directory
此错误表示创建ila即debug core时出现错误,具体不详。
以下是网上给出的几种可能原因:
- 路径名称过长(排除)
- debug网络太多,资源不够(有可能)
- Vivado某种bug,restore重启即可[2](不太可能,因为短时间内反复出现了)
- ip文件在编译过程中被动了(看看自己有没有用类似于git的同步软件)
- Vivado软件有问题
在我用笔记本电脑时会反复出现该问题,用其他电脑不会有问题。因此我怀疑Vivado程序有错误,于是重装软件,没有再遇到这个问题。
这很可能是因为我之前对电脑进行了磁盘合并操作,将D+E并为D,尽管Vivado装在D盘,还是受到了影响。
[chipscope 16-331] dcp file did not get generated for instname : dbg_hub
此错误表示没有生成某个ip的dcp网表文件。
可能有如下原因:
- IP out of context
- PC性能不足(尤其是内存不足),尝试重启PC或降低IP规模
[Place 30-574] Poor placement for routing between an IO pin and BUFG. If this sub optimal condition is acceptable for this design, you may use the CLOCK_DEDICATED_ROUTE constraint in the .xdc file to demote this message to a WARNING. However, the use of this override is highly discouraged. These examples can be used directly in the .xdc file to override this clock rule
此错误表示一个时钟管脚被接到了一个普通IO上,从而使得布局布线出现问题。解决方法:
-
将时钟信号换到时钟专用管脚上[3]。
-
强行将Error降级为以完成implement。语法为
< set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets xxx_IBUF] >
-
通过FPGA内部的某种BUF将该信号在FPGA内部接到时钟专用网络上。
实际上,只要Vivado识别了这是一个时钟信号,就会用各种方式将时钟连到全局时钟网络上。所以如果时钟信号连接到了普通IO管脚上,Vivado也会通过BUFG(参看ug472)将时钟链接到全局网络上。因此是否显式地将BUFG写出来似乎没有影响,结果是一样的。
Vivado综合给出的结构一般是:pin->IBUF->BUFG,可以手工插入以上结构,并配合dont_touch属性可以定义网络名称。get_nets
对应的网络是IBUF之后、BUFG之前的网络名称。
Run
Warning
[Labtools 27-3413] Dropping logic core with cellname:'u_ila_0' at location...
此警告表示实际上ila IP核没找到,ila也就是debugcore[4]。
最可能的情况就是给ila的时钟是不存在的,是一个需要条件才出现的时钟,或者是一个外部input管脚输入的时钟却没有输入。
Error
[Labtools 27-3733] Error during cs_server initialization: Failed to connect cs_server at TCP:localhost:3042 to hw_server at TCP:localhost:3121
此错误[5]出现在Open Target的时候。
首先检查JTAG连线和电源,如果没问题不应该连不上。
错误的发生原因未知,重启localhost(即PC)之后解决。
[Labtoolstcl 44-513] HW target shutdown... 尽管FPGA开发板是打开并完好连接的
此错误出现在某次修改逻辑,生成新的bit文件并尝试烧入新的bit文件时。之后每次尝试烧写都会错误,但是实际上板子并没有掉电。
原因未知,重启PC后解决。
[Labtools 27-3361] hw_server failed during internal command
该错误说明hw_server无法通过JTAG连接。根据[6]的提示,该问题很可能是来源于:debug core的时钟频率不比JTAG频率高太多。根据Vivado的建议,debug core时钟频率至少要是JTAG的2.5倍以上。
可以通过手动Connect New Target来改变JTAG频率,这是不修改逻辑情况下的最佳办法。JTAG慢一点意味着要等更长时间才能加载完成debug core波形,但这并没有什么影响。
2022.1 - Vivado_Synthesis - HBM - CRITICAL WARNING: [Synth 8-6859] multi-driven net on pin hbm_ref_clk0_0_clk_n[0] (xilinx.com) ↩︎
[IP_Flow 19-3805] Failed to generate and synthesize debug IPs. (xilinx.com) ↩︎
Vivado 报错:[Place 30-574] Poor placement for routing between an IO pin and BUFG.-CSDN博客 ↩︎
vivado----fpga硬件调试 (五) ----找不到ila核问题及解决_xicom 50-38-CSDN博客 ↩︎
[Labtools 27-3733] Error during cs_server initialization: Failed to connect cs_server at TCP:localhost:3042 to hw_server at TCP:localhost:3121. Getting this issue. How to connect target automatically. I was able to auotconnect and program before. (xilinx.com) ↩︎
【vivado】ILA调试报错 The debug hub core was not detected 以及 Data read from hw_ila [hw_ila_1] is corrupted. Unable to upload waveform. - KevinChase - 博客园 (cnblogs.com) ↩︎