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代码,weixin:  tecliu_23 

QQ:296880551

### 使用FPGA实现CameraLink接口的方法 #### CameraLink协议简介 CameraLink是一种专为机器视觉应用设计的高速串行通信标准,广泛应用于工业自动化、医疗成像等领域。该协议支持多种数据传输速率和配置选项,能够满足不同应用场景的需求。 #### FPGA平台的选择 为了实现高效的CameraLink接口,在选择FPGA平台时应考虑其性能指标与资源利用率。Kintex-7系列因其强大的逻辑单元数量、丰富的I/O资源以及内置硬核处理器而成为理想之选[^2]。 #### 设计流程概述 1. **硬件连接** - 将CameraLink相机通过专用电缆接入FPGA开发板上的相应接口。 - 确认电源供应稳定可靠,并按照制造商指南完成所有必要的电气隔离措施。 2. **IP Core集成** - 利用Xilinx Vivado工具链中的AXI-UART Lite IP core来建立主机PC端与FPGA之间的低级UART通信通道[^1]。 - 导入第三方提供的或自行开发的CameraLink控制器IP core至项目工程中,确保兼容所选用的具体型号规格。 3. **固件编程** - 编写Verilog/VHDL代码定义内部状态机,负责解析来自上位机指令并执行相应的操作(如设置帧率、调整曝光时间等)。 - 对于图像流传输部分,则需遵循CameraLink协议规定的数据打包格式进行编码解码工作;同时要考虑到实时性和带宽效率问题。 4. **驱动程序编写** - 针对目标操作系统(Windows/Linux),开发专门的应用层API函数库供应用程序调用访问底层硬件功能。 - 提供图形化界面让用户可以方便快捷地修改各项参数设定而不必直接接触寄存器层面的操作。 5. **测试验证** - 构建完整的原型系统后进行全面的功能性检测,包括但不限于连通性检查、压力负载试验等方面。 - 记录下可能出现的各种异常情况及其解决办法作为后续优化改进的基础资料保存起来。 ```verilog // Verilog示例:简单的CameraLink接收模块初始化片段 module cameralink_rx ( input wire clk, input wire reset_n, // ...其他信号声明... ); reg [7:0] rx_data; wire frame_start; always @(posedge clk or negedge reset_n) begin if (!reset_n) // 初始化代码 else // 正常运行状态下对接收到的数据包进行处理 end assign frame_start = /* 插入判断新一帧开始条件 */; ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值