本文共 1108 字,大约阅读时间需要 3 分钟。
目前FPGA主要用于接口、通信等,HLS的出现使得opencv中的C代码通过综合直接部署到硬件。
HLS主要应用场景在与算法更密切的应用如DSP图像处理。 RTL:寄存器传输级 register transfer levelverilog中分级是:系统级,算法级,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更新转载地址:http://hkcti.baihongyu.com/