天天看點

FPGA 25 RGB888(相容RGB565) 螢幕驅動設計

FPGA 25 RGB888(相容RGB565) 螢幕驅動設計

FPGA 25 RGB888(相容RGB565) 螢幕驅動設計

FPGA 25 RGB888(相容RGB565) 螢幕驅動設計

主要功能 :設計了RGB88 的通用驅動子產品

實作(設計)流程:根據RGB888 螢幕的工作原理以及資料傳輸協定方式,編寫輸出信号的發送,進而将我們要顯示的圖像顯示到螢幕上。

實驗目的 : 直接使用fpga晶片設計RGB88 的驅動,而不是使用螢幕驅晶片來驅動。對于一般的單片機來說,要達到較好的顯示效果,必定會占用大量的cpu資源,而fpga 的并行能力則很好的解決了這個問題,由于子產品和子產品之間的互不影響,是以使用fpga驅動 rgb螢幕的效果方面會比較好.

實驗現象 : 通過内部設計一個螢幕驅動顯示子產品,實作螢幕2*4=8 區域顔色顯示的效果

1、8080螢幕 (在 51 單片機上,使用最廣泛的顯示裝置就是 1602、 12864 字元點陣 )

2、彩色液晶屏(内部帶有顯示緩存存儲器,這樣隻要把待顯示的内容寫入到顯存,使用 STM32 的 FSMC 總線,将液晶顯示屏映射為一塊存儲區,直接使用 FSMC 總線對該存儲區進行讀寫 )

3、RGB螢幕(WindowsCE、 Linux 等等。而且它們都能驅動很多的大螢幕 ,螢幕本身不含顯存,需要驅動器能夠帶有顯存,并按照 RGB 時序準确的将顯存中的資料送到螢幕上顯示,而一般的單片機STM32 由于工作速度、總線帶寬、存儲容量有限,很難支援如此高的資料重新整理速率 。)

​ 常用的 4.3/5 寸顯示屏都是以模組的形式提供的,各大廠家生産的模組,其接口引腳順序都是相容的,而且接口時序也都是标準 的。

FPGA 25 RGB888(相容RGB565) 螢幕驅動設計

AT043TN24 模組的接口編号即功能描述如表 5.5.1 所示 :

FPGA 25 RGB888(相容RGB565) 螢幕驅動設計
FPGA 25 RGB888(相容RGB565) 螢幕驅動設計

注: 背光要求供電【VLED+ VLED-】)電壓為 18.6V 到 21V,電流為 36mA 到 44mA 之間。是以需要額外的升壓電路 。

​ 該螢幕的顔色資料支援 24 位輸入,即每種顔色(RGB)有 8 位表示。由于在一般的數字系統中常常使用 16 位色(RGB565)進行圖像顯示,并且為了節約 FPGA引腳,本實驗中,隻選取了 24 位顔色資料中的一部分資料,将其精簡為 16 位。為了保證精簡資料後,圖像顔色能夠不失真,是以分别選取 R、 G、 B 資料線的高 5、 6、 5 位,組成新的

16 位資料線。此外,開發的驅動也可以很好的相容RGB565螢幕,可以實作一個子產品,兩種螢幕的共同實驗問題。 RGB 資料的格式如表 27.2 所示。

FPGA 25 RGB888(相容RGB565) 螢幕驅動設計

常見資料顔色:

FPGA 25 RGB888(相容RGB565) 螢幕驅動設計
FPGA 25 RGB888(相容RGB565) 螢幕驅動設計

VGA原理:

FPGA 25 RGB888(相容RGB565) 螢幕驅動設計

液晶顯示器原理:

FPGA 25 RGB888(相容RGB565) 螢幕驅動設計

VGA 和液晶屏驅動相同點:

FPGA 25 RGB888(相容RGB565) 螢幕驅動設計
FPGA 25 RGB888(相容RGB565) 螢幕驅動設計

實作行和場的方式:

FPGA 25 RGB888(相容RGB565) 螢幕驅動設計
FPGA 25 RGB888(相容RGB565) 螢幕驅動設計

實作方式:子產品内使用兩個計數器分别進行、場計數, 然後根據計數器的計數值确定像素資料内容和行、場同步信号的電平狀态 。

子產品接口設計 :

FPGA 25 RGB888(相容RGB565) 螢幕驅動設計
FPGA 25 RGB888(相容RGB565) 螢幕驅動設計

行掃描計數器即每個像素時鐘自加 1,一旦加滿到 524(剛好 525 個時鐘周期),計數器清零并重新計數,該部分代碼可如下設計:

FPGA 25 RGB888(相容RGB565) 螢幕驅動設計

(很重要!!!)注 :隻有每次一行掃描完成(即:行掃描計數器(hcount_r) == 最終的像素點hpixel_end的時候),場掃描計數器vcount_r才會開始變化(清零 或者 +1)

行同步信号和場同步信号控制設計(設計接兩個信号和螢幕計數器的高低電平的設定):

FPGA 25 RGB888(相容RGB565) 螢幕驅動設計
FPGA 25 RGB888(相容RGB565) 螢幕驅動設計

個人表述(螢幕工作流程描述):

FPGA 25 RGB888(相容RGB565) 螢幕驅動設計

對于一幀完整的圖檔(480*272 的圖檔)來說,我們每次接收顯示,要執行以下流程:

FPGA 25 RGB888(相容RGB565) 螢幕驅動設計

​ step1: 先發送一個行同步信号序列(525個時鐘周期組成一個行同步信号序列),在 0-41的時鐘周期下,給行同步信号引腳 【HS,發送低電平】,41-43時鐘周期下,HS 引腳發送【高電平信号】,43-523時鐘周期下,HS發送【高電平】,523-525時鐘周期下,HS發送【高電平】。這就是一個完整的行時序實作。

​ step2: 場掃描的實作,首先,我們要确定或者知道的是,在一幀的圖檔傳輸的過程中,隻有1個場掃描序列(相對于行信号序列的 272行掃描序列),并且,我們也可以看到,對于一個輸入的信号,隻有每一個行信号序列的最後一個時鐘周期(clk = 525)時,我們才會+1個場信号時鐘周期,其餘時間保持信号不變。

FPGA 25 RGB888(相容RGB565) 螢幕驅動設計

是以,顯然可知,場信号的1個時鐘周期是 == 525個行信号時鐘周期。我們在【代碼中】也可以看到,隻有我們的行信号時鐘計數器計數了525個時鐘周期以後,我們才産生了給場時鐘信号【計數器】+1。這就是一幀完整的時鐘信号的變化。

首先我們要指導在整個一幀的圖檔中,隻有中間時序的圖像顯示區域,我們輸入的資料才是有效的,其餘地方的資料都是無效的,是以,根據時序的情況,我們根據時序的變化來确定什麼時候,我們的輸入是可直接輸出到螢幕,而其他的時刻,我們是不應該輸入資料的,或者說讓我們的輸入資料無效.

資料選擇:

利用二選一多路器實作消隐強制輸出 0,代碼如下所示。其中, TFT_RGB 是輸出到 VGA接口上的資料,而 data_in 則是其他子產品傳遞過來的正确的圖像資料。dat_act =1 時,表示我們現在的資料可以直接輸入到螢幕,反之我們輸出的信号位16‘h0000.

這樣的話我們可以通過: hcount ,hcount (X, Y)給信号控制子產品,讓信号控制子產品輸出在該點的圖像資料

仿真及闆級驗證 :

test_bench 檔案:

top 頂層顯示設計檔案: