发布时间 : 星期四 文章camera - link更新完毕开始阅读
人才
一种基于Camera Link 接口的图像采集和处理系统
作者:华中光电技术研究所 彭春萍 来源:电子设计应用2009年第3期
引言
随着CMOS图像传感器制造工艺的不断提高,数字相机的分辨率和帧频也不断提高,这使得相机和图像采集卡之间的通信速
率变得非常重要。Camera Link是一种基于视频应用的接口,解决了视频数据输出和采集之间的速度匹配问题。
某项目的前端数字相机分辨率高达1400×1024,帧频为100Hz,要求将数字相机的图像采集下来并存储,经过DSP处理完
后,再转换成模拟的PAL制式视频供监视器显示。本文主要介绍了该项目的硬件结构部分,讨论了基于Camera Link接口的图像采集的逻辑时序部分。
图1 系统硬件结构框图
图像采集和处理系统硬件平台
整个系统的结构如图1所示,系统包括以FPGA为核心的数字图像采集单元,以DSP为核心的图像处理单元以及图像显示单
元。其中图像采集单元由信号输入端口SDR26接插件开始,Camera Link的差分信号经过三个芯片转换后变成LVTTL信号, LVTTL
信号直接连至FPGA,由FPGA负责控制采集时序,DAC由FPGA控制进行显示。
图2 状态转移示意图
由于采集、处理、显示均要访问存储器,为了降低成本,选用普通的异步SRAM。各个SRAM的读写逻辑由FPGA控制,采
用三帧存储器乒乓方式进行切换,每一帧时读取状态变量,决定各个存储器的操作方式。这里共将存储器分为三组:SRAM组A、SRAM组B、 SRAM组C。图2为状态转移图,共有四种状态:系统复位时为Idel状态,复位信号变为1后,在帧同步信号下降沿的触发下,依次在Frame k、Frame k+1和Frame k+2三个状态中切换。
Frame k状态时,FPGA将采集的图像写至SRAM组A,DSP从SRAM组B中读数进行处理,FPGA从SRAM组C中读数
送至DAC进行显示。
Frame k+1状态时,FPGA将采集的图像写至SRAM组B,DSP从SRAM组C中读数进行处理,FPGA从SRAM组A中
读数送至DAC进行显示。
Frame k+2状态时,FPGA将采集的图像写至SRAM组C,DSP从SRAM组A中读数进行处理,FPGA从SRAM组B中
读数送至DAC进行显示。
当FPGA采集完一帧图像后,向DSP发出中断申请信号,DSP响应中断,读取图像数据进行处理,将处理完的结果写在特定
的存储器空间内。然后由FPGA读取采集的图像数据和DSP处理完的结果,将二者叠加后,按照PAL制式时序向DAC芯片送视频数据,这样监视器就可以输出标准的PAL制式图像。
Camera Link接口的特点
Camera Link的信号包括视频、相机控制、串行通信三个部分。视频部分是Camera Link的核心,主要包括5对差分信号,
即X0-~X0+、X1-~X1+、X2-~X2+、X3-~X3+、Xclk-~Xclk+;相机控制包括4对差分信号,即CC1-~CC1+、CC2-~CC2+、CC3-~CC3+、CC4-~CC4+;串行通信部分包括2对差分信号,即SerTC-~SerTC+和SerTFG-~ SerTFG+。
视频部分发送端将28位的数据信号和1个时钟信号,按7:1的比例将数据转换成5对差分信号,接收端则将5对差分信号转换成28位的数据信号和1个时钟信号。对于视频部分的5对差分输出信号,选用Channel Link转TTL/CMOS的芯片DS90CR288作为接收芯片,接收4对差分数据信号和1对差分时钟信号,输出28位数据和1路时钟信号,且该芯片能通过的最高时钟频率可达85MHz。
相机控制部分包括4对差分信号,相机生产厂商可以根据不同的相机对这四个信号进行不同的定义。这里选用差分驱动芯片
DS90LV07A,该芯片刚好可以驱动4对差分信号。
串行通信部分包括2对差分信号,串行通信规定为异步通信模式,通过串行通信可以对相机的各种参数进行设置。选用具有1
对差分发送和1对差分接收的芯片DS90LV019就可将差分对信号转换成LVTTL信号,之后再经RS-232电平转换芯片MAX232转换成RS-232电平,这样可直接和微机通信。
由于单个Camera Link芯片只有28位数据可用,有些相机为了提高传输数据的效率,需要几个Camera Link芯片。按使
用要求不同,分为三种配置:基本配置为一个Camera Link芯片,一根电缆;中档配置为两个Camera Link芯片,一根电缆;全部配置为两个Camera Link芯片,两根电缆。
由于选用的相机属于基本配置,因此这里主要介绍这种配置下的28位数据的详细说明。28位数据信号中包括三个数据端口:
A口(8位)、B口(8位)、C口(8位),和四个视频控制信号FVAL(帧有效)、DVAL(数据有效)、LVAL(行有效)、SPARE(空,暂时未用)。经过Camera Link芯片转换后的时钟信号是整个相机的同步驱动信号,所有的数据和视频控制信号都和该时钟信号同步。
图3 相机的时序图
Camera Link时序控制逻辑设计
这里选用的相机采用的是下降沿触发的方式。在FPGA编写逻辑时序时要格外注意。结合相机的说明书和示波器测量结果,得
到时序图如图3所示。
相机可以配置成8位或10位的输出位宽,40MHz像素时钟或80MHz像素时钟,2×40MHz或2×80MHz的数据输出速率。
当相机配置在100Hz帧频、像素时钟为80MHz时,因相机在一个像素周期内输出2个数据,所以数据速率高达160MHz。由该时序图可知,数据在时钟信号的下降沿有效,帧同步信号和行同步信号均和时钟下降沿严格对齐。
Camera Link采集8位数据的逻辑代码关键之处在于产生存储器的地址信号、存储器写信号以及在对应的地址处将数据稳定
地写进存储器。我们用像素时钟产生列地址计数器,行同步信号产生行地址计数器,二者拼接产生存储器的地址信号。这样产生的有效地址虽然不连续,但意义明确,而且有利于显示部分的隔行隔列显示。对于行同步清零信号,由于行同步上升沿与帧同步上升沿严格同步,所以专门产生了一个行同步地址清零信号CamL_Add_Clr。对于8位的数据,可将4个有效数据拼接成32位后再存储,这样做的好处在于降低FPGA读写存储器的速度。下面是用Verilog写的关于Camera Link数据采集部分的源代码:
always@(posedge camlink _CLK) begin
reg1_camlink_DVAL <= camlink_DVAL; end
reg[9:0] CamL_PCNT1 ; reg[10:0] CamL_HCNT1 ; always@(posedge camlink_CLK) begin
if(camlink_DVAL==0) CamL_PCNT1 <= 10'h0; else
CamL_PCNT1 <= CamL_PCNT1+1; end
reg [24: 0] CamL_AClr_Cnt; wire CamL_Add_Clr;
always@(posedge camlink_CLK) begin
if(camlink_FS== 0)
CamL_AClr_Cnt <= 24'h000000; else if(CamL_AClr_Cnt>24'h110000) CamL_AClr_Cnt <= 24'h120000;
else
CamL_AClr_Cnt <= CamL_AClr_Cnt+1; end
assign CamL_Add_Clr = (CamL_AClr_Cnt>=24'h000100)&&(CamL_AClr_Cnt<24'h001000); always@(posedge reg1_camlink_DVAL) begin if(CamL_Add_Clr == 1) CamL_HCNT1 <= 0; else
CamL_HCNT1 <= CamL_HCNT1+1; end
always@(posedge camlink_CLK) begin
sample_addr <={1'b0,CamL_HCNT1[9:0],CamL_PCNT1[9:1]}; end
always@(posedge camlink_CLK) begin
if(camlink_DVAL==1)
case(CamL_PCNT1[0])//case(CamL_PCNT[0]) 1'b0 :
low_16bit <= {camlink_B,camlink_A};
1'b1 : high_16bit<= {camlink_B,camlink_A}; endcase end
always@(posedge CamL_PCNT1[0]) begin
sample_data32 <= {low_16bit,high_16bit}; end
assign sram_we=(reg1_camlink_DVAL==1)?(~(CamL_PCNT1[0])):1;
图4是ModelSim仿真时序图。由图可以看出,在写信号的上升沿,地址和数据都处于稳定期,从而确保了图像采集的正确
性。实验证明采集的结果正确。
图4 ModelSim仿真时序图
结语
本文结合实际的工程项目,介绍了Camera Link接口的规范和时序,详细讨论了FPGA控制采集的逻辑时序。这种信号采集
方法还可以用于其它基于Camera Link接口的高速图像数据采集的场合中。