FPGA实现cameralink高清相机解码

        关于cameralink协议基本原理,这里不再赘述,CSDN和百度文库有大量的关于cameralink协议解读的文章,不过需要注意的是网上大量文章都是讲述如何用解码芯片(多是DS90CR288A),这些文章都写得很好,讲清了cameralink的原理。

只是这些文章绝大部分是基于芯片解码,并不是完全由FPGA实现的,当时自己做设计的时候,有一个小地方被这些文章稍稍误导了,主要是该芯片的数据组合顺序很古怪,在FPGA里面参考了这些组合顺序,后面发现在FPGA里面使用这种数据组合顺序是错的。

这里将自己用FPGA实现FPGA实现2048*2048分辨率下  cameralink CMOS相机解码的过程简单记录一下 。

1、相机是分辨率为2048*2048的cameralink接口的黑白相机;传感器使用SONY的CMOS SENSOR。

2、数据传输方式是LVDS,采用cameralink的Medium模式,采用A、B、C、D四个端口传输数据;E,F端口空置;

3、相机是8bit灰度数据,所以每个端口负责传输一个像素。

3、时钟频率是74.25M,每一个时钟下传输4个像素的数据,等于是像素频率是297M;

4、最容易错的是解码拿到数据以后数据的组合方式,如果看了芯片解码的顺序估计很多人都会犯晕的,不理解的。所以顺序还是参考正常的LVDS解码顺序,如下图,注意三个关键控制信号的位置;

5、下图是截图的24bit RGB屏幕的数据,其实是一样的,把三个8位的R、G、B颜色数据换成cameralink里面的三个8位的端口A、B、C即可。

                              

6、上图可以清楚的解释base模式下的数据传输方式,类似于lvds单通道传输。如果Medium模式,则就是LVDS的双通道传输,再加一组数据通道即可,控制信号可以共用第一组中的DVAL、FVAL、LVAL

5、解码以后再ila看到的结果

                                     

6、验证行数是不是2048行,说明解码非常完美

                                      

 

附////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

1、cameralink基础原理

       视频传输模式分为三种配置:Base(基本或初级)配置为一个Camera Link芯片,一根电缆; Medium(中档或中级)配置为两个Camera Link芯片,一根电缆; Full(全部或高级)配置为两个Camera Link芯片,两根电缆。

Base模式需要一块ChannelLink的芯片和一个CameraLink机械接口,发送器在每个像素时钟里发送 28bits数据,包括4bits的图像使能信号和24bits的图像数据。4bits图像使能信号包括:帧有效信号 (FVAL),高电平有效,它的反相即为帧同步信号;行有效信号(LVAL),高电平有效,它的反相即为行同步信号;数据有效信号(DVAL),只有在数据有效信号为高电平时,图像采集卡才接受图像信息。24bits图像数据可以是一个像素点的24-bitRGB数据、3个像素点的8-bit黑白图像数据、12个像素点的10-bit12-bit的黑白图像数据、一个像素点的14-bit16-bit的黑白图像数据。

Medium模式需要两块Channe1Link的芯片和两个CameraLink机械接口,发送器在每个像素时钟里发送4Obits数据,包括4bits的图像使能信号和36bits的图像数据。4bits图像使能信号与Base模式下相同。36bits图像数据可以是一个像素点的36-bit或30-bitRGB数据、4个像素点的8-bit黑白图像数据、3到4个像素点的10-bit或12-bit的黑白图像数据。

Full模式需要三块Channe1Link的芯片和两个CameraLink机械接口,发送器在每个像素时钟里发送68bits数据,包括4bits的图像使能信号和64bits的图像数据。4bits图像使能信号与Base模式下相同。

端口分配

对于Base模式,28位数据信号中包括三个数据端口:A口(8位)、B口(8位)、C口(8位);四个视频控制信号FVAL(帧有效)、DVAL(数据有效)、LVAL(行有效)、SPARE(空,暂时未用)。

在Base(初级)结构中,端口A,B和C被分配到唯一的Cameralink驱动器/接收器对上;在Medium(中级)结构中,端口A、B和C被分配到第一个驱动器接收器对上,端口D,E和F被分配到第二个驱动器/接收器对上;在FULL(高级)结构中,端口A、B和C被分配到第一个驱动器/接收器对上,端口D,E和F被分配到第二个驱动器/接收器对上,端口G和H被分配到第三个驱动器/接收器对上。

如果相机在每个周期内仅输出一个像素,那么就使用分配给像素A的端口;如果相机在每个周期内输出两个像素,那么使用分配给像素A和像素B的端口;如果在每个周期内仅输出三个像素,那么就使用分配给像素A,B和C的端口;依此类推至相机每周期输出八个像素,那么分配给A到H的八个端口都将被使用。

 

///////////可以提供各种模式下的cameralink相机解码方案 verilog代码,QQ:296880551

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章