溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

FPGA設(shè)計(jì)——CMOS攝像與HDMI顯示(MIPI版)

發(fā)布時(shí)間:2020-09-03 09:11:14 來(lái)源:網(wǎng)絡(luò) 閱讀:20369 作者:shugenyin 欄目:開(kāi)發(fā)技術(shù)

1. 概述 

本設(shè)計(jì)采用FPGA技術(shù),將CMOS攝像頭(MIPI接口)的視頻數(shù)據(jù)經(jīng)過(guò)采集、存儲(chǔ)、幀率轉(zhuǎn)換及格式轉(zhuǎn)換,最終通過(guò)HDMI接口顯示在電視屏幕上。


2. 硬件系統(tǒng)框圖

CMOS采用300萬(wàn)像素的攝像頭芯片,其他部分可參考博文“FPGA設(shè)計(jì)——CMOS攝像與HDMI顯示(DVP版)”。

FPGA設(shè)計(jì)——CMOS攝像與HDMI顯示(MIPI版)


3. FPGA邏輯框圖

FPGA各部分邏輯模塊如下圖所示:

FPGA設(shè)計(jì)——CMOS攝像與HDMI顯示(MIPI版)

  • MIPI DECODE,解析MIPI串口數(shù)據(jù);

  • I2C Master,配置CMOS芯片;

  • DDR2 Control,配置與控制DDR2芯片組,實(shí)現(xiàn)讀寫(xiě)仲裁;

  • FIFO Write,將采集到的視頻數(shù)據(jù)跨時(shí)鐘域地寫(xiě)進(jìn)DDR2中;

  • FIFO Read,將DDR2中的數(shù)據(jù)跨時(shí)鐘域地讀出給后續(xù)圖像處理模塊;

  • Frame Buffer,負(fù)責(zé)FIFO Write和FIFO Read的調(diào)度,實(shí)現(xiàn)幀率轉(zhuǎn)換;

  • RAW to RGB,將原始RAW8數(shù)據(jù)轉(zhuǎn)換成RGB888數(shù)據(jù);

  • RGB to YUV,將RGB888數(shù)據(jù)轉(zhuǎn)換成YUV422數(shù)據(jù);

  • HDMI TX,將處理好的視頻數(shù)據(jù)發(fā)送給HDMI PHY芯片,同時(shí)通過(guò)I2C接口配置HDMI PHY芯片。


4. MIPI解碼模塊

這里以4-lan 10bit模式為例,介紹MIPI解碼模塊設(shè)計(jì)。

FPGA設(shè)計(jì)——CMOS攝像與HDMI顯示(MIPI版)

  • DDIO,負(fù)責(zé)將DDR模式的時(shí)鐘和數(shù)據(jù)轉(zhuǎn)換成單邊沿的數(shù)據(jù)與時(shí)鐘(上升沿);

  • Serial to Parallel,將串行數(shù)據(jù)轉(zhuǎn)換成并行數(shù)據(jù)(8比特);

  • 8bit to 10bit,負(fù)責(zé)解析出10bit模式的4通道數(shù)據(jù);

  • DVP Generate,生成DVP格式的視頻流。

下面再介紹一下8bit到10bit的原理,關(guān)于更多的MIPI原理可參考博文"海思Hi3516A(2)MIPI":

在數(shù)據(jù)傳輸時(shí),以通道1->通道2->通道3->通道4->通道1...為循環(huán)傳輸8bit數(shù)據(jù),每5個(gè)8比特?cái)?shù)據(jù)組成4個(gè)10比特?cái)?shù)據(jù),第1->第4個(gè)8比特?cái)?shù)據(jù)為4個(gè)10比特?cái)?shù)據(jù)的高8位,第5個(gè)8比特?cái)?shù)據(jù)為4個(gè)10比特?cái)?shù)據(jù)的低2位的從高到低的拼接。


5. CMOS配置

將攝像頭芯片配置成2048*1536分辨率25幀的視頻輸出,參考寄存器配置如下:

module i2c_cfg_par(
	input  clk,
	input  [07:0] lut_index,
	output reg [23:0] lut_data
);

