Xilinx系列软件Bug及解决方案集锦
Xilinx系列软件Bug及解决方案集锦
最近使用Vitis系列在ZYNQ-7000上开发,遇到的Bug众多且匪夷所思。官方文档对大部分关键信息都一笔带过,support forum上只有同样烦躁的用户抱团取暖。真的很讨厌这种垄断公司的巨无霸软件。
因此将自己遇到的各种bug汇集于此,为改善搜索环境尽一份力。
以下Bug与解决方案仅在Vitis/Vitis HLS/Vivado 2020.2 on Windows上验证。
Vitis HLS无法导出IP
现象
在使用Vitis HLS综合成功后导出为IP(Export RTL)时发生错误:
|
|
原因
“千年虫”同款。Vitis HLS 内部脚本使用32位有符号整数存储当前时间戳作为导出IP的revision,且以YYMMDDHHmm形式,例如上述报错中的revision 2311221433代表2023年11月22日14:33。
众所周知32位有符号整数的最大表示值为2147483647,所以只要在22年及之后使用这个版本的Vitis HLS导出IP,都会因为时间戳超出表示范围而报错。
解决方案
Xilinx官方已给出补丁,详见Xilinx的说明
下载上面链接页面底部提供的y2k22_patch-1.2.zip
,解压得到y2k22_patch文件夹,复制到Xilinx安装目录下,即[install path]/Xilinx/y2k22_patch
,
而后在Xilinx安装目录打开powershell。根据y2k22_patch/README
内的版本说明执行。
例如,使用Vivado 2020.2自带的python执行补丁程序:
|
|
完成后再导出IP就不会报错了。
包含自定义IP的BSP在Vitis无法通过编译
自定义IP包括使用HLS生成的IP和用户在Vivado中创建并打包的IP。此处以HLS生成IP为例。
现象
在Vivado中设计ZYNQ的PL端硬件,如果其中使用了HLS生成的IP,或是用户自己打包的IP,导出硬件到Vitis后,在工程编译时会报错,输出(此处自定义IP名称为image_filter):
|
|
原因
参考这篇Xilinx支持论坛的帖子,虽然遇到的情况与上面链接中略有不同但类似。
查看export/<ip_name>/drivers/<ip_name_vx.x>/src/Makefile
对应内容:
|
|
根据报错:
|
|
可见make将#echo ....
的注释行错误地当作指令运行了。测试了原生linux上的make并不会出现此问题,推测可能是Vitis Shell内置环境的make问题。
解决方案
找到HLS导出IP对应的export/<ip_name>/drivers/<ip_name_vx.x>/src/Makefile
,将其中的Makefile有关echo行取消注释,然后保存。如果生成的IP不止在本机使用,则同时也需要修改IP对应zip压缩包里的Makefile,且每次导出IP都需要修改。
此时回到vivado的Block Design会提示IP有更新,点击report ip status后可以在下方底栏查看,选中IP然后点击底部的upgrade ip selected
按钮就会自动更新。
然后需要重新generate product,综合、实现和生成比特流,并Export Hardware。
Vitis中:
右键platform project,选择update hardware specification,然后选择更新后的xsa文件。
然后打开platform.prj,在项目BSP Setting页面选择Reset BSP Settings,此时Vitis才会删除所有已有的IP driver头文件,重新载入修正后的driver。
Vitis程序中Xil_printf无法输出64位数据
现象
在VItis编写ZYNQ arm核运行的程序时,若使用xil_printf尝试输出64位整数,可能出现输出空白或者输出错误数字。
例如常见的使用xtime_l.h进行运行时间计数:
|
|
此处使用xil_printf尝试输出elapsed_time,其类型为XTime,查看定义后就是64位无符号整数,但程序执行时在对应位置只会输出空白。
原因
xil_printf
不支持64位整数输出,surprise!
解决方案
参考来自2008年的支持论坛帖子,换用stdio.h的printf。这问题十五年来居然一直没有更新或者修复,叹为观止!
Doc Nav无法打开文档
现象
在Vivado中打开IP配置页面,点击Product Guide时,DocNav显示白屏,或者报错invalid or corrupted pdf file
。
原因
未知。
解决方案
独立安装最新版本的DocNav,下载页面
然后打开DocNav,切换到Catalog View,点击Update Catalog,等待更新为up to date。
新版本的DocNav仍然可以兼容旧版本的Vivado,并且在Vivado中打开文档也会正常唤起。