郭靖豐
(南京信息工程大學電子與信息工程學院,江蘇南京,210044 )
隨著時代的進步,電子產(chǎn)品的小型化、便攜化、智能化成為了發(fā)展趨勢,傳統(tǒng)的VGA圖片顯示都是讀出保存在開發(fā)板的ROM資源中的圖片數(shù)據(jù)進行顯示,但當圖片分辨率較大時,ROM資源就會不足,就需要以犧牲圖片清晰度為代價來顯示圖片,并且ROM是直接焊接在開發(fā)板上的,不便于攜帶。結合以上背景,本文以FPGA為主機,SD卡為從機,利用SD卡小體積、大容量,高速度的優(yōu)點來存儲圖片則解決了ROM資源不足的缺陷,提高了圖片的顯示速度和清晰度。
由于VGA顯示格式是16位RGB565格式,為了使FPGA能直接讀取存放在SD卡中的圖片數(shù)據(jù),選用BIN的圖片格式,使圖片以二進制的方式存放在SD卡中。并用WinHex查詢SD卡中BIN文件的扇區(qū)地址,方便后續(xù)FPGA的讀取。
本裝置采用FPGA作為主機,SD卡作為從機實現(xiàn)主從機之間的數(shù)據(jù)通信,并將圖片顯示在VGA顯示器上,首先PLL時鐘控制模塊產(chǎn)生各模塊所需要的工作時鐘,用戶可以通過按鍵選擇要顯示的圖片,不同的按鍵值傳給SD卡讀取圖片控制模塊后,SD卡讀取圖片控制模塊將不同的扇區(qū)地址傳給SD卡控制模塊,SD卡控制模塊根據(jù)地址讀出圖片數(shù)據(jù)后傳給SDRAM控制模塊進行緩存,最終把圖片數(shù)據(jù)傳給VGA顯示驅動模塊進行顯示。系統(tǒng)結構框圖如圖1所示。

圖1 系統(tǒng)結構框圖
本裝置采用ALTERA 公司的 Cyclone IV 系列 FPGA,芯片型號為 EP4CE10F17C8,擁有豐富的邏輯單元和嵌入式資源,結合高速時鐘晶振,給該芯片提供50MHz的時鐘,為實現(xiàn)高速的運算奠定了基礎。
SD卡采用目前市面上使用最廣泛的基于SD2.0協(xié)議規(guī)范的SDHC卡,SD卡工作模式有SDIO模式和SPI模式兩種,本裝置選擇使用信號線較少的SPI模式。SPI模式下共用到CS、CLK、MISO、MOSI四根信號線。在SPI模式下采用1位數(shù)據(jù)位寬,理論上可以達到50Mbps的傳輸速率,具有存儲容量大,讀寫速度快的優(yōu)點。
SD卡在正常讀寫操作之前,必須先對SD卡進行初始化,即寫入命令CMD0。在對SD卡進行讀寫操作時同樣需要發(fā)送寫命令(CMD24)和讀命令(CMD17)。
用WinHex查詢的SD卡中圖片BIN文件的扇區(qū)起始地址方便后續(xù)程序使用。

圖2 SD卡與MAXQ2000接口圖
SDRAM芯片采用型號為W9825G6DH-6,該芯片內(nèi)部劃分了4個L-Bank,總存儲空間為256Mbit=32MB,最高工作頻率可達166MHz,具有存儲空間大,讀寫速度快的優(yōu)點。芯片原理圖如圖3所示,在芯片時鐘的驅動下,可以將SDRAM看做一張表格,只要確定了行和列,就能找到對應的數(shù)據(jù)。由于SDRAM利用了電容的充放電特性以及保持電荷能力,所以W9825G6DH-6的初始化和讀寫操作都較為復雜,包括一系激活、預充電、刷新、尋址等操作。

圖3 SDRAM與FPGA連接原理圖

