《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 一種基于FPGA的可配置SPI Master接口設(shè)計(jì)實(shí)現(xiàn)
一種基于FPGA的可配置SPI Master接口設(shè)計(jì)實(shí)現(xiàn)
來(lái)源:電子技術(shù)應(yīng)用2010年第10期
李大江,崔建明
山東科技大學(xué) 信息科學(xué)與工程學(xué)院,山東 青島266510
摘要: 介紹一種基于FPGA的SPI Master Interface設(shè)計(jì)。依據(jù)SPI同步串行接口的通信協(xié)議, 設(shè)計(jì)一個(gè)可配置的、高度靈活的SPI Master 模塊,以滿(mǎn)足正常、異常及強(qiáng)度測(cè)試要求。利用Verilog 語(yǔ)言實(shí)現(xiàn)SPI接口的設(shè)計(jì)原理和編程思想。
中圖分類(lèi)號(hào): TP332
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2010)10-0060-03
The design and implementation of configurable SPI master interface based on FPGA
LI Da Jiang,CUI Jian Ming
1.College of Information Science and Engineering , Shandong University of Science and Technology , Qingdao 266510,China
Abstract: The design of SPI master interface by FPGA is detailed described in this paper.According to communication protocol of SPI synchronous serial interface,a configurable and highly flexible SPI master interface is introduced, to meet the requirements of normal test,exception test, and strength test. This paper presents the design theory and programming idea of implementing SPI interface with Verilog language.
Key words : SPI synchronous serial interface;filed programmable gate array;test

    隨著現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)芯片在商業(yè)、軍事、航空航天等領(lǐng)域的廣泛應(yīng)用,其可靠性和可測(cè)試性顯得尤為重要。對(duì)設(shè)計(jì)人員來(lái)說(shuō),F(xiàn)PGA的使用相當(dāng)靈活。然而,正是這種應(yīng)用的不確定性和重復(fù)可編程性,增加了芯片的測(cè)試難度。其核心問(wèn)題是建立什么樣的測(cè)試模型才能使故障激活。根據(jù)需求,F(xiàn)PGA的測(cè)試大體可分為面向制造的測(cè)試過(guò)程(MTP)和面向應(yīng)用的測(cè)試過(guò)程(ATP)兩類(lèi)。MTP主要是從制造商的角度來(lái)測(cè)試,ATP是在應(yīng)用級(jí)上的測(cè)試,也就是把FPGA配置為特定的功能進(jìn)行測(cè)試,具有很強(qiáng)的針對(duì)性[1]。本文介紹ATP測(cè)試中SPI Master 模型的建立。在測(cè)試FPGA設(shè)計(jì)的集成電路時(shí),對(duì)設(shè)計(jì)電路的性能進(jìn)行實(shí)時(shí)測(cè)試是必不可少的環(huán)節(jié)[2]。這就需要設(shè)計(jì)一種接口電路,將測(cè)試數(shù)據(jù)送入設(shè)計(jì)電路。
1 SPI總線(xiàn)協(xié)議介紹
    SPI(Serion Perpheral Interface)[3]是一種高速的、全雙工、同步的通信總線(xiàn),并且在芯片的管腳上只占用4根線(xiàn),節(jié)約了芯片的管腳,同時(shí)為PCB的布局節(jié)省空間,提供方便,正是出于這種簡(jiǎn)單易用的特性,越來(lái)越多的芯片集成了這種通信協(xié)議。SPI的通信原理很簡(jiǎn)單,它以主從方式工作,這種模式通常有一個(gè)主設(shè)備和一個(gè)或多個(gè)從設(shè)備,需要至少4根線(xiàn),事實(shí)上3根也可以(用于單向傳輸時(shí),也就是半雙工方式)。也是所有基于SPI的設(shè)備共有,分別是MISO(數(shù)據(jù)輸入),MOSI(數(shù)據(jù)輸出),SCK(時(shí)鐘),NSS(片選),如圖1所示。

    (1)MOSI:主設(shè)備數(shù)據(jù)輸出,從設(shè)備數(shù)據(jù)輸入。
    (2)MISO:主設(shè)備數(shù)據(jù)輸入,從設(shè)備數(shù)據(jù)輸出。
    (3)SCK:時(shí)鐘信號(hào),由主設(shè)備產(chǎn)生。
    (4)NSS:從設(shè)備使能信號(hào),由主設(shè)備控制。
    使能信號(hào)低電平有效,當(dāng)使能信號(hào)為低電平時(shí),輸出數(shù)據(jù)(MOSI)在串行時(shí)鐘(SCK)下降沿變化,輸入數(shù)據(jù)(MISO)在(SCK)上升沿變化。
