FPGA设计——CMOS摄像与HDMI显示(MIPI版)-创新互联
1. 概述
网站建设哪家好,找创新互联公司!专注于网页设计、网站建设、微信开发、成都微信小程序、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了葫芦岛免费建站欢迎大家使用!本设计采用FPGA技术,将CMOS摄像头(MIPI接口)的视频数据经过采集、存储、帧率转换及格式转换,最终通过HDMI接口显示在电视屏幕上。
2. 硬件系统框图
CMOS采用300万像素的摄像头芯片,其他部分可参考博文“FPGA设计——CMOS摄像与HDMI显示(DVP版)”。
3. FPGA逻辑框图
FPGA各部分逻辑模块如下图所示:
MIPI DECODE,解析MIPI串口数据;
I2C Master,配置CMOS芯片;
DDR2 Control,配置与控制DDR2芯片组,实现读写仲裁;
FIFO Write,将采集到的视频数据跨时钟域地写进DDR2中;
FIFO Read,将DDR2中的数据跨时钟域地读出给后续图像处理模块;
Frame Buffer,负责FIFO Write和FIFO Read的调度,实现帧率转换;
RAW to RGB,将原始RAW8数据转换成RGB888数据;
RGB to YUV,将RGB888数据转换成YUV422数据;
HDMI TX,将处理好的视频数据发送给HDMI PHY芯片,同时通过I2C接口配置HDMI PHY芯片。
4. MIPI解码模块
这里以4-lan 10bit模式为例,介绍MIPI解码模块设计。
DDIO,负责将DDR模式的时钟和数据转换成单边沿的数据与时钟(上升沿);
Serial to Parallel,将串行数据转换成并行数据(8比特);
8bit to 10bit,负责解析出10bit模式的4通道数据;
DVP Generate,生成DVP格式的视频流。
下面再介绍一下8bit到10bit的原理,关于更多的MIPI原理可参考博文"海思Hi3516A(2)MIPI":
在数据传输时,以通道1->通道2->通道3->通道4->通道1...为循环传输8bit数据,每5个8比特数据组成4个10比特数据,第1->第4个8比特数据为4个10比特数据的高8位,第5个8比特数据为4个10比特数据的低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测试波形
用示波器两探头测得一路通道的差分波形,符合MIPI CSI电气规范。
7. 显示结果
HDMI正常显示,颜色显示正常。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
标题名称:FPGA设计——CMOS摄像与HDMI显示(MIPI版)-创新互联
当前路径:http://hbruida.cn/article/diddic.html