vivado hls的应用(axis接口)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

前面的文章说了常用的两种接口,一种是axi-lite接口,这种接口最为常见。还有一种接口是maxi接口,这种接口一般用于ddr访问。事实上除了这两种接口之外,还有一种接口,那就是axis接口。这是一种数据流接口,用的最多的地方,就是图像处理。

1、视频流

所谓的视频流,一般来自于两个地方,一个是mipi camera,或者是dvp camera,这都是可以的。但是对于低端的zynq soc来说,mipi接口不太现实。因此,还有一个选择,那就是usb camera。很多情况下,可以usb接口先读取到camera的数据,然后交给pl来处理,这是非常常见的一个方式,当然这种方式需要linux+usb+uvc的支持。

2、opencv算法

对于图像处理来说,opencv基本是标配。但是opencv如果用cpu来算的话,效率比较低。这种情况下,一般就会选择用pl对算法进行加速处理。如果加上一些寄存器的配置,这种情况下就会涉及到axi-lite、axis两种接口。

3、hls源代码文件类型

由于hls中涉及opencv hls版本的调用,源代码类型需要调整为cpp,不然有可能编译不过。

4、灰度图像处理

整个代码比较简单,一方面是流程简单,一方面是接口简单。流程方面,就是ip从axis拿到图像之后,直接转成灰度图,再借助于axis接口送出去。接口方面,如之前所描述的那样,包含了axi-lite和axis两种接口。

复制代码
#include <hls_video.h>

#define MAX_HEIGHT 800
#define MAX_WIDTH 1280

typedef hls::stream<ap_axiu<24,1,1,1> > AXI_STREAM;
typedef hls::Mat<MAX_HEIGHT, MAX_WIDTH, HLS_8UC3> RGB_IMAGE;
typedef hls::Mat<MAX_HEIGHT, MAX_WIDTH, HLS_8UC1> GRAY_IMAGE;

void led_control(AXI_STREAM& input_stream,
		AXI_STREAM& output_stream,
		int rows,
		int cols)
{

#pragma HLS INTERFACE s_axilite port=cols
#pragma HLS INTERFACE s_axilite port=rows
#pragma HLS INTERFACE axis port=output_stream
#pragma HLS INTERFACE axis port=input_stream
#pragma HLS INTERFACE ap_ctrl_none port=return
#pragma HLS DATAFLOW

	RGB_IMAGE img_0(rows, cols);
	GRAY_IMAGE img_1(rows, cols);
	RGB_IMAGE img_2(rows, cols);

	hls::AXIvideo2Mat(input_stream, img_0);
	hls::CvtColor<HLS_RGB2GRAY, HLS_8UC3, HLS_8UC1>(img_0, img_1);
	hls::CvtColor<HLS_GRAY2RGB, HLS_8UC1, HLS_8UC3>(img_1, img_2);
	hls::Mat2AXIvideo(img_2, output_stream);
}

5、综合、导出rtl

这部分流程是标配,不再赘述。

6、创建vivado测试工程

为了验证ip是否正确,需要创建一个vivado工程。通常除了添加cpu之外,我们还会添加一下gpio、uart,这样一个最小系统就准备好了。

7、设置ip地址,导入ip

vivado准备好了之后,就可以设置ip路径,准备导入ip。ip本身只能接收图像输入,此外还需要一个接口来接收处理后的图像。在block design上面,这一工作一般是由vdma来完成的。

框图中有一个地方需要注意下,vdma默认接收的图象是32位的,这里我们hls ip默认是24位,所以vdma需要调整下。此外,中断信号有三个来源,所以,这里还添加了一个concat ip。

8、确认验证

所有ip、连线都ok之后,就可以使用厂家提供的验证工具确认一下,是不是真的ok。当然,因为涉及到几个外设ip,对应的地址范围也要确认一下,

相关推荐
benbenAItalk10 小时前
数字人口播视频的批量生产实践:素材规范、任务编排与质量验收
java·前端·音视频
2601_9628857210 小时前
如何用 Python 扫描 A 股跳空缺口并统计缺口回补概率?
java·前端·python
西瓜太郎123411 小时前
Claude Code、Codex CLI、Gemini CLI 能否共用一枚 Key?先看协议选择矩阵
前端·api 网关·claude code·gemini cli·codex cli
陈随易13 小时前
在Finch用了62亿词元,我认为这是新一代Agent工具之神
前端·人工智能·后端
水域安全老周13 小时前
水趣钓鱼救生衣专利拆解:两级锁紧如何解决落水人衣分离
java·前端·网络
计算机魔术师14 小时前
Anthropic CEO突然喊踩刹车,OpenAI罕见力挺:AI这辆车不能只踩油门了
前端
wing9814 小时前
从codex转战workbuddy使用一周的感受
前端·人工智能·后端
EatFan14 小时前
Java接入支付宝 JSAPI 支付保姆教程(二):流程讲解与前后端代码讲解
前端·spring boot·后端·微信小程序·小程序·uni-app
梦想平凡15 小时前
百游棋牌源代码开发搭建教程(五):房间创建、座位分配与请求幂等实现
前端·javascript·数据库·源代码管理
IT_陈寒15 小时前
Redis的Set操作居然能把我的服务整挂了?
前端·人工智能·后端