1. 程式人生 > >關於FPGA驅動TFT屏漸變顯示出現條紋的問題解決

關於FPGA驅動TFT屏漸變顯示出現條紋的問題解決

最近在除錯一個5寸的800x480的TFT屏,由於是通用引腳的40Pin屏,引腳跟以前驅動過的4.3寸480x272的屏是一樣的,所以就開啟以前的工程檔案,修改好引數編譯下載到板子上。工程預設是顯示一幅灰度漸變的畫面,但在這個屏上顯示的多了很多亮線,如下圖所示:


然後除錯了整個晚上還是沒有找到原因,模擬也看過了,波形也正常,直接修改後的程式碼驅動以前的螢幕,顯示也正常沒有亮線,顯示資料部分程式碼如下

reg [3:0]IntervalCnt;
always @(posedge SysClk , negedge Rst_n)
	if(!Rst_n)
		IntervalCnt <= 3'd0;
	else if(IntervalCnt == 3'd3)
		IntervalCnt <= 3'd0;
	else if(LcdChangeEn && LcdEnTemp)
		IntervalCnt <= IntervalCnt + 1'b1;
	else
		;
always @(posedge SysClk , negedge Rst_n)
	if(!Rst_n)
		begin
			DataTempR <= 8'h0;
			DataTempG <= 8'h0;
			DataTempB <= 8'h0;
		end
	else if((IntervalCnt == 3'd1)&&LcdChangeEn && LcdEnTemp)
		begin
			DataTempR <= DataTempR + 1'b1;
			DataTempG <= DataTempG + 1'b1;
			DataTempB <= DataTempB + 1'b1;
		end
	else if(HsyCnt == (HSPW+HBPD+HOZVAL+HFPD))
		begin
			DataTempR <= 8'h0;
			DataTempG <= 8'h0;
			DataTempB <= 8'h0;
		end
	else
		;
assign LCD_DATA_R = LcdEnTemp ? DataTempR : 8'h0;
assign LCD_DATA_G = LcdEnTemp ? DataTempG : 8'h0;
assign LCD_DATA_B = LcdEnTemp ? DataTempB : 8'h0;

就這樣到了第二天,到了第二天仔細思考了一下,要不把
else if((IntervalCnt == 3'd1)&&LcdChangeEn && LcdEnTemp)改成else if((IntervalCnt == 3'd3)&&LcdChangeEn && LcdEnTemp)試試

改好後發現連顯示全黑色,感覺很奇怪,想想應該是這個條件不成立,於是就把後面&&的條件都去掉,沒想到這樣一改竟然顯示正常了,如下圖所示:


感覺很奇怪,於是就看了兩個情況的模擬波形,原來是原來的寫法在是LCD_CLK的下降沿改變資料,而後來是在上升沿改變資料,如下圖



最後看了下屏的資料


問題解決了,在出現問題時候一定要再三確定是不是時序出了問題,是應該上升沿改變資料還是下降沿