2 SPI Master原理
    本文介紹的基于FPGA的、可配置的SPI Master接口設(shè)計(jì),能滿(mǎn)足測(cè)試的各種正常、異常以及強(qiáng)度測(cè)試要求。此SPI接口模塊可設(shè)置為單次發(fā)送、循環(huán)發(fā)送(發(fā)送間隔可設(shè));發(fā)送數(shù)據(jù)長(zhǎng)度可變;串行時(shí)鐘線(xiàn)(SCK)與輸出數(shù)據(jù)線(xiàn)(MOSI)時(shí)序關(guān)系可變;串行時(shí)鐘線(xiàn)(SCK)與使能信號(hào)(NSS)時(shí)序關(guān)系可變。
    一般情況下,為了SPI數(shù)據(jù)發(fā)送的靈活性,SPI發(fā)送次數(shù)及發(fā)送間隔是由軟件實(shí)現(xiàn)的,當(dāng)需要循環(huán)發(fā)送且發(fā)送間隔達(dá)到微秒甚至納秒數(shù)量級(jí)時(shí),軟件很難實(shí)現(xiàn)。本文將SPI發(fā)送次數(shù)以及發(fā)送間隔集成到SPI Master模塊中,使SPI發(fā)送間隔可變且最小為一個(gè)SCK周期。按照SPI總線(xiàn)協(xié)議設(shè)計(jì)的SPI Master輸出數(shù)據(jù)(MOSI)在串行時(shí)鐘(SCK)下降沿變化,不能進(jìn)行異常時(shí)序測(cè)試,而異常時(shí)序在FPGA[4,5]的接口測(cè)試中又最為重要,故本文利用觸發(fā)器特性設(shè)計(jì)電路,使SPI發(fā)送數(shù)據(jù)時(shí)序可變,精度為1個(gè)系統(tǒng)時(shí)鐘周期。
