首页 > 编程知识 正文

fpga读取usb摄像头,fpga实现mipi接口

时间:2023-05-04 13:43:09 阅读:17030 作者:3237

本设计使用的FPGA开发板为Digilent Nexys_Video开发板,程序基础是正点原子为FPGA产品提供的驱动程序。 由于主板硬件的不同,我做了一些更改,以便可以在Nexys_Video上运行,正点原子程序可以在官网下载。 HDMI驱动程序使用Digilent提供的IP核心,可以在其官方网站上下载。

vivado版本2018.1

照相机正在使用这个

首先用Clocking Wizard生成相机核心HDMI IP核心所需的65M时钟。

照相机的驱动用SCCB协议配置寄存器,提供了正点原子,直接使用就可以了。

向该驱动的最后的输出模块输出了cmos_frame_valid、cmos_frame_data这两个信号。 一个是有效信号,一个是数据。 我们用这两个信号就可以了。

获取的数据不能直接传输到HDMI进行显示。 因为OV5640模块生成的行信号非常差,有效信号不连续。 (OV5640一次传输8bit的数据,而RGB565格式要求每像素传输两次,因此有效信号每隔一个时钟周期生效。 )此外,根据OV5640的配置,模块的PCLK可能有效。 )

正点原子程序中,视频流存储在SDRAM中,但这里我的开发板资源很大,所以用BRAM安装了。

根据协议至寄存器的安排,输出视频流的大小为1024x768和每像素16位,因此产生以下大小的双端口BRAM

注:实际开发板上也有DDR3存储器,但是其需要用MIG IP核驱动,相对麻烦,在有处理器的SOC中可以用MIG内核,我也已经实现过,如果有空我就再写出来。

根据写入有效信号驱动写入地址变化

always@(posedgecam_pclk,negedge rst_n ) beginif(~rst_n ) begin addra=0; endelseBeginif(wr_en ) begin addra=addra 1; if(addra==20(HC0000-1 ) addra=0; 结束读取地址也同样实现

always@(Posedgeclk_65m,negedge rst_n ) Beginif(~rst_n ) begin addrb=0; endelseBeginif(rd_en ) begin addrb=addrb 1; if(addrb==20(HC0000-1 ) addrb=0; 结尾只需要最后连接到HDMI IP核心。 该IP核为24位,绿色和蓝色像素位置似乎相反,因此处理数据。

vid_pData={rd_data[15:11],3'b0,rd_data[4:0],3'b0,rd_data[10:5],2'b0}; 工程下载地址:

3359 download.csdn.net/download/dong ze2/11224991

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。