[X]关闭
0

S04-CH01 Vivado高层次综合(HLS)介绍

摘要: 本章是HLS部分的第一章,为大家简单的介绍了一些关于HLS的基础知识,为下面正式开始学习HLS打下基础。HLS的优势在于,它可以把C语言转化为我们的硬件描述语言,这意味着,它可以让更多不懂硬件描述语言的开发者投入 ...

软件版本:VIVADO2017.4

操作系统:WIN10 64bit

硬件平台:适用米联客 ZYNQ系列开发板

米联客(MSXBO)论坛:www.osrc.cn答疑解惑专栏开通,欢迎大家给我提问!!

1.1 概述

      本章是HLS部分的第一章,为大家简单的介绍了一些关于HLS的基础知识,为下面正式开始学习HLS打下基础。HLS的优势在于,它可以把C语言转化为我们的硬件描述语言,这意味着,它可以让更多不懂硬件描述语言的开发者投入到FPGA的开发中来。一些优秀的C/C++算法,我们也可以使用HLS将其转换为硬件描述语言,而且其质量也要比人工设计的更好,节省了人力和物力。

1.2 HLS简单介绍

      Vivado HLS是Xilinx推出的高层次综合工具,可以实现直接使用 C,C++ 以及 System C 语言规范对赛灵思可编程器件进行编程,无需手动创建 RTL,从而可加速 IP 创建。HLS提供了一些example样例方便大家熟悉基本的开发流程,另外关于HLS的使用介绍,Xilinx官方有两个非常重要的开发文档,ug871-vivado-high-level-synthesis-tutorial.pdfug902-vivado-high-level-synthesis.pdf,里面详细介绍了包括怎样建立HLS工程,怎么编写testbench,怎么进行优化等问题。关于优化,上面提到的两篇PDF文档里介绍的比较详细,在HLS软件界面,点击程序所在的文件,在右侧边栏有个Directive,里面列出了程序中所有用到的变量、函数和循环结构,点击右键可以给其配置。对循环结构,一般选择unroll(即展开循环),可以自己设定展开因子factor。为提高程序的并行化处理,可以给函数选择PIPELINE。对应数组,可以设置为ARRAY_PARTITION,数组维数可以自己设定。HLS软件其实很智能的,简单的结构,一般软件自己会优化好。每一个优化方案都保存在一个Solution里,HLS可以创建多个Solution,用于比较不用的优化效果。

      从工业检测系统到自动驾驶系统,计算机视觉拥有广泛的应用领域。而OpenCV包含2500多个优化的视频函数的函数库,并且专门针对台式机处理器和图形处理器(Graphic Processing Unit,GPU)进行优化。利用逻辑硬件来加速OpenCV的性能在HLS上得以实现。

      Xilinx提供的Vivado HLS高层次综合工具能够通过C/C++编写的代码直接创建RTL硬件,显著提高设计效率;同时,Xilinx ZynqSOC系列器件嵌入双核ARM Cortex-A9处理器将软件可编程能力与FPGA的硬件可编程能力实现完美结合,以低功耗和低成本等系统优势实现单芯片无以伦比的系统性能、灵活性、可扩展性,加速图形处理产品设计上市时间。

1.2.1 OpenCV和HLS视频库

      如下图所示,OpenCV在视频处理系统中可以有四种不同的应用方式。第一种方式中,算法的设计和实现完全依赖于OpenCV的函数调用,利用文件的访问功能进行图片的输入、输出和处理;第二种方式中,算法可以在嵌入式系统(例如Zynq Base TRD)中实现,利用特定平台的函数调用访问输入输出图像,但是,视频处理的实现依赖于嵌入式系统中处理器(例如Cortex™-A9)对OpenCV功能函数的调用;第三种方式中,处理算法的OpenCV功能函数被Xilinx Vivado HLS视频库函数替换,而OpenCV函数则用于访问输入和输出图像,提供视频处理算法实现的设计原型。Vivado HLS提供的视频库函数可以被综合,在对这些函数综合后,可以将处理程序模块整合到诸如Zynq的可编程逻辑中。这样,这些程序逻辑块就可以处理由处理器生产的视频流、从文件中读取的数据、外部输入的实时视频流。

       Vivado HLS包含大量的视频库函数,方便于构建各种各样的视频处理程序。通过可综合的C++代码,实现这些视频库函数。在视频处理功能和数据结构方面,这些综合后的代码与OpenCV基本对应。许多视频概念与抽象和OpenCV非常相似,很多图像处理模块函数和OpenCV库函数一致。

      例如,OpenCV中用于代表图片的很重要的一个类便是cv::Mat类,cv::Mat对象定义如下:cv::Mat image(1080, 1920, CV_8UC3);

      该行代码声明了一个1080×1920像素,每一个像素都是由3个8位无符号数表示的变量image。对应的HLS视频库模板类hls::Mat<>声明如下:
