ZYNQ HLS工具系列(一) HLS图像处理入门
来源:互联网 发布:查看informix端口 编辑:程序博客网 时间:2024/05/16 00:33
ZYNQ开发之HLS图像处理入门
HLS(High Level Synthesis)即高层次综合,和以前Verilog及VHDL不一样,通过它可以用C/C++、SystemC及OPENCL编写FPGA程序,实现相应功能,大大加快开发的速度,使软件工程师可以参与到项目中,使硬件工程师可以增加工作效率
OPENCV是开源计算机视觉库,支持C/C++、PYTHON等多种语言,OPENCV的设计可以直接运行在ZYNQ的PS上,但是用ARM处理高清视频处理的时候,可能就会处理不过来。于是HLS OPENCV就这样出现了(硬件加速),HLS Opencv是HLS自带的、可综合成HDL的OpenCV库函数(因为并不是所有的OpenCV库函数都可以综合成HDL),HLS OPENCV具体的函数操作方法,将写在理论系列(一) HLS OPENCV函数,本文主要是针对HLS的入门操作
一、运行环境
这个HLS的版本很重要!!!
之前尝试用HLS普通的仿真没问题,但是对图像进行C仿真(调用HLS带的函数),仿真编译的时间就很长,而且结果报错:
cc1plus.exe:-1: error: out of memory allocating ……
解决方法:不要使用2017.1和2017.2的HLS,降到2016.4,或者升级到2017.3(本文2017.3)
二、搭建HLS工程
1.新建工程,根据向导设置相关参数
新建工程的最后一步,新建了一个solution1,时钟周期就默认10ns,然后选择芯片型号,完成工程的创建2.新建文件
新建三个文件test.cpp(测试文件)、image_core.cpp(算法核心)以及image_core.h,文件内容
test.cpp:
#include "image_core.h"#include "opencv/cv.h"#include "opencv/cxcore.h"#include "opencv/highgui.h"#include "hls_opencv.h"#define INPUT_IMAGE "test.jpg"int main (int argc, char** argv) { IplImage* src = cvLoadImage(INPUT_IMAGE,0);//读图片灰度 IplImage* dst = cvCreateImage(cvGetSize(src), src->depth, src->nChannels); AXI_STREAM_IN src_axi; AXI_STREAM_OUT dst_axi; IplImage2AXIvideo(src, src_axi); //将图像转为数据流 image_core(src_axi, dst_axi, src->height, src->width);//输入数据流,进行处理,输出数据流 AXIvideo2IplImage(dst_axi, dst); //将输出流转回图片 cvShowImage("src",src); cvShowImage("dst",dst); cvWaitKey(0); cvReleaseImage(&src); cvReleaseImage(&dst); return 0;}
image_core.cpp:
#include "image_core.h"void image_core(AXI_STREAM_IN& input, AXI_STREAM_OUT& output, int rows, int cols){ #pragma HLS RESOURCE variable=input core=AXI4Stream metadata="-bus_bundle INPUT_STREAM" #pragma HLS RESOURCE variable=output core=AXI4Stream metadata="-bus_bundle OUTPUT_STREAM" #pragma HLS INTERFACE ap_none port=cols #pragma HLS INTERFACE ap_none port=rows #pragma HLS interface ap_ctrl_none port=return RGB_IMAGE img_0(rows, cols); RGB_IMAGE img_1(rows, cols); #pragma HLS DATAFLOW // must use data flow to stream the data hls::AXIvideo2Mat(input, img_0); //读输入到img_0 hls::Sobel<1,0,3>(img_0, img_1); //Sobel算子,边缘提取 hls::Mat2AXIvideo(img_1, output); //img_1写到输出}
image_core.h:
#ifndef _IMAGE_CORE_H_#define _IMAGE_CORE_H_#include"hls_video.h" //调用可以综合的视频库//图像最大尺寸#define MAX_WIDTH 800#define MAX_HEIGHT 600//定义图像处理核,要用到的结构体typedef hls::stream<ap_axiu<24,1,1,1> > AXI_STREAM_IN;typedef hls::stream<ap_axiu<24,1,1,1> > AXI_STREAM_OUT;typedef hls::Mat<MAX_HEIGHT, MAX_WIDTH, HLS_8UC3> RGB_IMAGE;//硬件综合的顶层void image_core(AXI_STREAM_IN& src_axi, AXI_STREAM_OUT& dst_axi, int rows, int cols);#endif
3.添加文件到相应位置
将上述三个文件放在工程目录下,然后如图添加:
h文件,不需要添加,放在工程目录下即可4.运行仿真
点击Run C Simulation按钮,然后直接点确定
按空格键,关闭图片5.生成IP核
点击Run C Synthesis,综合完毕后,然后点击Export RTL
生成完毕后,即可通过VIVADO调用HLS的IP核(image_core)
- ZYNQ HLS工具系列(一) HLS图像处理入门
- ZYNQ HLS图像处理加速总结(一)——FPGA硬件部分
- HLS图像处理系列——前言
- HLS图像处理系列——肤色检测
- ZYNQ HLS图像处理加速总结(二)——Processing System软件部分
- Vivado HLS(zynq TRD)源码分析
- HLS学习(一)HLS介绍
- zynq开发之HLS
- 文章标题Vivado HLS(2015.4版本)使用教程(zynq 7010系列)
- HLS图像处理系列——在ZEDBoard搭建DDR图像处理通路
- 在Zynq AP SoC设计中使用HLS IP(一)
- HLS
- HLS
- hls
- HLS
- HLS
- HLS
- hls心得(2)-关于hls处理浮点数运算
- RecyclerView的加载显示多种布局
- Hessian序列化详解
- 关于项目中的http和https的分析和理解
- 自保存业务层返回bean类
- mysql workbenchd导入excel数据步骤
- ZYNQ HLS工具系列(一) HLS图像处理入门
- 陈浩技术领导力
- 任意文件读取下载漏洞
- int 取绝对值
- NPOI使用说明
- HTML 随笔记之 刷新页面
- vue使用相对路径打包,可以直接打开
- 快速USB学习
- 事件委托