





摘 要:針對低速總線接口難以滿足大數據背景下的高速信號傳輸這一需求。文章提出了一種FPGA與C8051F單片機的低成本、高速率接口解決方案。在系統分析SPI接口工作時序的基礎上,設計其內部邏輯電路。本方案以Quartus II為開發平臺,運用Verilog HDL硬件描述語言,從行為級建立SPI接口數據傳輸模型,并在Modelsim環境下對該模型進行功能與時序仿真。最后將配置完成的FPGA與C8051F進行板級調試。測試結果表明:本方案所設計的SPI接口具有速率快、協議簡潔、擴展性強、系統開發成本低的特點。
關鍵詞:SPI接口;FPGA;C8051F;行為級
引言
隨著現代信息技術的發展,對處理速度的要求變的越來越高。為了滿足這個需求,設計者常常采用多處理器結構,組成分布式控制系統[1]。以緩解部分電路的信息處理壓力,從而保持系統處于高速運行的狀態。而如何確保處理器之間高效的數據傳輸便成了一個至關重要的問題。SPI接口是一種全雙工的同步串行外設接口[2]。相比較傳統的I2C總線及CAN總線,具有更高的傳輸速度。正是這種簡單高效的特性,如今被廣泛的應用于通信領域。
SPI接口的實現可以通過軟件進行擴展。其操作比較簡單,但由于傳輸速度受到指令周期的影響而受到極大的制約。在日益復雜的系統環境下,這種方案顯然無法滿足設計要求。隨著FPGA的片內資源跨過百萬門級,在如此豐富的器件資源下,FPGA成為解決高速數據傳輸的重要角色。此外FPGA具有很強的靈活性,可以根據需求對其內部電路進行維護、修改以及對其內部邏輯功能的重新配置[3]。在這種架構下,應用FPGA來構建SPI接口最為切實可行。
1 SPI原理概述
1.1 SPI接口簡介
Serial Peripheral Interface是由Motorola首先在其MC68HCXX系列處理器上定義的通信協議。通常包含4根信號線:
(1)時鐘信號線(SCK:Serial Clock)。
(2)主輸出從輸入數據線(MOSI/SDO:Master Out Slave In/Serial Data Output)。
(3)主輸入從輸出數據線(MISO/SDI:Master In Slave Out /Serial Data Input)。
(4)片選信號線(CS/SS:Chip Select/Slave Select)。
一個SPI總線可以連接多個主設備和多個從設備,但是在同一時刻只允許有一個主設備操作總線。通信時在主設備和從設備之間會產生一個數據鏈路回環(Data Loop)[4],即在時鐘信號線的控制下,兩個雙向移位寄存器進行數據交換。其硬件連接示意圖如圖1所示。
1.2 SPI工作時序分析
從主設備輸入從設備的時鐘信號線,為雙方的數據傳輸提供同步信號。通常可根據外設的工作要求對其進行設置,設置參數包括時鐘極性(CPOL:Clock Polarity)和時鐘相位(CPHA:Clock Phase)。這兩個參數的共同作用決定了總線的工作模式。
(1)CPOL是指SPI設備空閑時,時鐘信號的電平值為高還是低。
若CPOL= 0,則SPI設備空閑時SCK管腳下的時鐘信號是低電平。
若CPOL= 1,則SPI設備空閑時SCK管腳下的時鐘信號是高電平。
(2)CPHA是指SPI設備工作時,進行數據接收是在時鐘前沿(Leading edge)還是在時鐘后沿(Trailing edge)[5]。
若CPHA=0, 則SPI設備在時鐘前沿進行數據接收。
若CPHA=1, 則SPI設備在時鐘后沿進行數據接收。
為保證主從設備的正常通信,其時鐘極性和時鐘相位的設置應該一致。下面根據SPI接口的時序圖來說明其工作機制。SPI時序圖如圖2所示。
在本方案中C8051F作為主設備,FPGA作為從設備,總線運行在工作模式0(即CPOL= 0,CPHA=0)。其工作機制如下:
(1)當SPI總線處于空閑狀態時,主設備控制時鐘信號線(SCK)輸出低電平,片選信號線(CS)輸出高電平。
(2)當SPI總線從空閑狀態轉為工作狀態時,時鐘信號線(SCK)輸出有效時鐘信號,片選信號線(CS)輸出低電平。在某個時鐘后沿,主設備和從設備同時發送數據,將數據分別傳輸到MOSI和MISO數據線上;在隨后的時鐘前沿,主設備和從設備同時觸發數據接收,并分別將信號線上的數據存儲到寄存器內。
(3)當數據傳輸完成后,主設備控制時鐘信號線(SCK)回歸為低電平,片選信號線(CS)回歸為高電平,SPI總線重新回到空閑狀態。至此,一個完整的SPI總線數據傳輸過程完成。
2 SPI接口設計
本方案選用Altera公司的Cyclone II EP2C5T144芯片。該芯片內部資源足夠滿足設計要求,且性價比較高。文中采用自上而下(Top-Down)的設計方法, 將其內部電路結構劃分為三大模塊:狀態模塊、數據發送模塊、數據接收模塊。隨后對各自的功能塊編寫Verilog HDL代碼,當每個模塊測試完畢后,再進行系統級的聯調[6]。該方案既保證了模塊之間能夠正確組合,又為查找問題帶來一定的便利。簡化的SPI接口電路模型如圖3所示。
2.1 狀態模塊設計
該模塊主要是檢測C8051F輸出的spi_cs,spi_sck兩根信號線的電平值。只有spi_cs處于低電平時,主從設備的數據交換才有效。針對時鐘狀態的判斷,先將spi_sck的電平值依據時間先后的順序,依次寫入spi_sck_before和spi_sck_after寄存器,通過比較前后兩個時間點的時鐘信號電平值,即可得出目前時鐘的運行狀態。當spi_sck_before為低電平,同時spi_sck_after為高電平,則說明時鐘為上升沿;相應的當spi_sck_before為高電平,同時spi_sck_after為低電平,則說明時鐘為下降沿。如果spi_sck_before與spi_sck_after同為低或高電平,則說明時鐘不處于跳變沿。
2.2 發送模塊設計
模塊中包含發送移位寄存器和發送寄存器。每當spi_sck處于時鐘后沿時,發送移位寄存器transmit_data就按高位先傳的順序,向MISO信號線上發送一位數據。并用計數器transmit_count記錄下時鐘后沿的個數,當記滿8個時表明數據發送完成,置位數據發送完成標志位end_transmit_flag,隨后發送寄存器把下一個發送數據寫入發送移位寄存器中。
2.3 接收模塊設計
接收模塊與發送模塊的設計方案類似,其中包含接收移位寄存器和接收寄存器。需要注意的是,如果觸發數據發送是在時鐘后沿,則觸發數據接收一定是在時鐘前沿。每當spi_sck處于時鐘前沿時,接收移位寄存器receive_data就從MOSI信號線上接收一位數據。并用計數器receive_count記錄下時鐘前沿的個數,當記滿8個時表明數據接收完成,置位數據接收完成標志位end_receive_flag,隨后接收寄存器從接收移位寄存器中讀取數據。
3 性能測試與評估
3.1 時序仿真測試
SPI接口用Verilog HDL語言描述好后,先在ModelSim軟件的測試機(Testbench)下對其進行功能仿真(此時的仿真不考慮時延,假設是在理想的條件下進行)。再進行綜合優化(Synthesis),將硬件描述語言編譯成由與門、或門、非門、RAM、觸發器等基本邏輯單元組成的邏輯連接網表[7]-[8]。隨后進行FPGA的后仿真(即對生成的網表文件進行時序仿真),此次仿真不同于功能仿真,主要是將布局布線的延時信息標注到設計網表中來檢測有無時序違規現象(即不滿足時序約束條件或器件固有的時序規則,如建立時間、保持時間等)。由于不同芯片的內部延時不一樣,不同的布局布線方案也給延時帶來不同的影響。因此在布局布線后,通過對系統和各個模塊進行時序仿真,分析其時序關系,估計系統性能,以及檢查和消除競爭冒險是非常有必要的。其中部分管腳的時序仿真如圖4所示。
3.2 板級調試
將SPI接口程序配置到FPGA內部,設置主設備向從設備持續發送數據。用示波器的一個通道檢測輸入接口信號,另一個通道檢測輸出接口信號,仔細分析兩個信號的時延、誤碼率及傳輸速率等性能指標。如圖5所示。
測試一:在初始化中設定不同的傳輸速率,測試線路中的實際速率,相關測試結果見表1。
測試二:在傳輸相同數據的條件下,比較I2C、CAN與SPI的誤碼率,相關測試結果見表2。
通過對表格內數據的分析,可以看出所設計的SPI接口性能穩定且滿足了高速數據傳輸的要求。
4 結束語
文章介紹了一種FPGA與C8051F實現高速數據傳輸的通信協議及其用Verilog HDL硬件描述語言的實現方法,重點描述了SPI接口的設計方案及各個子模塊的代碼實現。本方案很好地發揮了FPGA時序控制能力強的優勢,并采用了從系統級對任務進行劃分的方法,使時序邏輯直觀簡單,大幅度提高了設計效率。隨著數字系統的不斷發展,SPI接口技術作為一種高速高效率的串行接口技術,其應用必然越來越廣。
參考文獻
[1]楊美剛,李小文.SPI接口及其在數據交換中的應用[J].通信技術,2007,11(40):385-387.
[2]楊承富,徐志軍.SPI總線接口的FPGA設計與實現[J].軍事通信技術,2004,25(2):72-76.
[3]左東廣,魏瑞軒.SPI接口技術及應用[J].工業控制計算機,2001,2(14):9-10.
[4]A.K.Oudjida, M.L.Berrandjia, A.Liacha. Design and Test of General-Purpose SPI Master/Slave IPs on OPB bus. Systems Signals and Devices (SSD)[C]. the 7th International Multi-Conference on System, Algeria 27-30 June 2010.
[5]張桂友,戴慶元.串行外圍接口SPI功能模塊的設計[J].微處理機,2009,4:15-17.
[6]蘇偉祿,施隆照.基于MCU IP核的SPI接口ASIC設計及實現[J].中國集成電路,2011,149:32-38.
[7]吳繼華,王誠,Altera FPGA/CPLD設計(高級篇)[M].北京:人民郵電出版社,2005.
[8]唐恒標,馮建華,馮建科.基于測試系統的FPGA邏輯資源的測試[J].微電子學,2006,3(26):292-295.
作者簡介:許可行(1993-),男,浙江臨安,本科,研究方向:電子電路設計與應用,嵌入式系統技術。
李琪(1974-),女,山西晉城,碩士生導師,研究方向:嵌入式系統應用與開發,無人機技術。
羊帆(1985-),男,陜西,博士研究生,研究方向:先進控制理論與應用,機器人技術。