3 SPI Master 模塊結(jié)構(gòu)圖
    SPI Master模塊由Bram接口、配置寄存器、控制器三部分組成,如圖2所示。此模塊系統(tǒng)時(shí)鐘為100 MHz。
    BRAM接口:控制配置參數(shù)以及SPI數(shù)據(jù)的讀寫(xiě)配置參數(shù)及SPI數(shù)據(jù)在BRAM中存儲(chǔ)結(jié)構(gòu)如表1所示。


    控制器:解析配置寄存器,產(chǎn)生發(fā)送時(shí)序,控制BRAM接口進(jìn)行數(shù)據(jù)讀寫(xiě)。
    對(duì)配置寄存器說(shuō)明如下。
    (1)循環(huán)發(fā)送標(biāo)識(shí)寄存器:1 bit,高電平標(biāo)識(shí)循環(huán)發(fā)送,低電平標(biāo)識(shí)單次發(fā)送。
    (2)循環(huán)發(fā)送次數(shù)寄存器:15 bit,若循環(huán)發(fā)送標(biāo)識(shí)為高電平時(shí),此寄存器值為要發(fā)送的數(shù)據(jù)長(zhǎng)度,單位:B;發(fā)送模塊中包含一發(fā)送次數(shù)計(jì)數(shù)器,NSS從高電平變?yōu)榈碗娖剑l(fā)送次數(shù)計(jì)數(shù)器加1。
    (3)循環(huán)發(fā)送間隔寄存器:16 bit,若循環(huán)發(fā)送標(biāo)識(shí)為高電平時(shí),此寄存器值為每?jī)纱伟l(fā)送間隔,單位:10 ns。(最小間隔為1個(gè)SCK周期,若小于1個(gè)SCK周期,則從設(shè)備不能檢測(cè)到NSS信號(hào)變化),發(fā)送模塊中包含1個(gè)發(fā)送間隔計(jì)數(shù)器,從一次SPI發(fā)送結(jié)束開(kāi)始計(jì)數(shù),直到與循環(huán)發(fā)送間隔寄存器中值相等,啟動(dòng)下次發(fā)送。
    (4)SCK頻率寄存器:16 bit,此寄存器值表示串行時(shí)鐘SCK周期,單位為10 ns(系統(tǒng)時(shí)鐘為100 MHz,精度為20 ns);時(shí)序模塊中包含一分頻模塊,SCK周期=(SCK頻率寄存器)×10 ns。
    (5)MOSI時(shí)序寄存器:8 bit,此寄存器值表示MOSI變化與SCK下降沿間隔時(shí)間,單位:10 ns(系統(tǒng)時(shí)鐘為100 MHz,因此最小間隔為10 ns)。
    (6)數(shù)據(jù)長(zhǎng)度寄存器:16 bit,此寄存器值表示要發(fā)送數(shù)據(jù)的長(zhǎng)度,單位:B。
    (7)NSS時(shí)序寄存器:8 bit,此寄存器值表示NSS變化與SCK下降沿間隔時(shí)間,單位:10 ns(系統(tǒng)時(shí)鐘為100 MHz,因此最小間隔為10 ns)。
4 SPI Master模塊功能介紹
    (1)SPI循環(huán)發(fā)送次數(shù)可變,范圍:1~32 767;(2)SPI數(shù)據(jù)發(fā)送長(zhǎng)度可變,范圍:1~65 535,單位:B;(3)SPI循環(huán)發(fā)送間隔可變,范圍:(1個(gè)SCK周期)~(65 536×10 ns),實(shí)現(xiàn)了連續(xù)發(fā)送,即一次SPI發(fā)送結(jié)束后下一SCK時(shí)鐘立即啟動(dòng)下次SPI發(fā)送;(4)MOSI與SCK時(shí)序關(guān)系可變,NSS與SCK時(shí)序關(guān)系可變,SPI總線(xiàn)為下降沿發(fā)送,上升沿接收,故MOSI、NSS在SCK下降沿后半個(gè)周期可調(diào)即可。
    SPI功能流程如圖3所示,F(xiàn)PGA上電復(fù)位后不斷檢測(cè)SPI_start信號(hào),當(dāng)SPI_start信號(hào)有效時(shí)(高電平)啟動(dòng)SPI發(fā)送,讀取BRAM中的配置參數(shù),進(jìn)行譯碼,依據(jù)譯碼后數(shù)據(jù)長(zhǎng)度值讀取BRAM中數(shù)據(jù),按照SPI協(xié)議發(fā)送數(shù)據(jù);完成一次SPI發(fā)送后判斷是否為循環(huán)發(fā)送,若為循環(huán)發(fā)送則啟動(dòng)下一次SPI發(fā)送,直到發(fā)送次數(shù)等于循環(huán)發(fā)送次數(shù)寄存器值,其中發(fā)送間隔由循環(huán)發(fā)送間隔寄存器值決定。

4.1 單次發(fā)送(正常時(shí)序)
    SPI Master控制器檢測(cè)到SPI_start信號(hào)有效,即控制Bram接口讀取配置參數(shù),經(jīng)譯碼后若循環(huán)發(fā)送標(biāo)識(shí)寄存器為低電平,則配合發(fā)送長(zhǎng)度寄存器讀取BRAM中數(shù)據(jù),并進(jìn)行發(fā)送。
