【摘 要】VGA是IBM在1987年隨PS/2機一起推出的一種視頻傳輸標準,具有分辨率高、顯示速率快、顏色豐富等優(yōu)點。采用FPGA產生VGA時序信號和彩條圖像信號,并在Xilinx公司的ISE軟件環(huán)境下完成VGA時序彩條信號模塊的仿真,最后下載到Spartan3E開發(fā)板上進行硬件驗證,并在LCD顯示器上顯示出彩條圖像。
【關鍵詞】FPGA;時序信號;VGA
在許多圖像處理系統(tǒng)中,需要將處理的圖像顯示出來,如果采用傳統(tǒng)的辦法將圖像傳回電腦并通過顯示器顯示出來,那么在傳輸?shù)倪^程中就需要嵌入式系統(tǒng)的CPU不斷的對所傳輸?shù)膱D像數(shù)據信號進行控制,這樣就造成了CPU資源的浪費,同樣系統(tǒng)還需要依賴電腦,降低了系統(tǒng)得靈活性。VGA是IBM在1987年隨PS/2機一起推出的一種視頻傳輸標準,具有分辨率高、顯示速率快、顏色豐富等優(yōu)點,在彩色顯示器領域得到了廣泛的應用。采用FPGA對顯示器的VGA接口進行設計,數(shù)據流只需要在整個系統(tǒng)得內部流動,而不需要依靠計算機,增強了系統(tǒng)的可靠性和設計的靈活性。
一、VGA顯示接口原理
下面以的VGA接口為例來介紹一下VGA顯示的基本原理。計算機顯示器的顯示有許多標準,常見的有VGA,SVGA等。VGA是Video Graphics Adapter(Array)的縮寫,信號類型為模擬類型,顯示卡端的接口為15針母插座,接口如下圖所示。該端口通過標準的監(jiān)視電纜直接連接到PC監(jiān)視器或平板LCD上。
其中,VGA_HSYNC和VGA_VSYNC分別是水平掃描信號和豎直掃描信號。VGA_RED,VGA_GREEN,VGA_BLUE是顏色控制信號線,控制當前顯示的像素色彩。
FPGA通過串聯(lián)電阻直接驅動5個VGA信號。每個顏色信號串一個電阻,每位的顏色信號分別是VGA_RED,VGA_GREEN,VGA_BLUE。每個電阻與終端的75歐電纜電阻相結合,確保顏色信號保持在VGA規(guī)定的0V~0.7V之間。VGA_HSYNC和VGA_VSYNC信號使用LVTTL或LVCMOS3I/O標準驅動電平。通過VGA_RED,VGA_GREEN,VGA_BLUE置高或低來產生8種顏色。實際應用中,VGA_RED,VGA_GREEN和VGA_BLUE可以接到DAC的輸出,每個DAC用8 bit或更多的比特控制,3條色彩控制線根據DAC輸出的電壓大小配合實現(xiàn)更多種顏色的顯示。VGA顯示的原理是利用水平掃描信號和豎直信號實現(xiàn)二維平面的像素掃描顯示,以640×480像素的掃描顯示示意圖為例,當水平掃描信號VGA_HSYNC信號為高時,VGA顯示器從左向右依次掃描當前行的640個像素點。每掃描完一行,VGA_HSYNC信號電平拉低,水平掃描位置回到最左端。同理,在豎直掃描信號VGA_VSYSNC信號的控制下,實現(xiàn)掃描行數(shù)的循環(huán)變化。
二、顯示原理與VGA時序實現(xiàn)
VGA顯示器總是從屏幕的左上角開始掃描,先水平掃描完一行(800個像素)到最右邊,然后再回到最左邊(期間LCD對電子束作行消隱)。然后換下一行,繼續(xù)掃描,知道掃描到屏幕的右下角(600行)掃描結束,這樣就掃描完一幀圖像。為了保證圖像的連續(xù)性,VGA顯示器再從屏幕的左上角進行掃描。(1)VGA時序分析。通過對VGA顯示卡基本工作原理的分析可知,要實現(xiàn)VGA顯示就要解決數(shù)據來源、數(shù)據存儲、時序實現(xiàn)等問題,其中關鍵還是如何實現(xiàn)VGA時序。行時序和幀時序都需要產生同步脈沖(Sync a)、顯示后沿(Back porch b)、顯示時序段(Display interval c)和顯示前沿(Front porch d)四個部分。幾種常用模式的時序參數(shù)如下表所示。
(2)VGA時序。以800×600×50Hz為例,信息如上表所示:HSYNC Signal用來控制“列填充”,而一個HSYNC Signal可以分為4個段,也就是a(同步段),b(后肩段),c(激活段),d(前肩段)。HSYNC Signal的a是拉低的128個列像素,b是拉高的88個列像素,至于c是拉高的800個列像素,而最后的d是拉高的40個像素。一列總共有1056列像素。VSYNC Signal是用來控制“行掃描”。而一個VSYNC Signal同樣可以分為4個段,也是o(同步段),p((后肩段),q(激活段),r(前肩段)。VSYNC Signal的o是拉低的4個行像素,p是拉高的23個行像素,至于q是拉高的600個行像素,而最后的r是拉高的1個行像素。一行總共有628個行像素。“一個行像素”是以“列像素”為單位來定義(以800×600×50Hz為例)如下所示:一個行像素=1056個列像素,而“一個列像素”是以“時間位單位”來定義(以800×600×50Hz為例):一個列像素=25ns,一個行像素=1056個列像素=1056×25ns=2.64us,(以800×600×50Hz為例),要完成一行的掃描,需要1056個列像素,也就是說需要1056×25ns的時間。如果要完成所有行的掃描的話,需要628×1056×25ns。但是,不是所有的時間都是用來顯示圖片,有一部分的時間是用來同步操作。而HSYNC Signal只有在c段和VSYNC Signal的q段的激活段,數(shù)據的輸入才有效。(3)VGA彩條信號的產生。彩條信號產生模塊包括了彩條模塊控制、豎彩條發(fā)生、橫彩條發(fā)生和棋盤格發(fā)生三個模塊。彩條模式控制可以用一個控制端口來實現(xiàn)。豎彩條發(fā)生模塊根據行點數(shù)器H_Sync的計數(shù)值來產生彩條,橫彩條發(fā)生模塊根據列點數(shù)器V_Sync的計數(shù)值來產生彩條,棋盤格的彩條就可以用橫彩條和豎彩條的異或來得到。(4)VGA接口電路的實現(xiàn)。程序將50MHZ分頻為25MHZ基準時鐘產生水平掃描計數(shù),再用水平掃描計數(shù)的進位作為豎直掃描計數(shù)器的時鐘信號。水平掃描和豎直掃描信號不斷地循環(huán)反復,從而實現(xiàn)整個屏幕的掃描。在根據顯示內容的需要,在水平掃描和豎直掃描的特定狀態(tài)顯示特定的內容,就可以實現(xiàn)任意內容的VGA顯示。由于文章篇幅的原因,現(xiàn)只將產生水平掃描信號和豎直掃描信號的程序描述如下:process(clk,rst);begin;if(rst=’1’)then;H_Sync<=’0’;V_Sync<=’0’;elsif(rising_edge(clk)then;if(Cnt_H<=95)then;H_Sync<=’0’;else;H_Sync<=’1’;end if;if(Cnt_V<=1)then;V_Sync<=’0’;else;V_Sync<=’1’;end if;end if;end process。
三、小結
(1)由于VGA顯示是一個高速過程,所以選擇器件時要選擇高速器件。(2)VGA顯示時序要求較嚴格,時序中的前后沿及同步脈沖寬度都要依照嚴格的參考數(shù)據設置。(3)在一般情況下,由于數(shù)據接口的限制,數(shù)據更新率不能達到計算機的水平。通過一些特殊設計,還是能夠滿足大多數(shù)嵌入式VGA的需求。
參 考 文 獻
[1]Kleitz.W.[美].VHDL數(shù)字電子學[M].北京:北京希望電子出版社,2008
[2]田耘.VHDL開發(fā)精解與實例剖析[M].北京:電子工業(yè)出版社,2009
[3]沈濤.Xilinx FPGA/CPLD設計初級教程[M].西安:西安電子科技大學出版社,2009