如何使用Vivado HLS视频库加速Zynq-7000 All Programmable SoC OpenCV
g p应用
2013年9月11日
? Copyright 2013 Xilinx
OpenCV简介
机(p)机
开源计算机视觉(OpenCV) 被广泛用于开发计算机视觉应用
–包含2500多个优化的视频函数的函数库
–专门针对台式机处理器和GPU进行优化
–用户成千上万
–无需修改即可在Zynq器件的ARM处理器上运行
但是
–利用OpenCV实现的高清处理经常受外部存储器的限制
–存储带宽会成为性能瓶颈
–存储访问会限制功耗效率
Zynq All-programmable SOC是实现嵌入式计算机视觉应用的极
好方法
–性能高、功耗低
实时计算机视觉应用
计算机视觉应用
实时分析功能
高级驾驶员安全辅助车道或行人检测
安防监视敌我识别
高速物体检测用于工厂自动化的
机器视觉
非侵入式医疗成像技术肿瘤检测
实时视频分析处理
基于帧的
基于像素的
Pixel based 4Kx2K 特征处理与
决策
图像处理与特征提取
Image processing and Feature
extraction
F1
1080p F2 F3
720p
480…..
480p
每像素数百次运算每特性数10000次运算
800万次处理x每帧100次运算= 数百亿次运算每秒处理数1000个特征= 数百万次运算
实时视频分析的异构实现
基于帧的基于像素的图像处理与特征
Pixel based 4Kx2K
特征处理与判定
提取
Image processing and Feature
extraction F11080p
F2F3软件域(ARM)硬件域
(FPGA)720p
480…..
480p
每像素数百次运算
每特性数10000次运算800万次处理x 每帧100次运算
= 数百亿次运算
每秒处理数1000个特征
= 数百万次运算
赛灵思实时图像分析的实现:Zynq All Programmable SoC Programmable SoC
Frame based Feature processing and 基于像素的图像处理与特征
Pixel based 4Kx2K
Feature processing and decision making
提取
基于帧的特征处理与判定
Image processing and Feature
extraction
F11080p
F2F3720p
480…..
480p
每像素数百次运算
每特性数10000次运算1000800万次处理x 每帧100次运算
= 数百亿次运算
每秒处理数个特征
= 数百万次运算
Vivado:提高OpenCV应用的效率
高清视频算法(每秒约1帧
)的C语言仿真
–高清视频(每小时1 帧)的
RTL仿真
实时FPGA实现方案高达
60fps
Zynq 视频参考设计架构
DDR3
DDR3
外部存储器
处理系统
DDR 存储控制器
SD 卡
双核Cortex-A9
硬化的外设
S_AXI_GP 32b 位S_AXI_HP 64 位AXI4S AXI 互联
AXI4 Stream IP 核
HDMI
HDMI
视频输入
Xylon 显示
控制器
HLS 生成的流水线
AXI VDMA
使用64位高性能端口实现对外部存储器的视频访问使用32位通用端口实现控制寄存器访问使用AXI4-Stream 实现的视频流
以IP 为中心的设计流程
更快速的IP
生成与集成
基于C 语言的IP 创建
用户首选的系统集成环境
C 、C++ 或SystemC
DSP 系统生成器(System Generator)
C 函数库
?浮点math.h ?定点VHDL V il ?视频
VHDL 或Verilog 以及软件驱动
Vivado IP 集成器
IP 子系统赛灵思IP 第三方IP Vivado RTL 集成
用户IP
在FPGA 设计中使用OpenCV
纯
集成的O CV
O CV 图像文件读取OpenCV 应用
OpenCV 应用
OpenCV 参考
加速的OpenCV 应用
图像文件读取(OpenCV)
(OImage penCV)
OpenCV2AXIvideo 实时视频输入
实时视频输入
O CV 函数链AXIvideo2Mat
模块
O CV 函数链AXIvideo2Mat
模块
OpenCV HLS 视频库函数链
Mat2AXIvideo
可综合的OpenCV
HLS 视频库函数链
Mat2AXIvideo
可综合的图像文件写入(OpenCV)
AXIvideo2OpenCV 图像文件写入实时视频输出
实时视频输出
(OpenCV)
DDR3处理系统
DDR 存储控制器
DDR3
DDR3
外部存储器图像文件读取(OpenCV)
SD
卡
双核Cortex-A9OpenCV 函数链
Cortex A9
硬化的外设
HDMI
HDMI
Xylon 显示AXI VDMA
AXI 互联
图像文件写入
(OpenCV)
视频输入
y 控制器
HLS 生成的流水线
DDR3处理系统
DDR 存储控制器
DDR3DDR3
外部存储器图像文件读取(OpenCV)
12
345
SD
卡
双核Cortex-A9OpenCV 函数链
Cortex A9
硬化的外设
HDMI
HDMI
Xylon 显示AXI VDMA
AXI 互联
图像文件写入
(OpenCV)
视频输入
y 控制器
HLS 生成的流水线
DDR3处理系统
DDR 存储控制器
DDR3
DDR3
外部存储器图像文件读取(OpenCV)
SD
卡
双核Cortex-A9OpenCV 函数链
Cortex A9
硬化的外设
HDMI
HDMI
Xylon 显示AXI VDMA
AXI 互联
图像文件写入
(OpenCV)
视频输入
y 控制器
HLS 生成的流水线
集成的OpenCV 应用
DDR3处理系统
DDR 存储控制器
DDR3DDR3 外部存储器
实时视频输入
12
345
SD
卡
双核
Cortex-A9OpenCV 函数链
Cortex A9
硬化的外设
p HDMI
HDMI
Xylon
显示AXI VDMA
AXI 互联
实时视频输出
视频输入
y 控制器
HLS 生成的流水线
OpenCV 参考/软件执行
DDR3图像文件读取处理系统
DDR 存储控制器
DDR3DDR3
外部存储器12
345
(OImage penCV)OpenCV2AXIvideo SD
卡
双核Cortex-A9AXIvideo2Mat
Cortex A9
硬化的外设
HLS 视频库函数链
Mat2AXIvideo
HDMI
HDMI
Xylon 显示AXI VDMA
AXI 互联
AXIvideo2OpenCV
图像文件写入
视频输入
y 控制器
HLS 生成的流水线
(OpenCV)
OpenCV 参考/系统测试
DDR3图像文件读取处理系统
DDR 存储控制器
DDR3DDR3
外部存储器(OImage penCV)OpenCV2AXIvideo 12
SD
卡
双核Cortex-A9AXIvideo2Mat
Cortex A9
硬化的外设
HLS 视频库函数链
Mat2AXIvideo
HDMI
HDMI
Xylon 显示AXI VDMA
AXI 互联
AXIvideo2OpenCV
图像文件写入
视频输入
y 控制器
HLS 生成的流水线
(OpenCV)
加速的OpenCV 应用
DDR3处理系统
DDR 存储控制器
DDR3DDR3 外部存储器
实时视频输入
12
SD
卡
双核Cortex-A9AXIvideo2Mat
视频库函数链
Cortex A9
硬化的外设
HLS Mat2AXIvideo
HDMI
HDMI
视频输入
Xylon
显示AXI VDMA
AXI 互联
实时视频输出
y 控制器
HLS 生成的流水线
OpenCV设计流程
OpenCV模块A1)在台式机上开发OpenCV应用
2)无需修改即可在ARM内核上运行OpenCV应
OpenCV模块B
用
3)使用I/O函数抽象FPGA部分
O CV 4)用可综合代码代替OpenCV函数调用
5)运行HLS以生成FPGA加速器
OpenCV模块C
6)用FPGA加速器调用代替可综合代码调用OpenCV模块D
OpenCV 应用的软硬划分
opencv2AXIvideo OpenCV 模块A
AXIvideo2HLS
OpenCV 模块B
HLS 模块B
O CV HLS 模块C
同步
OpenCV
模块C HLS2AXIvideo
OpenCV 模块D
AXIvideo2opencv
综合