Vivado中综合,实现,编程和调试工程可能会出现的问题及解决方案
Xilinx公司的IDE(集成开发环境) Vivado用处广泛,学会使用Vivado对FPGA的学习至关重要,这里以PRX100-D开发板为例,对Vivado的学习使用进行探讨。本文将会持续更新,列出一些常见的Vivado使用过程中出现的问题,供大家参考。
在Vivado使用过程中 出现的问题,主要会分为以下几类:
- 与Vivado软件本身相关的问题
- Vivado综合,仿真,实现过程中出现的问题
- 编程和调试PRX100-D开发板注意事项
1.与Vivado软件本身相关的问题
- Vivado在添加新的工程/HDL文件后会自动崩溃退出
这一问题出现在2018.2版本中。Xilinx官方网站上说明在2017.1版本后都出现过该问题。该问题的出现可能是与srcscanner.exe(用于刷新工程文件的hierarchy结构) 和低端的启动库有关。解决方法为先尝试重启系统,如果不能解决这个问题,可以尝试安装Xilinx提供windows操作系统下的boot可执行文件,文件在bootSharedDirFixApp.zip(附在文后)里面。直接解压缩和执行就能解决这个问题。
- Vivado出现内部异常,如图1.1所示

图1.1 Vivado出现内部异常
导致内部异常的原因有很多,但是可行的解决方法有非常直接的,经测试后可行的就是关闭Vivado窗口,再次重新打开。
2.Vivado综合,仿真,实现过程中 出现的问题
- 在Vivado综合时,出现如图2.1所示错误

图2.1 Vivado综合错误
图2.1显示了没有错误信息,只有警告信息,但是工程综合失败。这种情况可能是由于工程的路径名上出现了中文导致的。所以可以将工程路径全改成由英文/数字/下划线组成。Vivado只支持由Ascii字符组成的名字,包括:A-Z,a-z,0-9和下划线。
- Vivado错误:Vivado [Common 17-180] Spawn failed: No error
这个错误出现的原因是工程的路径名太长,超过了80个字符。解决方法也很简单,缩短工程路径即可。
- Vivado在编写和genvar有关的代码时,出现的错误:[Synth 8-196] conditional expression could not be resolved to a constant
错误原因不明,也没有官方的解决方法,已知都是与genvar有关。尝试过有效的解决方式是将声明的genvar的名字更改的更特别,比如从genvar u换成genvar uu_var。
- Vivado综合时出现错误:[Synth 8-3352] multi-driven net…
在使用D flip-flop时,错误将输出Q端在不同的代码块内被赋值了两次。简易的D flip-flop如图2.2所示。解决办法是把两次不同的赋值集中到一个代码块,并且添加不同的条件限制,使其不是同时被执行。

图2.2 D flip-flop简单示意图
- Vivado仿真出现错误:ERROR: [Simulator 45-7] No such file ‘C:/FII_RISCV_V2.01_2020_0724/FII_RISCV_V2.01.srcs/sources_1/new/cpu_sys/fii_rv32i_core.v’ in the design.
错误出现原因是将工程转移到了另外的文件路径下。解决方法有以下几种:
- 换一种文件途径名,避免出现不支持的字符,比如空格,中文等
- 挪回原来的文件夹
- 重启工程/仿真
- 删掉C:\FII_RISCV_V2.01_2020_0724\FII_RISCV_V2.01.sim\sim_1\behav\xsim(这里是示例文件途径,可针对性自己的文件途径修改)
经过测试,最后一种方法解决了这个问题。
- Vivado仿真出现错误:ERROR: [XSIM 43-3322] Static elaboration of top level Verilog design unit(s) in library work failed.
在网上查询得到的是Vivado软件的错误,但实际测试后发现,该错误出现的原因是仿真读取十六进制数据时(使用的是readmemh),模块的路径错误。已知readmemh的用法如下:
reg [<memory_width>] <reg_name> [<memory_depth>]; initial
$readmemh ("<file_name>", <reg_name>, <start_address>, <end_address>);
实际用法如下所示,在将红体标记的路径改正后,可以正常进行仿真:
localparam FILE_NAME = "../../../f_seg.HEX";
integer file_handle = 0;
initial begin
file_handle = $fopen(FILE_NAME,"r");
if(!file_handle)
begin
$display("Could not open File \r");
$stop;
end
$readmemh (FILE_NAME, fii_cpu_sys_inst.fii_riscv_cpu_inst.fii_rv32i_core_inst.fii_instr_rib_inst.program_inst.inst.native_mem_module.blk_mem_gen_v8_4_1_inst.memory); $fclose(file_handle);
end
3.编程和调试PRX100-D开发板注意事项
- 连接到JTAG后,在Vivado中找不到相应的硬件
可能原因有PRX100-D上JTAG的跳线位置不对,注意在图3.1所示的跳线中,应当连接内部JTAG,也就是2-3。并使用对应的线连接上PRX100-D和电脑。

