依R, G, B 成份,加總整個畫面的像素值 ,先調整成 K = 128
改 ltp_controller.v
宣告
- reg [26:0] sum_R, sum_G, sum_B; // the total value of R, G, B
- reg [16:0] average_R, average_G, average_B;
- reg [18:0] gray_average; // K: gray_average = (R_average+G_average+B_average)/3
- reg [26:0] temp_R, temp_G, temp_B;
- wire [7:0] new_R, new_G, new_B;
- always@(posedge iCLK or negedge iRST_n) // sum all the component
- begin
- if (!iRST_n)
- begin
- sum_R <= 0; // sum R
- sum_G <= 0; // sum G
- sum_B <= 0; // sum B
- end
- else if (y_cnt == 0 && x_cnt == (H_LINE-1))
- begin
- sum_R <= 0; // sum R
- sum_G <= 0; // sum G
- sum_B <= 0; // sum B
- end
- else if (display_area)
- begin
- sum_R <= sum_R + read_red; // sum R
- sum_G <= sum_G + read_green; // sum G
- sum_B <= sum_B + read_blue; // sum B
- temp_R <= 375*{read_red,7'b0} / average_R; // K = 128, R*K/(R_av/375)
- temp_G <= 375*{read_green,7'b0} / average_G; // K = 128, R*K/(G_av/375)
- temp_B <= 375*{read_blue,7'b0} / average_B; // K = 128, R*K/(B_av/375)
- end
- else if (y_cnt == (V_LINE-1) && x_cnt == (H_LINE-1))
- begin
- average_R <= sum_R[26:10]; // 375 times (800*480/1024=375)
- average_G <= sum_G[26:10];
- average_B <= sum_B[26:10];
- end
- end
- always@(posedge iCLK or negedge iRST_n)
- begin
- if (!iRST_n)
- begin
- oHD <= 1'd0;
- oVD <= 1'd0;
- oDEN <= 1'd0;
- oLCD_R <= 8'd0;
- oLCD_G <= 8'd0;
- oLCD_B <= 8'd0;
- end
- else if (y_cnt < (Vertical_Front_Porch+240))
- begin
- oHD <= mhd;
- oVD <= mvd;
- oDEN <= mden;
- oLCD_R <= temp_R > 255 ? 255: temp_R[7:0];
- oLCD_G <= temp_G > 255 ? 255: temp_G[7:0];
- oLCD_B <= temp_B > 255 ? 255: temp_B[7:0];
- end
- else
- begin
- oHD <= mhd;
- oVD <= mvd;
- oDEN <= mden;
- oLCD_R <= read_red;
- oLCD_G <= read_green;
- oLCD_B <= read_blue;
- end
- end
結果:有部分雜訊出現,推測是除法太慢
待改進
https://blog.csdn.net/a874176979/article/details/79853934