最近在学习HLS语言,所以就自己摸索尝试了用HLS实现了图像二值化,把这个内容总结一下,分享出来。
首先打开HLS,然后新建一个Project,之后再在Source栏点击右键,选择New File...,创建名为pixelBinary.cpp和pixelBinary.h这两个文件。
这个是pixelBinary.cpp文件的内容:
#include
这个是pixelBinary.h文件的内容:
#ifndef _PIXELBINARY_H_
有了这两个文件之后,就可以进行综合了,这里首先要进行顶层函数定义,Project -> Project Settings -> Synthesis -> 在Top Function那里选择hlsMain,点击OK进行确定。然后点击HLS界面的C Synthesis,如下是综合完的结果。
从综合结果可知,pixelBinary的Latency和Interval的值是一样的,都是50235,我们的图片尺寸是184*273 = 50232,Latency和Interval的值比图片像素数多3,关于Latency和Interval具体的含义,我还是没有很明白,这两个值到底是怎么来进行计算的,等弄明白了再来分享。
这是一个综合的结果,也就是把我们的HLS代码综合成了Verilog或者VHDL代码了,你再solution下面的syn文件夹下就可以看到生成的Verilog或者VHDL代码了。
然后接下去是仿真,在TestBench下新建文件,文件名为testbench.cpp,代码为:
#include
这个仿真代码的意思就是读取图像,然后进行处理,并将处理完的结果输出,为了能够仿真,需要在TestBench下添加图像文件,图像文件名为input_image.png,最后会输出output_image.png这么一个图像。如下分别为输入图像数据和输出图像数据,最终生成的图像数据在 .solution_pixelBinarysimwrapc文件夹下
但其实呢,我觉得这样的testbench并不好,看过Example里的TestBench,写法都是Software的结果和Hardware的结果进行对比,如果能对上,就说明写的代码没问题,不过图像处理的话,直接看处理后的图像差不多也行。