【ZYNQ-7000开发之十四】Vivado HLS和OpenCV_上

本文关键字:综合  开发  编写  函数  接口  简介  代码  语言 


本篇文章对Vivado HLS以及OpenCV HLS进行简要介绍,并且利用OpenCV HLS的函数,hls::Sobel,编写边缘检测算法,仿真测试,创建IP,最后在vivado里测试Sobel IP

关于HLS详细内容请参考官方文献ug902-vivado-high-level-synthesis
*本文主要参考文献:
how_to_accelerate_opencv_applications_using_vivado_hls
xapp890-zynq-sobel-vivado-hls*

*本文所使用的开发板是Miz702(兼容zedboard)
PC 开发环境版本:Vivado 2015.2 Xilinx SDK 2015.2*
需要准备HDMI显示器和串口线一条

HLS简介

HLS(High Level Synthesis)即高层次综合,不同于以往的FPGA逻辑开发,是用HDL编写的,开发周期长、难度大。而HLS可以使用C,C++,SystemC以及OPenCL等编写,通过高层次综合,可以把软件代码转化为硬件描述语言,可以大大加快开发速度,使软件工程师也可以编写硬件语言。

HLS OpenCV简介

OpenCV是开源的图像处理和计算机视觉库,它支持多种操作系统、包含多种计算机语言的接口。HLS Opencv是HLS里带有的可综合成HDL的OpenCV库函数,换句话说,由于HDL和C++的特性(例如动态内存分配不可以综合成HDL)并不是所有的OpenCV库函数都可以综合成HDL,当然目前Xilinx提供了较多的HLS OpenCV库函数,可以满足一定的需求,相信以后会越来越多的。

HLS加速模型

【ZYNQ-7000开发之十四】Vivado HLS和OpenCV_上
【ZYNQ-7000开发之十四】Vivado HLS和OpenCV_上

HLS OpenCV和OpenCV有着相似的书写风格

OpenCV library : cvScale(src, dst, scale, shift);
HLS video library : hls::Scale<…>(src, dst, scale, shift);
【ZYNQ-7000开发之十四】Vivado HLS和OpenCV_上

可综合的代码可以在ARM上直接运行!

【ZYNQ-7000开发之十四】Vivado HLS和OpenCV_上

可以在代码里直接添加AXI接口,在vivado里互连很方便

【ZYNQ-7000开发之十四】Vivado HLS和OpenCV_上

HLS里对视频接口的约束如下

HLS Directives for Video Processing
#pragma HLS RESOURCE variable=input core=AXIS metadata="-bus_bundle INPUT_STREAM"
#pragma HLS RESOURCE variable=rows core=AXI_SLAVE metadata="-bus_bundle CONTROL_BUS"
#pragma HLS INTERFACE ap_stable port=rows
#pragma HLS dataflow

本篇文章先到这,在下次进行搭建ZYNQ工程



扩展:

(六)React Native---NavigatorIOS 组件

