Zynq-7000学习笔记(六)——HLS综合FAST corner并导出IP

 Zynq-7000学习笔记(六)——HLS综合FAST corner并导出IP

PC平台:WINDOWS 10 64位

Xilinx设计开发套件:Xilinx_vivado_sdk_2015.2

开发板:Zed Board

参考文档:XAPP1167          

参考代码:XAPP1167.zip

一、打开vivado hls的GUI界面,新建一个project,top function为hls_fast_corner

二、增加top.cpp,代码如下
#include "top.h"

void hls_fast_corner(AXI_STREAM& INPUT_STREAM, AXI_STREAM& OUTPUT_STREAM, int rows, int cols, int threhold)
{
//Create AXI streaming interfaces for the core
#pragma HLS INTERFACE axis port=INPUT_STREAM
#pragma HLS INTERFACE axis port=OUTPUT_STREAM

#pragma HLS RESOURCE core=AXI_SLAVE variable=rows metadata="-bus_bundle CONTROL_BUS"
#pragma HLS RESOURCE core=AXI_SLAVE variable=cols metadata="-bus_bundle CONTROL_BUS"
#pragma HLS RESOURCE core=AXI_SLAVE variable=threhold metadata="-bus_bundle CONTROL_BUS"
#pragma HLS RESOURCE core=AXI_SLAVE variable=return metadata="-bus_bundle CONTROL_BUS"

#pragma HLS INTERFACE ap_stable port=rows
#pragma HLS INTERFACE ap_stable port=cols
#pragma HLS INTERFACE ap_stable port=threhold

hls::Mat _src(rows,cols);
hls::Mat _dst(rows,cols);
#pragma HLS dataflow
hls::AXIvideo2Mat(INPUT_STREAM, _src);
hls::Mat src0(rows,cols);
hls::Mat src1(rows,cols);
#pragma HLS stream depth=20000 variable=src1.data_stream
hls::Mat mask(rows,cols);
hls::Mat dmask(rows,cols);
hls::Scalar<3,unsigned char> color(255,0,0);
hls::Duplicate(_src,src0,src1);
hls::Mat gray(rows,cols);
hls::CvtColor(src0,gray);
hls::FASTX(gray,mask,threhold,true);
hls::Dilate(mask,dmask);
hls::PaintMask(src1,dmask,_dst,color);
hls::Mat2AXIvideo(_dst, OUTPUT_STREAM);
}

top.h如下
#ifndef _TOP_H_
#define _TOP_H_

#include "hls_video.h"

// maximum image size
#define MAX_WIDTH 1920
#define MAX_HEIGHT 1080

// I/O Image Settings
#define INPUT_IMAGE "test1.bmp"
#define OUTPUT_IMAGE "result.bmp"
#define OUTPUT_IMAGE_GOLDEN "result_golden.bmp"

// typedef video library core structures
typedef hls::stream > AXI_STREAM;
typedef hls::Scalar<3, unsigned char> RGB_PIXEL;
typedef hls::Mat RGB_IMAGE;

// top level function for HW synthesis
void hls_fast_corner(AXI_STREAM& src_axi, AXI_STREAM& dst_axi, int rows, int cols, int threhold);

#endif

增加test.cpp
#include "top.h"
#include "hls_opencv.h"
#include "iostream"

int main (int argc, char** argv) {

IplImage* src = cvLoadImage(INPUT_IMAGE);
IplImage* dst = cvCreateImage(cvGetSize(src), src->depth, src->nChannels);

AXI_STREAM src_axi, dst_axi;
IplImage2AXIvideo(src, src_axi);

hls_fast_corner(src_axi, dst_axi, src->height, src->width, 20);

AXIvideo2IplImage(dst_axi, dst);

cvSaveImage(OUTPUT_IMAGE, dst);

return 0;
}

添加一个测试图片,图片文件名必须和top.h定义的INPUT_IMAGE一样

 Zynq-7000学习笔记(六)——HLS综合FAST corner并导出IP


 Zynq-7000学习笔记(六)——HLS综合FAST corner并导出IP

三、综合

四、导出IP,在vivado可以看到如下具有接口的hls_fast_corner

 Zynq-7000学习笔记(六)——HLS综合FAST corner并导出IP

五、执行c cosimulation,测试输出的文件可以在solution1\sim\wrapc_pc目录里找到

 Zynq-7000学习笔记(六)——HLS综合FAST corner并导出IP

用户喜欢...

使用随时可用的硬件和软件开始机器学习

对于开发人员来说,机器学习(ML)硬件和软件的进步有望将这些复杂的方法带入物联网(IoT)边缘设备。然而,随着这一研究领域的发展,开发人员可以轻松地发现自己沉浸在这些技术背后的...


使用FPGA通过机器学习构建高性能嵌入式视觉应用

