基于FPGA的真彩VGA顯示的實現(xiàn)
Mif文件在FPGA中的應(yīng)用,主要是在RAM,ROM中,一般用來存儲字模、波形數(shù)據(jù)、信號采樣、數(shù)據(jù)序列等,可以看做是C語言中的數(shù)組,用來存儲數(shù)據(jù)。Bingo當(dāng)年也是郁悶的很啊,當(dāng)年做電子琴,在Quartus II Memory Initialzation File 也手動寫過曲譜的mif文件。眼睛都花了;曾經(jīng)做過波形發(fā)生器,有康芯的Guagle的支持,很方便;對于VGA字符圖片顯示,字模數(shù)據(jù)的龐大,Bingo最后通過C語言,根據(jù)mif格式,設(shè)計了軟件,今天定格。
一、講真彩顯示的理由:
畢竟這是電腦的液晶,為啥我們就不能做的想電腦一樣顯示彩色的圖片呢?只是單純的顯示線條,字符,感覺還是在玩LCD1602、LCD12864似地,不爽,不爽,灰常的不爽。那么大的VGA,不做點像樣的東西,還真的很不甘心。
視覺的沖擊,真彩的誘惑,內(nèi)心的萌動,如果你是個不愿意放棄的人,沒做到真彩顯示,我想,你應(yīng)該不會那么踏實;如果你是一個對視覺有沖動的人,單調(diào)的VGA驅(qū)動,決不會甘心。Bingo當(dāng)年就是很不爽,為了那一刻,走一步,再走一步,潛行了很久,終于在某年某月某一天,視覺暫留于熒光屏,彩色的誘惑,阻隔了前面的世界,歷史從此定格。
本章將講述VGA真彩顯示的設(shè)計,通過硬件設(shè)計,軟件設(shè)計,以及各種不同的方案來講解,同時通過對Bingo設(shè)計的真彩顯示的一個工程稍做分析;最后展望未來,繼續(xù)走下一步,視覺暫留的我們不能就此停下腳步,,風(fēng)雨兼程決不放棄,接下來要做的將會更多更多,其實這才是真正的開始。
二、真彩顯示的要求
1、數(shù)據(jù)的流通
要想在VGA上顯示一張彩色的圖片,就必須有充足的條件。簡單的說,那就必須要有圖片數(shù)據(jù)源、要能實現(xiàn)數(shù)據(jù)緩存,最后以標(biāo)準(zhǔn)的時序給VGA刷屏。整體流程如下圖所示:
(1)外部數(shù)據(jù)源,由CPU捕獲
(2)由CPU捕獲的數(shù)據(jù),緩存與SRAM或者SDRAM等顯存
(3)由CPU控制VGA狀態(tài),以固定的時序給VGA刷屏
關(guān)于標(biāo)準(zhǔn)時序給VGA刷屏也就是以上的(3),Bingo在前面兩張已經(jīng)講的非常清楚,掌握的朋友應(yīng)該可以應(yīng)用自如了。前文中VGA的驅(qū)動沒有數(shù)據(jù)源(暫且認(rèn)為Mif文件的數(shù)據(jù)屬于邏輯電路的描述),我們只是用FPAG邏輯描述的電路,給VGA固定坐標(biāo)顯示固定的內(nèi)容。因此,這一章的關(guān)鍵是將VGA刷屏的數(shù)據(jù)源,以及數(shù)據(jù)緩存處理,Bingo通過分析數(shù)據(jù)流通渠道來分析VGA真彩圖像顯示的技術(shù)。
2、色彩的識別
關(guān)于圖像的格式,有JPEG、BMP、PNG等多種格式;圖像的位數(shù),也有單色、4灰、256色、4096色、16位真彩色、24位真彩色、32位真彩色這幾種。
有一種方法是直接通過讀取存放于SD卡、U盤等移動數(shù)據(jù)的圖片,通過圖片解碼來得到圖像數(shù)據(jù),真彩顯示。FPGA并行數(shù)據(jù)輸出,經(jīng)過數(shù)模轉(zhuǎn)換(電阻網(wǎng)絡(luò)轉(zhuǎn)換或者視頻轉(zhuǎn)換芯片),得到16位以上的VGA數(shù)據(jù)。人眼不能分辨的極限,至少也需要16位真彩色。16位以上的數(shù)據(jù),24位、32位,人眼基本無法分辨清楚,因此,要求不是很高的情況下16位真彩色已經(jīng)足夠勝任。
前面講過的VGA驅(qū)動,最基本的分辨率有如下三種:
(1)VGA_640_480_60FPS_25MHz
(2)VGA_800_600_72FPS_50MHz
(3)VGA_1024_768_60FPS_65MHz
可見,至少25MHz的速度刷屏,需要我們在軟件中實現(xiàn)顯卡刷屏的功能;在最小圖片容量即(1)模式下的數(shù)據(jù)量是640*480*16 = 4915200Bits = 600KB,在(3)模式下的數(shù)據(jù)量是1024*768*16 = 1.5MB。如此大的圖片數(shù)據(jù),需要有如此容量的緩存區(qū)。
綜上,也就是說,要實現(xiàn)真彩圖像VGA顯示,第一需要16位以上的VGA驅(qū)動電路,第二需要足夠的容量來存放圖片。
三、各種方案的匯總
1. 靜態(tài)數(shù)據(jù)源
所謂靜態(tài)數(shù)據(jù)源,就是數(shù)據(jù)已經(jīng)保存在系統(tǒng)中,不能再改變的的數(shù)據(jù)源。為了顯示真彩圖像,我們可以將圖像數(shù)據(jù)存放于SDRAM,或者Flash,從而通過讀取IC上已經(jīng)存儲的圖像數(shù)據(jù),顯存于SRAM,利用前面Bingo設(shè)計的VGA可移植模塊驅(qū)動刷屏,實現(xiàn)真彩圖像的顯示?;镜募軜?gòu)就是:
FPGA + 靜態(tài)數(shù)據(jù)源 + SDRAM/SRAM + VGA
當(dāng)然此處數(shù)據(jù)存放于SDRAM,我們可以用Nios II 的C存放于數(shù)組,通過JTAG下載;FLASH中的數(shù)據(jù),我們可以用Nios II 中的 Flash Programmer來完成配置。關(guān)于SDRAM中存放圖像數(shù)據(jù)來實現(xiàn)真彩圖像時最基本最簡單的方法,Bingo將會在后文講解。
2. 動態(tài)數(shù)據(jù)源
所謂動態(tài)數(shù)據(jù)源,就是可以實時傳輸數(shù)據(jù)來改變顯示的數(shù)據(jù)源。這關(guān)系數(shù)據(jù)傳輸?shù)慕K端,以及數(shù)據(jù)傳輸?shù)耐ǖ??;镜募軜?gòu)就是:
FPGA + 動態(tài)數(shù)據(jù)源 + SDRAM/SRAM + VGA
(1)前面章節(jié)中Bingo講過的UART/USB硬核的編寫,或者直接利用Quatus II 偏上系統(tǒng)的UART/USB軟核,來作為動態(tài)數(shù)據(jù)通道。在這里可以應(yīng)用,我們把PC當(dāng)做智能終端,通過電腦處理,輸出圖片數(shù)據(jù),更新SDRAM/SRAM內(nèi)容,實時刷屏,從而更新VGA內(nèi)容。當(dāng)然由于帶寬的限制,UART不可能達(dá)到實時顯示,而USB則可以達(dá)到實時傳輸,但較UART接口的定義要稍微復(fù)雜。
(2)當(dāng)然也不排除網(wǎng)絡(luò)傳輸來作為動態(tài)數(shù)據(jù)源通道,實現(xiàn)動態(tài)真彩圖片的顯示。只是目前而言,可能難度有點大,但這只是時間問題。
(3)在這就是將圖片數(shù)據(jù)存放于SD卡,通過驅(qū)動SD卡來緩存圖片數(shù)據(jù),然后刷屏顯示真彩圖像。
(4)此外,如果你玩過攝像頭或者你想玩攝像頭,我們也可以將攝像頭作為外部數(shù)據(jù)源,來采集圖像,傳輸至SDRAM/SRAM,提供給VGA刷屏,更是不錯的方案。此方案關(guān)鍵在于攝像頭的驅(qū)動,以及數(shù)據(jù)的處理,當(dāng)硬件滿足要求的情況下。實時顯示,不在話下,因此受到了很多人的青睞。以下就是通過攝像頭采集數(shù)據(jù),實時顯示的軟件設(shè)計流程圖:
這個方案實際應(yīng)用中已經(jīng)很多,Bingo在未來某一天會詳細(xì)講解視頻圖像采集、識別、處理的,敬請稍候……
三、網(wǎng)上NB鏈接
VGA數(shù)碼相框DIY-特權(quán)'s Blog——永遠(yuǎn)忠于年輕時的夢想!
http://blog.ednchina.com/ilove314/33563/category.aspx
申酷!cpld+sdram方案 控制800480 7寸屏的相關(guān)資料,stm32底層函數(shù)驅(qū)動
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4355445&bbs_id=3020
曾經(jīng)深受很多人打擊的的 cpld+sdram tft控制器成功了
http://bbs.21ic.com/images/default/qq.gif
祝賀CPLD+SRAM完美現(xiàn)實TFT屏驅(qū)動!視頻見證效果
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4269377&bbs_page_no=1&bbs_id=1029
終于看到了希望——基于美女的VGA系統(tǒng)構(gòu)架 - CrazyBingo - 博客園.mht
http://www.cnblogs.com/crazybingo/archive/2010/12/01/1892610.html
終于看到了希望——基于美女的VGA系統(tǒng)構(gòu)架 - 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的設(shè)計
1. 硬件設(shè)計
(1)16Bits RGB通道:真彩數(shù)據(jù)VGA接口。第十四章講過VGA接口設(shè)計,要得到真彩數(shù)據(jù),可以用電阻網(wǎng)絡(luò)模擬,或者視頻轉(zhuǎn)換芯片來得到多路數(shù)字通道,此處Bingo采用了視頻轉(zhuǎn)換芯片ADV7120KST50,原理圖如下:
(2)SDRAM:Nios II 內(nèi)存存儲芯片,Bingo此處采用了HY57V641620 SDRAM,硬件原理圖如下:
(3)SRAM:VGA刷屏數(shù)據(jù)顯存IC,此處采用了ISSI的IS61LV51216AL-10TI 作為高速顯存芯片。
2. 軟件設(shè)計
如上圖所示,Bingo設(shè)計的真彩圖像顯示的工程的RTL圖。
這應(yīng)該算是真彩顯示的最簡單的設(shè)計吧,將圖像數(shù)據(jù)隨Nios II配置JTAG下載SDRAM,再讀取專一值SRAM,刷屏實現(xiàn)真彩圖像的VGA顯示。本工程的軟件架構(gòu)如下,主要用了以下這幾個模塊:
3. 注意問題
關(guān)于CPU傳輸數(shù)據(jù)給Sram_Ctrl模塊,Bingo采用了模擬6800總線協(xié)議,來對數(shù)據(jù)進行交換處理。當(dāng)然若有更好的方案,您可以自行設(shè)計協(xié)議,Verilog相當(dāng)?shù)撵`活。
關(guān)于時鐘的處理,由于設(shè)計中設(shè)計到了大量數(shù)據(jù)的傳輸,時序上需要嚴(yán)謹(jǐn),因此要嚴(yán)格處理好CPU與Verilog的跨時鐘、VGA刷屏?xí)r鐘、復(fù)位信號等的協(xié)調(diào),以及穩(wěn)態(tài)亞穩(wěn)態(tài),甚至?xí)r序約束。