摘 要:在現代EDA外圍電子器件的接口中存在多種標準,已知的一些接口協議存在速度慢、協議復雜等問題。SPI總線是能夠克服上述缺點的一種外圍串行總線,其能很好地滿足要求。通過使用Lattice公司的FPGA芯片以及工程開發軟件,特別是在線邏輯分析儀這一先進的EDA工具,實現了基于FPGA的SPI接口的連接。將FPGA編程的靈活性和SPI總線的易用性結合,實現了FLASH的存取功能。同時也為同類型接口的芯片應用提供了一個原型,為進一步的工程設計提供了支持。
關鍵詞: FPGA; FLASH; SPI; 在線邏輯分析
中圖分類號:TN710; TP336 文獻標識碼:A
文章編號:1004-373X(2010)14-0102-03
Implementation of SPI Bus Interface Based on FPGA
WANG Jue-wen1, JIN Wei-xin2, CAI Yi-bing2, YAN Li-ping2
(1. PLA University of Science and Technology, Nanjing 210007, China; 2. CEDSEC, Beijing 100141, China)
Abstract: There are many standards in the scope of interfaces for peripheral electronic devices in the field of modern EDA. Some known interface protocols perform an unsatisfactory role with their low speed or complexity. SPI bus is a popular peripheral serial bus which can satisfy the practical demand. By using Lattice FPGA and its EDA software, especially the on-line logic analyzer which is an advanced EDA tool, the connection of SPI bus interface based on FPGA was implemented. The access function of FLASH was realized in combination with the flexibility of FPGA programming and the adaptability of SPI bus. At the same time, it can be taken as a prototype, which can be used in a further profound exploitation in EDA projection.
Keywords: FPGA; FLASH; SPI; on-line logic analysis
0 引 言
串行接口已成為當前傳輸接口的發展趨勢,原因在于串行的高速率傳輸性能和較簡單的線路連接。在已知的外圍器件連接端口中,有USB,wishbone和并行端口。其中SPI接口總線基于串行傳輸的思想,已經制定成為標準,成為常用的外圍器件連接方式。針對FLASH這種常用的外圍存儲器件,有多種接口可供選擇,然而具有SPI接口的FLASH芯片硬件連接方便,通過FPGA編程可以便捷地實現FLASH的存取功能。因此基于FPGA的具有SPI總線接口的FLASH功能實現為工程設計提供了一種原型,為進一步的工程開發奠定了基礎。
1 SPI總線介紹
1.1 SPI總線簡介
同步外設接口(serial peripheral interface,SPI)是由摩托羅拉公司開發的全雙工同步串行總線。SPI是一種串行同步通信協議,由1個主設備和1個或多個從設備組成,主設備啟動一個與從設備的同步通信,從而完成數據的交換。
1.2 SPI總線接口及時序
SPI接口由SDI(串行數據輸入),SDO(串行數據輸出),SCK(串行移位時鐘),CS(從使能信號)四種信號構成,CS決定了惟一的與主設備通信的從設備,如沒有CS信號,則只能存在一個從設備,主設備通過產生移位時鐘來發起通信。通信時,數據由SDO輸出,SDI 輸入,數據在時鐘的上升沿或下降沿從SDO輸出,在緊接著的下降沿或上升沿由SDI讀入,這樣經過8/16次時鐘改變,完成8/16位數據的傳輸。
在SPI傳輸中,數據是同步進行發送和接收的。數據傳輸的時鐘基于來自主處理器的時鐘脈沖,摩托羅拉沒有定義任何通用SPI時鐘規范。然而,最常用的時鐘設置基于時鐘極性(CPOL)和時鐘相位(CPHA)兩個參數。CPOL定義SPI串行時鐘的活動狀態,而CPHA定義相對于數據位的時鐘相位。CPOL和CPHA的設置決定了數據取樣的時鐘沿。
SPI模塊為了與外設進行數據交換,根據外設工作要求,其輸出串行同步時鐘極性和相位可以進行配置,時鐘極性(CPOL)對傳輸協議沒有大的影響。如果CPOL=0,串行同步時鐘的空閑狀態為低電平;如果CPOL=1,串行同步時鐘的空閑狀態為高電平。時鐘相位(CPHA)能夠配置用于選擇兩種不同的傳輸協議之一進行數據傳輸。如果CPHA=0,在串行同步時鐘的第一個跳變沿(上升或下降)數據被采樣;如果CPHA=1,在串行同步時鐘的第二個跳變沿(上升或下降)數據被采樣。SPI主模塊和與之通信的外設時鐘相位與極性應該一致。SPI接口時序如圖1所示。
圖1 SPI接口時序圖
2 基于FPGA的SPI接口設計
SPI接口適用于主芯片與從芯片的連接,在一個FPGA系統中,充當主芯片的為FPGA可編程芯片,而FLASH芯片作為外圍從芯片通過SPI接口連接至FPGA芯片。該系統選用Lattice公司的FPGA芯片,該公司的產品線齊全,其中ECP2M系列芯片功能全面,開發成本低廉。ECP2M系列芯片支持SPI接口,通過硬件電路的簡單設計即可完成SPI接口的物理連接,進一步利用Lattice的工程開發EDA軟件進行FPGA編程,實現SPI接口控制。對接口的設計采用RAM作為讀/寫緩沖,完成主程序和FLASH之間的數據交換,各模塊結構示意圖如圖2所示。
圖2 模塊結構示意圖
圖2中ram wr寫端口數據寬度設置為32位,地址深度設為128位;讀端口為1位位寬,這是由SPI端口的串行性決定的;ram rd讀端口與ram wr寫端口相對應。RAM模塊如圖3所示。
3 SPI接口實現及FLASH功能驗證
3.1 M25P64串行FLASH芯片介紹
M25P64串行芯片由STMicro公司生產,它具有64 Mb容量,最高時鐘頻率可達50 MHz同時采用SPI總線接口。該FLASH芯片的存儲空間劃分為128區,每區為65 536 B[1]。在芯片中,其中D為數據串行輸入端;C為時鐘輸入;S 為低電平有效片選信號;W 和HOLD 分別為寫保護和暫停保持輸入,Q為串行輸出端。該芯片的指令豐富,功能完備,常用的指令如:讀/寫使能、讀/寫狀態寄存器、讀數據、頁編程以及區塊擦除等。
圖3 RAM模塊示意圖
該芯片由一個微控制器控制,SPI接口有種工作模式分別為CPOL=0,CPHA=0和CPOL=1,CPHA=1,兩者區別為在SPI主端不傳數據時,時鐘的電平前者為0,后者為1。在這里采用CPOL=0,CPHA=0模式。
3.2 工程環境設置及SPI接口設計
Lattice公司的FPGA工程開發EDA軟件名為ispLEVER,其7.2版本為較新版本。該版本集合了IPExpress,Reveal Logic Analyzer等實用工具,可用于添加Lattice公司開發的IP核以及在線邏輯仿真等。ispLEVER 7.2的默認仿真工具為Active-HDL仿真器,由于需要采用ModelSim仿真器,因此安裝ModleSim 6.2b版本。對仿真軟件成功安裝后,加入pcsc mti work,pcsc mti work revA,ecp2m vlg和pmi work四個仿真庫并進行編譯。編譯完成后啟動ispLEVER 7.2,在“options”菜單中修改環境變量和默認仿真工具,使得ModelSim連接圖標出現在工具欄中成為工程的仿真工具。
進入ispLEVER 7.2的編輯界面,開始建立工程,首先選擇器件型號,這里采用LatticeECP2M系列中的LFE2M50E型號芯片,并選擇封裝類型為FPGABGA672,速度級別為-5。器件選定后,建立FLASH control工程文件和testbench測試文件,同時用IP Express生成讀/寫RAM模塊。
在主程序中編寫RAM控制段和SPI接口控制程序段,用狀態機完成對RAM的控制,狀態機在idle,read,write和config之間跳轉。在向FLASH寫數據時,應先寫入寫使能指令,完成后寫入頁編程指令,隨后寫入地址,最后寫入數據;從FLASH讀數據的過程大致相同,但應首先寫入讀使能指令,然后寫入讀數據指令。應當注意的是讀指令的時鐘頻率低于寫指令,具體頻率要求可參照芯片說明手冊。
3.3 SPI接口功能驗證
在線邏輯分析儀(reveal logic analyzer)是較為先進的EDA工具,它能提類似于功能仿真的波形示意圖,這些波形是通過在FPGA芯片運行過程中實時抓取出來的。它真實地再現了FPGA芯片內部的動態信號狀況,使工程開發人員能直觀的發現問題,修正邏輯。仿真綜合通過后,將程序下載至FPGA芯片中,用Reveal Inserter插入在線邏輯分析信號,采樣點數設定為2 048個點,分析信號會在工程目錄中生成一個相關文件,綜合后將數據文件下載至Lattice芯片中,采用人工觸發后,即可在在線邏輯分析儀中觀察信號波形。截取的波形如圖4所示。
圖4 在線邏輯分析儀截圖(一)
從圖4可看出,在時鐘C的8個有效周期寫入寫使能指令,寫使能指令通過D信號線串行進入FLASH芯片,指令的寫入過程應保證S信號低電平,8個周期的指令輸入完畢后S回復為高電平。在SPI總線主端的RAM控制信號由狀態機控制,instructions為8位的寄存器,用于存儲指令;RAM1 dout對應ram wr的輸出端口。
圖5為數據指令后讀出數據的波形圖,數據從Q信號線讀出并進入ram rd。在讀數據周期S保持低電平,數據的輸出在時鐘的下降沿發生,在讀指令完成后,state狀態寄存器回復至空閑狀態。
圖5 在線邏輯分析儀截圖(二)
4 結 語
SPI總線是當前流行的串行接口的一種,它滿足工程設計的要求,使開發人員能夠簡單迅速的完成設計工作,實現功能要求。將它與FPGA編程結合,利用FPGA的靈活性,使電子設計能夠在很短的周期內完成,符合當今電子設計的要求。本文通過實現帶有SPI總線接口的FLASH芯片功能,驗證了基于FPGA設計的SPI接口的正確,實現了FLASH芯片的讀/寫功能。
參考文獻
[1]ST Microelectronics. M25P64 data sheet[R]. [ 2005-05-11] . http://www.ALLDATASHEET.com. 2005.
[2]MICHAEL Ciletti D.Verilog HDL高級數字設計[M].北京:電子工業出版社,2005.
[3]卓興旺.基于Verilog HDL的數字系統應用設計[M].北京:國防工業出版社,2007.
[4]BERGERON Janick. Writing testbenches: functional verification of HDL models[M]. [ S.l.] : Kluwer Academic Publishers. 2003.
[5]PALNITKAR Samir.Verilog HDL數字設計與綜合[M].2版.北京:電子工業出版社,2004.
[6]IEEE. IEEE STD164-2001: IEEE standard verilog hardware description language[S]. USA: IEEE, 2001.
[7]Xilinx. UART參考設計[ EB/OL] .[ 2006-11-21] . http://www.fpga.com.cn/freeip.htm.