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