圖4 W9825G6DH-6原理圖
調(diào)用quartus軟件下的PLL IP核分別輸出各模塊的工作時鐘并傳給相應模塊。由于SD卡對數(shù)據(jù)的發(fā)送是在時鐘的下升沿進行,但FPGA在編程中通常使用時鐘的上升沿,所以用PLL鎖相環(huán)技術產(chǎn)生與Clk_sd_ctrl頻率相同,但相位相差180°的時鐘信號Clk_sd_ctrl_180,與Clk_sd_ctrl一起傳入SD卡控制模塊。PLL時鐘控制模塊框圖如圖5所示。

圖5 PLL時鐘控制模塊框圖
根據(jù)不同的按鍵信息產(chǎn)生不同的按鍵標志信號(Key_flag)并傳給SD卡讀取圖片控制模塊,來決定讀取SD卡中的哪張圖片。
先根據(jù)圖片的分辨率和一次讀操作能讀取的字節(jié)數(shù)計算出完全讀取一張圖片所需要進行的讀操作次數(shù),再利用always語句塊延時打拍獲取傳來的讀忙信號(Rd_busy)下降沿,然后根據(jù)不同的按鍵標志信號從不同的扇區(qū)起始地址開始讀數(shù)據(jù),并將讀出的圖片數(shù)據(jù)送到SDRAM進行緩存。SD卡讀取圖片控制模塊框圖如圖6所示。

圖6 SD卡讀取圖片控制模塊框圖
4.4.1 SD卡初始化
SD卡初始化流程在Verilog設計中采用狀態(tài)機的方法實現(xiàn),共分為8個狀態(tài)。不同于以往的狀態(tài)機,因為SD卡上電后只需要初始化一次,所以進入Finish狀態(tài)后不需要再回到Idel狀態(tài)。SD卡初始化狀態(tài)機如圖7所示。

圖7 SD卡初始化狀態(tài)機
4.4.2 SD卡讀操作
利用always語句塊對傳來的Rd_start信號進行打拍延時操作來獲取Rd_start信號的上升沿作為開始讀信號。SD卡讀操作同樣可以使用狀態(tài)機來實現(xiàn),共分為5個狀態(tài)。SD卡讀操作狀態(tài)機如圖8所示。

圖8 SD卡讀操作狀態(tài)機
4.4.3 SD卡控制模塊頂層
由于在初始化和讀操作中都用到了SPI通信的主機數(shù)據(jù)輸出線(mosi),且初始化和讀操作中該線傳輸內(nèi)容不一致,所以在頂層程序設計中用always語句塊進行判斷,當未初始化完成主機數(shù)據(jù)輸出線采用初始化模塊中的輸出,當初始化完成時并且處于讀數(shù)據(jù)狀態(tài)時主機數(shù)據(jù)輸出線采用讀操作模塊中的輸出。SD卡控制模塊框圖如圖9所示。

圖9 SD卡控制模塊框圖
在像素時鐘(Vga_clk)的驅動下根據(jù)VGA時序參數(shù)輸出行長同步信號和RGB信號給VGA顯示器,輸出像素點數(shù)據(jù)輸入請求信號(data_req)傳給SDRAM控制模塊作為讀使能。VGA顯示器驅動模塊框圖如圖10所示。

圖10 VGA顯示器驅動模塊框圖
SDRAM上電后需要一個初始化過程,并根據(jù)不同的初始化狀態(tài)發(fā)送不同的指令,初始化完成后進入工作狀態(tài),要處理寫使能和讀使能,SDRAM的寫操作和讀操作同樣需要伴隨著不同指令的發(fā)送,并且SDRAM在工作過程中需要不斷的刷新操作,且刷新時間是固定的,所以用一個計數(shù)器來產(chǎn)生刷新命令。SDRAM控制模塊框圖如圖11所示。FPGA程序流程圖如圖12所示。

圖11 SDRAM控制模塊框圖

圖12 FPGA程序流程圖
基于FPGA和SD卡的VGA圖片顯示與切換裝置,結合SDRAM的存儲特性,可以完美的在顯示器上顯示圖片并根據(jù)用戶需求切換,有效的解決ROM資源不足的問題,提高了圖片的顯示速度與清晰度,同時,SD卡作為可插拔器件,有效解決了ROM不便于攜帶的問題,符合當今電子產(chǎn)品的發(fā)展趨勢。