hls::Mat<2047, 2047, HLS_8UC3> image(1080, 1920);

      这两行代码的参数形式、图像尺寸最大值、语法规则不同,生成的对象是相似的。如果图像规定的最大尺寸和图像的实际尺寸相同的话,也可以用下面的代码替代:
hls::Mat<1080, 1920, HLS_8UC3> image( );

1.2.2 AXI4流和视频接口

      通过AXI4流协议,Xilinx提供的视频处理模块实现像素数据通信。尽管底层AXI4流媒体协议不需要限制图片尺寸,但是,若图片尺寸相同,则将会大大简化大部分的复杂视频处理计算。对于遵循AXI4流协议的输入接口,可以保证每一帧都包含ROWS * COLS的像素。在保证前面视频帧保持完整性和矩形性的情况下,后续模块实现对视频帧有效地处理。

      如图所示,Vivado HLS包含2个可综合的视频接口转换函数。

     视频库还提供了其他不可综合的视频接口函数,这些函数用于在基于OpenCV测试平台与综合后的函数结合。下图给出了不可综合的接口函数。

      VivadoHLS视频处理函数库使用hls::Mat<>数据类型,这种类型用于模型化视频像素流处理,实质等同于hls::steam<>流的类型,而不是OpenCV中在外部memory中存储的matrix矩阵类型。因此,在用Vivado HLS实现OpenCV的设计中,需要将输入和输出HLS可综合的视频设计接口,修改为Video stream接口,也就是采用HLS提供的video接口可综合函数,实现AXI4 video stream到VivadoHLS中hls::Mat<>类型的转换。

1.2.3 OpenCV到RTL代码转换的流程

     OpenCV图像处理是基于存储器帧缓存而构建的,它总是假设视频帧数据存放在外部DDR存储器中。由于处理器的小容量高速缓存性能的限制,因此,OpenCV访问局部图像性能较差。并且,从性能的角度来说,基于OpenCV设计的架构比较复杂,功耗更高。在对分辨率或帧速率要求低,或者在更大的图像中对需要的特征或区域进行处理时,OpenCV似乎足以满足很多应用的要求;但是,对于高分辨率和高帧率实时处理的应用中,OpenCV很难满足高性能和低功耗的需求。

     基于视频流的架构能提供高性能和低功耗,链条化的图像处理函数减少了外部存储器访问。针对视频优化的行缓存和窗口缓存比处理器高速缓存更简单高效,更易于使用Xilinx提供的Vivado HLS 在FPGA器件中采用数据流优化来实现。

     Vivado HLS对OpenCV的支持,不是指可以将OpenCV的函数库直接综合成RTL代码,而是需要将代码转换为可综合的代码。这些可综合的视频库称为Vivado HLS视频库,它们由Vivado HLS工具提供。

     由于OpenCV函数一般都包含动态的内存分配、浮点以及假设图像在外部存储器中存放或者修改,所以不能直接通过Vivado HLS对OpenCV函数进行综合。

     Vivado HLS视频库用于替换很多基本的 OpenCV函数,它与OpenCV具有相似的接口和算法,它主要针对在FPGA架构中实现的图像处理函数,其中包含了专门面向FPGA的优化,比如定点运算而非浮点运算(不必精确到比特位),片上的行缓存(line buffer)和窗口缓存(window buffer)。


路过

雷人

握手

鲜花

鸡蛋

最新评论

本文作者
2019-9-10 10:20
  • 1
    粉丝
  • 5820
    阅读
  • 0
    回复

关注米联客

扫描关注,了解最新资讯

联系人:汤经理
电话:0519-80699907
EMAIL:270682667@qq.com
地址:常州溧阳市天目云谷3号楼北楼201B

关注米联客

扫描关注,了解最新资讯

联系人:汤经理
电话:0519-80699907
EMAIL:270682667@qq.com
地址:常州溧阳市天目云谷3号楼北楼201B

关注米联客

扫描关注,了解最新资讯

联系人:汤经理
电话:0519-80699907
EMAIL:270682667@qq.com
地址:常州溧阳市天目云谷3号楼北楼201B
热门评论
排行榜