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

📄 rgb2yuv.v

📁 verilog编写
💻 V
字号:
`timescale 1ns / 1ps
////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer:
//
// Create Date:    09:13:50 04/17/07
// Design Name:    
// Module Name:    rgb2yuv
// Project Name:   
// Target Device:  
// Tool versions:  
// Description:
//
// Dependencies:
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
////////////////////////////////////////////////////////////////////////////////
`define width 21
module rgb2yuv(r,g,b,y,u,v);
	// inputs & outputs	input  [`width-14:0] r, g, b;	output [`width-10:0] y, u, v;							  

//wire [19:0] yr=(r1<<2+r1<<5)+(r1<<6+r1<<9);          //	multiplier 0.299
//wire [19:0] yg=(g1+g1<<1)+(g1<<4+g1<<5)+(g1<<7+r1<<10);  //	multiplier 0.587
//wire[ 19:0] yb=(b1+b1<<3)+(b1<<5+b1<<6)+b1<<7;		  //	multiplier 0.114
//wire [width:0]  y_t=yr+yg+yb;

wire [`width-2:0] r11={10'b0,r,2'b0};					//	multiplier 0.299
wire [`width-2:0] r12={7'b0,r,5'b0};
wire [`width-2:0] r13={6'b0,r,6'b0};
wire [`width-2:0] r14={3'b0,r,9'b0};
wire [`width:0]	sumr1_t;
csa4 csa41(.a1(r11),.a2(r12),.a3(r13),.a4(r14),.sum(sumr1_t));

wire [`width-3:0] g11={11'b0,g};					//	multiplier 0.587
wire [`width-3:0] g12={10'b0,g,1'b0};
wire [`width-3:0] g13={7'b0,g,4'b0};
wire [`width-3:0] g14={6'b0,g,5'b0};
wire [`width-3:0] g15={4'b0,g,7'b0};
wire [`width-3:0] g16={1'b0,g,10'b0};
wire [`width:0]	sumg1_t;
csa6 csa61(.a1(g11),.a2(g12),.a3(g13),.a4(g14),.a5(g15),.a6(g16),.sum(sumg1_t));

wire [`width-3:0] b11={11'b0,b};					//	multiplier 0.114
wire [`width-3:0] b12={8'b0,b,3'b0};
wire [`width-3:0] b13={6'b0,b,5'b0};
wire [`width-3:0] b14={5'b0,b,6'b0};
wire [`width-3:0] b15={4'b0,b,7'b0};
wire [`width:0]	sumb1_t;
csa5 csa51(.a1(b11),.a2(b12),.a3(b13),.a4(b14),.a5(b15),.sum(sumb1_t));

wire [`width-2:0]	sumr1=sumr1_t[`width-2:0];
wire [`width-2:0]	sumg1=sumg1_t[`width-2:0];
wire [`width-2:0]	sumb1=sumb1_t[`width-2:0];
wire [`width:0] y_t;
csa3 csa31(.a1(sumr1),.a2(sumg1),.a3(sumb1),.sum(y_t));

//wire [19:0] ur=(r1+r1<<3)+(r1<<4+r1<<6)+r1<<8;        //  multiplier 0.1687
//wire [19:0] ug=(g1+g1<<1)+(g1<<2+g1<<5)+(g1<<7+g1<<9);	  //	multiplier 0.3313
//wire [19:0] ub=b1<<10;								  //	multiplier 0.5
//wire [width:0] u_t=ub-ur-ug+{1'b1,18'b0};
wire [`width-3:0] r21={11'b0,r};					//	multiplier 0.1687
wire [`width-3:0] r22={8'b0,r,3'b0};
wire [`width-3:0] r23={7'b0,r,4'b0};
wire [`width-3:0] r24={5'b0,r,6'b0};
wire [`width-3:0] r25={3'b0,r,8'b0};
wire [`width:0]	sumr2_t;
csa5 csa52(.a1(r21),.a2(r22),.a3(r23),.a4(r24),.a5(r25),.sum(sumr2_t));

wire [`width-3:0] g21={11'b0,g};					//	multiplier 0.3313
wire [`width-3:0] g22={10'b0,g,1'b0};
wire [`width-3:0] g23={9'b0,g,2'b0};
wire [`width-3:0] g24={6'b0,g,5'b0};
wire [`width-3:0] g25={4'b0,g,7'b0};
wire [`width-3:0] g26={2'b0,g,9'b0};
wire [`width:0]	sumg2_t;
csa6 csa62(.a1(g21),.a2(g22),.a3(g23),.a4(g24),.a5(g25),.a6(g26),.sum(sumg2_t));

wire [`width-2:0] b21={2'b0,b,10'b0};
wire [`width-2:0] const128={1'b0,1'b1,18'b0};
wire [`width-2:0]	sumr2={1'b1,~sumr2_t[`width-3:0]};
wire [`width-2:0]	sumg2={1'b1,~sumg2_t[`width-3:0]};
wire [`width:0] u_t;

csa4 csa42(.a1(sumr2),.a2(sumg2),.a3(b21),.a4(const128),.sum(u_t));

//wire [19:0] vg=(g1+g1<<3)+(g1<<4+g1<<6)+(g1<<8+g1<<9);	  //	multiplier 0.4187
//wire [19:0] vb=(b1+b1<<1)+(b1<<2+b1<<5)+b1<<7;	  //	multiplier 0.0813
//wire [19:0] vr=r1<<10;								  //	multiplier 0.5
//wire [`width:0] v_t=vr-vg-vb+{1'b1,18'b0};
wire [`width-3:0] g31={11'b0,g};					//	multiplier 0.4187
wire [`width-3:0] g32={8'b0,g,3'b0};
wire [`width-3:0] g33={7'b0,g,4'b0};
wire [`width-3:0] g34={5'b0,g,6'b0};
wire [`width-3:0] g35={3'b0,g,8'b0};
wire [`width-3:0] g36={2'b0,g,9'b0};
wire [`width:0]	sumg3_t;
csa6 csa63(.a1(g31),.a2(g32),.a3(g33),.a4(g34),.a5(g35),.a6(g36),.sum(sumg3_t));

wire [`width-3:0] b31={11'b0,b};					//	multiplier 0.0813
wire [`width-3:0] b32={10'b0,b,1'b0};
wire [`width-3:0] b33={9'b0,b,2'b0};
wire [`width-3:0] b34={6'b0,b,5'b0};
wire [`width-3:0] b35={4'b0,b,7'b0};
wire [`width:0]	sumb3_t;
csa5 csa53(.a1(b31),.a2(b32),.a3(b33),.a4(b34),.a5(b35),.sum(sumb3_t));

wire [`width-2:0] r31={2'b0,r,10'b1};					
wire [`width-2:0]	sumb3={1'b1,~sumb3_t[`width-3:0]};			 //负
wire [`width-2:0]	sumg3={1'b1,~sumg3_t[`width-3:0]}; //负
wire [`width:0] v_t;

csa4 csa43(.a1(r31),.a2(sumg3),.a3(sumb3),.a4(const128),.sum(v_t));

//assign y={y_t[`width],y_t[`width-4:11]};
//assign u={u_t[`width],u_t[`width-4:11]};	
//assign v={v_t[`width],v_t[`width-4:11]};

assign y=y_t[`width-3:7];
assign u=u_t[`width-3:7];	
assign v=v_t[`width-3:7];
		
endmodule

⌨️ 快捷键说明

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