之前在闲鱼上被一名神秘大佬批评道:你拥有这么好的板子怎么不玩点高端的东西? 于是乎我陷入了沉思。。。 我手里的板子都有GTP、GTX和PCIE,而我居然把他们无视了,那玩儿FPGA还玩儿个毛? 开发板:米联客A7-35T; IDE:vivado2019.1; 参考代码:米联客A7-35T开发板配套例程; 实现功能框图如下:
HDMI工程:输入HDMI1080P(ADV7611解码),输出HDMI1080P; 工程BD如下: 代码架构如下:
GTP想要完全搞懂的话非一日之功,最快的方式就是先用我来,在用的过程中再去慢慢理解,Xilinx也是这么想的,所以提供了完美的参考例程,在配置生成好GTP的IP后,再手动生成官方参考例程,然后再添加自己的设计就可以用了,置于内部原理和逻辑先别管,能用起来再说。 GTP官方例程例程的顶层如下:
红框内的信号:错位指示,哪一位为1就该表哪个字节错位了,在解码时就根据他来对齐错位的数据,NB吧?至于为什么是这样,恕我直言,弄懂了感觉也没什么N用。 数据对齐逻辑核心部分如下:
K28.5编解码: K28.5具体细节我也不懂,只知道bc是k28.5 的控制字符,那么一个32位的数据位就可以由我们自定义了,除视频有效数据外,其他控制信号自定义如下:
编码要复杂一些,得根据视频时序来,解码就简单多了,具体去看代码吧。 需要说明的是,代码只支持视频场同步信号为高电平,如果你的输入是低电平,请做反向处理。 OV5640工程:输入OV5640-720P,输出HDMI1080P; 工程BD如下:
代码架构如下:
之所以搞两个版本,是因为输入时序不一样,HDMI的输入时序是标准的VGA时序,而OV5640输入时序是非VGA时序,用以验证这个方案的通用性。 另外,虽然这是环通测试,但稍加修改就能做成板对板的传输。 板子连接如下:
OV5640输出结果:
HDMI输出结果:
最后:由于整个工程太过复杂,一两句说不清楚,需要工程源码的兄弟联系我吧