文章目錄
- 說明
- VGA原理
- vga子產品代碼設計
- rom_start_ctrl子產品代碼設計
- C語言産生mif檔案
- 顯示效果
- 福利
說明
由于最近有很多同學對基于FPGA的貪吃蛇遊戲很感興趣,趁着最近有時間,特将之前貪吃蛇遊戲重新設計一遍,并給出詳細的設計步驟,友善大家學習!一共分2期,本期教程主要解決VGA顯示圖檔問題,主要教大家如何寫VGA驅動,如何用C語言生成mif檔案。本教程還是需要有一定基礎的,至少會綁定引腳,會使用軟體産生pll、rom等常用的ip。
VGA原理
VGA原理比較簡單,主要參考《VGA時序标準》。首先需要說明的是,VGA時序有4種,如下所示:
是以當你看到有些教程的時序不一樣,不要慌,他們都是對的,這四種時序都是可以的,本教程選用第一種時序,如下所示:
從時序圖中可以看出,VGA時序的關鍵信号是行同步信号(HSync)和場同步信号(VSync),共有6個參數,分别為Sync,Back Porch,Left Border(針對行同步信号)/Top Border(針對場同步信号),Addr Time(資料有效時間,分辨率就是看這個參數),Right Border(針對行同步信号)/Bottom Border(針對場同步信号),Front Porch。這些參數在《VGA時序标準》中都會詳細給出。需要主要的是,圖1-2隻是說明場同步信号和行同步信号的6個參數都是類似的,說明他們都有這6個參數,正因為參數是類似的,是以将他們畫在一起了,場同步信号與行同步信号實際的相對關系如下所示:
從圖1-3可以看出,VGA真正顯示的區域是VSync的Addr Time和HSync的Addr Time同時有效區域(低有效)。如下所示:
圖1-1到圖1-4務必要全部搞懂,這個自己花點時間琢磨一下,搞懂這4個圖後VGA時序也就全搞明白了。
vga子產品代碼設計
本教程VGA選用640[email protected]分辨率,像素時鐘頻率為25MHz,其具體參數定義如圖1-6所示,在代碼中将這些參數定義好,如圖1-5所示:
采用兩級計數器架構對行同步信号和場同步信号進行計數,如下所示:
根據VGA時序參數和場同步、行同步計數器來産生場同步信号和行同步信号,VGA時序圖如下所示:
從圖1-9可以看出,Vsync信号在場同步計數器計滿Ver_Sync_Time個數後拉低,計滿Ver_Total_Time個數後拉高。HSync信号在行同步信号計滿Hor_Sync_Time個數後拉低,計滿Hor_Total_Time個數後拉高。代碼如下所示:
有了場同步信号和行同步信号,接下來就要整VGA的RGB資料了,本教程采用的RGB565格式。并且使用rom存儲圖檔,考慮到fpga内部存儲資源較小,本教程使用100100分辨率的圖像。rom的位寬設定為8,深度設定為10000,具體設定如下所示:
需要注意的是,rom設定時,勾選了‘q’output port,是以rom的資料輸出會延遲兩拍,這個地方要注意,自己可以仿真看看現象。rom的讀使能與vga_hs的時序關系如下所示:
可以看出rom_rd_en比Hor_Addr_Time區域提前了3個時鐘周期,是以rom_rd_data比Hor_Addr_Time區域隻提前了1個時鐘周期(rom輸出延時2拍)。然後vga_r/vga_g/vga_b擷取rom_rd_data資料需要消耗一拍,是以最終vga_r/vga_g/vga_b資料與Hor_Addr_Time區域正好對齊。fpga代碼編寫最重要的就是時序對齊,要精确到一個時鐘周期!代碼如下:
由于本教程是在VGA顯示屏正中間顯示100*100分辨率圖檔,圖檔顯示位置如下所示:
vga_r/vga_g/vga_b的實作比較簡單,代碼如下所示
rom_start_ctrl子產品代碼設計
rom_start_ctrl子產品比較簡單,隻要根據rom_rd_en信号産生rom_addr并且例化rom ip即可。代碼如下所示:
C語言産生mif檔案
想要vga顯示自己想要的圖檔,就得對rom進行初始化,本教程使用mif檔案初始化,下面将教大家如何制作mif檔案。
(1) 自己可以在網上去找一幅圖檔(也可以自己畫),然後用電腦自帶的畫圖軟體,将他的分辨率調整到100*100,并且重新儲存為24位bmp格式的圖像,命名為“啟動界面.bmp”。
(2) 将“啟動界面.bmp”放到我提供的上位機中。如下所示:
(3) 輕按兩下“ImageShow.exe”即可産生mif檔案和coe檔案。C語言産生mif代碼如下,有興趣的可以自己試試:
顯示效果
福利
本教程的所有verilog源碼以及上位機源碼都會公布,百度雲連結:
連結:VGA顯示圖檔教程源碼下載下傳鍊
提取碼:zpnk
微信公衆号裡的圖檔是有壓縮過的,看着有點模糊,我在壓縮包裡提供了pdf教程,那裡都是高清的圖檔哦。**下載下傳後,解壓需要密碼,掃描下面的二維碼并在公衆号回複“密碼”即可擷取密碼。**也希望大家轉發支援哦,後續還會有第二期~