Цитата(DAV @ Feb 20 2012, 18:39)
Может оно и дешевле, только надо ещё и 4:2:2 в 4:4:4 перед матрицей не забыть перевести.
это не сложно
Код
module YCrCb2RGB(YCrCb, R, G, B, clk, rst);
input [7:0] YCrCb;
output [7:0] R;
output [7:0] G;
output [7:0] B;
input clk;
input rst;
reg [7:0]rY;
reg [7:0]rCr;
reg [7:0]rCb;
reg [1:0]cnt;
wire [8:0]tY;
wire [8:0]tCr;
wire [6:0]tCb;
assign tY = rY[7:0] + rY[7:3] + rY[7:4];
assign tCr = rCr[7:0] + rCr[7:1] + rCr[7:4] + rCr[7:5];
assign tCb = rCb[7:2] + rCb[7:3] + rCb[7:6];
assign R = (tY[8:0] + tCr[8:0] - 8'd223);
assign G = (tY[8:0] - tCb[6:0] - tCr[8:1] + 8'd135);
assign B = (tY[8:0] + {rCb[7:0],rCb[7]} - 8'd276);
always @ (posedge clk)
begin
if (rst)
begin
cnt <= 0;
rY <= 0;
rCr <= 0;
rCb <= 0;
end
else
begin
case(cnt)
0: rY <= YCrCb;
1: rCr <= YCrCb;
2: rY <= YCrCb;
3: rCb <= YCrCb;
endcase
cnt <= cnt + 1'b1;
end
end
endmodule
это никак не проверялось.
занимает 103/160 в 5M160.
с умножением, наверное, можно было бы и по красивее обойтись.
да и арифметику проверить не перепоняется ли чего.