VGA 控制器 (VHDL)

邏輯主頁

程式碼下載

VGA控制器

VGA 控制器 VHDL:vga_controller.vhd (5.3 KB)

支援範例的資料

硬體測試圖像產生器範例:hw_image_generator.vhd (2.5 KB)

使用 DE2-115 開發板存檔的完整 Quartus II 專案:
vga_with_hw_test_image_v1_1.qar (27.1 KB)

注意:如果您不熟悉 Quartus II 壓縮檔案:您可以像開啟 Quartus II 工程檔案一樣開啟壓縮檔案。當詢問您是否要恢復它時,請說「是」,它將將原始 Quartus II 專案的所有內容放在您指定的資料夾中。

特點

  • VGA 介面控制器的 VHDL 原始碼
  • 產生 VGA 介面的訊號時序
  • 可設定的 VGA 模式(即解析度和刷新率)
  • 使用 DE2-115 開發板的範例實現

介紹

本文詳細介紹了處理 VGA 訊號時序的 VGA 控制器組件,該組件以 VHDL 編寫,可與 CPLD 和 FPGA 配合使用。圖 1 顯示了整合到系統中的 VGA 控制器的典型範例。如圖所示,VGA 控制器需要一個處於所實現的 VGA 模式頻率的像素時脈。然後,它會導出控制介面所需的所有訊號時序。它輸出當前像素座標,以允許影像來源向視訊 DAC 提供適當的像素值,視訊 DAC 進而驅動 VGA 顯示器的類比輸入。它還為 VGA 顯示器提供同步訊號。該組件是使用 Quartus II 12.1 版設計的。

圖 1. 範例實現

背景

VGA 是用來控制類比顯示器的標準介面。介面的計算端為顯示器提供水平和垂直同步訊號、顏色幅度和接地參考。

水平和垂直同步訊號是 0V/5V 數位波形,可將訊號時序與顯示器同步。它們是數位的,直接由 FPGA 提供(3.3V 滿足邏輯高電平的最小閾值,因此可以使用 3.3V 代替 5V)。

顏色幅度是透過 R、G 和 B 線發送的 0V-0.7V 類比訊號。(或者,綠線可以使用包含水平和垂直同步訊號的 0.3V-1V 訊號,從而無需這些線。這稱為綠線同步,此處不予討論。)三種顏色幅度線端接 75ohm 電阻。這些線也以顯示器內部的 75ohm 端接。為了創建這些類比訊號,FPGA 將每種顏色的 8 位元匯流排輸出到視訊 DAC,在本例中為 Analog DevicesADV7123。該視訊 DAC 還需要一個像素時脈來鎖存這些值。

VGA 介面也指定了四條線,可用於與顯示器中的 ROM 進行通訊。此 ROM 包含 EDID(擴展顯示識別資料),它由標準格式的顯示器參數組成。存在多種通訊標準來存取這些數據,但在最簡單的情況下,這些線路可以保持不連接。

連接

VGA 連接使用稱為 DB15 的 15 引腳連接器。圖 2 顯示了 DB15 母插座。表 1 列出了連接器的引腳排列。

圖 2. VGA 母頭連接器(DB15 插座)

表 1. VGA 連接器接腳分配與訊號

訊號時序

標準 VGA 模式有很多種,每種模式都有特定的解析度和刷新率。每種模式都有定義的計時參數。下面的附錄列出了多種 VGA 模式的訊號時序規格。 VGA 控制器使用 ENTITY 中聲明的 GENERIC 參數來設定除必須提供的像素時脈之外的所有時序規格。

所提供的 VGA 控制器範例實現使用 1920x1200 解析度和 60Hz 更新率,這是所用顯示器的最大解析度。

像素時鐘

此 VGA 控制器需要使用者提供像素時脈。這可以透過專用時脈引腳引入 FPGA,也可以使用 PLL 在 FPGA 內部導出。在 DE2-115 開發板的範例專案中,可用的 50MHz 時脈輸入 Cyclone IV FPGA 的 PLL 之一,以產生 193.16MHz 像素時鐘,滿足 1920x1200、60Hz VGA 模式的要求。

操作原理

圖 3 說明了 VGA 控制器產生的時序訊號。控制器包含兩個計數器。一個計數器根據像素時脈遞增並控制 h_sync(水平同步)訊號的時序。透過設定顯示時間從計數器值 0 開始,計數器值等於顯示時間內像素的列座標。水平顯示時間之後是消隱時間,其中包括水平前緣、水平同步脈衝本身和水平後沿,每個都有指定的持續時間。在行結束時,計數器重置以開始下一行。

另一個計數器隨著每行完成而遞增,從而控制 v_sync(垂直同步)訊號的時序。再次設定,顯示時間從計數器值 0 開始,因此計數器值等於顯示時間內像素的行座標。與之前一樣,垂直顯示時間之後是消隱時間,以及相應的前緣、同步脈衝和後緣。一旦垂直消隱時間結束,計數器就會重置以開始下一次螢幕刷新。

顯示啟用由水平垂直顯示時間的邏輯與定義。

使用這些計數器,VGA 控制器輸出水平同步、垂直同步、顯示啟用和像素座標訊號。對於每種 VGA 模式,同步脈衝被指定為正極性或負極性。GENERIC 參數 h_pol(水平極性)和 v_pol(垂直極性)分別設定 VGA 控制器的 h_syncv_sync 輸出的極性。

圖 3. 訊號時序圖

連接埠說明

表 2 描述了 VGA 控制器的連接埠。

表 2. 連接埠說明

使用 VGA 控制器

若要使用 VGA 控制器,只需將 ENTITY 中的 GENERIC 參數設定為所需 VGA 模式指定的值即可。附錄列出了許多 VGA 模式的訊號時序規格。如上所述,還必須提供所需的像素時脈。

除了 VGA 控制器之外,使用者還必須提供影像來源。影像通常透過片外記憶體中的檔案提供,但也可以透過片上記憶體中的檔案提供或由 FPGA 硬體產生。此處的範例專案使用 hw_image_generator.vhd 檔案產生硬體測試影像。此 VHDL 從 VGA 控制器取得像素座標和顯示啟用訊號,以便在正確的時間將顏色值輸出到視訊 DAC。產生的測試影像是螢幕左上角的 600x478 像素藍色矩形,螢幕其餘部分為黃色。圖 4 顯示了產生的測試影像。


圖 4. 硬體產生的測試影像

重置

Reset_n 輸入連接埠必須具有邏輯高電平,VGA 控制器元件才能運作。此連接埠上的低邏輯電平會非同步重置組件。在重設期間,該元件取消水平和垂直計數器的斷言,清除像素座標,並停用顯示。一旦解除復位,VGA 控制器就會恢復運作。

結論

此 VGA 控制器是可程式邏輯元件,可完成與 VGA 監視器連接所需的訊號時序。它要求用戶僅提供像素時鐘,當然還有圖像來源。VGA 控制器提供水平和垂直同步訊號,以及在適當時間產生影像所需的像素座標和顯示啟用。

附錄:VGA 時序規格

表 A1:各種 VGA 模式的時序規範

vga_timing_specs.xls (33 KB)