4.2 單次發(fā)送(異常時(shí)序)
    MOSI異常時(shí)序:正常情況下MOSI在SCK下降沿變化,此設(shè)計(jì)采用一帶抽頭的序列寄存器產(chǎn)生異常時(shí)序,如圖4。

    每增加一個(gè)觸發(fā)器,延時(shí)增加一個(gè)系統(tǒng)時(shí)鐘[6],多路開(kāi)關(guān)依據(jù)MOSI時(shí)序寄存器中值選擇相應(yīng)觸發(fā)器輸出,產(chǎn)生異常時(shí)序,舉例說(shuō)明如圖5。

    圖5中sys_clk為系統(tǒng)時(shí)鐘頻率100 MHz,NSS為使能信號(hào);MOSI為串行輸出信號(hào);當(dāng)SCK頻率寄存器為10時(shí),SPI串行時(shí)鐘SCK周期=(SCK頻率寄存器)×10 ns=100 ns,即SCK頻率為10 MHz;當(dāng)MOSI時(shí)序寄存器值為4時(shí),MOSI在SCK下降沿后4個(gè)sys_clk開(kāi)始變化。
4.3 循環(huán)發(fā)送(時(shí)序正常)
      每完成一次SPI發(fā)送,發(fā)送次數(shù)計(jì)數(shù)器加1,當(dāng)發(fā)送次數(shù)計(jì)數(shù)器中的值與循環(huán)發(fā)送次數(shù)寄存器中值相等時(shí),完成循環(huán)發(fā)送。發(fā)送次數(shù)由循環(huán)發(fā)送次數(shù)寄存器值決定,循環(huán)發(fā)送間隔由發(fā)送間隔計(jì)數(shù)器決定。
4.4 循環(huán)發(fā)送(時(shí)序異常)
      類(lèi)似循環(huán)發(fā)送(正常時(shí)序),異常時(shí)序產(chǎn)生類(lèi)似單次發(fā)送(異常時(shí)序)。
    實(shí)現(xiàn)的目標(biāo)器件是Xilinx的Virtex2 pro開(kāi)發(fā)板。本文已應(yīng)用于中國(guó)科學(xué)院光電研究院測(cè)試平臺(tái)中,實(shí)現(xiàn)了SPI接口以及與其功能相關(guān)的的測(cè)試。
    與同類(lèi)SPI Master相比,發(fā)送間隔可變、精度高,最小間隔僅為1個(gè)SCK時(shí)鐘周期;發(fā)送時(shí)序可變,精度高,為1個(gè)系統(tǒng)時(shí)鐘周期;基本滿(mǎn)足正常、異常以及強(qiáng)度等測(cè)試要求。
參考文獻(xiàn)
[1] 唐恒標(biāo),馮建華,馮建科.基于測(cè)試系統(tǒng)的FPGA邏輯資源的測(cè)試[J],微電子學(xué),2006(6).
[2] (美)伯杰龍(Bergeron,J.)著,編寫(xiě)測(cè)試平臺(tái):HDL模型的功能驗(yàn)證(第二版)[M],張春等譯.北京:電子工業(yè)出版社,2006.
[3] 孫曉云.接口與通信技術(shù)原理與應(yīng)用[M].北京:中國(guó)電力出版社,2007.
[4] 李云松.Xilinx FPGA設(shè)計(jì)基礎(chǔ)[M].西安:西安電子科技大學(xué)出版社,2008.
[5] 薛小剛,葛毅敏.Xilinx ISE 9.X FPGA/CPLD設(shè)計(jì)指南[M]. 北京:人民郵電出版社,2007.
[6] 夏宇文.Verilog數(shù)字系統(tǒng)設(shè)計(jì)教程[M].北京:北京航空航天大學(xué)出版社,2008.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。