📄 rgb2yuv.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 + -