|
VGA(視頻圖形陣列)作為一種標(biāo)準(zhǔn)的顯示接口得到廣泛的應(yīng)用。依據(jù)VGA顯示原理,介紹了利用FPGA實(shí)現(xiàn)對(duì)VGA圖形控制器的Verilog設(shè)計(jì)方法。詳細(xì)描述了各硬件模塊的工作原理及實(shí)現(xiàn)途徑,并給出了軟件設(shè)計(jì)思路。 隨著可編程邏輯器件的不斷發(fā)展及其價(jià)格的不斷下降,EDA開(kāi)發(fā)軟件的不斷完善,可編程邏輯設(shè)計(jì)的應(yīng)用優(yōu)勢(shì)逐漸顯示出來(lái),特別是大規(guī)模可編程器件。而FPGA具有功能強(qiáng)大,開(kāi)發(fā)過(guò)程投資小、周期短等特點(diǎn),成為當(dāng)今硬件設(shè)計(jì)的首選方式之一。VGA(視頻圖形陣列)作為一種標(biāo)準(zhǔn)的顯示接口得到廣泛地應(yīng)用。利用FPGA芯片和EDA設(shè)計(jì)方法,可以靈活地根據(jù)用戶(hù)需求,設(shè)計(jì)出針對(duì)性強(qiáng)的VGA顯示控制器,不僅降低了生產(chǎn)成本也可以方便快速地對(duì)產(chǎn)品進(jìn)行升級(jí)換代。設(shè)計(jì)采用 Quartus II 軟件工具,并以 Altera公司的Cyclone系列FPGA的器件為主實(shí)現(xiàn)硬件平臺(tái)的設(shè)計(jì)。 1. 硬件系統(tǒng)框圖采用模塊化設(shè)計(jì)方法。本設(shè)計(jì)的VGA控制器主要由以下模塊組成:VGA 時(shí)序控制模塊、內(nèi)部時(shí)鐘產(chǎn)生模塊、SDRAM控制模塊、串行Flash讀取模塊等,如圖1所示。 2. 主要模塊設(shè)計(jì)2.1 VGA 時(shí)序控制模塊VGA時(shí)序控制模塊是整個(gè)顯示控制器的關(guān)鍵部分,其實(shí)質(zhì)就是完成VGA顯示卡的功能。主要作用就是在一定的工作頻率下,產(chǎn)生準(zhǔn)確的時(shí)序關(guān)系(VS-垂直同步信號(hào),HS-水平同步信號(hào),消隱信號(hào)之間的關(guān)系)。及其在準(zhǔn)確的時(shí)序下對(duì)數(shù)據(jù)緩存區(qū)對(duì)數(shù)據(jù)進(jìn)行讀取,讀完數(shù)據(jù)后使 SDRAM 控制器及時(shí)的刷新緩存區(qū)的數(shù)據(jù)。其中產(chǎn)生準(zhǔn)確的時(shí)序關(guān)系為此模塊重點(diǎn),在VGA顯示過(guò)程中,完成一行掃描所需要的時(shí)間稱(chēng)為水平掃描時(shí)間,完成一幀掃描所需要的時(shí)間稱(chēng)為垂直掃描時(shí)間。每掃描完一行用行同步信號(hào)進(jìn)行同步;掃描完所有行后用場(chǎng)同步信號(hào)進(jìn)行同步。本設(shè)計(jì)采用的是800Hz x 600Hz x 60Hz模式。依據(jù)時(shí)序標(biāo)準(zhǔn),每顯示行包含1056點(diǎn),其中800點(diǎn)為有效顯示區(qū),256點(diǎn)為消隱區(qū),每行的行同步脈沖低電平寬度為128個(gè)像素點(diǎn);同理每場(chǎng)有628行,有效行為600行,其中場(chǎng)同步脈沖低電平寬度為4行。其行、場(chǎng)時(shí)序如表 1 。 其中圖2,td=800,tg=1056,ta=80,te+tf=80,tb+tc=128,單位為一個(gè)像素時(shí)鐘周期。 其中圖3,td=600,tg=628,ta=1,te+tf=23,tb+tc=4,單位為一個(gè)line時(shí)間。 依據(jù)這個(gè)標(biāo)準(zhǔn),外部50MHz時(shí)鐘經(jīng)過(guò)FPGA內(nèi)部PLL得到所需要的40MHz像素時(shí)鐘,并進(jìn)行對(duì)應(yīng)的像素點(diǎn)數(shù)和掃描行數(shù)進(jìn)行分頻處理,可以得到符合要求的行頻率、場(chǎng)頻率和消隱信號(hào)。 2.2 SDRAM控制模塊及動(dòng)態(tài)數(shù)字顯示方法在基于FPGA的圖像顯示系統(tǒng)中,常常需要用到大容量、高速度的存儲(chǔ)器。而在各種隨機(jī)存儲(chǔ)器件中,SDRAM的價(jià)格低、速度快、容量大是比較理想的器件。但SDRAM控制邏輯較為復(fù)雜,要采用狀態(tài)機(jī)的設(shè)計(jì)方法來(lái)實(shí)現(xiàn) SDRAM 的控制模塊(也可以使用SDRAM IP核實(shí)現(xiàn))。其 SDRAM控制狀態(tài)機(jī)如圖 4 。 其中包含了9個(gè)狀態(tài),其中從Precharge到ModeSet為SDRAM上電后的初始化過(guò)程,其余狀態(tài)為SDRAM的正常讀寫(xiě)及刷新操作過(guò)程。對(duì)于SDRAM自身的操作本文不做詳細(xì)介紹,下面具體介紹動(dòng)態(tài)顯示數(shù)字的方法。 系統(tǒng)上電后,SDRAM上電后的初始化完成后。先通過(guò)Flash讀寫(xiě)控制模塊,把Flash中的靜態(tài)圖片讀取出來(lái),然后寫(xiě)入SDRAM中直到Flash中的圖片完全存入SDRAM。此時(shí)啟動(dòng)VGA時(shí)序控制模塊進(jìn)行圖片的顯示。 對(duì)于動(dòng)態(tài)顯示數(shù)字方法,可以先利用字模提取軟件把字模信息提取出來(lái)。而 Altera公司的FPGA器件內(nèi)均內(nèi)置了嵌入式陣列塊,通過(guò)調(diào)用其中的LPM_ROM模塊??梢匀我庠O(shè)置參數(shù),構(gòu)成內(nèi)置的ROM存儲(chǔ)器,存儲(chǔ)所摘要的字模信息。本系統(tǒng)的字模為16pixels長(zhǎng) x 16pixels寬 x 16位色(R5G6B5),所以利用LPM_ROM模塊,占用了將近10個(gè) M4K(FPGA內(nèi)置 塊ram)。 本系統(tǒng)通過(guò)接受外部 MCU 發(fā)來(lái)的命令來(lái)確定顯示數(shù)字的區(qū)域及要顯示的數(shù)字。因?yàn)閂GA時(shí)序中存在較長(zhǎng)的消隱期間,其期間是沒(méi)有顯示數(shù)據(jù)傳遞的。所以可以通過(guò)消隱期間實(shí)行對(duì)SDRAM的寫(xiě)操作,對(duì)圖片固定地址寫(xiě)入字模信息。其具體步驟: (1)、確定要顯示數(shù)字的圖像區(qū)域首地址; (2)、確定要顯示數(shù)字信息位于ROM中的地址; (3)、啟動(dòng) SDRAM 寫(xiě)操作; (4)、SDRAM 寫(xiě)操作地址增加16后,地址繼續(xù)增加800(即一行),而 ROM地址每次增加 1; (5)、如此循環(huán)16 次(字模為 16 x16)后,如果還有要寫(xiě)的數(shù)字則繼續(xù)(1)步驟,否則停止寫(xiě)操作。 因?yàn)橹皇莿?dòng)態(tài)的改變數(shù)字,所以對(duì)原圖像改動(dòng)的數(shù)據(jù)量不是很大,所以不會(huì)造成圖像閃爍現(xiàn)象。此方法缺點(diǎn)就是字模占用的 塊RAM 資源較多,如果字模只是固定顏色的情況,則 塊RAM 資源只用到 1 個(gè) M4K,所以在資源緊張的情況下還得需要各方面比較,得到最合適的顏色分配。 2.3 Flash 的讀寫(xiě)模塊現(xiàn)在數(shù)字電路設(shè)計(jì)中,經(jīng)常需要保存大量數(shù)據(jù),F(xiàn)lash Memory 以其集成度高、低成本、使用方便等優(yōu)點(diǎn),因此也成為設(shè)計(jì)人員的首選。 Flash可以分兩類(lèi):并行和串行。并行存儲(chǔ)量大,速度快;而串行存儲(chǔ)量相對(duì)較小,但體積小連線(xiàn)簡(jiǎn)單,可減少電路面積,節(jié)約成本,二者各有優(yōu)缺點(diǎn),根據(jù)實(shí)際需要選取。本系統(tǒng)對(duì)速度要求不是很高,所以選用了串行 Flash,為意法半導(dǎo)體推出的 M25P32。M25P32為SPI 接口,具有 4MB 容量,對(duì)與本設(shè)計(jì)每幅圖片接近 1MB,則可以存儲(chǔ) 4 副圖片,可以進(jìn)行 4 個(gè)界面的切換顯示。 其模塊設(shè)計(jì)必須嚴(yán)格按照 Flash 的時(shí)序控制信號(hào)。對(duì)于首次使用 Flash,先需要進(jìn)行擦除操作,編程指令可以將 1 變成 0。往 Flash 寫(xiě)入圖片數(shù)據(jù)時(shí),還是需要調(diào)用 FPGA 中的宏模塊制作一個(gè) ROM,但是由于 Flash 容量較大,一般FPGA沒(méi)有這么大的存儲(chǔ)空間,所以數(shù)據(jù)需要分多次寫(xiě)入。FPGA的ROM數(shù)據(jù)保存在.mif文中,.mif 由 Matlab 直接生成.mif文件,也可以在 Quartus II 中生成。 在對(duì) M25P32 的操作中,需要注意的是一些指令在操作完成后,需要留出一段時(shí)間 Flash進(jìn)行數(shù)據(jù)處理,比如寫(xiě)寄存器為 5ms~15ms等,如果沒(méi)有等待這段處理過(guò)程,則會(huì)出現(xiàn)一些誤操作。 FLASH操作步驟: (1)、FLASH擦除,一般通過(guò)SPI發(fā)FLASH擦除命令,等待結(jié)束。 (2)、FLASH寫(xiě),發(fā)送寫(xiě)命令,寫(xiě)地址,數(shù)據(jù)。一般FLASH保存一些參數(shù),或者數(shù)據(jù)存儲(chǔ)用,如果FLASH內(nèi)已經(jīng)有可用的數(shù)據(jù),可以根據(jù)實(shí)際情況,也可以先讀FLASH。 (3)、FLASH讀,發(fā)送讀命令,讀地址。 3、驗(yàn)證利用可編程邏輯器件(FPGA)可以很方便地實(shí)現(xiàn)數(shù)字系統(tǒng)設(shè)計(jì),而在A(yíng)ltera的QuartusII軟件平臺(tái)下,F(xiàn)PGA 設(shè)計(jì)的各個(gè)階段都得到了很好的支持,兩者有效結(jié)合使得數(shù)字系統(tǒng)的設(shè)計(jì)更加方便快捷。 通過(guò)硬件平臺(tái)的驗(yàn)證,基于 FPGA 的VGA圖形顯示器已達(dá)到設(shè)計(jì)要求,可以穩(wěn)定地實(shí)現(xiàn)界面的顯示,并可以在界面上根據(jù)需要進(jìn)行數(shù)字的動(dòng)態(tài)改變顯示,對(duì)于一些工業(yè)監(jiān)控場(chǎng)合的應(yīng)用,尤其數(shù)據(jù)量不是很大的場(chǎng)合尤為適合,不僅可以及時(shí)顯示當(dāng)前狀態(tài),還可以保存關(guān)機(jī)時(shí)狀態(tài)。
|
|
|