0 引言
串行接口已成為當前傳輸接口的發(fā)展趨勢,原因在于串行的高速率傳輸性能和較簡單的線路連接,。在已知的外圍器件連接端口中,,有USB,wishbone和并行端口,。其中SPI接口總線基于串行傳輸?shù)乃枷?,已?jīng)制定成為標準,成為常用的外圍器件連接方式,。針對FLASH這種常用的外圍存儲器件,,有多種接口可供選擇,,然而具有SPI接口的FLASH芯片硬件連接方便,,通過FPGA" title="FPGA">FPGA編程可以便捷地實現(xiàn)FLASH的存取功能。因此基于FPGA的具有SPI總線" title="SPI總線">SPI總線接口的FLASH功能實現(xiàn)為工程設計提供了一種原型,,為進一步的工程開發(fā)奠定了基礎,。
1 SPI總線介紹
1.1 SPI總線簡介
同步外設接口(serial peripheral,interface,,SPI)是由摩托羅拉公司開發(fā)的全雙工同步串行總線,。SPT是一種串行同步通信協(xié)議,由1個主設備和1個或多個從設備組成,,主設備啟動一個與從設備的同步通信,,從而完成數(shù)據(jù)的交換。
1.2 SPI總線接口及時序
SPI接口由SDI(串行數(shù)據(jù)輸入),,SDO(串行數(shù)據(jù)輸出),,SCK(串行移位時鐘),CS(從使能信號)四種信號構成,,CS決定了惟一的與主設備通信的從設備,,如沒有CS信號,則只能存在一個從設備,,主設備通過產生移位時鐘來發(fā)起通信,。通信時,數(shù)據(jù)由SDO輸出,,SDI輸入,,數(shù)據(jù)在時鐘的上升沿或下降沿從SDO輸出,在緊接著的下降沿或上升沿由SDI讀入,,這樣經(jīng)過8/16次時鐘改變,,完成8/16位數(shù)據(jù)的傳輸。
在SPI傳輸中,,數(shù)據(jù)是同步進行發(fā)送和接收的,。數(shù)據(jù)傳輸?shù)臅r鐘基于來自主處理器的時鐘脈沖,,摩托羅拉沒有定義任何通用SPI時鐘規(guī)范。然而,,最常用的時鐘設置基于時鐘極性(CPOL)和時鐘相位(CPHA)兩個參數(shù),;CPOL定義SPI串行時鐘的活動狀態(tài),而CPHA定義相對于數(shù)據(jù)位的時鐘相位,。CPOL和CPHA的設置決定了數(shù)據(jù)取樣的時鐘沿,。
SPI模塊為了與外設進行數(shù)據(jù)交換,根據(jù)外設工作要求,,其輸出串行同步時鐘極性和相位可以進行配置,,時鐘極性(CPOL)對傳輸協(xié)議沒有大的影響。如果CPOL=0,,串行同步時鐘的空間狀態(tài)為低電平,;如果CPOL=1,串行同步時鐘的空間狀態(tài)為高電平,。時鐘相位(CPHA)能夠配置用于選擇兩種不同的傳輸協(xié)議之一進行數(shù)據(jù)傳輸,。如果CPHA=0,在串行同步時鐘的第一個跳變沿(上升或下降)數(shù)據(jù)被采樣,;如果CPHA=1,,在串行同步時鐘的第二個跳變沿(上升或下降)數(shù)據(jù)被采樣。SPI主模塊和與之通信的外設時鐘相位與極性應該一致,。SPI接口時序如圖1所示,。
2 基于FPGA的SPI接口設計
SPI接口適用于主芯片與從芯片的連接,在一個FPGA系統(tǒng)中,,充當主芯片的為FPGA可編程芯片,,而FLASH芯片作為外圍從芯片通過SPI接口連接至FPGA芯片。該系統(tǒng)選用Lattice公司的FPGA芯片,,該公司的產品線齊全,,其中ECP2M" title="ECP2M">ECP2M系列芯片功能全面,開發(fā)成本低廉,。ECP2M系列芯片支持SPI接口,,通過硬件電路的簡單設計即可完成SPI接口的物理連接,進一步利用Lattice的工程開發(fā)EDA軟件進行FPGA編程,,實現(xiàn)SPI接口控制,。對接口的設計采用RAM作為讀/寫緩沖,完成主程序和FLASH之間的數(shù)據(jù)交換,,各模塊結構示意圖如圖2所示,。
圖2中ram_wr寫端口數(shù)據(jù)寬度設置為32位,地址深度設為128位,;讀端口為1位位寬,,這是由SPI端口的串行性決定的,;ram_rd讀端口與ram _wr寫端口相對應。RAM模塊如圖3所示,。
3 SPI接口實現(xiàn)及FLASH功能驗證
3.1 M25P64串行FLASH芯片介紹
M25P64串行芯片由STMicro公司生產,,它具有64 Mb容量,最高時鐘頻率可達50 MHz同時采用SPI總線接口,。該FLASH芯片的存儲空間劃分為128區(qū),,每區(qū)為65 536 B。在芯片中,,其中D為數(shù)據(jù)串行輸入端,;C為時鐘輸入;為低電平有效片選信號,;和分別為寫保護和暫停保持輸入,,Q為串行輸出端。該芯片的指令豐富,,功能完備,,常用的指令如:讀/寫使能、讀/寫狀態(tài)寄存器,、讀數(shù)據(jù)、頁編程以及區(qū)塊擦除等,。
該芯片由一個微控制器控制,,SPI接口有種工作模式分別為;CPOL=0,,,,CPHA=O和CPOL=1,CPHA=1,,兩者區(qū)別為在SPI主端不傳數(shù)據(jù)時,,時鐘的電平前者為0,后者為1,。在里采用CPOL=0,,CPHA=模式。
3. 2 工程環(huán)境設置及SPI接口設計
Lattice公司的FPGA工程開發(fā)EDA軟件名為ispLEVER,,其7.2版本為較新版本,。該版本集合了IPExpress,Reveal Logic Analyzer等實用工具,,可用于添加Lattice公司開發(fā)的IP核以及在線邏輯仿真等,。ispLEVER 7.2的默認仿真工具為Active-HDL仿真器,由于需要采用Model-Sim仿真器,,因此安裝ModleSim 6.2b版本,。對仿真軟件成功安裝后,,加入pcsc_mti_work,pcsc_mti_work_revA,,ecp2m_vlg和pmi_work四個仿真庫并進行編譯,。編譯完成后啟動ispLEVER 7.2,在"options"菜單中修改環(huán)境變量和默認仿真工具,,使得ModelSim連接圖標出現(xiàn)在工具欄中成為工程的仿真工具,。
進入ispLEVER 7.2的編輯界面,開始建立工程,,首先選擇器件型號,,這里采用LatticeECP2M系列中的LFE2MSOE型號芯片,并選擇封裝類型為FPGAB-GA672,,速度級別為-5,。器件選定后,建立FLASH_contro]工程文件和testbench測試文件,,同時用IP Express生成讀/寫RAM模塊,。
在主程序中編寫RAM控制段和SPI接口控制程序段,用狀態(tài)機完成對RAM的控制,,狀態(tài)機在idle,,read,write和config之間跳轉,。在向FLASH寫數(shù)據(jù)時,,應先寫入寫使能指令,完成后寫入頁編程指令,,隨后寫入地址,,最后寫入數(shù)據(jù);從FLASH讀數(shù)據(jù)的過程大致相同,,但應首先寫入讀使能指令,,然后寫入讀數(shù)據(jù)指令。應當注意的是讀指令的時鐘頻率低于寫指令,,具體頻率要求可參照芯片說明手冊,。
3.3 SPI接口功能驗證
在線邏輯分析儀(reveal logic analyzer)是較為先進的EDA工具,它能提類似于功能仿真的波形示意圖,,這些波形是通過在FPGA芯片運行過程中實時抓取出來的,。它真實地再現(xiàn)了FPGA芯片內部的動態(tài)信號狀況,使工程開發(fā)人員能直觀的發(fā)現(xiàn)問題,,修正邏輯,。仿真綜合通過后,將程序下載至FPGA芯片中,用Reveal Inserter插入在線邏輯分析信號,,采樣點數(shù)設定為2 048個點,,分析信號會在工程目錄中生成一個相關文件,綜合后將數(shù)據(jù)文件下載至Lattice芯片中,,采用人工觸發(fā)后,,即可在在線邏輯分析儀中觀察信號波形。截取的波形如圖4所示,。
從圖4可看出,,在時鐘C的8個有效周期寫入寫使能指令,寫使能指令通過D信號線串行進入FLASH芯片,,指令的寫入過程應保證S信號低電平,,8個周期的指令輸入完畢后S回復為高電平。在SPI總線主端的RAM控制信號由狀態(tài)機控制,,instructions為8位的寄存器,,用于存儲指令;RAMl_dout對應ram_wr的輸出端口,。
圖5為數(shù)據(jù)指令后讀出數(shù)據(jù)的波形圖,,數(shù)據(jù)從Q信號線讀出并進入ram_rd。在讀數(shù)據(jù)周期S保持低電平,,數(shù)據(jù)的輸出在時鐘的下降沿發(fā)生,,在讀指令完成后,state狀態(tài)寄存器回復至空閑狀態(tài),。
4 結語
SPI總線是當前流行的串行接口的一種,,它滿足工程設計的要求,使開發(fā)人員能夠簡單迅速的完成設計工作,,實現(xiàn)功能要求。將它與FPGA編程結合,,利用FPGA的靈活性,,使電子設計能夠在很短的周期內完成,符合當今電子設計的要求,。本文通過實現(xiàn)帶有SPI總線接口的FLASH芯片功能,,驗證了基于FPGA設計的SPI接口的正確,實現(xiàn)了FLASH芯片的讀/寫功能,。