趙慶平,姜恩華
(淮北師范大學(xué) 物理與電子信息學(xué)院,安徽 淮北 235000)
基于FPGA的SPI接口Flash控制器設(shè)計(jì)及在存儲配置數(shù)據(jù)中的應(yīng)用
趙慶平,姜恩華
(淮北師范大學(xué) 物理與電子信息學(xué)院,安徽 淮北 235000)
介紹了SPI工作原理,給出了一種基于FPGA的SPI控制器的設(shè)計(jì)方法。利用FPGA豐富的邏輯資源以及產(chǎn)生精確時序的能力,非常方便地對SPI flash進(jìn)行讀寫、擦除等操作,從而能快速、準(zhǔn)確地存儲數(shù)據(jù)。闡述SPI控制器的設(shè)計(jì)過程,使用Modelsim進(jìn)行仿真驗(yàn)證,并用VHDL硬件描述語言進(jìn)行編程,下載到FPGA開發(fā)板上進(jìn)行測試驗(yàn)證,對SPI接口Flash進(jìn)行操作。證明了系統(tǒng)設(shè)計(jì)方法的正確性和可靠性。該方法對FLASH存儲控制系統(tǒng)的設(shè)計(jì)具有普遍適用性,可用于對FPGA配置進(jìn)行保存。
SPI控制器;FPGA;VHDL設(shè)計(jì);Modelsim仿真
使用德致倫公司出品的開發(fā)板Genesys,該開發(fā)板使用的FPGA芯片是xilinx公司的Virtex-5,Virtex-5系列采用第二代高級芯片組合模塊(ASMBLTM)列式架構(gòu),采用業(yè)界一流的65 nm銅工藝技術(shù),支持多達(dá)330 000個邏輯單元,6個時鐘管理模塊,多達(dá)1 200個用戶接口,提供從1.2 V到3.3 V的廣泛的I/O標(biāo)準(zhǔn)范圍,高達(dá)16.4 Mb的集成模塊存儲器,與Select IO技術(shù)配合使用,簡化源同步接口[4]。
Flash芯片采用ST Microelectronics公司的M25P16。該芯片是16 Mbit(2 M×8)串行flash存儲器,兼容高速SPI接口。M25P16包含32個扇區(qū),每個扇區(qū)有256頁,每一頁有256個字節(jié)。該芯片由2.7 V~3.6 V單電源供電,最大50 MHz工作時鐘,100 000次的擦除和重寫,可以保持20年時間[5]。
本系統(tǒng)的系統(tǒng)框圖如圖1所示。
圖1 系統(tǒng)總體方案設(shè)計(jì)
圖1中,F(xiàn)PGA作為電路核心,連接上位機(jī)和SPI Flash存儲器。一方面接收來自上位機(jī)PC串口的數(shù)據(jù),并將數(shù)據(jù)存儲到Flash中。另一方面,從Flash中讀出數(shù)據(jù)并通過串口發(fā)送到上位機(jī)。
在FPGA芯片中需要構(gòu)建三個模塊,分別是UART控制器,F(xiàn)IFO模塊以及SPI控制器。如圖2所示。
圖2 FPGA內(nèi)部模塊設(shè)計(jì)
上位機(jī)和FPGA之間是通過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提供時鐘,并對其進(jìn)行擦除和讀寫操作。UART和SPI模塊的時鐘不同,因此需要添加FIFO作為兩者之間數(shù)據(jù)緩沖。因?yàn)榻邮盏拇跀?shù)據(jù)被串并轉(zhuǎn)換為8 bits,與之相連的FIFO(即先進(jìn)先出隊(duì)列)位寬定為8 bits,深度設(shè)為256個單元。
SPI接口可以分為主機(jī)(Master)以及從機(jī)(Slave)兩個部分,其結(jié)構(gòu)框圖如圖3所示。
圖3 SPI接口
主機(jī)以及從機(jī)之間是通過4根信號線進(jìn)行連接的,它們分別是CS、SCK、MOSI和MISO。對它們的定義如下:
CS:從機(jī)片選信號,由主機(jī)控制輸出;
SCK:同步時鐘信號線,用來對主機(jī)和從機(jī)的數(shù)據(jù)傳輸進(jìn)行同步,由主機(jī)發(fā)出控制輸出,從機(jī)則在SCK的上升沿和下降沿接收以及發(fā)送數(shù)據(jù);
MOSI:主機(jī)作為輸出、從機(jī)作為輸入信號,主機(jī)在下降沿(或上升沿)由此信號線發(fā)數(shù)據(jù)給從機(jī),而從機(jī)在上升沿(或下降沿)由此信號線接收發(fā)來的數(shù)據(jù);
MISO:主機(jī)輸入、從機(jī)輸出信號,從機(jī)在上升沿(或下降沿)通過該信號線發(fā)送數(shù)據(jù)給主機(jī),主機(jī)在下降沿(或上升沿)通過該信號線接收該數(shù)據(jù)[6]。
其工作原理為:當(dāng)無數(shù)據(jù)需要傳輸在主機(jī)和從機(jī)之間時,主機(jī)通過控制SCK輸出低電平,CS則輸出高電平,SPI總線就會處于空閑的狀態(tài);如果有數(shù)據(jù)需要進(jìn)行傳輸時,主機(jī)通過控制CS輸出為高電平,SCK則輸出時鐘信號,SPI總線就會處在工作狀態(tài);在某個時鐘邊沿,從機(jī)或主機(jī)并行發(fā)送數(shù)據(jù),將數(shù)據(jù)各自傳輸?shù)組OSI以及MISO上;而在下一個時鐘沿,從機(jī)以及主機(jī)同時接收數(shù)據(jù),各自將MISO以及MOSI上的數(shù)據(jù)接收并進(jìn)行存儲;而當(dāng)數(shù)據(jù)所有全部傳輸完成后,主機(jī)就會控制SCK輸出為空閑的電平,CS則輸出為無效的電平,而SPI總線就會又回到空閑的狀態(tài)。到此,一個完整的SPI數(shù)據(jù)總線傳輸過程完成[7]。
SPI控制器的設(shè)計(jì)采用的是verilog HDL硬件語言。Verilog HDL是目前使用非常廣泛的硬件描述語言之一。Verilog描述的器件在編譯和綜合時適應(yīng)能力強(qiáng),系統(tǒng)可以自動優(yōu)化。雖然對應(yīng)語言的解讀性能較弱。但是仿真以后的糾錯能力強(qiáng)[8]。
本文設(shè)計(jì)的SPI控制器主要完成以下兩個主要任務(wù):
寫flash:將上位機(jī)發(fā)送來的256字節(jié)數(shù)據(jù)寫入flash的某一頁中;
讀flash:從flash寫有數(shù)據(jù)的一頁中讀出并傳送到上位機(jī)顯示。
將FPGA配置數(shù)據(jù)存儲在Flash芯片內(nèi),重新上電,讀取Flash中數(shù)據(jù)對FPGA重新配置。
寫flash操作首先要對flash進(jìn)行擦除操作,輸入擦除指令并等待3 s,然后進(jìn)行寫操作。寫操作要輸入8位WREN指令、8位PP指令、24位地址,隨后輸入數(shù)據(jù)。流程圖如圖4所示。
圖4 寫操作
開始時處于檢測輸入狀態(tài)idle,當(dāng)有數(shù)據(jù)從上位機(jī)發(fā)送過來,立即進(jìn)入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傳送到上位機(jī)進(jìn)行顯示。
本設(shè)計(jì)采用ISE + modelsim的方法進(jìn)行聯(lián)合設(shè)計(jì)。ISE是賽靈思公司推出的EDA設(shè)計(jì)軟件。它集成HDL代碼編輯、原理圖編輯,代碼編譯、綜合,工程仿真以及鎖定管腳和下載程序的功能。ISE提供了設(shè)計(jì)開發(fā)工具的所有功能,支持Xilinx的全系列邏輯器件產(chǎn)品,并集成了XST綜合工具,支持核生成工具和PACE[9]。明導(dǎo)國際公司的Modelsim是目前業(yè)界非常優(yōu)秀的HDL硬件語言仿真軟件,它可以提供很好的仿真環(huán)境,是目前業(yè)界內(nèi)唯一的實(shí)現(xiàn)單內(nèi)核支持VHDL以及Verilog HDL混合仿真的仿真軟件[10]。
寫操作的仿真圖如圖6所示。
圖6 寫操作仿真圖
由圖6可以看出,當(dāng)上位機(jī)有數(shù)據(jù)發(fā)送到FPGA的時候,接收放在FIFO中。FIFO存儲滿之后,F(xiàn)PGA使能SPI控制器開始工作。在scl信號的下降沿準(zhǔn)備指令、地址,并從FIFO中讀出數(shù)據(jù),逐位在scl上升沿輸入到flash中。
讀操作的仿真圖如圖7所示。
圖7 讀操作仿真圖
由圖7可以看出,當(dāng)要讀取flash中的數(shù)據(jù),使能讀信號start_read,然后SPI控制器進(jìn)入讀數(shù)據(jù)狀態(tài)。在scl的下降沿flash輸出數(shù)據(jù),在scl上升沿采集到FPGA芯片中,緩存在FIFO中。FIFO寫滿之后,由串口回傳給PC機(jī),進(jìn)行核對。
由仿真圖可以看出,滿足了時鐘和數(shù)據(jù)的建立和保持時間,可以避免毛刺的產(chǎn)生。在仿真通過后,將工程下載到開發(fā)板上進(jìn)行運(yùn)行測試。本文所使用的開發(fā)板是德致倫公司設(shè)計(jì)出品的Xilinx FPGA開發(fā)板。下載測試,上位機(jī)發(fā)送到FPGA寫入flash芯片的256字節(jié)數(shù)據(jù),再用FPGA讀出flash中剛剛存儲的數(shù)據(jù)并返回到上位機(jī)。如圖8所示,完全相同,說明SPI flash讀寫測試成功。
圖8 讀取SPIFlash數(shù)據(jù)
最后,將FPGA編譯產(chǎn)生的數(shù)據(jù)下載到該SPI Flash芯片中,重新上電,系統(tǒng)自動加載硬件數(shù)據(jù),實(shí)現(xiàn)了FPGA配置數(shù)據(jù)的掉電不丟失功能。
介紹了基于FPGA的SPI控制器的設(shè)計(jì)方法,使用Digilent公司的FPGA開發(fā)板Genesys進(jìn)行了驗(yàn)證。完成了SPI Flash控制器的邏輯仿真,對SPI Flash的讀寫進(jìn)行了驗(yàn)證,并且利用此Flash實(shí)現(xiàn)了對FPGA的重新上電的自動配置功能。
本設(shè)計(jì)在FPGA芯片上實(shí)現(xiàn),具有較高的可移植性,控制器經(jīng)過簡單修改就可以用于控制其它型號的SPI flash芯片,因此具有廣泛的適用性。
[1] 李冬梅,王延杰,王長宇,等.基于FPGA的高速實(shí)時圖像采集和自適應(yīng)閾值算法[J].吉林大學(xué)學(xué)報(bào)(工學(xué)版),2010, 40(2):534-537.
[2] 羅莉,夏軍,鄧宇.通用SPI Flash控制器的設(shè)計(jì)與驗(yàn)證[J].計(jì)算機(jī)工程,2011,37(8):22-27.
[3] 鄭川.Step by Step現(xiàn)場可編程門陣列設(shè)計(jì)入門與進(jìn)階[M].西安:西安電子科技大學(xué)出版社,2008.
[4] 佟吉剛,張振新.基于FPGA的無線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)設(shè)計(jì)[J].傳感技術(shù)學(xué)報(bào),2009,22(3):417-421.
[5] 關(guān)珊珊,周潔敏.基于Xilinx FPGA的SPI Flash控制器的設(shè)計(jì)與驗(yàn)證[J].電子器件,2012,35(2):216-220.
[6] 趙新雨,許忠仁,付貴增,朱文偉.基于FPGA與單片機(jī)的SPI接口的實(shí)現(xiàn)[J].工業(yè)儀表與自動化裝置,2010(2):32-33.
[7] 王松.基于FPGA的串行外圍接口SPI設(shè)計(jì)與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2010,26(11-2):117-119.
[8] 王軍海.基于Verilog HDL的DDS設(shè)計(jì)[D].武漢:武漢理工大學(xué),2007.
[9] 孫航.Xilinx可編程邏輯器件的高級應(yīng)用與設(shè)計(jì)技巧[M].北京:電子工業(yè)出版社,2004.
[10] 范靜,陳文藝.基于Modelsim與Matlab/Simulink聯(lián)合仿真技術(shù)的接口與應(yīng)用研究[J].西安郵電學(xué)院報(bào),2010, 15(3):72-75.
(責(zé)任編輯、校對:田敬軍)
Design of SPI Interface Flash Controller Based on FPGA and the Application in Storing Configuration Data
ZHAO Qing-ping, JIANG En-hua
(School of Physics and Electronic Information, Huaibei Normal University, Huaibei 235000, China)
It introduces the operating principles of SPI (serial peripheral interface) and gives a designed method by using SPI controller based on FPGA (Field Programmable Gate Array). We can expediently read-write and wipe SPI flash to quickly and accurately storage data with rich logical resources and accurate time series making by FPGA. It also expounds the designing process of SPI controller, which utilizes the simulation and verification by Modelsim and uses VHDL hardware description language controller to program, and then download the program to FPGA development board to test and verify and finally operates the SPI interface flash. It is proved that the method is correct and reliable, and has general applicability to the system designing of the FLASH controller and can be used to save the FPGA configuration.
SPI controller; FPGA; VHDL design; Modelsim simulation
TP332.3
A
1009-9115(2014)02-0069-04
10.3969/j.issn.1009-9115.2014.02.020
國家自然科學(xué)基金(41275027),安徽高校省級自然科學(xué)研究項(xiàng)目(KJ2013Z228),安徽高校省級自然科學(xué)研究重大項(xiàng)目(KJ2012ZD06)
2013-11-2
趙慶平(1972-),男,遼寧阜新人,碩士,講師,研究方向?yàn)镕PGA及嵌入式系統(tǒng)設(shè)計(jì)。數(shù)據(jù)的掉電不丟失。
FPGA(Field Programmable Gat Array,現(xiàn)場可編程門陣列)是在PAL、GAL、EPLD以及CPLD等可編程邏輯器件的基礎(chǔ)上發(fā)展出來的產(chǎn)物。由于FPGA芯片需要被反復(fù)燒寫,只能采用一種易于反復(fù)配置的結(jié)構(gòu)。目前主流FPGA都采用了基于SRAM工藝的查找表結(jié)構(gòu)。由于FPGA采用SRAM工藝,芯片無非易失性,所依掉電后丟失其內(nèi)部的邏輯配置[1]。
串行外設(shè)接口(Serial Peripheral Interface, SPI)是一種高速度、全雙工、同步串行通信接口,主要用于微處理器、微控制器和外圍擴(kuò)展芯片之間的連接[2]。利用SPI Flash大容量、讀寫速度快、成本低廉以及數(shù)據(jù)在斷電后不丟失的特點(diǎn),可以將FPGA的配置數(shù)據(jù)存儲于SPI Flash中[3]。
文中采用賽靈思公司的Virtex-5和意法半導(dǎo)體公司的M25P16進(jìn)行設(shè)計(jì)。對SPI控制器進(jìn)行仿真,符合SPI時序要求。與PC機(jī)進(jìn)行通信測試,寫入和讀出的數(shù)據(jù)吻合。將FPGA配置數(shù)據(jù)存儲在M25P16中,實(shí)現(xiàn)了FPGA配置