硬件芯片实现cameralink图像传输
常用的cameralink收发芯片有DS90CR287和288,287发送288接收。只需要向芯片提供像素时钟和cameralink协议中的28位数据信号就可以实现基本的图像数据传输非常方便。关于cameralink协议的常识详见http://t.csdn.cn/XtFud
![](https://img-blog.csdnimg.cn/img_convert/0de1c45cedcf9ae541ed7a7903e94120.png)
同样地,接收方可以直接接收28位数据还原位图像数据信号。
发送端代码:
示例是之前做的16位红外相机上使用cameralink发送接收模块,使用的是287、288芯片,base模式
/* Document info
document class : RES
module name : CameraLink_Out
module purpose : video out
version : V1.0
author : mayidianzi
*/
///
`timescale 1ns / 1ps
module Clink(
input I_img_frame,
input I_img_line,
input[15:0] I_img_data,
input I_img_clk,
output O_img_clk,
output[27:0] O_tx_data
);
/ parameter set \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
internal signal \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//wire S_data_vld ;
//wire S_data_vld_1 ;
//wire S_img_clk ;
//wire S_img_fram ;
//wire S_img_line ;
//wire[15:0] S_img_data ;
//reg[2:0] S_count_t ;
assign O_img_clk = I_img_clk;
//assign S_data_vld = (S_count_t==1) ? 1 : 0;
//assign S_data_vld_1 = S_data_vld & I_img_line;
wire[7:0] S_port_a,S_port_b,S_port_c;
assign S_port_a = I_img_data[7:0];
assign S_port_b = I_img_data[15:8];
assign S_port_c = 8'h0000;
assign O_tx_data[4:0] = S_port_a[4:0];
assign O_tx_data[5] = S_port_a[7];
assign O_tx_data[6] = S_port_a[5];
assign O_tx_data[9:7] = S_port_b[2:0];
assign O_tx_data[11:10] = S_port_b[7:6];
assign O_tx_data[14:12] = S_port_b[5:3];
assign O_tx_data[15] = S_port_c[0];
assign O_tx_data[17:16] = S_port_c[7:6];
assign O_tx_data[22:18] = S_port_c[5:1];
assign O_tx_data[23] = 0; //spare
assign O_tx_data[24] = I_img_line; //LVAL,line valid
assign O_tx_data[25] = I_img_frame; //FVAL,frame valid
assign O_tx_data[26] = 1; //DVAL,data valid
assign O_tx_data[27] = S_port_a[6];
instance \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ila_0 ila_0_i(
.clk(I_img_clk),
.probe0(I_img_data),
.probe1(I_img_line),
.probe2(I_img_frame)
);
main programe \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
endmodule
接收端代码
/* Document info
document class : RES
module name : CameraLink_Out
module purpose : video out
version : V1.0
author : mayidianzi
*/
///
`timescale 1ns / 1ps
module Clink_B(
input[27:0] I_tx_data, //
input I_reset,
input I_img_clk,
output reg[15:0] O_img_data, //S_sensor_data
output reg O_img_frame, //S