📄 configurable_yuv_to_rgb.v
字号:
else begin if(r5_wire >= 10'h314) r2_temp <= r5_wire - 10'h314; else r2_temp <= 12'h000; endreg[11:0] r2_temp_d1;always @(posedge dclk or negedge ngreset) if(~ngreset) r2_temp_d1 <= 12'h000; else r2_temp_d1 <= r2_temp; /*********************** step1 end ****************************//*********************************************************************/// step2: Greenreg[10:0] g2_1;reg[8:0] g2_2;reg[7:0] g2_3;reg[4:0] g2_4;reg[6:0] g2_5;always @(posedge dclk or negedge ngreset) if(~ngreset) begin g2_1 <= 11'h7ff; g2_2 <= 9'h1ff; g2_3 <= 8'hff; g2_4 <= 5'h1f; g2_5 <= 7'h7f; end else begin g2_1 <= {1'b0,y_data,2'b00} + 10'h158;//+ g2_2 <= {1'b0,u_data} + {1'b0,v_data};//- g2_3 <= {1'b0,v_data[7:1]} + {2'b0,v_data[7:2]};//- g2_4 <= {1'b0,v_data[7:4]} + {3'b000,v_data[7:6]};//- g2_5 <= {1'b0,u_data[7:2]} + {5'b00000,u_data[7:6]};//+ endreg[8:0] g2_34;reg[11:0] g2_15;always @(posedge dclk or negedge ngreset) if(~ngreset) begin g2_34 <= 9'h1ff; g2_15 <= 12'h3ff; end else begin g2_15 <= {1'b0,g2_1} + {5'b00000,g2_5}; g2_34 <= {1'b0,g2_3} + {3'b000,g2_4}; end reg[9:0] g2_d1;always @(posedge dclk or negedge ngreset) if(~ngreset) g2_d1 <= 10'h3ff; else g2_d1 <= {1'b0,g2_2} + {1'b0,g2_34}; reg[11:0] g2_temp;always @(posedge dclk or negedge ngreset) if(~ngreset) g2_temp <= 12'h000; else if(g2_15>=g2_d1) g2_temp <= g2_15 - g2_d1; else g2_temp <= 12'h000;/******************* step2 end ***************************//******************* step3: blue convert start **************/reg[10:0] b2_1;reg[9:0] b2_2;reg[6:0] b2_3;always @(posedge dclk or negedge ngreset) if(~ngreset) begin b2_1 <= 11'h7ff; b2_2 <= 10'h3ff; b2_3 <= 7'h7f; end else begin b2_1 <= {1'b0,y_data,2'b00} + {1'b0,u_data,2'b00}; b2_2 <= {1'b0,u_data,1'b0} + {2'b00,u_data}; b2_3 <= {5'b00000,u_data[7:6]} + {1'b0,u_data[7:2]}; endreg[10:0] b2_d1;always @(posedge dclk or negedge ngreset) if(~ngreset) b2_d1 <= 11'h7ff; else b2_d1 <= {1'b0,b2_2} + {4'b0000,b2_3};reg[11:0] b2_d2;always @(posedge dclk or negedge ngreset) if(~ngreset) b2_d2 <= 12'hfff; else b2_d2 <= {1'b0,b2_d1} + {1'b0,b2_1};reg[11:0] b2_temp;always @(posedge dclk or negedge ngreset) if(~ngreset) b2_temp <= 12'h000; else if(b2_d2 >= 10'h3a0) b2_temp <= b2_d2 - 10'h3a0; else b2_temp <= 12'h000;reg[11:0] b2_temp_d1;always @(posedge dclk or negedge ngreset) if(~ngreset) b2_temp_d1 <= 12'h000; else b2_temp_d1 <= b2_temp;/************** step3 end *********************//********************************************************///outputreg[9:0] rout2_10,gout2_10,bout2_10;always @(posedge dclk or negedge ngreset) if(~ngreset) begin rout2_10 <= 10'h000; gout2_10 <= 10'h000; bout2_10 <= 10'h000; end else begin if(r2_temp_d1 <=10'h3ff) rout2_10 <= r2_temp_d1[9:0]; else rout2_10 <= 10'h3ff; if(g2_temp <=10'h3ff) gout2_10 <= g2_temp[9:0]; else gout2_10 <= 10'h3ff; if(b2_temp_d1 <=10'h3ff) bout2_10 <= b2_temp_d1[9:0]; else bout2_10 <= 10'h3ff; end/*****************************************************************//***************************************************//* converter3: for PC *//***************************************************/// step1:Redreg[10:0] r3_1;reg[7:0] r3_2;always @(posedge dclk or negedge ngreset) if(~ngreset) begin r3_1 <= 11'h7ff; r3_2 <= 8'hff; end else begin r3_1 <= {1'b0,y_data,2'b00} + {1'b0,v_data,2'b00}; r3_2 <= {4'b0000,v_data[7:4]} + {1'b0,v_data[7:1]}; endreg[11:0] r3_3;always @(posedge dclk or negedge ngreset) if(~ngreset) r3_3 <= 12'hfff; else r3_3 <= {1'b0,r3_1} + {5'b00000,r3_2};reg[11:0] r3_temp_d1;always @(posedge dclk or negedge ngreset) if(~ngreset) r3_temp_d1 <= 12'h000; else r3_temp_d1 <= r3_3; /*********************** step1 end ****************************//*********************************************************************/// step2: Greenreg[9:0] g3_1;reg[7:0] g3_2;reg[4:0] g3_3;reg[2:0] g3_4;reg[11:0] g3_5;always @(posedge dclk or negedge ngreset) if(~ngreset) begin g3_1 <= 10'h3ff; g3_2 <= 8'hff; g3_3 <= 5'h1f; g3_4 <= 3'h7; g3_5 <= 12'hfff; end else begin g3_1 <= {2'b00,u_data} + {1'b0,v_data,1'b0};//- g3_2 <= {1'b0,u_data[7:1]} + {2'b00,v_data[7:2]};//- g3_3 <= {1'b0,u_data[7:4]} + {2'b0,v_data[7:4]};//- g3_4 <= {1'b0,u_data[7:6]} + {1'b0,v_data[7:6]};//- g3_5 <= {2'b00,y_data,2'b00}; endreg[10:0] g3_12;reg[5:0] g3_34;always @(posedge dclk or negedge ngreset) if(~ngreset) begin g3_12 <= 11'h7ff; g3_34 <= 6'h2f; end else begin g3_12 <= {1'b0,g3_1} + {2'b00,g3_2}; g3_34 <= {1'b0,g3_3} + {3'b000,g3_4}; end reg[11:0] g3_d1;always @(posedge dclk or negedge ngreset) if(~ngreset) g3_d1 <= 12'hfff; else g3_d1 <= {1'b0,g3_12} + {6'b000000,g3_34}; reg[11:0] g3_temp;always @(posedge dclk or negedge ngreset) if(~ngreset) g3_temp <= 12'h000; else if(g3_5 >= g3_d1) g3_temp <= g3_5 - g3_d1; else g3_temp <= 12'h000;/******************* step2 end ***************************//******************* step3: blue convert start **************/reg[10:0] b3_1;reg[9:0] b3_2;reg[6:0] b3_3;always @(posedge dclk or negedge ngreset) if(~ngreset) begin b3_1 <= 11'h7ff; b3_2 <= 10'h3ff; b3_3 <= 7'h7f; end else begin b3_1 <= {u_data,3'b000}; b3_2 <= {1'b0,y_data,2'b00} + {6'b000000,u_data[7:3]}; endreg[11:0] b3_d1;always @(posedge dclk or negedge ngreset) if(~ngreset) b3_d1 <= 12'hfff; else b3_d1 <= {1'b0,b3_1} + {4'b0000,b3_2};reg[11:0] b3_temp_d1;always @(posedge dclk or negedge ngreset) if(~ngreset) b3_temp_d1 <= 12'h000; else b3_temp_d1 <= b3_d1;/************** step3 end *********************//********************************************************///outputreg[9:0] rout3_10,gout3_10,bout3_10;always @(posedge dclk or negedge ngreset) if(~ngreset) begin rout3_10 <= 10'h000; gout3_10 <= 10'h000; bout3_10 <= 10'h000; end else begin if(r3_temp_d1 <=10'h3ff) rout3_10 <= r3_temp_d1[9:0]; else rout3_10 <= 10'h3ff; if(g3_temp <=10'h3ff) gout3_10 <= g3_temp[9:0]; else gout3_10 <= 10'h3ff; if(b3_temp_d1 <=10'h3ff) bout3_10 <= b3_temp_d1[9:0]; else bout3_10 <= 10'h3ff; end/*********************************************************************//***************************************//* the final output *//***************************************/reg[7:0] rout_d1,gout_d1,bout_d1;always @(posedge dclk or negedge ngreset)if(~ngreset)begin rout_d1 <= 8'h00; gout_d1 <= 8'h00; bout_d1 <= 8'h00;endelsebegincase(scontrl)2'b00:begin rout_d1 <= rout1_10[9:2]; gout_d1 <= gout1_10[9:2]; bout_d1 <= bout1_10[9:2];end2'b01:begin rout_d1 <= rout2_10[9:2]; gout_d1 <= gout2_10[9:2]; bout_d1 <= bout2_10[9:2];end default:begin rout_d1 <= rout3_10[9:2]; gout_d1 <= gout3_10[9:2]; bout_d1 <= bout3_10[9:2];end endcaseendwire[7:0] rout8,gout8,bout8;assign rout8 = rout_d1;assign gout8 = gout_d1;assign bout8 = bout_d1;endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -