1. 概述

HDMI英文名为High Definition Multimedia Interface,是一种数字化视频、音频接口。 现已

广泛应用于高清数字电视、PC显示器等产品中。

这里我们使用Silicon Image公司的SiI9134作为HDMI发送芯片,支持HDMI 1.3标准。


2. 设计框图

视频源由FPGA内部产生,sii9134的配置通过I2C模块完成。这里以720P60为例完成设计。

3. Sii9134配置

这里将Sii9134配置成YCbCr422输入,RGB444输出模式。

voidsii9134_init(){sccb_senddata(0x72,0x05,0x01);//resetallsectionssccb_senddata(0x72,0x05,0x00);//disableresetsccb_senddata(0x72,0x08,0x37);//VSYNCandHSYNC,24bit,risingedge,normaloperationsccb_senddata(0x72,0x0c,0x00);sccb_senddata(0x72,0x0d,0x01);sccb_senddata(0x72,0x4B,0x00);//Bluesccb_senddata(0x72,0x4C,0x00);//Greensccb_senddata(0x72,0x4D,0xff);//Redsccb_senddata(0x72,0x82,0x25);//FPLL*IDCK,enableinternalsourceterminationsccb_senddata(0x72,0x83,0x19);//HDMIPLL/2,PLLfilterfeedback/4,PLLfilterfront/2sccb_senddata(0x72,0x84,0x31);//50uA,PLLfilterpost/2sccb_senddata(0x72,0x85,0x01);//HDMItransmitterPLLfront/2sccb_senddata(0x72,0x32,0x04);//h-blanksccb_senddata(0x72,0x33,0x41);//enableDE,positivepolarity,left-blank(370pixels)sccb_senddata(0x72,0x34,0x19);//v-blank(30lines)sccb_senddata(0x72,0x36,0x00);//thewidthofactivedisplaysccb_senddata(0x72,0x37,0x05);//thewidthofactivedisplay(1280)sccb_senddata(0x72,0x38,0xD0);//theheightofactivedisplaysccb_senddata(0x72,0x39,0x02);//theheightofactivedisplay(720)sccb_senddata(0x72,0x3E,0x00);sccb_senddata(0x72,0x40,0x6e);sccb_senddata(0x72,0x41,0x00);sccb_senddata(0x72,0x44,0x29);sccb_senddata(0x72,0x45,0x00);sccb_senddata(0x72,0x46,0x05);sccb_senddata(0x72,0x47,0x06);sccb_senddata(0x72,0x48,0x30);sccb_senddata(0x72,0x49,0x00);sccb_senddata(0x72,0x4a,0x3c);////////////////////////////////////////////////sccb_senddata(0x7a,0x01,0x02);sccb_senddata(0x7a,0x02,0x01);sccb_senddata(0x7a,0x03,0x00);sccb_senddata(0x7a,0x04,0x18);sccb_senddata(0x7a,0x05,0x00);sccb_senddata(0x7a,0x14,0x11);sccb_senddata(0x7a,0x1D,0x40);sccb_senddata(0x7a,0x21,0x02);sccb_senddata(0x7a,0x22,0x2B);sccb_senddata(0x7a,0x2F,0x01);sccb_senddata(0x7a,0x40,0x82);sccb_senddata(0x7a,0x41,0x02);sccb_senddata(0x7a,0x42,0x0d);sccb_senddata(0x7a,0x43,0x59);sccb_senddata(0x7a,0x44,0x11);sccb_senddata(0x7a,0x45,0x28);sccb_senddata(0x7a,0x46,0x00);sccb_senddata(0x7a,0x47,0x04);sccb_senddata(0x7a,0x48,0x00);sccb_senddata(0x7a,0x49,0x00);sccb_senddata(0x7a,0x4A,0x00);sccb_senddata(0x7a,0x4B,0xD1);sccb_senddata(0x7a,0x4C,0x02);sccb_senddata(0x7a,0x4D,0x00);sccb_senddata(0x7a,0x4E,0x00);sccb_senddata(0x7a,0x4F,0x01);sccb_senddata(0x7a,0x50,0x05);sccb_senddata(0x7a,0x51,0x00);sccb_senddata(0x7a,0x52,0x00);sccb_senddata(0x7a,0x80,0x84);sccb_senddata(0x7a,0x81,0x01);sccb_senddata(0x7a,0x82,0x0a);sccb_senddata(0x7a,0x83,0x70);sccb_senddata(0x7a,0x84,0x01);sccb_senddata(0x7a,0x85,0x00);sccb_senddata(0x7a,0x86,0x00);sccb_senddata(0x7a,0x87,0x00);sccb_senddata(0x7a,0x88,0x00);sccb_senddata(0x7a,0x89,0x00);sccb_senddata(0x7a,0x8a,0x00);sccb_senddata(0x7a,0x8b,0x00);sccb_senddata(0x7a,0x8c,0x00);sccb_senddata(0x7a,0x8d,0x00);sccb_senddata(0x7a,0x3e,0x33);}


4. FPGA逻辑设计

FPGA逻辑完成视频源生成、HDMI配置、RGB转YCbCr功能。下面表格给出RGB转YC的公式。

Video Format

Formulas

576p

Y = 0.299R′ + 0.587G′ + 0.114B′
Cb = –0.172R′ – 0.339G′ + 0.511B′ + 128
Cr = 0.511R′ – 0.428G′ – 0.083B′ + 128

480p

240p

720p

Y = 0.213R′ + 0.715G′ + 0.072B′
Cb = –0.117R′ – 0.394G′ + 0.511B′ + 128
Cr = 0.511R′ – 0.464G′ – 0.047B′ + 128

1080p

//filename:hdmi_vid_gen.v//author:shugen.yin//date:2016.9.21//function:hdmivideogeneration//log:modulehdmi_vid_gen(inputclk,//74.25MHzinputrst_n,outputhdmi_clk,outputhdmi_txde,outputhdmi_hs,outputhdmi_vs,output[15:0]hdmi_data);parameterIMG_HDISP=16'd1280;parameterIMG_VDISP=16'd720;parameterH_OFFSET=0;wirepclk;assignpclk=clk;assignhdmi_clk=pclk;assignhdmi_hs=hsync;assignhdmi_txde=data_valid;assignhdmi_vs=vsync;assignhdmi_data=data;reg[11:0]vcnt;reg[15:0]hcnt;regvsync;reghsync;regdata_valid;reg[15:0]data;reg[7:0]red;reg[7:0]green;reg[7:0]blue;always@(posedgepclk)if(hcnt>=(IMG_HDISP+259))//720phcnt<=0;elsehcnt<=hcnt+1'b1;always@(posedgepclk)if(hcnt>=(IMG_HDISP+259))if(vcnt>=(IMG_VDISP+24))vcnt<=0;elsevcnt<=vcnt+1'b1;elsevcnt<=vcnt;always@(posedgepclk)if((hcnt>=IMG_HDISP+H_OFFSET)&(hcnt<=(IMG_HDISP+H_OFFSET+32))&(vcnt>=0|(vcnt<IMG_VDISP)))hsync<=1'b1;elsehsync<=1'b0;always@(posedgepclk)if(vcnt<=(IMG_VDISP+2+6)&vcnt>=(IMG_VDISP+2))vsync<=1'b1;elsevsync<=1'b0;regcbcr_reg;always@(posedgepclk)if(vsync)begindata<=0;cbcr_reg<=0;red<=0;green<=0;blue<=0;endelseif((hcnt>=0)&(hcnt<(IMG_HDISP+0))&(vcnt>=0)&(vcnt<(0+IMG_VDISP/4)))beginif(~cbcr_reg)begindata[7:0]<=y;data[15:8]<=cb;endelsebegindata[7:0]<=y;data[15:8]<=cr;endcbcr_reg<=~cbcr_reg;red<=8'hf0;green<=8'hf0;blue<=8'h00;endelseif((hcnt>=0)&(hcnt<(IMG_HDISP+0))&(vcnt>=(0+IMG_VDISP/4))&(vcnt<(0+2*IMG_VDISP/4)))beginif(~cbcr_reg)begindata[7:0]<=y;data[15:8]<=cb;endelsebegindata[7:0]<=y;data[15:8]<=cr;endcbcr_reg<=~cbcr_reg;red<=8'hf0;green<=8'h00;blue<=8'h00;endelseif((hcnt>=0)&(hcnt<(IMG_HDISP+0))&(vcnt>=(0+2*IMG_VDISP/4))&(vcnt<(0+3*IMG_VDISP/4)))beginif(~cbcr_reg)begindata[7:0]<=y;data[15:8]<=cb;endelsebegindata[7:0]<=y;data[15:8]<=cr;endcbcr_reg<=~cbcr_reg;red<=8'h00;green<=8'hf0;blue<=8'h00;endelseif((hcnt>=0)&(hcnt<(IMG_HDISP+0))&(vcnt>=(0+3*IMG_VDISP/4))&(vcnt<(0+IMG_VDISP)))beginif(~cbcr_reg)begindata[7:0]<=y;data[15:8]<=cb;endelsebegindata[7:0]<=y;data[15:8]<=cr;endcbcr_reg<=~cbcr_reg;red<=8'h00;green<=8'h00;blue<=8'hf0;endelsebegindata<=0;cbcr_reg<=0;red<=0;green<=0;blue<=0;endalways@(posedgepclk)if(vsync)data_valid<=0;elseif((hcnt>=0)&(hcnt<(IMG_HDISP+0))&(vcnt>=0)&(vcnt<(0+IMG_VDISP/4)))data_valid<=1;elseif((hcnt>=0)&(hcnt<(IMG_HDISP+0))&(vcnt>=(0+IMG_VDISP/4))&(vcnt<(0+2*IMG_VDISP/4)))data_valid<=1;elseif((hcnt>=0)&(hcnt<(IMG_HDISP+0))&(vcnt>=(0+2*IMG_VDISP/4))&(vcnt<(0+3*IMG_VDISP/4)))data_valid<=1;elseif((hcnt>=0)&(hcnt<(IMG_HDISP+0))&(vcnt>=(0+3*IMG_VDISP/4))&(vcnt<(0+IMG_VDISP)))data_valid<=1;elsedata_valid<=0;wire[7:0]y;wire[7:0]cb;wire[7:0]cr;rgb2ycbcrrgb2ycbcr_inst(.clk(pclk),//inputclk_sig.rst_n(rst_n),//inputrst_n_sig.red(red),//input[7:0]red_sig.green(green),//input[7:0]green_sig.blue(blue),//input[7:0]blue_sig.y(y),//output[7:0]y_sig.cb(cb),//output[7:0]cb_sig.cr(cr)//output[7:0]cr_sig);endmodule


5. 最终结果

在显示器上显示1280*720@60帧的彩条视频。