摘要:最近在学习VItis HLS的图像处理以及opencv的C仿真,遇到一个关于图像路径的问题。
各个文件在Vitis HLS中的层级关系如下:
在磁盘文件管理器中的文件结构如下:
└─test
│ .cproject
│ .project
│ .vitis_hls_log_all.xml
│ hls.app
│
├─.apc
│ │ autopilot.apfmapping
│ │
│ ├─.src
│ └─.tb
├─.reference
├─.settings
│ language.settings.xml
│ test.Debug.launch
│ test.Release.launch
│
├─input_img
│ SrcImage.bmp
│
├─output_img
├─solution1
│ │ directives.tcl
│ │ script.tcl
│ │ solution1.aps
│ │ solution1.directive
│ │ solution1.log
│ │
│ ├─.autopilot
│ │ │ .autopilot_exit
│ │ │ xcd.log
│ │ │
│ │ └─db
│ │ .message_csim.xml
│ │ autopilot.flow.log
│ │ dsp_style
│ │
│ ├─.tcls
│ └─csim
│ │ .lst_opt.tcl
│ │
│ ├─build
│ │ │ csim.exe
│ │ │ csim.mk
│ │ │ Makefile.rules
│ │ │ run_sim.tcl
│ │ │ sim.bat
│ │ │ SrcImage.bmp
│ │ │
│ │ └─obj
│ │ .dir
│ │ top.d
│ │ top.o
│ │ top_tb.d
│ │ top_tb.o
│ │
│ └─report
│ top_csim.log
│
└─src
top.cpp
top.h
top_tb.cpp
可以看到SrcImg.bmp是在input_img文件夹下的,所以在代码中我写的相对路径如下:
这样写是符合文件在文件管理器中的相对路径的(也是通常编程的做法),但是经过 Run C simulation后,仿真出错,并提示没有找到文件,经过反复测试都没有解决问题。。。。。
偶然点击Vitis HLS目录结构文件的propertity时:
可以看到SrcImage.bmp的path居然是/test/testbench/SrcImage.bmp,显然和实际磁盘的路径不同,实际磁盘的路径只是location,实际在Vitis HLS中文件的路径关系并不是以实际磁盘为主,而是以Vitis HLS中的导航目录为主,所以踩了一个大坑。
于是我不管图像文件在实际磁盘的目录的相对路径,而是按Vitis的中导航目录作为相对路径的参考,将../input_img/SrcImage.bmp改为./SrcImage.bmp然后运行仿真,果然正确。
所以运行C仿真时,一定要按Vitis HLS 的目录进行参考,因此一下也是可以的,尽管input_img文件夹和top_tb.cpp在实际磁盘中的相对目录关系 并不是这样。
结论:将仿真验证所需要的文件目录加入Vitis HLS中的导航目录Test Bench下,然后图像的读取相对路径以Vitis HLS导航目录文件结构为参考,不要以实际磁盘中的文件相对路径作为参考。