本文将介绍ML处理的要求以及FPGA解决许多性能问题的原因。然后,它将介绍一个合适的基于FPGA的ML平台以及如何使用它。...


使用 FPGA 构建具有机器学习能力的高性能嵌入式视觉应用

随着摄像头和其他设备产生的数据在快速增长,促使人们运用机器学习从汽车、安防和其他应用产生的影像中提取更多有用的信息。专用器件有望在嵌入式视觉应用中实现高性能机器学习 (ML...


在机器学习的应用上,软件工程师和FPGA真的有着难以逾越的鸿沟吗?

人工智能和机器学习正在渗透所有的行业。随着人工智能算法的成熟,支持这些算法的硬件平台也日趋成熟。目前,这些硬件平台包括 ASIC,CPU,GPU以及 FPGA 。在 Plunify,尽管我们的强项是F...


成为一名机器学习算法工程师,需要具备哪些技能?

成为一名合格的开发工程师不是一件简单的事情,需要掌握从开发到调试到优化等一系列能力,这些能力中的每一项掌握起来都需要足够的努力和经验。而要成为一名合格的机器学习算法工程...


Zynq学习笔记——HLS FAST corner导出keypoints(二)

PC平台:WINDOWS 10 64位 Xilinx设计开发套件:Xilinx_vivado_sdk_2015.4 开发板:ZedBoard 摄像头:OV5640 上一步导出HLS IP后,修改原来的硬件工程,其实升级一下hls_fast_corner IP就可以了,我这次用的不是...


STM32之TFT-LCD液晶学习

TFT-LCD即薄膜晶体管液晶显示器。其英文全称为:Thin Film Transistor-Liquid Crystal Display。TFT-LCD与无源TN-LCD、STN-LCD的简单矩阵不同,它在液晶显示屏的每一个象素上都设置有一个薄膜晶体管(TFT)...


Zynq学习笔记——HLS FAST corner导出keypoints(一)

PC平台:WINDOWS 10 64位 Xilinx设计开发套件:Xilinx_vivado_sdk_2015.4 开发板:ZedBoard 之前参照XAPP1167文档,使用HLS Video函数库里的FASTX跑了一下例子,当时的例子是直接把keypoint以mask方式画在了原始视...


Zynq学习笔记——一个简单的HDMI显示例子

本文介绍一个简单的HDMI显示例子: 硬件工程 效果 源码链接: 密码:kljs...


Xilinx Zynq ZC702学习总结

Xilinx zynq zc702开发: 一、zynq开发整个生态系统搭建: 1.基础资料获取: https://github.com/Xilinx/ (包括:交叉编译工具,linux kernel源码,u-boot源码, device-tree源码, qemu, gdb等等) (提供 了几乎所...


Vivado 学习笔记 (五)编写IP核并通过AXI协议与ARM通信

参考资料:xilinx大学计划 实验平台:PYNQ开发板 最近发现了一块好玩的板子,PYNQ 这块板子最大的特点就是可以将所写的IP核封装成Python库的形式,然后通过在板载的xlinux系统下用户可以选择...


Zynq学习笔记——EMIO方式模拟I2C时序对ADV7511进行读写

创建硬件工程,很简单,PS接出两个EMIO和一个74.25M时钟 管脚约束 # ADV7511 I2C_SCL set_property PACKAGE_PIN AA18 [get_ports {gpio_0_tri_io[0]}] set_property IOSTANDARD LVCMOS33 [get_ports {gpio_0_tri_io[0]}] # ADV7511 I2C_SDA s...


FPGA深度学习应用再加速,深鉴科技发布基于Xilinx 的多场景人工智能服务方案

2017年10月24日,中国AI创业公司深鉴科技在北京举行盛大的2017新品发布会,面向如火如荼的AI应用集中推出五款基于赛灵思全可编程技术的自主研发的智能产品与深鉴深度学习开发软件DNNDK,强...


Vivado HLS学习笔记(四)利用FPGA进行简单的图像处理

参考资料:xilinx大学计划 实验平台:ZYBO开发板 本次实验要做的是一个基于FPGA的简单图像处理程序, 共实现两个功能: 1.输出一个灰度图像的直方图。 2.将一个曝光不足的图像进行处理,使...


GPIO Product Guide笔记(Xilinx)

GPIO是通用并行IO接口的简称。他将总线信号转化为IO设备要求的信号类型,实现地址译码输出数据,锁定输入数据缓冲的功能。GPIO控制器的基本结构如图1所示。 总线接口模块实现地址译码,...


Zynq学习笔记——EMIO方式模拟SCCB时序进行读写操作

一、SCCB介绍 SCCB是OmniVision Serial Camera Control Bus的简称,即OV公司的串行摄像机控制总线。OV公司定义的SCCB是一个3线结构,但是,为了缩减Sensor的pin封装,SCCB大多采用2线方式。 开始传输数据...