图3.1 JTAG跳线
还有一种可能是连接JTAG和电脑的线缆供电不足,这种情况可以通过用外部12V电源供电的方式,如图3.2所示,将电源线接到电源口,并且将电源跳线连接EXT-5V和PWR_5V(用连接JTAG和电脑的线供电时,需要将电源跳线跳到USB_5V和PWR_5V),如图3.3所示,即可缓解单根JTAG到电脑线的供电不足问题。也可以尝试同时连接JATG端口,UART端口和电脑,用两根线缆同时供电。

图3.2 电源接口

图3.3 电源选择跳线
最后,注意在连接好PRX100-D和电脑后,需要将开发板的电源按钮按下启动。电源启动按钮如图3.4所示。

图3.4 电源启动按键
- 连接到UART接线后,在windows下的设备管理器下没有出现相应的端口。
正确的设备管理器发现UART接线的情况,如图3.5所示。但可能有少数情况下,UART的硬件无法被windows系统发现,这时,则需要重新安装CP210x的驱动程序,可以从Silicon Lab上官方网站上下载(点击这里到相应的界面)对应的驱动。

图3.5 设备管理器中出现正常的UART接线
- Vivado错误:ERROR: [Common 17-70] Application Exception: CORE_LOCATION mismatch
错误出现的步骤一般是在添加debug core后上板调试时,错误原因不明。Xilinx官方技术人员提供的解决方法都没有效果。实际有效的操作为关闭Vivado窗口,再次重新打开。
4.文章参考
[1] Xilinx官方论坛:https://www.xilinx.com/support.html
Vivado中综合,实现,编程和调试工程可能会出现的问题及解决方案的更多相关文章
- 脚本编程中的test、bash调试、变量计算、参数
脚本编程中的test.bash调试.变量计算.参数 1.文件测试 -e FILE:测试文件是否存在 -f FILE:测试文件是否为普通文件 -d FILE:测试路径是否为目录 -r FILE:测试当前 ...
- ddr3调试经验分享(一)——modelsim实现对vivado中的MIG ddr3的仿真
Vivado中的MIG已经集成了modelsim仿真环境,是不是所有IP 都有这个福利呢,不知道哦,没空去验证. 第一步:使用vivado中的MIG IP生成一堆东西 ,这个过程自己百度.或者是ug5 ...
- Vivado中debug用法
Vivado和ISE相比ChipScope已经大幅改变,很多人都不习惯.在ISE中称为ChipScope而Vivado中就称为in system debug.下面就介绍Vivado中如何使用debug ...
- Tcl在Vivado中的使用
http://blog.chinaaet.com/detail/36014 Vivado是Xilinx最新的FPGA设计工具,支持7系列以后的FPGA及Zynq 7000的开发.与之前的ISE设计套件 ...
- Vivado中ILA的使用
Vivado中ILA的使用 1.编写RTL代码 其中需要说明的是(* keep = "TRUE" *)语句的意识是保持cnt信号不被综合掉,方便以后的调试,是否可以理解为 ...
- vivado中设置多线程编译
VIVADO中一个run编译时支持的线程数如下表:(综合时一般是2线程) Place Route Windows默认 2 2 Linux默认 4 4 Windows开启maxThreads=8 4 4 ...
- 73.Vivado使用误区与进阶——在Vivado中实现ECO功能
关于Tcl在Vivado中的应用文章从Tcl的基本语法和在Vivado中的应用展开,继上篇<用Tcl定制Vivado设计实现流程>介绍了如何扩展甚至是定制FPGA设计实现流程后,引出了一个 ...
- 初探Delphi中的插件编程
前言 我写Delphi程序是从MIS系统入门的,开始尝试子系统划分的时候采用的是MDI窗体的结构.随着系统功能的扩充,不断有新的子系统加入系统中,单个工程会变得非常大,每次做一点修改都要重新编译,单个 ...
- Apache Beam中的函数式编程理念
不多说,直接上干货! Apache Beam中的函数式编程理念 Apache Beam的编程范式借鉴了函数式编程的概念,从工程和实现角度向命令式妥协. 编程的领域里有三大流派:函数式.命令式.逻辑式. ...
- Java中的网络编程
Java中的网路编程主要是Java的Socket编程,属于JavaEE中的高级的部分,以下内容是对java网路编程的一个小结,代码都是经过编译调试的 C/S程序应用:客户/服务器模式,如QQ客户端 ...
随机推荐
- Unity 关于可寻址资源系统Addressables的使用和理解(一) 准备工作
一.打开Unity的PackageManager,安装Addressables包 二.打开分组面板,对未来要分类的资源包进行分组,并对组进行设置. 1.菜单栏选择Window/AssetManagen ...
- [Oracle19C 数据库管理] 用户与权限管理
用户管理 用户具有以下属性: 用户名: 不能超过30位.不能包含特殊字符.必须用字符开头.用户名不区分大小写. 认证方式: 最常见的是密码认证. 默认永久表空间: 控制用户可以在哪个表空间里创建对象. ...
- Maven3.6.1 (转载大佬文章)
(30条消息) Maven3.6.1安装及配置_浅若清风过的博客-CSDN博客 1.下载https://archive.apache.org/dist/maven/maven-3/3.6.1/bina ...
- 自考网络原理:安全套接字层SSL
对ssl/tls的理解 前:SSL; 后:TLS: 以下是B站上的up主讲的,非常的深入浅出,讲的很好.感谢技术蛋老师. https://www.bilibili.com/video/BV1KY411 ...
- OceanBase使用OBLOADER、OBDUMPER进行导入导出
需求背景 需要定时给OB进行数据备份,并且在需要时可以全量导入,所以只能通过脚本来减少手动操作的繁琐. 脚本示例 导出脚本 #!/bin/bash # 这一步不能省,如果不设置定时运行时可能会有问题 ...
- APP对接支付宝付款
1.支付宝开发平台:https://openhome.alipay.com/ 2.进去沙箱,配置支付密钥 记录下appid,然后设置秘钥; 3.后端代码,配置类 pom文件sdk添加依赖 <! ...
- re的finditer()
在前面学习了findall()函数,它可以一次性找到多个匹配的字符串,但是不能提供所在的位置,并且是一起返回的,如果有数万个一起返回来,就不太好处理了,因此要使用finditer()函数来实现每次只返 ...
- TS 之 reduce
一.函数介绍 Array.reduce()方法是对数组进行遍历,返回一个计算后的值 使用方法: Array.reduce((acc, cur, idx, src) => { }, initial ...
- vector 搜罗最强版
vector 常见用法(以int类型为例) https://www.cnblogs.com/YJthua-china/p/6550960.html 概括描述总体vector,包括内存的探讨 https ...
- Safari高级使用
Safari是苹果公司为旗下设备开发的一款强大的浏览器不论是iPhone还是iPad亦或是MAC OS上都能使用.但是针对不同的系统,Safari也有一定的改动.那么在MacOS中如何使用Safari ...