薛宏亮 合肥工業(yè)大學(xué)儀器科學(xué)與光電工程學(xué)院 安徽合肥 230009
?
基于SPI總線FLASH時(shí)序控制的FPGA實(shí)現(xiàn)
薛宏亮 合肥工業(yè)大學(xué)儀器科學(xué)與光電工程學(xué)院 安徽合肥 230009
【文章摘要】
FLASH存儲(chǔ)器又稱為閃存,它集合了RAM和ROM的長(zhǎng)處,不僅可以快速地讀寫數(shù)據(jù),又可以使數(shù)據(jù)在掉電時(shí)不會(huì)丟失。所以,近年來(lái),F(xiàn)LASH存儲(chǔ)器在嵌入式系統(tǒng)中扮演著越來(lái)越重要的角色,而以FPGA作為控制核心的FLASH存儲(chǔ)系統(tǒng)也受到了越來(lái)越廣泛地應(yīng)用。本文介紹了一種SPI接口FLASH時(shí)序控制器的設(shè)計(jì)過(guò)程,并用Verilog硬件描述語(yǔ)言實(shí)現(xiàn)整個(gè)時(shí)序控制功能,將其嵌入到FPGA的設(shè)計(jì)之中。在Modelsim中對(duì)設(shè)計(jì)進(jìn)行仿真驗(yàn)證,結(jié)果正確可靠,具有普遍的適用性。
【關(guān)鍵詞】
SPI總線FLASH ;時(shí)序控制;FPGA
圖1 FLASH數(shù)據(jù)讀取時(shí)序圖
圖2 頁(yè)編程命令時(shí)序圖
圖3 FLASH讀寫模塊框圖
圖4 FLASH控制時(shí)序仿真
FLASH存儲(chǔ)器作為一類新型存儲(chǔ)器,因具有功耗低、速度快、容量大、成本低和非易失性等優(yōu)點(diǎn)在各種嵌入式系統(tǒng)中得到越來(lái)越廣泛地應(yīng)用。隨著技術(shù)的發(fā)展和需求的提高,數(shù)據(jù)的處理日益向著高速化的趨勢(shì)發(fā)展,此時(shí),通過(guò)普通的處理器來(lái)讀取FLASH中的數(shù)據(jù)已經(jīng)達(dá)不到要求。而利用FPGA控制FLASH存儲(chǔ)器的讀取可以達(dá)到較高的處理速度,所以在高速數(shù)據(jù)處理領(lǐng)域,利用FPGA實(shí)現(xiàn)FLASH存儲(chǔ)系統(tǒng)控制的工程應(yīng)用相當(dāng)廣泛。本文以winbond公司的SPI接口FLAH芯片W25Q128BV和Altera公司的Cyclone系列FPGA芯片EP4CE6F17C8為例,用Verilog硬件描述語(yǔ)言實(shí)現(xiàn)了以SPI總線協(xié)議為基礎(chǔ)的FLASH讀取控制時(shí)序,實(shí)現(xiàn)了FPGA和FLASH存儲(chǔ)器的接口操作。
1.1SPI總線協(xié)議
SPI(Serial Peripheral Interface)是一種高速的、全雙工、同步的通信總線。由于其在芯片管腳上只占用4根線,節(jié)約了管腳資源的同時(shí)也為PCB布局節(jié)省了空間,因而越來(lái)越多的芯片集成了這種通信協(xié)議。
SPI的通信原理簡(jiǎn)單,它以主從模式工作,通常需要一個(gè)主設(shè)備和一個(gè)或者多個(gè)從設(shè)備,需要至少4根線,分別是SDI(數(shù)據(jù)輸入)、SDO(數(shù)據(jù)輸出)、SCLK(時(shí)鐘)、CS(片選)。其中SDI用于主設(shè)備數(shù)據(jù)輸入,從設(shè)備數(shù)據(jù)輸出;SDO用于主設(shè)備數(shù)據(jù)輸出,從設(shè)備數(shù)據(jù)輸入;SCLK為時(shí)鐘信號(hào),必須由主設(shè)備提供;CS為從設(shè)備使能信號(hào),由主設(shè)備控制。SPI是串行通信協(xié)議,SDI和SDO 與SCLK同步,是基于SCLK提供的時(shí)鐘脈沖完成數(shù)據(jù)的逐位傳輸。
1.2W25Q128BV芯片介紹
W25Q128BV是winbond公司開發(fā)的128Mbit SPI接口的串行FLASH存儲(chǔ)芯片,由于它所需引腳少,功耗低,所以通常作為空間、引腳和功耗有限的系統(tǒng)的存儲(chǔ)設(shè)備。它的存儲(chǔ)陣列由65536頁(yè)可編程的頁(yè)組成,每頁(yè)為256字節(jié)的存儲(chǔ)空間,它可以一次性被編程。W25Q128BV有4096個(gè)可擦除選擇器,每個(gè)選擇器可以選擇16頁(yè)為一組進(jìn)行擦除;或者是256個(gè)可擦除塊,每塊為64KB。
W25Q128BV不僅支持標(biāo)準(zhǔn)的串行外設(shè)接口,而且還支持更高性能的雙向或者四向的輸出。標(biāo)準(zhǔn)的接口時(shí)鐘可以高達(dá)104MHz。本文介紹標(biāo)準(zhǔn)SPI接口模式的FLASH讀取時(shí)序的控制。
FPGA對(duì)FLASH的控制都是通過(guò)命令的方式進(jìn)行的,不管是讀、寫、擦除或者其他操作,首先在第一個(gè)字節(jié)要對(duì)W25Q128BV寫入命令號(hào)。根據(jù)命令格式的不同,再寫入地址和數(shù)據(jù);或者讀取數(shù)據(jù)。但是,無(wú)論是命令的寫入,還是數(shù)據(jù)和地址的寫入,亦或是數(shù)據(jù)的讀取都是按照SPI總線協(xié)議進(jìn)行的。
2.1FLASH讀寫時(shí)序分析
FLASH讀取數(shù)據(jù)命令允許從存儲(chǔ)單元中依次讀取一個(gè)或者多個(gè)字節(jié)的數(shù)據(jù)。該命令需要先發(fā)送命令字03,再發(fā)送24位地址,然后接受數(shù)據(jù)。命令字和地址在時(shí)鐘的上升沿被FLASH鎖存,當(dāng)?shù)刂繁唤邮蘸螅瑢?duì)應(yīng)的存儲(chǔ)單元中的數(shù)據(jù)在時(shí)鐘的下降沿出現(xiàn)在DO引腳。數(shù)據(jù)讀取命令的時(shí)序圖如圖1所示。
FLASH寫入數(shù)據(jù)必須先發(fā)送寫使能命令字(06),再發(fā)送頁(yè)編程命令(02)。頁(yè)編程命令之后需跟隨24位地址,然后寫入256個(gè)編程數(shù)據(jù)。數(shù)據(jù)都在時(shí)鐘的上升沿采樣。也頁(yè)編程命令時(shí)序圖如圖2所示。
2.2FLASH讀寫模塊設(shè)計(jì)
為了實(shí)現(xiàn)FLASH讀寫控制,必須嚴(yán)格按照FLASH讀寫時(shí)序進(jìn)行設(shè)計(jì)。本次設(shè)計(jì)的讀寫模塊主要由Spi_Control和Flash_Control兩個(gè)子模塊組成。其中Spi_Control模塊主要完成SPI接口時(shí)序的產(chǎn)生和命令的譯碼;Flash_Control模塊則主要實(shí)現(xiàn)命令的控制。
為了驗(yàn)證FLASH控制時(shí)序的正確性,將Verilog HDL代碼在Modelsim SE10.0c軟件中進(jìn)行仿真。由于FLASH讀取需要連接硬件,且其基本時(shí)序與FLASH寫入時(shí)序類似,故本次設(shè)計(jì)僅進(jìn)行FLASH寫入時(shí)序仿真。本設(shè)計(jì)仿真向地址為10的FLASH存儲(chǔ)單元寫入一個(gè)字節(jié)的數(shù)據(jù)0xF5,對(duì)應(yīng)的波形仿真圖如圖4所示。
FLASH存儲(chǔ)器因其優(yōu)異的性能在嵌入式存儲(chǔ)系統(tǒng)中得到越來(lái)越廣泛的應(yīng)用。本設(shè)計(jì)以FPGA為主控芯片,采用Verilog HDL模塊化設(shè)計(jì)方法,完成了基于SPI接口的FLASH存儲(chǔ)芯片的讀寫控制設(shè)計(jì),詳細(xì)地介紹了FLASH控制時(shí)序及其模塊化設(shè)計(jì)流程,最后完成了控制時(shí)序的仿真,驗(yàn)證了設(shè)計(jì)的準(zhǔn)確性,具有廣泛的應(yīng)用價(jià)值。
【參考文獻(xiàn)】
[1]鄭文靜,李明強(qiáng),舒繼武.Flash存儲(chǔ)技術(shù).計(jì)算機(jī)研究與發(fā)展,2010.
[2]陳明義,連帥軍,周建國(guó).基于FPGA的FLASH控制器系統(tǒng)設(shè)計(jì)及實(shí)現(xiàn).電子科技,2008.
[3]Winbond Corporation.W25Q128BV-3V 128M-BIT SERIAL FLASH MEMORY WITH DUAL AND QUAD SPI.2011.
[4]王誠(chéng),蔡海寧,吳繼華.Altera FPGA/CPLD設(shè)計(jì)(第2版).北京:人民郵電出版社,2011.
[5]夏雨聞.Verilog數(shù)字系統(tǒng)設(shè)計(jì)教程(第二版).北京:北京航空航天大學(xué)出版社,2008.