郭靖豐
(南京信息工程大學(xué)電子與信息工程學(xué)院,江蘇南京,210044 )
隨著時(shí)代的進(jìn)步,電子產(chǎn)品的小型化、便攜化、智能化成為了發(fā)展趨勢(shì),傳統(tǒng)的VGA圖片顯示都是讀出保存在開(kāi)發(fā)板的ROM資源中的圖片數(shù)據(jù)進(jìn)行顯示,但當(dāng)圖片分辨率較大時(shí),ROM資源就會(huì)不足,就需要以犧牲圖片清晰度為代價(jià)來(lái)顯示圖片,并且ROM是直接焊接在開(kāi)發(fā)板上的,不便于攜帶。結(jié)合以上背景,本文以FPGA為主機(jī),SD卡為從機(jī),利用SD卡小體積、大容量,高速度的優(yōu)點(diǎn)來(lái)存儲(chǔ)圖片則解決了ROM資源不足的缺陷,提高了圖片的顯示速度和清晰度。
由于VGA顯示格式是16位RGB565格式,為了使FPGA能直接讀取存放在SD卡中的圖片數(shù)據(jù),選用BIN的圖片格式,使圖片以二進(jìn)制的方式存放在SD卡中。并用WinHex查詢(xún)SD卡中BIN文件的扇區(qū)地址,方便后續(xù)FPGA的讀取。
本裝置采用FPGA作為主機(jī),SD卡作為從機(jī)實(shí)現(xiàn)主從機(jī)之間的數(shù)據(jù)通信,并將圖片顯示在VGA顯示器上,首先PLL時(shí)鐘控制模塊產(chǎn)生各模塊所需要的工作時(shí)鐘,用戶(hù)可以通過(guò)按鍵選擇要顯示的圖片,不同的按鍵值傳給SD卡讀取圖片控制模塊后,SD卡讀取圖片控制模塊將不同的扇區(qū)地址傳給SD卡控制模塊,SD卡控制模塊根據(jù)地址讀出圖片數(shù)據(jù)后傳給SDRAM控制模塊進(jìn)行緩存,最終把圖片數(shù)據(jù)傳給VGA顯示驅(qū)動(dòng)模塊進(jìn)行顯示。系統(tǒng)結(jié)構(gòu)框圖如圖1所示。
圖1 系統(tǒng)結(jié)構(gòu)框圖
本裝置采用ALTERA 公司的 Cyclone IV 系列 FPGA,芯片型號(hào)為 EP4CE10F17C8,擁有豐富的邏輯單元和嵌入式資源,結(jié)合高速時(shí)鐘晶振,給該芯片提供50MHz的時(shí)鐘,為實(shí)現(xiàn)高速的運(yùn)算奠定了基礎(chǔ)。
SD卡采用目前市面上使用最廣泛的基于SD2.0協(xié)議規(guī)范的SDHC卡,SD卡工作模式有SDIO模式和SPI模式兩種,本裝置選擇使用信號(hào)線較少的SPI模式。SPI模式下共用到CS、CLK、MISO、MOSI四根信號(hào)線。在SPI模式下采用1位數(shù)據(jù)位寬,理論上可以達(dá)到50Mbps的傳輸速率,具有存儲(chǔ)容量大,讀寫(xiě)速度快的優(yōu)點(diǎn)。
SD卡在正常讀寫(xiě)操作之前,必須先對(duì)SD卡進(jìn)行初始化,即寫(xiě)入命令CMD0。在對(duì)SD卡進(jìn)行讀寫(xiě)操作時(shí)同樣需要發(fā)送寫(xiě)命令(CMD24)和讀命令(CMD17)。
用WinHex查詢(xún)的SD卡中圖片BIN文件的扇區(qū)起始地址方便后續(xù)程序使用。
圖2 SD卡與MAXQ2000接口圖
SDRAM芯片采用型號(hào)為W9825G6DH-6,該芯片內(nèi)部劃分了4個(gè)L-Bank,總存儲(chǔ)空間為256Mbit=32MB,最高工作頻率可達(dá)166MHz,具有存儲(chǔ)空間大,讀寫(xiě)速度快的優(yōu)點(diǎn)。芯片原理圖如圖3所示,在芯片時(shí)鐘的驅(qū)動(dòng)下,可以將SDRAM看做一張表格,只要確定了行和列,就能找到對(duì)應(yīng)的數(shù)據(jù)。由于SDRAM利用了電容的充放電特性以及保持電荷能力,所以W9825G6DH-6的初始化和讀寫(xiě)操作都較為復(fù)雜,包括一系激活、預(yù)充電、刷新、尋址等操作。
圖3 SDRAM與FPGA連接原理圖
圖4 W9825G6DH-6原理圖
調(diào)用quartus軟件下的PLL IP核分別輸出各模塊的工作時(shí)鐘并傳給相應(yīng)模塊。由于SD卡對(duì)數(shù)據(jù)的發(fā)送是在時(shí)鐘的下升沿進(jìn)行,但FPGA在編程中通常使用時(shí)鐘的上升沿,所以用PLL鎖相環(huán)技術(shù)產(chǎn)生與Clk_sd_ctrl頻率相同,但相位相差180°的時(shí)鐘信號(hào)Clk_sd_ctrl_180,與Clk_sd_ctrl一起傳入SD卡控制模塊。PLL時(shí)鐘控制模塊框圖如圖5所示。
圖5 PLL時(shí)鐘控制模塊框圖
根據(jù)不同的按鍵信息產(chǎn)生不同的按鍵標(biāo)志信號(hào)(Key_flag)并傳給SD卡讀取圖片控制模塊,來(lái)決定讀取SD卡中的哪張圖片。
先根據(jù)圖片的分辨率和一次讀操作能讀取的字節(jié)數(shù)計(jì)算出完全讀取一張圖片所需要進(jìn)行的讀操作次數(shù),再利用always語(yǔ)句塊延時(shí)打拍獲取傳來(lái)的讀忙信號(hào)(Rd_busy)下降沿,然后根據(jù)不同的按鍵標(biāo)志信號(hào)從不同的扇區(qū)起始地址開(kāi)始讀數(shù)據(jù),并將讀出的圖片數(shù)據(jù)送到SDRAM進(jìn)行緩存。SD卡讀取圖片控制模塊框圖如圖6所示。
圖6 SD卡讀取圖片控制模塊框圖
4.4.1 SD卡初始化
SD卡初始化流程在Verilog設(shè)計(jì)中采用狀態(tài)機(jī)的方法實(shí)現(xiàn),共分為8個(gè)狀態(tài)。不同于以往的狀態(tài)機(jī),因?yàn)镾D卡上電后只需要初始化一次,所以進(jìn)入Finish狀態(tài)后不需要再回到Idel狀態(tài)。SD卡初始化狀態(tài)機(jī)如圖7所示。
圖7 SD卡初始化狀態(tài)機(jī)
4.4.2 SD卡讀操作
利用always語(yǔ)句塊對(duì)傳來(lái)的Rd_start信號(hào)進(jìn)行打拍延時(shí)操作來(lái)獲取Rd_start信號(hào)的上升沿作為開(kāi)始讀信號(hào)。SD卡讀操作同樣可以使用狀態(tài)機(jī)來(lái)實(shí)現(xiàn),共分為5個(gè)狀態(tài)。SD卡讀操作狀態(tài)機(jī)如圖8所示。
圖8 SD卡讀操作狀態(tài)機(jī)
4.4.3 SD卡控制模塊頂層
由于在初始化和讀操作中都用到了SPI通信的主機(jī)數(shù)據(jù)輸出線(mosi),且初始化和讀操作中該線傳輸內(nèi)容不一致,所以在頂層程序設(shè)計(jì)中用always語(yǔ)句塊進(jìn)行判斷,當(dāng)未初始化完成主機(jī)數(shù)據(jù)輸出線采用初始化模塊中的輸出,當(dāng)初始化完成時(shí)并且處于讀數(shù)據(jù)狀態(tài)時(shí)主機(jī)數(shù)據(jù)輸出線采用讀操作模塊中的輸出。SD卡控制模塊框圖如圖9所示。
圖9 SD卡控制模塊框圖
在像素時(shí)鐘(Vga_clk)的驅(qū)動(dòng)下根據(jù)VGA時(shí)序參數(shù)輸出行長(zhǎng)同步信號(hào)和RGB信號(hào)給VGA顯示器,輸出像素點(diǎn)數(shù)據(jù)輸入請(qǐng)求信號(hào)(data_req)傳給SDRAM控制模塊作為讀使能。VGA顯示器驅(qū)動(dòng)模塊框圖如圖10所示。
圖10 VGA顯示器驅(qū)動(dòng)模塊框圖
SDRAM上電后需要一個(gè)初始化過(guò)程,并根據(jù)不同的初始化狀態(tài)發(fā)送不同的指令,初始化完成后進(jìn)入工作狀態(tài),要處理寫(xiě)使能和讀使能,SDRAM的寫(xiě)操作和讀操作同樣需要伴隨著不同指令的發(fā)送,并且SDRAM在工作過(guò)程中需要不斷的刷新操作,且刷新時(shí)間是固定的,所以用一個(gè)計(jì)數(shù)器來(lái)產(chǎn)生刷新命令。SDRAM控制模塊框圖如圖11所示。FPGA程序流程圖如圖12所示。
圖11 SDRAM控制模塊框圖
圖12 FPGA程序流程圖
基于FPGA和SD卡的VGA圖片顯示與切換裝置,結(jié)合SDRAM的存儲(chǔ)特性,可以完美的在顯示器上顯示圖片并根據(jù)用戶(hù)需求切換,有效的解決ROM資源不足的問(wèn)題,提高了圖片的顯示速度與清晰度,同時(shí),SD卡作為可插拔器件,有效解決了ROM不便于攜帶的問(wèn)題,符合當(dāng)今電子產(chǎn)品的發(fā)展趨勢(shì)。