fpga学习——zynq图像处理中的DVP流接口封装

之前文章介绍了基于zynq的图像处理架构问题。其中,作为开发者,需要重点关注图像传感器接口、处理算法、显示接口,这些模块。现在我们一同学习用于视频数据接口的DVP模块,并将其封装成AXI-stream接口便于直接和VDMA IP通信。

DVP_AXI stream IP v1.0使用说明

1.设计概述

•用于cmos传感器视频数据采集,将cmos输出的8位视频数据拼接成RGB 565模式

•AXI_stream主机接口,用于和PS端内存的数据交互
•基于vivado 18.3软件设计

2.模块分析

此设计包括DVP模块及AXI_stream 协议部分。DVP模块负责将采集的8位视频数据及行、场同步信号按照相应时序转换成16位RGB模式输出,DVP模块独立封装,在顶层模块中调用。AXI_stream 部分用于产生相应的AXI_stream接口信号,设计采用AXI_stream主机模式。模块框架图如下图所示。

图1.DVP_AXI stream IP 核模块框架图

DVP模块:

DVP模块是实现视频数据采集的主要部分。

等到初始化摄像完成且行场同步信号出现,释放清零信号,开始写入数据;利用采样计数器对采样数据计数,计数值在行同步信号有效时加1,否则清零;见以下代码。

//在HREF为高电平时,计数输出数据个数

//565模式下的计数器

always@(posedge PCLK or posedge Rst_p)

if(Rst_p)

Hcount_1 <= 0;

else if(r_Href)

Hcount_1 <= Hcount_1 + 1'd1;

else

Hcount_1 <= 0;

cmos输出采样的数据是8位的,需要将其转换成16位的RGB565数据模式输出。根据采样计数器的计数值奇偶情况输出数据,在计数值为偶数时,将采样的8位数据存到待输出像素数据的高字节,在计数值为奇数时,将数据存到输出像素数据的低字节。见以下代码。

begin 

   if(!Hcount_1[0])

r_DataPixel[15:8] <= r_Data;

   else 

r_DataPixel[7:0] <= r_Data;

end

在此数据拼接过程中,相当于每两个时钟像素完成了一次数据输出,需要指定输出数据有效的标志,以避免错误的数据输出。在将两个单字节采样数据拼接成一个两个字节数据的过程中,第一个时刻的采样数据给到输出数据的高字节,第二个时刻的采样数据给到输出数据的低字节,并且采样计数器从0开始计数,因此指定当采样计数器为奇数时数据有效。见以下代码。

begin 

if(Hcount_1[0] && r_Href)

              r_DataValid <= 1;

      else

              r_DataValid <= 0;

end

为保证传图的稳定性,传感器开始工作时舍弃前10帧,见以下代码。

/*帧计数器,对每次系统开始运行后的前10帧图像进行计数*/

  always@(posedge PCLK or posedge Rst_p)

  if(Rst_p)  

    FrameCnt <= 0;

  else if({ r_Vsync,Vsync}== 2'b01)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值