NavigatorIOS包装了UIKit的导航功能,可以使用左划功能来返回到上一界面。本组件并非由Facebook官方开发组维护。这一组件的开发完全由社区主导。如果纯js的方案能够满足你的需求的话,那么我们建议你选择Navigator组件(理论知识可以见React Native中文网)。一:概念内容1:路由:一个路由是用于描述导航器中一页的对象。NavigatorIOS的第一个路由通过initialRoute属性来提供。render: function() { return ( <......

Android ViewDragHelper(1)

Android ViewDragHelper(1)在以往处理Android触摸滑动点击等复杂屏幕事件时,往往不得不借助于各种MotionEvent事件,然后自己再写代码处理逻辑计算,过程复杂,代码量也不小。比如简单的要处理或者实现一个拖曳事件逻辑代码,就要做一些不够简洁的代码编程实现。好在现在Android提供了一个新的ViewDragHelper,用于专门处理屏幕的拖曳事件,大大简化了拖曳事件的代码处理。使用ViewDragHelper,步骤很简单,首先View......

[leetcode]367. Valid Perfect Square

/**************************************************************************** * Given a positive integer num, write a function which returns True if num is a perfect square else False. * * Note: Do not use any built-in library function such as sq......

leetcode题解-125. Valid Palindrome

题目:给定一个字符串,判断是不是回文,只考虑字母数字字符,不考虑大小写。另外,空串被认为是有效的回文。分析:保留左右两个指针,每一轮先移动左指针获取一个字母或数字,其它字符都跳过;然后移动右指针,找到一个字母或数字,其它字符都跳过;如果此时左右两个字符都为字母或数字并但是两个不相等,则返回false;进行下轮指针移动直到两个指针相等。时间复杂度:O(n) 空间复杂度:O(1)class Solution { public static boolean isPalindrome(String......

Android ViewDragHelper实现QQ侧滑边栏

Android ViewDragHelper实现QQ侧滑边栏移动手机版的QQ的左边侧栏,有一个特殊的交互设计效果:当用户手指向右或向左滑动时,QQ的左边会弹出或收缩一个侧滑的边栏。这种效果简单的做法可以使用Android提供的NavigationView,DrawerLayout实现之(附录文章1,2,3),但如果要想做到QQ那样的精致效果,或许得使用Android ViewDragHelper。如图所示,即为使用Android ViewDragHelper,仿照QQ移动版的样式做出的交互效果:......

openCV之中值滤波&均值滤波(及代码实现)

 在开始我们今天的博客之前,我们需要先了解一下什么是滤波:首先我们看一下图像滤波的概念。图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性。下图左边是原图右边是噪声图:消除图像中的噪声成分叫作图像的平滑化或滤波操作。信号或图像的能量大部分集中在幅度谱的低频和中频段是很常见的,而在较高频段,感兴趣的信息经常被噪声淹没。因此一个能降低高频成分幅度的滤波器就能够减弱噪声的影响。图像滤......

UWP开发之StreamSocket聊天室(五)

这篇文章是"UWP开发之StreamSocket聊天室"系列的最后一篇文章,这篇文章中我们来实现聊天室服务端View的实现。由于很多View 、ViewModel和客户端的是基本一致的所以本篇内容会比较少,很多技术重合点这里也不会再做讲解。其实在日常的开发中我们的服务端不应该是以UWP形式来开发的,通常情况下是在服务器使用Socket技术来搭建一个IM服务务端,我们这里仅仅是为了探索StreamSocket Service在UWP上如何使用才如此去做。首先我们还是先看设置界面的......

centos7下,intel-opencl-caffe安装中遇到的坑

用的是这个项目:https://github.com/01org/caffe教程参考:https://github.com/01org/caffe/wiki/clCaffeOpenCV的问题: ... CMake Warning at C:/opencv/opencv320/build/OpenCVConfig.cmake:138 (message): Found OpenCV Windows Pack but it has no binaries compatible wit......

spring-boot中配置和使用Caffeine Cache

转自:http://lib.csdn.net/article/java/65506题外话: Spring 5中已经摘除了对Guava caching的使用,转而使用Caffeine.详见官方信息SPR-13797本地缓存,之前一直用Guava Cache,最近spring-boot推荐使用Caffeine Cache。 主要的三种本地缓存性能对比:简单几步,就可以在spring-boot中配置和使用Caffeine Cache:引入依赖:<!-- local cache --><......

spring-boot中配置和使用Caffeine Cache

本地缓存,之前一直用Guava Cache,最近spring-boot推荐使用Caffeine Cache。主要的三种本地缓存性能对比:简单几步,就可以在spring-boot中配置和使用Caffeine Cache:1、引入依赖:<!-- local cache --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-start......

JavaScript 对象拷贝与Object.assign

个人博客 · 椒图笔记深拷贝与浅拷贝在 JavaScript 中,对于基本数据类型(undefined、null、boolean、number、string)来说,在变量中存储的就是这个变量本身的值,复制是对值的复制,不存在深浅之说。但C系语言的共同特点中有,存储引用类型(对象),实际中在变量里存的是它的地址。因此对 JavaScript 中的复杂数据类型(object)来说,也会有浅拷贝和深拷贝的概念:浅拷贝指两个不同的变量存的是同一个对象的地址,即两个变量指向同一块内存区域;深拷贝则是重新分......

Android SwipeMenuListView

Android平台上的第三方开源项目SwipeMenuListView是一种可以在某一个view条目中响应用户左右侧滑(从左向右,或从右向左滑动),滑出操作菜单的UI控件。类似这种控件达到的UI效果,在一些流行的APP中应用广泛,比如QQ的消息列表中的某一列表项,当用户手指触摸某一项,然后向左边滑,则滑出QQ的“置顶”,“删除”选项菜单,如图中的箭头指向的红圆圈所示:现在基于SwipeMenuListView实现QQ的上述列表子项目侧滑(左滑、右滑)......

MvvmLigth框架利器之INavigationService

标题有点唬人哈,其实是我自己按照平时UWP/WP项目开发的使用经验给INavigationService加封的,由于网络中关于Mvvmlight框架的INavigationService的资料比较少,所以在此做个笔记,一来记录知识以防忘记,二来希望对用到INavigationService的朋友有所帮助。Mvvmlight在平时开发中最常用到的利器有五个:1、ViewModelBase VM鼻祖2、RelayCommand命令3、Messenger消息通4、DispatcherHelper 多线......

Win10/UWP开发:让你的App使用上扫描仪

UWP的扫描仪功能现在被微软划分到了[Windows Desktop Extensions for the UWP]中,如果要使用扫描仪扫描图片到自己的App中,首先我们要添加[Windows Desktop Extensions for the UWP]的引用,这个dll中的所有类都是只能在Desktop设备上才能正常运行的。添加[Windows Desktop Extensions for the UWP]扫描仪需要用Windows.Devices.Scanners 命名空间下的成员,有几个......

Android 7.0 行为变更 通过FileProvider在应用间共享文件吧

本文已在我的公众号hongyangAndroid原创首发。 转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/72859156 本文出自张鸿洋的博客 本文已在我的公众号hongyangAndroid原创首发,文章合集。一、概述之前项目的新特性适配工作都是同事在做,一直没有怎么太关注,不过类似这些适配的工作还是有必要做一些记录的。对于Android 7.0,提供了非常多的变化,详细的可以阅读官方文档Andro......

2016,Everything Say GoodBye

2016,我终于不用再上专业课2016,我终于离开了校园2016,我终于从兼职变成了全职2016,我终于可以一个人独闯天下2016,我终于有了人情味2016,我终于后悔年少的冲动2016,我终于不想再一个人    觉得最近自己的很矫情,容易触景生情,更容易闲着没事忧伤。翻开一年的记忆,其实发现这一年变化着实很多。2016年两个分水岭,改变自己,也成长更多!    这一年基本上告别了嫌弃几年的专业课,我终于不用再去感受上课的痛苦。其实说出这句话,觉得挺讽刺的......

ViewPager+Fragment滑动

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <......

如何改变windows Server系统分区大小

由于多种原因我们需要调整系统分驱空间,比如新购的笔记本装了系统没有分驱,或者windows Server的分驱空间不够用,出现这种情况怎么办?下面推荐一款很好的工具叫EASEUS Patition master工具,下面以一个把系统空间增大为案例。某客户文件服务器系统盘分驱为20G多,自从安装windows server 2008之后,发现空间越来越不够用了,把虚拟内存,该删除的文件都删除了还是非常紧张,时不时系统盘爆满,影响服务器的稳定,更不用说更新补丁。如下图所示: 现在要做的动作......

编译得到OpenCv+Contrib SDK for android

来自:http://tzutalin.blogspot.jp/2016/01/installing-opencv-310-and-contrib-lib.htmlBuild and install OpenCV and contrib lib on Ubuntu / AndroidI am going to show you how to clone the opencv source from Git repository. After cloing the source,......

从VB来看-InsertionSort(VB插入排序)

插入排序(Insertion Sort)它是通过不断将未排序数据插入有序序列,一次次循环加入待排序数据扩充有序序列部分,来达到最终的排序目的。很像我们平时发牌时一张张整牌的过程:我的习惯是先把最左边第一张作为有序部分,之后每拿取一张牌进行大小比较,按照升序或降序的方式整理好手里的牌(构建整个有序部分)。 在众多算法的使用对比中,通常在量级小于千的情况下使用插入排序还是令人满意的。时间复杂度:若一趟扫描即可完成排序。所需的关键字比较次数 和记录移动次数 均达到最小值时 ,有最好时间复杂度为:O(n......