DSP

xilinx vivado HLS 小记

2019-07-13 20:38发布

目前FPGA主要用于接口、通信等,HLS的出现使得opencv中的C代码通过综合直接部署到硬件。
HLS主要应用场景在与算法更密切的应用如DSP图像处理。
RTL:寄存器传输级 register transfer level verilog中分级是:系统级,算法级,RTL级,门级,开关级(分为行为级、结构级)
verilog建模方式分为:行为级和结构级。
xilinx的高层次综合(High level Synthesis, HLS)HLS技术是将C/C++/System C 软件语言转换成verilog和VHDL硬件描述语言的技术。 HLS主要有以下功能:
1)从C语言到RTL级实现,关键在于综合约束
2)从C语言提取出控制和数据流
3)从默认和用户定义命令实现设计 高级综合工具的核心是调度(schedule)、绑定(binding)或分配(clllocation)。
设计中C代码关键属性:
1)函数:所有代码由函数组成,函数用于表示设计的层次,这对于硬件也是一样的。
2)参数:顶层函数的参数决定了硬件RTL的端口
3)数组:默认地数组用RAM实现(或FIFO) 目前HLS只存在vivado中,ISE无HLS;
HLS 能够快速生成可实现硬件算法加速器所需要的HDL代码,而且提供完整的AXI接口,能直接插入zynq SOC的PL。
下面说明opencv和hls中使用的opencv函数的区别和联系
opencv中图像类型有:IPImage CvMat Mat类型等,对应的vivoda的HLS中图像hls::mat类型。
opencv中常用与图像操作有关的数据容器有Mat,cvMat 和IpImage,均可代表和显示图像,但Mat类型侧重与计算,数学性较高,而CvMat和IpImage更侧重于图像,opencv对图像操作(缩放、单通道)进行优化。
opencv和hls:opencv的区别是:
1、opencv基于数据帧,很难用于高分辨率和高帧率;HLS基于数据流优化来实现;
2、HLS用定点运算而非浮点运算
3、片上行缓存,窗口缓存
开发中使用vivoda HLS实现Opencv的设计流程:
1)在计算机上开发opencv应用;
2)使用I/O函数抽取FPGA实现部分,用HLS库代替opencv函数;
3)运行HLS生成代码,在Xilinx的ISE或vivado做RTL集成和FPGA实现。 HLS实现opencv局限性:
1)必须用HLS视频库函数代替opencv调用
2)不支持opencv访问帧缓存
3)不支持opencv的随机访问
4)不支持opencv 的Ip-place更新