FPGA的GTP视频传输方案,提供HDMI和OV5640摄像头两种例程

之前在闲鱼上被一名神秘大佬批评道:你拥有这么好的板子怎么不玩点高端的东西?
于是乎我陷入了沉思。。。
我手里的板子都有GTP、GTX和PCIE,而我居然把他们无视了,那玩儿FPGA还玩儿个毛?
开发板:米联客A7-35T;
IDE:vivado2019.1;
参考代码:米联客A7-35T开发板配套例程;
实现功能框图如下:
FPGA的GTP视频传输方案,提供HDMI和OV5640摄像头两种例程_第1张图片

HDMI工程:输入HDMI1080P(ADV7611解码),输出HDMI1080P;
工程BD如下:
FPGA的GTP视频传输方案,提供HDMI和OV5640摄像头两种例程_第2张图片
代码架构如下:
FPGA的GTP视频传输方案,提供HDMI和OV5640摄像头两种例程_第3张图片
GTP想要完全搞懂的话非一日之功,最快的方式就是先用我来,在用的过程中再去慢慢理解,Xilinx也是这么想的,所以提供了完美的参考例程,在配置生成好GTP的IP后,再手动生成官方参考例程,然后再添加自己的设计就可以用了,置于内部原理和逻辑先别管,能用起来再说。
GTP官方例程例程的顶层如下:
FPGA的GTP视频传输方案,提供HDMI和OV5640摄像头两种例程_第4张图片
红框内的信号:错位指示,哪一位为1就该表哪个字节错位了,在解码时就根据他来对齐错位的数据,NB吧?至于为什么是这样,恕我直言,弄懂了感觉也没什么N用。
数据对齐逻辑核心部分如下:
FPGA的GTP视频传输方案,提供HDMI和OV5640摄像头两种例程_第5张图片
K28.5编解码:
K28.5具体细节我也不懂,只知道bc是k28.5 的控制字符,那么一个32位的数据位就可以由我们自定义了,除视频有效数据外,其他控制信号自定义如下:
FPGA的GTP视频传输方案,提供HDMI和OV5640摄像头两种例程_第6张图片
编码要复杂一些,得根据视频时序来,解码就简单多了,具体去看代码吧。
需要说明的是,代码只支持视频场同步信号为高电平,如果你的输入是低电平,请做反向处理。
OV5640工程:输入OV5640-720P,输出HDMI1080P;
工程BD如下:
FPGA的GTP视频传输方案,提供HDMI和OV5640摄像头两种例程_第7张图片
代码架构如下:
FPGA的GTP视频传输方案,提供HDMI和OV5640摄像头两种例程_第8张图片
之所以搞两个版本,是因为输入时序不一样,HDMI的输入时序是标准的VGA时序,而OV5640输入时序是非VGA时序,用以验证这个方案的通用性。
另外,虽然这是环通测试,但稍加修改就能做成板对板的传输。
板子连接如下:

OV5640输出结果:
FPGA的GTP视频传输方案,提供HDMI和OV5640摄像头两种例程_第9张图片
HDMI输出结果:
FPGA的GTP视频传输方案,提供HDMI和OV5640摄像头两种例程_第10张图片
最后:由于整个工程太过复杂,一两句说不清楚,需要工程源码的兄弟联系我吧

你可能感兴趣的:(菜鸟FPGA光通信专题,fpga开发,音视频)