一、講真彩顯示的理由:
前面講了這麼多的VGA,至此,應該有一個大概的瞭解。我想,就算前面講的你都玩得很帥氣了,你還是會很不爽。因為,畢竟這是電腦的液晶,為啥我們就不能做的想電腦一樣顯示彩色的圖片呢?只是單純的顯示線條,字元,感覺還是在玩LCD1602、LCD12864似地,不爽,不爽,灰常的不爽。那麼大的VGA,不做點像樣的東西,還真的很不甘心。
視覺的衝擊,真彩的誘惑,內心的萌動,如果你是個不願意放棄的人,沒做到真彩顯示,我想,你應該不會那麼踏實;如果你是一個對視覺有衝動的人,單調的VGA驅動,決不會甘心。Bingo當年就是很不爽,為了那一刻,走一步,再走一步,潛行了很久,終於在某年某月某一天,視覺暫留於熒光屏,彩色的誘惑,阻隔了前面的世界,曆史從此定格。
本章將講述VGA真彩顯示的設計,通過硬體設計,軟體設計,以及各種不同的方案來講解,同時通過對Bingo設計的真彩顯示的一個工程稍做分析;最後展望未來,繼續走下一步,視覺暫留的我們不能就此停下腳步,,風雨兼程決不放棄,接下來要做的將會更多更多,其實這才是真正的開始。
二、真彩顯示的要求1、資料的流通
要想在VGA上顯示一張彩色的圖片,就必須有充足的條件。簡單的說,那就必須要有圖片資料來源、要能實現資料緩衝,最後以標準的時序給VGA刷屏。整體流程如所示:
(1)外部資料源,由CPU捕獲
(2)由CPU捕獲的資料,緩衝與SRAM或者SDRAM等顯存
(3)由CPU控制VGA狀態,以固定的時序給VGA刷屏
關於標準時序給VGA刷屏也就是以上的(3),Bingo在前面兩張已經講的非常清楚,掌握的朋友應該可以應用自如了。前文中VGA的驅動沒有資料來源(暫且認為Mif檔案的資料屬於邏輯電路的描述),我們只是用FPAG邏輯描述的電路,給VGA固定座標顯示固定的內容。因此,這一章的關鍵是將VGA刷屏的資料來源,以及資料緩衝處理,Bingo通過分析資料流通渠道來分析VGA真彩映像顯示的技術。
2、色彩的識別
關於映像的格式,有JPEG、BMP、PNG等多種格式;映像的位元,也有單色、4灰、256色、4096色、16位真彩色、24位真彩色、32位真彩色這幾種。
有一種方法是直接通過讀取存放於SD卡、隨身碟等移動資料的圖片,通過圖片解碼來得到映像資料,真彩顯示。FPGA並行資料輸出,經過數模轉換(電阻網路轉換或者視頻轉換晶片),得到16位以上的VGA資料。人眼不能分辨的極限,至少也需要16位真彩色。16位以上的資料,24位、32位,人眼基本無法分辨清楚,因此,要求不是很高的情況下16位真彩色已經足夠勝任。
前面講過的VGA驅動,最基本的解析度有如下三種:
(1)VGA_640_480_60FPS_25MHz
(2)VGA_800_600_72FPS_50MHz
(3)VGA_1024_768_60FPS_65MHz
可見,至少25MHz的速度刷屏,需要我們在軟體中實現顯卡刷屏的功能;在最小圖片容量即(1)模式下的資料量是640*480*16 = 4915200Bits = 600KB,在(3)模式下的資料量是1024*768*16 = 1.5MB。如此大的圖片資料,需要有如此容量的緩衝區。
綜上,也就是說,要實現真彩映像VGA顯示,第一需要16位以上的VGA驅動電路,第二需要足夠的容量來存放圖片。
三、各種方案的匯總1. 待用資料源
所謂待用資料源,就是資料已經儲存在系統中,不能再改變的的資料來源。為了顯示真彩映像,我們可以將映像資料存放於SDRAM,或者Flash,從而通過讀取IC上已經儲存的映像資料,顯存於SRAM,利用前面Bingo設計的VGA可移植模組驅動刷屏,實現真彩映像的顯示。基本的架構就是:
FPGA + 待用資料源 + SDRAM/SRAM + VGA
當然此處資料存放於SDRAM,我們可以用Nios II 的C存放於數組,通過JTAG下載;FLASH中的資料,我們可以用Nios II 中的 Flash Programmer來完成配置。關於SDRAM中存放映像資料來實現真彩映像時最基本最簡單的方法,Bingo將會在後文講解。
2. 動態資料源
所謂動態資料源,就是可以即時傳輸資料來改變顯示的資料來源。這關係資料轉送的終端,以及資料轉送的通道。基本的架構就是:
FPGA + 動態資料源 + SDRAM/SRAM + VGA
(1)前面章節中Bingo講過的UART/USB硬核的編寫,或者直接利用Quatus II 偏上系統的UART/USB軟核,來作為動態資料通道。在這裡可以應用,我們把PC當做智能終端,通過電腦處理,輸出圖片資料,更新SDRAM/SRAM內容,即時刷屏,從而更新VGA內容。當然由於頻寬的限制,UART不可能達到即時顯示,而USB則可以達到即時傳輸,但較UART介面的定義要稍微複雜。
(2)當然也不排除網路傳輸來作為動態資料源通道,實現動態真彩圖片的顯示。只是目前而言,可能難度有點大,但這隻是時間問題。
(3)在這就是將圖片資料存放於SD卡,通過驅動SD卡來緩衝圖片資料,然後刷屏顯示真彩映像。
(4)此外,如果你玩過網路攝影機或者你想玩網路攝影機,我們也可以將網路攝影機作為外部資料源,來採集映像,傳輸至SDRAM/SRAM,提供給VGA刷屏,更是不錯的方案。此方案關鍵在於網路攝影機的驅動,以及資料的處理,當硬體滿足要求的情況下。即時顯示,不在話下,因此受到了很多人的青睞。以下就是通過網路攝影機採集資料,即時顯示的軟體設計流程圖:
這個方案實際應用中已經很多,Bingo在未來某一天會詳細講解視頻映像採集、識別、處理的,敬請稍候……
三、網上NB連結
VGA數位相框DIY-特權's Blog——永遠忠於年輕時的夢想!
http://blog.ednchina.com/ilove314/33563/category.aspx
申酷!cpld+sdram方案 控制800480 7寸屏的相關資料,stm32底層函數驅動
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4355445&bbs_id=3020
曾經深受很多人打擊的的 cpld+sdram tft控制器成功了
http://bbs.21ic.com/images/default/qq.gif
祝賀CPLD+SRAM完美現實TFT屏驅動!視頻見證效果
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4269377&bbs_page_no=1&bbs_id=1029
終於看到了希望——基於美女的VGA系統構架 - CrazyBingo - 部落格園.mht
http://www.cnblogs.com/crazybingo/archive/2010/12/01/1892610.html
終於看到了希望——基於美女的VGA系統構架 - CrazyBingo - Ouravr論壇
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4437397&bbs_page_no=1&search_mode=3&search_text=hanbin08041813&bbs_id=9999
四、Bingo的設計1. 硬體設計
(1)16Bits RGB通道:真彩資料VGA介面。第十四章講過VGA介面設計,要得到真彩資料,可以用電阻網路類比,或者視頻轉換晶片來得到多路數字通道,此處Bingo採用了視頻轉換晶片ADV7120KST50,原理圖如下:
(2)SDRAM:Nios II 記憶體儲存晶片,Bingo此處採用了HY57V641620 SDRAM,硬體原理圖如下:
(3)SRAM:VGA刷屏資料顯存IC,此處採用了ISSI的IS61LV51216AL-10TI 作為高速顯存晶片。
2. 軟體設計
如所示,Bingo設計的真彩映像顯示的工程的RTL圖。
這應該算是真彩顯示的最簡單的設計吧,將映像資料隨Nios II配置JTAG下載SDRAM,再讀取專一值SRAM,刷屏實現真彩映像的VGA顯示。本工程的軟體架構如下,主要用了以下這幾個模組:
System_Ctrl |
PLL,複位等的非同步訊號同步化,保證系統穩定性 |
Vga_clk_core |
Nios II CPU軟核,處理預存SDRAM內的圖片資料,傳輸給Verilog設計模組,sram_clrl,將資料存入SRAM |
Sram_Ctrl |
接受Nios II 軟核發送過來的圖片資料,並且緩衝入SRAM |
Vga_Driver |
利用前文Bingo將結果的VGA驅動,讀取SRAM內資料,直接刷屏 |
3. 注意問題
關於CPU傳輸資料給Sram_Ctrl模組,Bingo採用了類比6800匯流排協議,來對資料進行交換處理。當然若有更好的方案,您可以自行設計協議,Verilog相當的靈活。
關於時鐘的處理,由於設計中設計到了大量資料的傳輸,時序上需要嚴謹,因此要嚴格處理好CPU與Verilog的跨時鐘、VGA刷屏時鐘、複位訊號等的協調,以及穩態亞穩態,甚至時序約束。
關於本設計的疑問,在此不做過多累贅講解,請看Ouravr論壇Bingo當年的文章,設計的工程已包含在本文章中,說明以及問題的分析已經很明了。由於設計比較早,模組上並沒有完全按照本書前面介紹的來,敬請諒解。文章網址如下:
終於看到了希望——基於美女的VGA系統構架 - CrazyBingo - Ouravr論壇
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4437397&bbs_page_no=1&search_mode=3&search_text=hanbin08041813&bbs_id=9999
五、各種
六、網路參考
(原創) 如何Real Time產生灰階影像? (SOC) (DE2) (TRDB-DC2)
http://www.cnblogs.com/oomusou/archive/2008/08/23/de2_cmos_gray.html
(原創) 如何設計一個數位相框? (SOC) (Quartus II) (SOPC Builder) (Nios II) (TRDB-LTM) (DE2-70)
http://www.cnblogs.com/oomusou/archive/2010/08/14/de2_70_photo_frame.html
(原創) 如何使用Standard Library作影像處理? (C/C++) (Image Processing)
http://www.cnblogs.com/oomusou/archive/2007/02/04/639740.html
(原創) 如何設計一個SD卡Wav Player? (SOC) (Quartus II) (SOPC Builder) (Nios II) (DE2-70)
http://www.cnblogs.com/oomusou/archive/2010/08/13/de2_70_sd_player.html
申酷!cpld+sdram方案 控制800 480 7寸屏的相關資料,stm32底層函數驅動,應用文檔以及cpld配套ip核!統統展示與大家
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4355445&bbs_id=3020