always @(*)
begin
	case(lut_index)
	//sc3035 setting
	'd0 : lut_data <= 'h0103_01;// soft reset
	'd1 : lut_data <= 'h0100_00;
	'd2 : lut_data <= 'h5500_31; // rnc sel
	'd3 : lut_data <= 'h4416_11;
	'd4 : lut_data <= 'h5501_a4; // bit ctrl 
	'd5 : lut_data <= 'h4e03_03; // aec
	'd6 : lut_data <= 'h4e08_00;
	'd7 : lut_data <= 'h4e09_1f;
	'd8 : lut_data <= 'h4e01_30;
	'd9 : lut_data <= 'h422e_00;
	'd10 : lut_data <= 'h422f_af;
	'd11 : lut_data <= 'h4306_20;
	'd12 : lut_data <= 'h4307_17;
	'd13 : lut_data <= 'h430b_54;
	'd14 : lut_data <= 'h4303_20;
	'd15 : lut_data <= 'h4309_20;
	'd16 : lut_data <= 'h4308_08;
	'd17 : lut_data <= 'h431e_16;
	'd18 : lut_data <= 'h431f_16;
	'd19 : lut_data <= 'h4320_18;
	'd20 : lut_data <= 'h4321_18;
	'd21 : lut_data <= 'h4322_18;
	'd22 : lut_data <= 'h4323_18;
	'd23 : lut_data <= 'h430c_0b;
	'd24 : lut_data <= 'h430f_07;
	'd25 : lut_data <= 'h4310_42;
	'd26 : lut_data <= 'h4324_07;
	'd27 : lut_data <= 'h4325_07;
	'd28 : lut_data <= 'h435b_ca;
	'd29 : lut_data <= 'h435e_07;
	'd30 : lut_data <= 'h435f_10;
	'd31 : lut_data <= 'h4334_00;
	'd32 : lut_data <= 'h4F01_04;
	'd33 : lut_data <= 'h4F04_01;
	'd34 : lut_data <= 'h4F05_30;
	'd35 : lut_data <= 'h4626_01;
	'd36 : lut_data <= 'h4635_60;
	'd37 : lut_data <= 'h4631_84;
	'd38 : lut_data <= 'h4636_8d; //0607
	'd39 : lut_data <= 'h4633_3f;
	'd40 : lut_data <= 'h4639_80;
	'd41 : lut_data <= 'h4622_1e;
	'd42 : lut_data <= 'h4627_02;
	'd43 : lut_data <= 'h4038_a4;
	'd44 : lut_data <= 'h4621_18;
	'd45 : lut_data <= 'h463a_1c;
	'd46 : lut_data <= 'h4637_be;
	'd47 : lut_data <= 'h4638_85;
	'd48 : lut_data <= 'h463c_48; // ramp cur
	'd49 : lut_data <= 'h6780_ff; // dpc
	'd50 : lut_data <= 'h6781_04;
	'd51 : lut_data <= 'h6785_10;
	'd52 : lut_data <= 'h401e_e0; // [4] 0:close tempsens
	'd53 : lut_data <= 'h4662_82;
	'd54 : lut_data <= 'h4d0d_00; // close random code
	'd55 : lut_data <= 'h4039_20;
	'd56 : lut_data <= 'h403a_35; //74.25M pclk
	'd57 : lut_data <= 'h403b_00;
	'd58 : lut_data <= 'h4306_46;
	'd59 : lut_data <= 'h430b_a0;
	'd60 : lut_data <= 'h4038_f8; //pump clk div
	'd61 : lut_data <= 'h420c_05;  //hts=3000
	'd62 : lut_data <= 'h420d_dc;  
	'd63 : lut_data <= 'h420e_06;  //vts=1584
	'd64 : lut_data <= 'h420f_30;
	'd65 : lut_data <= 'h4202_00; // ystart=48
	'd66 : lut_data <= 'h4203_00; 
	'd67 : lut_data <= 'h4206_06; // yend=1545   1545 rows selected
	'd68 : lut_data <= 'h4207_08;
	'd69 : lut_data <= 'h4200_01; // xstart= 264
	'd70 : lut_data <= 'h4201_08;
	'd71 : lut_data <= 'h4204_09; // xend = 2319  2056 cols selected
	'd72 : lut_data <= 'h4205_0f;
	'd73 : lut_data <= 'h4211_04;  // xstart
	'd74 : lut_data <= 'h4213_04;  // ystart 
	'd75 : lut_data <= 'h4208_08;  //2048x1536
	'd76 : lut_data <= 'h4209_00;
	'd77 : lut_data <= 'h420a_06;
	'd78 : lut_data <= 'h420b_00;
	'd79 : lut_data <= 'h4312_06; // sa1 timing
	'd80 : lut_data <= 'h4340_04;
	'd81 : lut_data <= 'h4341_d2;
	'd82 : lut_data <= 'h4342_01;
	'd83 : lut_data <= 'h4343_80;
	'd84 : lut_data <= 'h435d_2a; // cmp timing
	'd85 : lut_data <= 'h4348_04;
	'd86 : lut_data <= 'h4349_d2;
	'd87 : lut_data <= 'h434a_01;
	'd88 : lut_data <= 'h434b_80;
	'd89 : lut_data <= 'h4368_03; // auto precharge
	'd90 : lut_data <= 'h4369_30;
	'd91 : lut_data <= 'h436a_06;
	'd92 : lut_data <= 'h436b_30;
	'd93 : lut_data <= 'h4367_05;
	'd94 : lut_data <= 'h430e_17;
	'd95 : lut_data <= 'h4d08_00; // pclk inv
	'd96 : lut_data <= 'h403f_82;
	'd97 : lut_data <= 'h4c03_28; //fifo sram read position
	'd98 : lut_data <= 'h4c00_45; // Dig SRAM reset
	'd99 : lut_data <= 'h4c03_02; //anti smear
	'd100 : lut_data <= 'h4211_06;
	'd101 : lut_data <= 'h4213_06;
	'd102 : lut_data <= 'h4620_82;
	'd103 : lut_data <= 'h4630_b1; //0x67
	'd104 : lut_data <= 'h4635_60; //0x66
	'd105 : lut_data <= 'h4630_67;
	'd106 : lut_data <= 'h4626_11;
	'd107 : lut_data <= 'h463c_88; //fine gain correction
	'd108 : lut_data <= 'h4312_00;
	'd109 : lut_data <= 'h4333_80;
	'd110 : lut_data <= 'h4334_a0;
	'd111 : lut_data <= 'h4620_62;  //0xd2
	'd112 : lut_data <= 'h4300_10;
	'd113 : lut_data <= 'h4627_06;
	'd114 : lut_data <= 'h4312_06;
	'd115 : lut_data <= 'h4340_03;
	'd116 : lut_data <= 'h4341_80;
	'd117 : lut_data <= 'h4334_20;
	'd118 : lut_data <= 'h431e_10;
	'd119 : lut_data <= 'h431f_13;
	'd120 : lut_data <= 'h4320_18;
	'd121 : lut_data <= 'h4321_18;
	'd122 : lut_data <= 'h4039_30;
	'd123 : lut_data <= 'h403a_2a; //118.8M pclk
	'd124 : lut_data <= 'h403b_00;
	'd125 : lut_data <= 'h4640_02;
	'd126 : lut_data <= 'h4641_01;
	'd127 : lut_data <= 'h6000_21;
	'd128 : lut_data <= 'h4340_04;
	'd129 : lut_data <= 'h4342_02;
	'd130 : lut_data <= 'h4343_60;
	'd131 : lut_data <= 'h434a_02;
	'd132 : lut_data <= 'h434b_60;
	'd133 : lut_data <= 'h4306_66;
	'd134 : lut_data <= 'h4367_01;
	'd135 : lut_data <= 'h430b_ff;
	'd136 : lut_data <= 'h4300_20;
	'd137 : lut_data <= 'h431f_10;
	'd138 : lut_data <= 'h4f05_e0;
	'd139 : lut_data <= 'h4635_62;
	'd140 : lut_data <= 'h4620_63; //d2
	'd141 : lut_data <= 'h4630_67; //a9,
	'd142 : lut_data <= 'h4633_3d;
	'd143 : lut_data <= 'h4c00_00; //[2]: 0  mipi->fifo
	'd144 : lut_data <= 'h403f_02; //[7]: 0  sel pll_pclk
	'd145 : lut_data <= 'h4031_0a; //[3:0] 10bit
	'd146 : lut_data <= 'h4018_73; //[7:5]  sel lane=reg+1
	'd147 : lut_data <= 'h4030_14;
	'd148 : lut_data <= 'h4039_00;
	'd149 : lut_data <= 'h403a_35;
	'd150 : lut_data <= 'h403b_02;
	'd151 : lut_data <= 'h403c_08;
	'd152 : lut_data <= 'h4650_46;
	'd153 : lut_data <= 'h4018_7a; //close unused lane 
	'd154 : lut_data <= 'h4019_f0;
	'd155 : lut_data <= 'h4010_e0; //close dvp out
	'd156 : lut_data <= 'h400f_ff;
	'd157 : lut_data <= 'h400e_0f;
	'd158 : lut_data <= 'h4640_00;
	'd159	: lut_data <= 'h0100_01;
	default	:	lut_data <= 'h0000;
	endcase
end	
endmodule

6.MIPI測(cè)試波形

用示波器兩探頭測(cè)得一路通道的差分波形,符合MIPI CSI電氣規(guī)范。

FPGA設(shè)計(jì)——CMOS攝像與HDMI顯示(MIPI版)


7. 顯示結(jié)果

HDMI正常顯示,顏色顯示正常。

FPGA設(shè)計(jì)——CMOS攝像與HDMI顯示(MIPI版)

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI