趙慶平,李素文,杜偉寧,姜恩華
(1. 淮北師范大學(xué) 物理與電子信息學(xué)院,安徽 淮北 235000; 2. 空軍航空大學(xué) 飛行訓(xùn)練基地,長(zhǎng)春 130062)
基于FPGA的SPI接口Flash控制器設(shè)計(jì)及其在存儲(chǔ)配置數(shù)據(jù)中的應(yīng)用
趙慶平1,李素文1,杜偉寧2,姜恩華1
(1. 淮北師范大學(xué) 物理與電子信息學(xué)院,安徽 淮北 235000; 2. 空軍航空大學(xué) 飛行訓(xùn)練基地,長(zhǎng)春 130062)
針對(duì)現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)豐富的邏輯資源及產(chǎn)生精確時(shí)序的能力,給出一種基于FPGA的SPI控制器的設(shè)計(jì)方法. 可方便地對(duì)SPI flash進(jìn)行讀寫(xiě)、 擦除等操作,從而能快速、 準(zhǔn)確地存儲(chǔ)數(shù)據(jù). 在SPI控制器設(shè)計(jì)過(guò)程中使用Modelsim進(jìn)行仿真驗(yàn)證,并用VHDL硬件描述語(yǔ)言進(jìn)行編程,下載到FPGA開(kāi)發(fā)板上進(jìn)行測(cè)試,對(duì)SPI接口flash進(jìn)行操作,證明了系統(tǒng)設(shè)計(jì)方法的正確性和可靠性,該方法對(duì)flash存儲(chǔ)控制系統(tǒng)的設(shè)計(jì)具有普遍適用性,實(shí)現(xiàn)了對(duì)以FPGA為控制核心的系統(tǒng)數(shù)據(jù)長(zhǎng)時(shí)間存儲(chǔ).
串行外設(shè)接口控制器; 現(xiàn)場(chǎng)可編程門(mén)陣列; VHDL設(shè)計(jì); Modelsim仿真
現(xiàn)場(chǎng)可編程門(mén)陣列(field programmable gate array,FPGA)是在PAL,GAL,EPLD和CPLD等可編程邏輯器件基礎(chǔ)上發(fā)展的產(chǎn)物[1]. 由于FPGA芯片需要被反復(fù)燒寫(xiě),因此只能采用一種易于反復(fù)配置的結(jié)構(gòu). 目前主流的FPGA都采用基于SRAM工藝的查找表結(jié)構(gòu),由于FPGA采用SRAM工藝,芯片無(wú)易失性,所以掉電后易丟失其內(nèi)部的邏輯配置.
串行外設(shè)接口(serial peripheral interface,SPI)是一個(gè)快速、 多雙工、 支持串行通信的接口,主要用于微型處理芯片、 小控制器及與外圍擴(kuò)展器件間進(jìn)行連接[2-3]. 利用SPI flash大容量、 讀寫(xiě)速度快、 成本低廉及數(shù)據(jù)在斷電后不丟失的特點(diǎn),可將FPGA的配置數(shù)據(jù)存儲(chǔ)于SPI flash中.
本文采用美國(guó)Xilinx公司的Virtex-5和意法半導(dǎo)體公司的M25P16進(jìn)行設(shè)計(jì). 對(duì)SPI控制器進(jìn)行仿真,符合SPI時(shí)序要求. 與PC機(jī)進(jìn)行通信測(cè)試表明,寫(xiě)入和讀出的數(shù)據(jù)相符. 將FPGA配置數(shù)據(jù)存儲(chǔ)在M25P16中,實(shí)現(xiàn)了FPGA配置數(shù)據(jù)的掉電不丟失.
設(shè)計(jì)使用美國(guó)Digilent公司出品的開(kāi)發(fā)板Genesys,該開(kāi)發(fā)板使用的FPGA芯片是Xilinx公司的Virtex-5,Virtex-5系列采用第二代高級(jí)芯片組合模塊(ASMBLTM)列式架構(gòu),采用65 nm銅工藝技術(shù),支持330 000個(gè)邏輯單元,6個(gè)時(shí)鐘管理模塊,1 200個(gè)用戶接口,提供從1.2~3.3 V的廣泛I/O標(biāo)準(zhǔn)范圍,16.4 Mb的集成模塊存儲(chǔ)器,與SelectIO技術(shù)配合使用,簡(jiǎn)化源同步接口. Flash芯片采用意法ST Microelectronics公司的M25P16. 該芯片是16 Mb(2 M×8)串行flash存儲(chǔ)器,兼容高速SPI接口. M25P16包含32個(gè)扇區(qū),每個(gè)扇區(qū)有256頁(yè),每頁(yè)256個(gè)字節(jié). 該芯片由2.7~3.6 V單電源供電,最大50 MHz工作時(shí)鐘,100 000次的擦除和重寫(xiě),可保持20年時(shí)間. 系統(tǒng)的總體設(shè)計(jì)框圖如圖1所示. 圖1中,FPGA作為電路核心,連接上位機(jī)和SPI flash存儲(chǔ)器. 一方面接收來(lái)自上位機(jī)PC串口的數(shù)據(jù),并將數(shù)據(jù)存儲(chǔ)到flash中; 另一方面,從flash中讀出數(shù)據(jù)并通過(guò)串口發(fā)送到上位機(jī).
在FPGA芯片中需要構(gòu)建3個(gè)模塊,分別是UART控制器、 FIFO模塊及SPI控制器,如圖2所示.
圖1 系統(tǒng)總體方案設(shè)計(jì)Fig.1 Overall designment of system
圖2 FPGA內(nèi)部模塊設(shè)計(jì)Fig.2 Designment of FPGA internal module
上位機(jī)和FPGA間通過(guò)RS232進(jìn)行通信. RS232是PC機(jī)通信常用的接口,遵循異步傳輸標(biāo)準(zhǔn). RS232采用UART協(xié)議,需要在FPGA內(nèi)構(gòu)建UART模塊,實(shí)現(xiàn)數(shù)據(jù)在上位機(jī)和FPGA間的傳輸. 在FPGA中構(gòu)建SPI控制器,為flash提供時(shí)鐘,并對(duì)其進(jìn)行擦除和讀寫(xiě)操作. UART和SPI模塊的時(shí)鐘不同,因此需要添加FIFO(即先進(jìn)先出隊(duì)列)作為兩者間的數(shù)據(jù)緩沖. 因?yàn)榻邮盏拇跀?shù)據(jù)被串并轉(zhuǎn)換為8字節(jié),與之相連的FIFO位寬定為8字節(jié),深度設(shè)為256個(gè)單元.
圖3 SPI接口Fig.3 SPI interface
SPI接口可分為主機(jī)(master)和從機(jī)(slave)兩部分,其結(jié)構(gòu)框圖如圖3所示. 主機(jī)和從機(jī)間用4根數(shù)據(jù)線進(jìn)行連通,分別為CS,SDK,MDSI和MISD[4],其中: CS為從機(jī)片選信號(hào),由主機(jī)控制輸出; SDK為同步時(shí)鐘數(shù)據(jù)線,用于對(duì)主機(jī)及從機(jī)的內(nèi)容傳輸實(shí)現(xiàn)同步,由主機(jī)向外發(fā)出控制輸出,下位機(jī)則在SDK的上升沿及下降沿進(jìn)行接收或發(fā)送數(shù)據(jù); MDSI為主機(jī)用于輸出、 從機(jī)用于輸入信號(hào),主機(jī)在下降沿時(shí)(或上升沿)由此信號(hào)線發(fā)數(shù)據(jù)給從機(jī),而從機(jī)在上升沿時(shí)(或下降沿)由此信號(hào)線接收發(fā)來(lái)的內(nèi)容; MISD為主機(jī)用于輸入、 從機(jī)用于輸出信號(hào),從機(jī)在上升沿時(shí)(或下降沿)使用此信號(hào)線發(fā)送內(nèi)容給主機(jī),主機(jī)在下降沿時(shí)(或上升沿)使用此信號(hào)線接收該內(nèi)容[5-6].
SPI工作原理: 當(dāng)沒(méi)有數(shù)據(jù)需要傳輸在主機(jī)和下位機(jī)間時(shí),主機(jī)由控制SDK輸出低電壓,CS則輸出高電壓,SPI總線則處于不忙狀態(tài); 如果有內(nèi)容需要進(jìn)行傳輸時(shí),主機(jī)可控制CS輸出為高電壓,SDK則輸出為時(shí)鐘信號(hào),SPI總線則處于工作狀態(tài); 在某個(gè)時(shí)鐘的邊沿,從機(jī)或主機(jī)會(huì)并行發(fā)送數(shù)據(jù),將內(nèi)容各自傳輸?shù)組DSI及MISD上; 而在下一個(gè)時(shí)鐘沿時(shí),從機(jī)或主機(jī)同時(shí)接收內(nèi)容,各自將MISD及MDSI上的內(nèi)容接收并進(jìn)行存儲(chǔ); 而當(dāng)內(nèi)容全部傳輸完成后,主機(jī)就會(huì)控制SDK輸出為空閑的電平,而CS則輸出無(wú)效電位,SPI總線又回到空閑狀態(tài),至此,完成一個(gè)完整的SPI數(shù)據(jù)總線傳送過(guò)程[7-9].
SPI控制器的設(shè)計(jì)采用Verileg HDL硬件描述語(yǔ)言[10-11]. Verileg描述的器件在編譯和綜合時(shí)適應(yīng)能力強(qiáng),系統(tǒng)可自動(dòng)優(yōu)化[12]處理. 雖然對(duì)應(yīng)語(yǔ)言的解讀性能較弱,但仿真后的糾錯(cuò)能力較強(qiáng). 本文設(shè)計(jì)的SPI控制器主要完成以下任務(wù):
1) 寫(xiě)flash: 將上位機(jī)發(fā)送來(lái)的256字節(jié)數(shù)據(jù)寫(xiě)入flash的某頁(yè)中;
2) 讀flash: 從flash寫(xiě)有數(shù)據(jù)的一頁(yè)中讀出并傳送到上位機(jī)顯示;
3) 將FPGA配置數(shù)據(jù)存儲(chǔ)在flash芯片內(nèi),重新上電,讀取flash中數(shù)據(jù)對(duì)FPGA重新配置.
寫(xiě)flash操作首先要對(duì)flash進(jìn)行擦除操作,輸入擦除指令并等待3 s,然后進(jìn)行寫(xiě)操作. 寫(xiě)操作要輸入8位wren指令、 8位pp指令、 24位地址,隨后輸入數(shù)據(jù),流程如圖4所示. 由圖4可見(jiàn),寫(xiě)操作開(kāi)始時(shí)處于檢測(cè)輸入狀態(tài)idle,當(dāng)有數(shù)據(jù)從上位機(jī)發(fā)送過(guò)來(lái)時(shí),立即進(jìn)入SPI工作模式; wren指令將寫(xiě)寄存器的寫(xiě)使能位WEL置1,輸入擦除指令se和要擦除頁(yè)的地址,等待3 s,這時(shí)寫(xiě)使能位WEL復(fù)位為0,重新輸入wren指令并將WEL位置1; 輸入頁(yè)寫(xiě)指令、 頁(yè)寫(xiě)地址和頁(yè)寫(xiě)數(shù)據(jù); 完成后回到檢測(cè)狀態(tài). 讀操作相對(duì)簡(jiǎn)單,輸入讀指令和讀地址后,數(shù)據(jù)即從flash中輸出,狀態(tài)如圖5所示. 由圖5可見(jiàn),讀操作開(kāi)始處于檢測(cè)讀使能狀態(tài),當(dāng)允許讀時(shí),發(fā)送讀指令和讀地址,數(shù)據(jù)即從flash中輸入到FPGA芯片內(nèi),經(jīng)過(guò)FIFO傳送到上位機(jī)進(jìn)行顯示.
圖4 寫(xiě)操作Fig.4 Writing operation
圖5 讀操作Fig.5 Reading operation
本文設(shè)計(jì)采用ISE+Modelsim的方法進(jìn)行聯(lián)合設(shè)計(jì). ISE是Xilinx公司推出的EDA設(shè)計(jì)軟件,它集成HDL代碼編輯、 原理圖編輯、 代碼編譯、 綜合、 工程仿真及鎖定管腳和下載程序的功能. ISE提供了設(shè)計(jì)開(kāi)發(fā)工具的所有功能,支持Xilinx的全系列邏輯器件產(chǎn)品,并集成了XST綜合工具,支持核生成工具和PACE. 明導(dǎo)國(guó)際公司的Modelsim是目前廣泛使用的HDL硬件描述語(yǔ)言的仿真軟件,能很好地仿真測(cè)試環(huán)境,可以單內(nèi)核支持VHPL和Veralog HDL混合仿真的軟件[10]. 寫(xiě)操作的仿真結(jié)果如圖6所示.
圖6 寫(xiě)操作仿真結(jié)果Fig.6 Simulation result of writing operation
由圖6可見(jiàn),當(dāng)上位機(jī)有數(shù)據(jù)發(fā)送到FPGA時(shí),接收并放在FIFO中. FIFO存儲(chǔ)滿后,FPGA使能SPI控制器開(kāi)始工作. 在scl信號(hào)的下降沿準(zhǔn)備指令、 地址,并從FIFO中讀出數(shù)據(jù),逐位在scl上升沿輸入到flash中.
讀操作的仿真結(jié)果如圖7所示. 由圖7可見(jiàn),當(dāng)要讀取flash中的數(shù)據(jù),使能讀信號(hào)start_read,然后SPI控制器進(jìn)入讀數(shù)據(jù)狀態(tài). 在scl的下降沿flash輸出數(shù)據(jù),在scl上升沿采集到FPGA芯片中,緩存在FIFO中. FIFO寫(xiě)滿后,由串口回傳給PC機(jī),進(jìn)行核對(duì).
圖7 讀操作仿真結(jié)果Fig.7 Simulation result of reading operation
由仿真結(jié)果可見(jiàn),該設(shè)計(jì)方案滿足了時(shí)鐘和數(shù)據(jù)的建立和保持時(shí)間,可避免毛刺的產(chǎn)生. 在仿真通過(guò)后,將工程下載到開(kāi)發(fā)板上進(jìn)行運(yùn)行測(cè)試. 本文使用的開(kāi)發(fā)板是Digilent公司的Xilinx FPGA開(kāi)發(fā)板. 下載測(cè)試: 上位機(jī)發(fā)送到FPGA寫(xiě)入flash芯片的256字節(jié)數(shù)據(jù),再用FPGA讀出flash中剛存儲(chǔ)的數(shù)據(jù)并返回到上位機(jī). 若結(jié)果完全相同,則表明SPI flash讀寫(xiě)測(cè)試成功,如圖8所示.
圖8 讀取SPI flash數(shù)據(jù)Fig.8 SPI flash data reading
最后,將FPGA編譯產(chǎn)生的數(shù)據(jù)下載到該SPI flash芯片中,重新上電,系統(tǒng)動(dòng)加載硬件數(shù)據(jù),實(shí)現(xiàn)了FPGA配置數(shù)據(jù)的掉電不丟失功能.
綜上所述,本文介紹了基于FPGA的SPI控制器設(shè)計(jì)方法,并使用Digilent公司的FPGA開(kāi)發(fā)板Genesys進(jìn)行了驗(yàn)證. 結(jié)果表明,該方法能完成SPI flash控制器的邏輯仿真,可以對(duì)SPI flash的讀寫(xiě)進(jìn)行驗(yàn)證,利用此flash實(shí)現(xiàn)了對(duì)FPGA重新上電的自動(dòng)配置功能. 本文設(shè)計(jì)在FPGA芯片上實(shí)現(xiàn),具有較高的可移植性,控制器經(jīng)過(guò)簡(jiǎn)單修改即可應(yīng)用于控制其他型號(hào)的SPI flash芯片,具有廣泛的適用性.
[1]蔚接鎖. 基于FPGA與流水線CORDIC算法的FFT處理器的實(shí)現(xiàn) [D]. 天津: 天津大學(xué),2009. (WEI Jiesuo. The Implementation of a FFT Processor Based on FPGA and CORDIC Algorithm [D]. Tianjin: Tianjin University,2009.)
[2]羅莉,夏軍,鄧宇. 通用SPI Flash控制器的設(shè)計(jì)與驗(yàn)證 [J]. 計(jì)算機(jī)工程,2011,37(8): 22-24. (LUO Li,XIA Jun,DENG Yu. Design and Verification of General SPI Flash Controller [J]. Computor Engineering,2011,37(8): 22-24.)
[3]鄭川. Step by Step現(xiàn)場(chǎng)可編程門(mén)陣列設(shè)計(jì)入門(mén)與進(jìn)階 [M]. 西安: 西安電子科技大學(xué)出版社,2008. (ZHENG Chuan. Design of Step by Step Field-Programmable Gate Array [M]. Xi’an: Xidian University Press,2008.)
[4]唐琳,方方,張保靜,等. 基于ARM的多通道SPI Flash控制器設(shè)計(jì) [J]. 核電子學(xué)與探測(cè)技術(shù),2012,32(5): 583-586. (TANG Lin,FANG Fang,ZHANG Baojing,et al. Design of a Multi-channel SPI Flash Controller Based on STM32 [J]. Nuclear Electronics & Detection Technology,2012,32(5): 583-586.)
[5]關(guān)珊珊,周潔敏. 基于Xilinx FPGA的SPI Flash控制器的設(shè)計(jì)與驗(yàn)證 [J]. 電子器件,2012,35(2): 216-220. (GUAN Shanshan,ZHOU Jiemin. Design and Verification of SPI Flash Controller Based on Xilinx FPGA [J]. Chinese Journal of Electron Devices,2012,35(2): 216-220.)
[6]趙新雨,許忠仁,付貴增,等. 基于FPGA與單片機(jī)的SPI接口的實(shí)現(xiàn) [J]. 工業(yè)儀表與自動(dòng)化裝置,2010(2): 32-33. (ZHAO Xinyu,XU Zhongren,FU Guizeng,et al. The Design of SPI Interface Connection Based on FPGA and MCU [J]. Industrial Instrumentation & Automation,2010(2): 32-33.)
[7]王松. 基于FPGA的串行外圍接口SPI設(shè)計(jì)與實(shí)現(xiàn) [J]. 微計(jì)算機(jī)信息,2010,26(11): 117-119. (WANG Song. Design and Implementation of Serial Peripheral Interface Based on FPGA [J]. Microcomputer Information,2010,26(11): 117-119.)
[8]楊翰文. 基于FPGA的單向網(wǎng)閘專用控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) [D]. 北京: 北京交通大學(xué),2010. (YANG Hanwen. Design and Implementation of FPGA-Based One-Way GAP-Specific Control System [D]. Beijing: Beijing Jiaotong University,2010.)
[9]侯偉先. 基于FPGA的IP核設(shè)計(jì)技術(shù)在慣測(cè)系統(tǒng)中的應(yīng)用與研究 [D]. 長(zhǎng)沙: 國(guó)防科學(xué)技術(shù)大學(xué),2009. (HOU Weixian. Research and Application of IPcore Design Technique Based on FPGA in Inertial Measurement System [D]. Changsha: National University of Defense Technology,2009.)
[10]張萍. 基于Verilog語(yǔ)言的DDS設(shè)計(jì)與仿真 [D]. 西安: 西安電子科技大學(xué),2007. (ZHANG Ping. Design and Simulation of DDS Based on Verilog HDL [D]. Xi’an: Xidian University,2007.)
[11]程琤. 幾種硬件描述語(yǔ)言HDL的現(xiàn)狀與發(fā)展 [J]. 重慶工業(yè)高等??茖W(xué)校學(xué)報(bào),2004,19(5): 36-38. (CHENG Cheng. The Status Quo and Development of Several Hardware Description Languages [J]. Journal of Chongqing Polytechnic College,2004,19(5): 36-38.)
[12]孔昕,吳武臣,侯立剛,等. 基于Verilog的有限狀態(tài)機(jī)設(shè)計(jì)與優(yōu)化 [J]. 微電子學(xué)與計(jì)算機(jī),2010,27(2): 180-183. (KONG Xin,WU Wuchen,HOU Ligang,et al. Verilog Design and Optimization of FSMs [J]. Microelectronics & Computer,2010,27(2): 180-183.)
(責(zé)任編輯: 韓 嘯)
DesignofSPIInterfaceFlashControllerBasedonFPGAandApplicationinStoringConfigurationData
ZHAO Qingping1,LI Suwen1,DU Weining2,JIANG Enhua1(1.SchoolofPhysicsandElectronicInformation,HuaibeiNormalUniversity,Huaibei235000,AnhuiProvince,China;
2.FlightTrainingBasic,AviationUniversityofAirForce,Changchun130062,China)
The authors presented a designed method using serial peripheral interface controller based on field programmable gate array. Using logic resources of FPGA with the ability to produce accurate time series,we can expediently read-write and wipe SPI flash and store data rapidly and accurately. It also expounds the designing process of SPI controller,which utilizes the simulation and verification by Modelsim and uses VHDL hardware description language to programme. Then we downloaded the program to FPGA development board to test and verify the read-write and wipe SPI flash and finally operated the SPI interface flash. It is proved that the method is correct and reliable,and has general applicability to the system designment of the flash controller. This method with FPGA as the control core of system achieved data storage for a long time.
serial peripheral interface (SPI) controller; field programmable gate array(FPGA); VHDL design; Modelsim simulation
2014-04-11.
趙慶平(1972—),男,漢族,碩士,講師,從事FPGA及嵌入式系統(tǒng)設(shè)計(jì)的研究,E-mail: zhaoqingping1215@163.com.
國(guó)家自然科學(xué)基金(批準(zhǔn)號(hào): 41275027)和安徽省高校自然科學(xué)研究項(xiàng)目(批準(zhǔn)號(hào): KJ2013Z228).
TP332.3
A
1671-5489(2014)05-1022-05