【FPGA&图像处理】FPGA通过DS90CR287芯片实现cameralink输出(verilog代码)

创作时间:2021-04-12

1.回顾
之前写过一篇长文博客,深受各位读者关注。

【相机标准】我的cameralink协议学习笔记(个人中文翻译,以及理解
内容包括:
1.第一章 简介
2.第二章 信号需求
3.第三章 端口分配
4.第四章 bit分配
5.第五章 连接器
附录A 芯片组标准
附录B API 功能
附录C 不同配置(base medium full)下的bit 分配
附录D cameralink电缆信息

2.添新
今天,我打算再添加一些内容。
主要把第四章 bit分配这里详述,
并举例说明:

FPGA+DS90CR287芯片,实现cameralink的输出,以及verilog 代码。

2.1 DS90CR287是并转串的cameralink芯片

【FPGA&图像处理】FPGA通过DS90CR287芯片实现cameralink输出(verilog代码)_第1张图片
2.2 管脚分配
我以输出16bit 的灰度图像数据,base模式,为例。
参照《cameralink学习笔记》中管脚分配,如下:
【FPGA&图像处理】FPGA通过DS90CR287芯片实现cameralink输出(verilog代码)_第2张图片
【FPGA&图像处理】FPGA通过DS90CR287芯片实现cameralink输出(verilog代码)_第3张图片
2.3 verilog代码如下:
(输出16bit 的灰度图像数据,base模式)

//ds90cr287 cameralink 输出
//输出16bit 的灰度图像数据,base模式
//
module  cl287_base_16bit_Output(
    //for  camera input
    input  clk,
	input  rst,
	input  cl_fval,
	input  cl_lval,
	input  [15:0] cl_data,
	//for  ds90cr287
	output wire      CR287_TxClk,
	output reg[27:0] CR287_TxIn,
	output reg       CR287_PD=1'b0	
	);

assign 	CR287_TxClk=clk;


//delay ds90cr287 power up
reg[7:0]cnt_delay=1'b0;

always@(posedege clk)begin
	if(cnt_delay=8'hFF)begin
	    cnt_delay<=cnt_delay;
	    CR287_PD<=1'b1;
	end
	else  begin 
		 CR287_PD<=1'b01;
		 cnt_delay<=cnt_delay+1'b1;
	end	
end

//base mode,16x1,ds90cr287_output
//按照《cameralink协议-第四章 bit分配》,
//一定注意管脚序号
always@(posedege clk)begin
	//Port A
	CR287_TxIn[00]<=cl_data[00];//CR287_TX00--Port_A0--16bitx1_A0
	CR287_TxIn[01]<=cl_data[01];//CR287_TX01--Port_A1--16bitx1_A1
	CR287_TxIn[02]<=cl_data[02];//CR287_TX02--Port_A2--16bitx1_A2
	CR287_TxIn[03]<=cl_data[03];//CR287_TX03--Port_A3--16bitx1_A3
	CR287_TxIn[04]<=cl_data[04];//CR287_TX04--Port_A4--16bitx1_A4
	CR287_TxIn[06]<=cl_data[05];//CR287_TX06--Port_A5--16bitx1_A5
	CR287_TxIn[27]<=cl_data[06];//CR287_TX27--Port_A6--16bitx1_A6
	CR287_TxIn[05]<=cl_data[07];//CR287_TX05--Port_A7--16bitx1_A7
	//Port B
	CR287_TxIn[07]<=cl_data[08];//CR287_TX07--Port_B0--16bitx1_A8
	CR287_TxIn[08]<=cl_data[09];//CR287_TX08--Port_B1--16bitx1_A9
	CR287_TxIn[09]<=cl_data[10];//CR287_TX09--Port_B2--16bitx1_A10
	CR287_TxIn[12]<=cl_data[11];//CR287_TX12--Port_B3--16bitx1_A11
	CR287_TxIn[13]<=cl_data[12];//CR287_TX13--Port_B4--16bitx1_A12
	CR287_TxIn[14]<=cl_data[13];//CR287_TX14--Port_B5--16bitx1_A13
	CR287_TxIn[10]<=cl_data[14];//CR287_TX10--Port_B6--16bitx1_A14
	CR287_TxIn[11]<=cl_data[15];//CR287_TX11--Port_B7--16bitx1_A15
	//Port C
	CR287_TxIn[15]<=1'b0;//CR287_TX15--Port C0--16bitx1_nc//实际中,不用的给0就行
	CR287_TxIn[18]<=1'b0;//CR287_TX18--Port C1--16bitx1_nc//实际中,不用的给0就行
	CR287_TxIn[19]<=1'b0;//CR287_TX19--Port C2--16bitx1_nc//实际中,不用的给0就行
	CR287_TxIn[20]<=1'b0;//CR287_TX20--Port C3--16bitx1_nc//实际中,不用的给0就行
	CR287_TxIn[22]<=1'b0;//CR287_TX22--Port C5--16bitx1_nc//实际中,不用的给0就行
	CR287_TxIn[16]<=1'b0;//CR287_TX16--Port C6--16bitx1_nc//实际中,不用的给0就行
	CR287_TxIn[17]<=1'b0;//CR287_TX17--Port C7--16bitx1_nc//实际中,不用的给0就行
    //VAL
	CR287_TxIn[23]<=1'b0;   //TX23--SPARE--16bitx1_nc//实际中给0就行
	CR287_TxIn[24]<=cl_lval;//TX24--LVAL
	CR287_TxIn[25]<=cl_fval;//TX25--FVAL
	CR287_TxIn[26]<=cl_lval;//TX26--DVAL//实际中给lval就行
	
  
end

endmodule

3.问题
如何根据视频的分辨率、帧频等,来确定CLK。
一般就是和实际的像素时钟一致,如果像素时钟超过CL287最大时钟85Mhz,就得考虑使用DDR缓存进行降时钟。
关于sensor display geometry settings(比如:一次出几个像素,AB,A,ABCD等),这个“相机和采集卡设置”约定好就行,和CL287没有关系。


THE END~

在这里插入图片描述

【MATLAB-app】系列教程(含视频)00_csdn上第一套关于matlab appdesigner系列“视频课”来啦~~

【图像算法&MATLAB】一文讲明白:图像的直方图均衡化(附作者自编源代码)

【探测器与相机标准】我对图像(图像传感器/相机)“非均匀性”的理解与学习笔记

你可能感兴趣的:(cameralink)