趙慶平,李素文,杜偉寧,姜恩華
(1. 淮北師范大學(xué) 物理與電子信息學(xué)院,安徽 淮北 235000; 2. 空軍航空大學(xué) 飛行訓(xùn)練基地,長春 130062)
基于FPGA的SPI接口Flash控制器設(shè)計及其在存儲配置數(shù)據(jù)中的應(yīng)用
趙慶平1,李素文1,杜偉寧2,姜恩華1
(1. 淮北師范大學(xué) 物理與電子信息學(xué)院,安徽 淮北 235000; 2. 空軍航空大學(xué) 飛行訓(xùn)練基地,長春 130062)
針對現(xiàn)場可編程門陣列(FPGA)豐富的邏輯資源及產(chǎn)生精確時序的能力,給出一種基于FPGA的SPI控制器的設(shè)計方法. 可方便地對SPI flash進行讀寫、 擦除等操作,從而能快速、 準(zhǔn)確地存儲數(shù)據(jù). 在SPI控制器設(shè)計過程中使用Modelsim進行仿真驗證,并用VHDL硬件描述語言進行編程,下載到FPGA開發(fā)板上進行測試,對SPI接口flash進行操作,證明了系統(tǒng)設(shè)計方法的正確性和可靠性,該方法對flash存儲控制系統(tǒng)的設(shè)計具有普遍適用性,實現(xiàn)了對以FPGA為控制核心的系統(tǒng)數(shù)據(jù)長時間存儲.
串行外設(shè)接口控制器; 現(xiàn)場可編程門陣列; VHDL設(shè)計; Modelsim仿真
現(xiàn)場可編程門陣列(field programmable gate array,FPGA)是在PAL,GAL,EPLD和CPLD等可編程邏輯器件基礎(chǔ)上發(fā)展的產(chǎn)物[1]. 由于FPGA芯片需要被反復(fù)燒寫,因此只能采用一種易于反復(fù)配置的結(jié)構(gòu). 目前主流的FPGA都采用基于SRAM工藝的查找表結(jié)構(gòu),由于FPGA采用SRAM工藝,芯片無易失性,所以掉電后易丟失其內(nèi)部的邏輯配置.
串行外設(shè)接口(serial peripheral interface,SPI)是一個快速、 多雙工、 支持串行通信的接口,主要用于微型處理芯片、 小控制器及與外圍擴展器件間進行連接[2-3]. 利用SPI flash大容量、 讀寫速度快、 成本低廉及數(shù)據(jù)在斷電后不丟失的特點,可將FPGA的配置數(shù)據(jù)存儲于SPI flash中.
本文采用美國Xilinx公司的Virtex-5和意法半導(dǎo)體公司的M25P16進行設(shè)計. 對SPI控制器進行仿真,符合SPI時序要求. 與PC機進行通信測試表明,寫入和讀出的數(shù)據(jù)相符. 將FPGA配置數(shù)據(jù)存儲在M25P16中,實現(xiàn)了FPGA配置數(shù)據(jù)的掉電不丟失.
設(shè)計使用美國Digilent公司出品的開發(fā)板Genesys,該開發(fā)板使用的FPGA芯片是Xilinx公司的Virtex-5,Virtex-5系列采用第二代高級芯片組合模塊(ASMBLTM)列式架構(gòu),采用65 nm銅工藝技術(shù),支持330 000個邏輯單元,6個時鐘管理模塊,1 200個用戶接口,提供從1.2~3.3 V的廣泛I/O標(biāo)準(zhǔn)范圍,16.4 Mb的集成模塊存儲器,與SelectIO技術(shù)配合使用,簡化源同步接口. Flash芯片采用意法ST Microelectronics公司的M25P16. 該芯片是16 Mb(2 M×8)串行flash存儲器,兼容高速SPI接口. M25P16包含32個扇區(qū),每個扇區(qū)有256頁,每頁256個字節(jié). 該芯片由2.7~3.6 V單電源供電,最大50 MHz工作時鐘,100 000次的擦除和重寫,可保持20年時間. 系統(tǒng)的總體設(shè)計框圖如圖1所示. 圖1中,FPGA作為電路核心,連接上位機和SPI flash存儲器. 一方面接收來自上位機PC串口的數(shù)據(jù),并將數(shù)據(jù)存儲到flash中; 另一方面,從flash中讀出數(shù)據(jù)并通過串口發(fā)送到上位機.
在FPGA芯片中需要構(gòu)建3個模塊,分別是UART控制器、 FIFO模塊及SPI控制器,如圖2所示.
圖1 系統(tǒng)總體方案設(shè)計Fig.1 Overall designment of system
圖2 FPGA內(nèi)部模塊設(shè)計Fig.2 Designment of FPGA internal module
上位機和FPGA間通過RS232進行通信. RS232是PC機通信常用的接口,遵循異步傳輸標(biāo)準(zhǔn). RS232采用UART協(xié)議,需要在FPGA內(nèi)構(gòu)建UART模塊,實現(xiàn)數(shù)據(jù)在上位機和FPGA間的傳輸. 在FPGA中構(gòu)建SPI控制器,為flash提供時鐘,并對其進行擦除和讀寫操作. UART和SPI模塊的時鐘不同,因此需要添加FIFO(即先進先出隊列)作為兩者間的數(shù)據(jù)緩沖. 因為接收的串口數(shù)據(jù)被串并轉(zhuǎn)換為8字節(jié),與之相連的FIFO位寬定為8字節(jié),深度設(shè)為256個單元.
圖3 SPI接口Fig.3 SPI interface
SPI接口可分為主機(master)和從機(slave)兩部分,其結(jié)構(gòu)框圖如圖3所示. 主機和從機間用4根數(shù)據(jù)線進行連通,分別為CS,SDK,MDSI和MISD[4],其中: CS為從機片選信號,由主機控制輸出; SDK為同步時鐘數(shù)據(jù)線,用于對主機及從機的內(nèi)容傳輸實現(xiàn)同步,由主機向外發(fā)出控制輸出,下位機則在SDK的上升沿及下降沿進行接收或發(fā)送數(shù)據(jù); MDSI為主機用于輸出、 從機用于輸入信號,主機在下降沿時(或上升沿)由此信號線發(fā)數(shù)據(jù)給從機,而從機在上升沿時(或下降沿)由此信號線接收發(fā)來的內(nèi)容; MISD為主機用于輸入、 從機用于輸出信號,從機在上升沿時(或下降沿)使用此信號線發(fā)送內(nèi)容給主機,主機在下降沿時(或上升沿)使用此信號線接收該內(nèi)容[5-6].
SPI工作原理: 當(dāng)沒有數(shù)據(jù)需要傳輸在主機和下位機間時,主機由控制SDK輸出低電壓,CS則輸出高電壓,SPI總線則處于不忙狀態(tài); 如果有內(nèi)容需要進行傳輸時,主機可控制CS輸出為高電壓,SDK則輸出為時鐘信號,SPI總線則處于工作狀態(tài); 在某個時鐘的邊沿,從機或主機會并行發(fā)送數(shù)據(jù),將內(nèi)容各自傳輸?shù)組DSI及MISD上; 而在下一個時鐘沿時,從機或主機同時接收內(nèi)容,各自將MISD及MDSI上的內(nèi)容接收并進行存儲; 而當(dāng)內(nèi)容全部傳輸完成后,主機就會控制SDK輸出為空閑的電平,而CS則輸出無效電位,SPI總線又回到空閑狀態(tài),至此,完成一個完整的SPI數(shù)據(jù)總線傳送過程[7-9].
SPI控制器的設(shè)計采用Verileg HDL硬件描述語言[10-11]. Verileg描述的器件在編譯和綜合時適應(yīng)能力強,系統(tǒng)可自動優(yōu)化[12]處理. 雖然對應(yīng)語言的解讀性能較弱,但仿真后的糾錯能力較強. 本文設(shè)計的SPI控制器主要完成以下任務(wù):
1) 寫flash: 將上位機發(fā)送來的256字節(jié)數(shù)據(jù)寫入flash的某頁中;
2) 讀flash: 從flash寫有數(shù)據(jù)的一頁中讀出并傳送到上位機顯示;
3) 將FPGA配置數(shù)據(jù)存儲在flash芯片內(nèi),重新上電,讀取flash中數(shù)據(jù)對FPGA重新配置.
寫flash操作首先要對flash進行擦除操作,輸入擦除指令并等待3 s,然后進行寫操作. 寫操作要輸入8位wren指令、 8位pp指令、 24位地址,隨后輸入數(shù)據(jù),流程如圖4所示. 由圖4可見,寫操作開始時處于檢測輸入狀態(tài)idle,當(dāng)有數(shù)據(jù)從上位機發(fā)送過來時,立即進入SPI工作模式; wren指令將寫寄存器的寫使能位WEL置1,輸入擦除指令se和要擦除頁的地址,等待3 s,這時寫使能位WEL復(fù)位為0,重新輸入wren指令并將WEL位置1; 輸入頁寫指令、 頁寫地址和頁寫數(shù)據(jù); 完成后回到檢測狀態(tài). 讀操作相對簡單,輸入讀指令和讀地址后,數(shù)據(jù)即從flash中輸出,狀態(tài)如圖5所示. 由圖5可見,讀操作開始處于檢測讀使能狀態(tài),當(dāng)允許讀時,發(fā)送讀指令和讀地址,數(shù)據(jù)即從flash中輸入到FPGA芯片內(nèi),經(jīng)過FIFO傳送到上位機進行顯示.
圖4 寫操作Fig.4 Writing operation
圖5 讀操作Fig.5 Reading operation
本文設(shè)計采用ISE+Modelsim的方法進行聯(lián)合設(shè)計. ISE是Xilinx公司推出的EDA設(shè)計軟件,它集成HDL代碼編輯、 原理圖編輯、 代碼編譯、 綜合、 工程仿真及鎖定管腳和下載程序的功能. ISE提供了設(shè)計開發(fā)工具的所有功能,支持Xilinx的全系列邏輯器件產(chǎn)品,并集成了XST綜合工具,支持核生成工具和PACE. 明導(dǎo)國際公司的Modelsim是目前廣泛使用的HDL硬件描述語言的仿真軟件,能很好地仿真測試環(huán)境,可以單內(nèi)核支持VHPL和Veralog HDL混合仿真的軟件[10]. 寫操作的仿真結(jié)果如圖6所示.
圖6 寫操作仿真結(jié)果Fig.6 Simulation result of writing operation
由圖6可見,當(dāng)上位機有數(shù)據(jù)發(fā)送到FPGA時,接收并放在FIFO中. FIFO存儲滿后,FPGA使能SPI控制器開始工作. 在scl信號的下降沿準(zhǔn)備指令、 地址,并從FIFO中讀出數(shù)據(jù),逐位在scl上升沿輸入到flash中.
讀操作的仿真結(jié)果如圖7所示. 由圖7可見,當(dāng)要讀取flash中的數(shù)據(jù),使能讀信號start_read,然后SPI控制器進入讀數(shù)據(jù)狀態(tài). 在scl的下降沿flash輸出數(shù)據(jù),在scl上升沿采集到FPGA芯片中,緩存在FIFO中. FIFO寫滿后,由串口回傳給PC機,進行核對.
圖7 讀操作仿真結(jié)果Fig.7 Simulation result of reading operation
由仿真結(jié)果可見,該設(shè)計方案滿足了時鐘和數(shù)據(jù)的建立和保持時間,可避免毛刺的產(chǎn)生. 在仿真通過后,將工程下載到開發(fā)板上進行運行測試. 本文使用的開發(fā)板是Digilent公司的Xilinx FPGA開發(fā)板. 下載測試: 上位機發(fā)送到FPGA寫入flash芯片的256字節(jié)數(shù)據(jù),再用FPGA讀出flash中剛存儲的數(shù)據(jù)并返回到上位機. 若結(jié)果完全相同,則表明SPI flash讀寫測試成功,如圖8所示.
圖8 讀取SPI flash數(shù)據(jù)Fig.8 SPI flash data reading
最后,將FPGA編譯產(chǎn)生的數(shù)據(jù)下載到該SPI flash芯片中,重新上電,系統(tǒng)動加載硬件數(shù)據(jù),實現(xiàn)了FPGA配置數(shù)據(jù)的掉電不丟失功能.
綜上所述,本文介紹了基于FPGA的SPI控制器設(shè)計方法,并使用Digilent公司的FPGA開發(fā)板Genesys進行了驗證. 結(jié)果表明,該方法能完成SPI flash控制器的邏輯仿真,可以對SPI flash的讀寫進行驗證,利用此flash實現(xiàn)了對FPGA重新上電的自動配置功能. 本文設(shè)計在FPGA芯片上實現(xiàn),具有較高的可移植性,控制器經(jīng)過簡單修改即可應(yīng)用于控制其他型號的SPI flash芯片,具有廣泛的適用性.
[1]蔚接鎖. 基于FPGA與流水線CORDIC算法的FFT處理器的實現(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]. 計算機工程,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)場可編程門陣列設(shè)計入門與進階 [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]. 核電子學(xué)與探測技術(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]. 電子器件,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與單片機的SPI接口的實現(xiàn) [J]. 工業(yè)儀表與自動化裝置,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è)計與實現(xiàn) [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è)計與實現(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è)計技術(shù)在慣測系統(tǒng)中的應(yīng)用與研究 [D]. 長沙: 國防科學(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語言的DDS設(shè)計與仿真 [D]. 西安: 西安電子科技大學(xué),2007. (ZHANG Ping. Design and Simulation of DDS Based on Verilog HDL [D]. Xi’an: Xidian University,2007.)
[11]程琤. 幾種硬件描述語言HDL的現(xiàn)狀與發(fā)展 [J]. 重慶工業(yè)高等??茖W(xué)校學(xué)報,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)機設(shè)計與優(yōu)化 [J]. 微電子學(xué)與計算機,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è)計的研究,E-mail: zhaoqingping1215@163.com.
國家自然科學(xué)基金(批準(zhǔn)號: 41275027)和安徽省高校自然科學(xué)研究項目(批準(zhǔn)號: KJ2013Z228).
TP332.3
A
1671-5489(2014)05-1022-05