⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 configurable_yuv_to_rgb.v

📁 根据输出显示模式不同可以选择不同的色度转换模式
💻 V
📖 第 1 页 / 共 2 页
字号:
// ***************************Declaration*************************************************************** //// *                                                                                                   * //// *  file name:        configurable_yuv_to_rgb.v                                                      * //// *  function discription: adaptive color space convertion                                            * //// *                        select different convertion equations according different display's demond * //// *  converter1: YUV/YCbCr-->RGB SDTV                                                                 * //// *                 R = Y + 1.371Cr - 175;                                                            * //// *                 G = Y - 0.698Cr - 0.336Cb + 132;                                                  * //// *                 B = Y + 1.732Cb - 222;                                                            * //// *                                                                                                   * //// *                 R = Y + Cr +(64+32-1)Cr/256 - 175;                                                * //// *                 G = Y - (128+32+16+2+1)Cr/256 - (64+16+4+2)Cb/256 + 132;                          * //// *                 B = Y + Cb + (128+32+16+1)Cb/256 - 222;                                           * //// *  converter2: YUV/YCbCr-->RGB HDTV                                                                 * //// *                 R = Y + 1.540(Cr-128);                                                            * //// *                 G = Y - 0.459(Cr-128) - 0.183(Cb-128);                                            * //// *                 B = Y + 1.816(Cb-128);                                                            * //// *                                                                                                   * //// *                 R = Y + Cr +(128+8+2)Cr/256 - 197;                                                * //// *                 G = Y - (64+32+16+4+1)Cr/256 - (64-16-1)Cb/256 + 82;                           * //// *                 B = Y + Cb + (128+64+16+1)Cb/256 - 232;                                              * //// *  converter3: YUV/YCbCr-->RGB PC                                                                   * //// *                 R = Y + 1.140Cr;                                                                  * //// *                 G = Y - 0.395Cb - 0.581Cr;                                                        * //// *                 B = Y + 2.032Cb;                                                                  * //// *                                                                                                   * //// *                 R = Y + Cr +(32+4)Cr/256;                                                         * //// *                 G = Y - (64+32+4+1)Cb/256 - (128+16+4+1)Cb/256;                                   * //// *                 B = Y + 2Cb + 8Cb/256;                                                            * //// *  Author:           Wang Tao                                                                        * //// *  Date:           2007/09/18                                                                       * //// *  Version Number:   1.0                                                                            * //// *                                                                                                   * //// ************************************end************************************************************** //`timescale 1ns/10psmodule configurable_yuv_to_rgb(		dclk,//signal of output data		ngreset, //global reset signal		href,  //valid line signal		y_in, 		uv_in,		scontrl, //signal of selecting display source		rout8,		gout8,		bout8,		y_data,		u_data,		v_data		);input		dclk;input		ngreset, href;input[7:0]	y_in, uv_in;input[1:0]      scontrl;output[7:0]	rout8,gout8,bout8;output[7:0]	y_data, u_data, v_data;reg		uv_sel;reg [7:0]	u_data, u_data_temp, v_data, y_data, y_data_temp;always @(posedge dclk or negedge ngreset)	if(~ngreset)		uv_sel <= 1'b0;	else if(~href)		uv_sel <= 1'b0;	else		uv_sel <= ~uv_sel;	always @(posedge dclk or negedge ngreset)	if(~ngreset)	begin		u_data_temp <= 8'h80;		v_data <= 8'h80;	end	else if (~uv_sel)	begin		u_data_temp <= uv_in;		v_data <= v_data;	end	else	begin		u_data_temp <= u_data_temp;		v_data <= uv_in;	end	always @(posedge dclk or negedge ngreset)	if(~ngreset)		u_data <= 8'h80;	else		u_data <= u_data_temp;		always @(posedge dclk or negedge ngreset)  if(~ngreset)	begin		y_data_temp <= 8'h00;		y_data <= 8'h00;	end  else	begin		y_data_temp <= y_in;		y_data <= y_data_temp;	end/***************************************************//*             converter1: for SDTV                *//***************************************************/// step1:Redreg[10:0]	r1_1;reg[8:0]	r1_2;reg[10:0]	r1_3;always @(posedge dclk or negedge ngreset)  if(~ngreset)	begin	r1_1 <= 11'h7ff;		r1_2 <= 9'h1ff;	r1_3 <= 11'h7ff;	end  else	begin	r1_1 <= {1'b0,y_data,2'b00} + {1'b0,v_data,2'b00};	r1_2 <= {1'b0,v_data} + {2'b00,v_data[7:1]};	r1_3 <= {9'b000000000,v_data[7:6]} + 10'h2bc; 	end		reg[11:0]	r1_4;always @(posedge dclk or negedge ngreset)  if(~ngreset)	r1_4 <= 12'hfff;  else	r1_4 <= {1'b0,r1_1} + {3'b000,r1_2};wire[11:0]	r4_wire;assign	r4_wire = r1_4;reg[11:0]	r1_temp;always @(posedge dclk or negedge ngreset)  if(~ngreset)	r1_temp <= 12'h000;  else	begin	if(r4_wire >= r1_3)		r1_temp <= r4_wire - r1_3;	else		r1_temp <= 12'h000;	endreg[11:0]	r1_temp_d1;always @(posedge dclk or negedge ngreset)  if(~ngreset)	r1_temp_d1 <= 12'h000;  else	r1_temp_d1 <= r1_temp;	/*********************************************************************//*********************************************************************/// step2: Greenreg[10:0]	g1_1;reg[7:0]	g1_2;reg[4:0]	g1_3;reg[8:0]	g1_4;reg[8:0]	g1_5;reg[4:0]	g1_6;always @(posedge dclk or negedge ngreset)  if(~ngreset)	begin	g1_1 <= 11'h7ff;	g1_2 <= 9'h1ff;	g1_3 <= 5'h1f;	g1_4 <= 9'h1ff;	g1_5 <= 9'h1ff;	g1_6 <= 5'h1f;	end  else	begin	g1_1 <= {1'b0,y_data,2'b00} + 11'h210;	g1_2 <= {1'b0,v_data[7:1]} + {2'b00,v_data[7:2]};	g1_3 <= {1'b0,v_data[7:5]} + {2'b00,v_data[7:6]};	g1_4 <= {v_data,1'b0};	g1_5 <= {1'b0,u_data} + {3'b000,u_data[7:2]};	g1_6 <= {1'b0,u_data[7:4]} + {2'b00,u_data[7:5]};	endreg[8:0]	g1_23;reg[9:0]	g1_56;always @(posedge dclk or negedge ngreset)  if(~ngreset)	begin	g1_23 <= 9'h1ff;	g1_56 <= 10'h3ff;	end  else	begin	g1_23 <= {1'b0,g1_2} + {5'b00000,g1_3};	g1_56 <= {1'b0,g1_5} + {5'b00000,g1_6};	end	reg[10:0]	g1_d1;always @(posedge dclk or negedge ngreset)  if(~ngreset)	g1_d1 <= 11'h7ff;  else	g1_d1 <= {2'b00,g1_23} + {1'b0,g1_56};		reg[11:0] g1_d2;always @(posedge dclk or negedge ngreset)  if(~ngreset)	g1_d2 <= 12'hfff;  else	g1_d2 <= {1'b0,g1_d1} + {2'b00,g1_4};	reg[12:0]	g1_temp;always @(posedge dclk or negedge ngreset)  if(~ngreset)	g1_temp <= 13'h000;  else	if(g1_1>=g1_d2)		g1_temp <= g1_1 - g1_d2;	else		g1_temp <= 13'h000;/*******************************************************************//*******************************************************************///step3:bluereg[10:0]	b1_1;reg[9:0]	b1_2;reg[6:0]	b1_3;always @(posedge dclk or negedge ngreset)  if(~ngreset)	begin	b1_1 <= 11'h7ff;	b1_2 <= 10'h3ff;	b1_3 <= 7'h7f;	end  else	begin		b1_1 <= {1'b0,y_data,2'b00} + {1'b0,u_data,2'b00};	b1_2 <= {1'b0,u_data,1'b0} + {3'b000,u_data[7:1]};	b1_3 <= {5'b00000,u_data[7:6]} + {1'b0,u_data[7:2]};	endreg[10:0]	b1_d1;always @(posedge dclk or negedge ngreset)  if(~ngreset)	b1_d1 <= 11'h7ff;  else	b1_d1 <= {1'b0,b1_2} + {4'b0000,b1_3};reg[11:0]   b1_d2;always @(posedge dclk or negedge ngreset)  if(~ngreset)        b1_d2 <= 12'hfff;  else        b1_d2 <= {1'b0,b1_d1} + {1'b0,b1_1};reg[11:0]	b1_temp;always @(posedge dclk or negedge ngreset)  if(~ngreset)	b1_temp <= 12'h000;  else	if(b1_d2 >= 11'h378)		b1_temp <= b1_d2 - 11'h378;	else		b1_temp <= 12'h000;reg[11:0]	b1_temp_d1;always @(posedge dclk or negedge ngreset)  if(~ngreset)	b1_temp_d1 <= 12'h000;  else	b1_temp_d1 <= b1_temp;/***********************************     ********************//***************** ouput data start ************************///outputreg[9:0]	rout1_10,gout1_10,bout1_10;always @(posedge dclk or negedge ngreset)  if(~ngreset)	begin	rout1_10 <= 10'h000;	gout1_10 <= 10'h000;	bout1_10 <= 10'h000;	end  else	begin	if(r1_temp_d1 <=10'h3ff)		rout1_10 <= r1_temp_d1[9:0];	else		rout1_10 <= 10'h3ff;	        if(g1_temp <=10'h3ff)		gout1_10 <= g1_temp[9:0];	else		gout1_10 <= 10'h3ff;		if(b1_temp_d1 <=10'h3ff)		bout1_10 <= b1_temp_d1[9:0];	else		bout1_10 <= 10'h3ff;	end/***************************************************//*             converter2: for HDTV                *//***************************************************/// step1:Redreg[10:0]	r2_1;reg[9:0]	r2_2;reg[2:0]	r2_3;always @(posedge dclk or negedge ngreset)  if(~ngreset)	begin	r2_1 <= 11'h7ff;		r2_2 <= 10'h3ff;	r2_3 <= 3'h7;	end  else	begin	r2_1 <= {1'b0,y_data,2'b00} + {1'b0,v_data,2'b00};	r2_2 <= {1'b0,v_data,1'b0} + {5'b00000,v_data[7:3]};	r2_3 <= v_data[7:5]; 	endreg[10:0]  r2_4;always @(posedge dclk or negedge ngreset)  if(~ngreset)	r2_4 <= 11'hfff;  else	r2_4 <= {1'b0,r2_2} + {8'b00000000,r2_3};		reg[11:0]	r2_5;always @(posedge dclk or negedge ngreset)  if(~ngreset)	r2_5 <= 12'hfff;  else	r2_5 <= {1'b0,r2_4} + {1'b0,r2_1};wire[11:0]	r5_wire;assign	r5_wire = r2_5;reg[11:0]	r2_temp;always @(posedge dclk or negedge ngreset)  if(~ngreset)	r2_temp <= 12'h000;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -