<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于FPGA的串行接口SPI的設計與實(shí)現

基于FPGA的串行接口SPI的設計與實(shí)現

作者: 時(shí)間:2017-06-05 來(lái)源:網(wǎng)絡(luò ) 收藏

引言

(串行外圍接口)總線(xiàn),是一個(gè)的數據總線(xiàn),它具有全雙工、信號線(xiàn)少、協(xié)議簡(jiǎn)單、傳輸速度快等優(yōu)點(diǎn)。由于串行總線(xiàn)的信號線(xiàn)比并行總線(xiàn)更少、更簡(jiǎn)單,越來(lái)越多的系統放棄使用并行總線(xiàn)而采用串行總線(xiàn)。在眾多串行總線(xiàn)中, 總線(xiàn)與I2C 總線(xiàn)、CAN 總線(xiàn)、USB 等其他常用總線(xiàn)相比有很大優(yōu)勢,如 總線(xiàn)的數據傳輸速度可達若干Mbps, 比I2C 總線(xiàn)快很多。SPI 總線(xiàn)最典型的應用就是主機與外圍設備(如EEPROM、Flash RAM、A/D 轉換器、LED 顯示器、實(shí)時(shí)時(shí)鐘等)之間的通信。

FPGA(現場(chǎng)可編程門(mén)陣列)是在PAL、GAL、PLD 等可編程器件的基礎上進(jìn)一步發(fā)展的產(chǎn)物,具有設計周期短、可重復編程、靈活性強等特點(diǎn)。用FPGA 設計的SPI 總線(xiàn)具有可擴展性強、便于修改等優(yōu)點(diǎn)。只要對設計做簡(jiǎn)單的改動(dòng),即可對SPI 總線(xiàn)的數據位數、工作模式等進(jìn)行擴展,充分發(fā)揮了FPGA 的優(yōu)勢。

  1 SPI 總線(xiàn)的結構和工作原理

SPI 總線(xiàn)區分主機(Master)和從機(Slave)兩部分,它的結構框圖如圖1 所示。

圖1 SPI 總線(xiàn)結構框圖

本文引用地址:http://dyxdggzs.com/article/201706/349011.htm

  主機和從機之間通過(guò)4 根信號線(xiàn)連接,分別是SCK、MOSI、MISO、CS,它們的定義如下。

SCK:同步時(shí)鐘信號,用來(lái)同步主機和從機的數據傳輸,由主機控制輸出,從機在SCK 的邊沿接收和發(fā)送數據;MOSI:主機輸出、從機輸入信號,主機在上升沿(或下降沿)通過(guò)該信號線(xiàn)發(fā)送數據給從機,從機在下降沿(或上升沿)通過(guò)該信號線(xiàn)接收該數據;MISO:主機輸入、從機輸出信號,從機在上升沿(或下降沿)通過(guò)該信號線(xiàn)發(fā)送數據給主機,主機在下降沿(或上升沿)通過(guò)該信號線(xiàn)接收該數據;CS:從機片選信號,由主機控制輸出。

其工作原理是: 當沒(méi)有數據需要在主機和從機之間傳輸時(shí),主機控制SCK 輸出空閑電平,CS 輸出無(wú)效電平,SPI 總線(xiàn)處于空閑狀態(tài);當有數據需要傳輸時(shí),主機控制CS 輸出有效電平,SCK輸出時(shí)鐘信號,SPI 總線(xiàn)處于工作狀態(tài);在某個(gè)時(shí)鐘邊沿,主機和從機同時(shí)發(fā)送數據,將數據分別傳輸到MOSI 和MISO 上;在下一個(gè)時(shí)鐘邊沿,主機和從機同時(shí)接收數據,分別將MISO 和MOSI上的數據接收并存儲;當數據全部傳輸完畢時(shí),主機控制SCK 輸出空閑電平,CS 輸出無(wú)效電平,SPI 總線(xiàn)重新回到空閑狀態(tài)。至此,一個(gè)完整的SPI 總線(xiàn)數據傳輸過(guò)程完成。

SPI 總線(xiàn)有兩個(gè)控制位:CPOL 和CPHA.將SCK 的空閑電平用IDLE 表示,非空閑電平用ACTIVE 表示。CPOL 用來(lái)選擇IDLE 的電平值。當CPOL=0 時(shí),IDLE=0;當CPOL=1 時(shí),IDLE=1.

CPHA 用來(lái)選擇接收數據的時(shí)刻。當CPHA=0 時(shí), 接收時(shí)刻是IDLE-ACTIVE 邊沿;當CPHA=1 時(shí),接收時(shí)刻是ACTIVE-IDLE邊沿。根據CPOL 和CPHA 的取值情況,SPI 總線(xiàn)共有4 種不同的工作模式。圖2 給出了SPI 總線(xiàn)在不同工作模式下的工作時(shí)序。

圖2 SPI 總線(xiàn)的工作時(shí)序

當CPHA=0 時(shí),MOSI 和MISO 的時(shí)序有所不同,主要是第一個(gè)數據位MSB 的發(fā)送時(shí)刻不同。MOSI 的MSB 在SCK 的第一個(gè)IDLE-ACTIVE 邊沿的前半個(gè)周期由主機發(fā)送到MOSI 上;而MISO 的MSB 則在CS 信號的下降沿由從機發(fā)送到MISO 上。當CPHA=1 時(shí),MOSI 和MISO 的時(shí)序完全相同。

2 SPI 主機模塊的設計

本文設計的SPI 主機模塊主要完成以下工作:

(1) 將主機收到的8 位并行數據轉換為串行數據,并發(fā)送給從機;(2) 接收來(lái)自從機的串行數據,將其轉換為并行數據,通過(guò)并行端口輸出;(3) 輸出從機所需要的輸入信號、時(shí)鐘信號SCK 和片選信號CS。

在數據串并轉換的過(guò)程中, 必須用到寄存器來(lái)存放臨時(shí)數據。一般情況下,發(fā)送數據需要1 個(gè)發(fā)送寄存器,接收數據需要1個(gè)接收寄存器,則至少需要2 個(gè)寄存器。在SPI 總線(xiàn)中,每發(fā)送1個(gè)數據位則發(fā)送寄存器多出1 個(gè)空閑位, 正好可以在半個(gè)周期后用來(lái)接收1 個(gè)數據位。為了減少資源消耗,可以用1 個(gè)移位寄存器來(lái)代替2 個(gè)獨立的接收寄存器和發(fā)送寄存器。圖3 所示為SPI 總線(xiàn)的硬件結構框圖,其中MaSTer 和Slave 各使用1 個(gè)移位寄存器接收和發(fā)送數據。

圖3 SPI 總線(xiàn)的硬件結構

為了實(shí)現對模塊的控制,除了clk、cs、sck、miso、mosi 這些信號之外,還需要一些其他信號。其中,rst 是復位信號,用于SPI 模塊的初始化。en 是模塊的使能信號,當en=1 時(shí)模塊開(kāi)始工作。

data_i 是待發(fā)送數據的8 位并行輸入端。data_o 是用于接收和發(fā)送數據的移位寄存器, 也是數據傳輸完成時(shí)已接收數據的8位并行輸出端,圖4 是所設計的SPI 主機模塊的框圖。

圖4 SPI 模塊框圖

下面是用 HDL 設計的SPI 主機模塊(CPOL =0,CPHA=1)的主要程序,程序中省去了變量的聲明,并在注釋中對這些變量作了說(shuō)明。


3 設計的仿真、綜合與實(shí)現

通過(guò)編寫(xiě)測試平臺,并使用Mentor Graphics 公司的仿真工具M(jìn)odelSim SE PLUS 6.1f 對該SPI 模塊進(jìn)行仿真,得到的仿真波形如圖5 所示。

圖5 SPI 模塊的仿真波形

從圖中可以看出,sck 的空閑電平IDLE=0,接收數據時(shí)刻是下降沿即ACTIVE-IDLE 邊沿, 故該SPI 模塊的工作模式是CPOL=0,CPHA=1,與設計一致。當en=0 時(shí),cs=1,SPI 總線(xiàn)處于空閑狀態(tài)。當en=1 時(shí),在下降沿cs=0,sck 輸出時(shí)鐘信號,總線(xiàn)數據傳輸開(kāi)始。同時(shí),data_o=data_i, 移位寄存器存入待發(fā)送數據11010111.在第1 個(gè)周期上升沿,主機通過(guò)mosi 發(fā)送data_o 最高位1 至從機。在第1 個(gè)周期下降沿,data_o 左移一位,多出一個(gè)空閑位data_o[0],主機通過(guò)miso 接收從機發(fā)送的數據最高位1,并將其存入data_o[0],data_o=10101111.依此類(lèi)推,后面7 個(gè)周期的數據傳輸過(guò)程與第1 個(gè)周期類(lèi)似。8 位數據全部傳輸完成之后,cs=1,一個(gè)完整的SPI 總線(xiàn)傳輸過(guò)程結束??梢园l(fā)現,data_o中的數據被一個(gè)一個(gè)從主機發(fā)送到從機,同時(shí)data_o 也被用來(lái)存儲從機發(fā)送的數據。8 個(gè)周期完成之后,data_o 中存儲的數據正是從機發(fā)送的數據10101101.綜合以上分析,該SPI 模塊的功能是正確的。

通過(guò)實(shí)驗,在Xilinx ISE 9.1i 中完成了對該模塊的綜合與實(shí)現,并下載到Digilent 公司的FPGA 開(kāi)發(fā)板Spartan-3E Starter 上進(jìn)行驗證,實(shí)驗結果正確。綜合工具使用ISE 自帶的XST,下載工具使用ISE 自帶的iMPACT.

  4 結語(yǔ)

本文用 硬件描述語(yǔ)言設計了一個(gè)符合SPI 總線(xiàn)規范的SPI 主機模塊,使用仿真工具M(jìn)odelSim 對其進(jìn)行仿真并給出了仿真波形。在Xilinx ISE 中對該模塊進(jìn)行綜合與實(shí)現,并在FPGA 上完成了下載與驗證。該SPI 主機模塊的功能正確,工作穩定,可擴展性強。由于SPI 總線(xiàn)應用范圍很廣,利用FPGA 可重復配置的優(yōu)點(diǎn),該模塊可以很方便地應用于各種場(chǎng)合。本文作者創(chuàng )新點(diǎn):根據SPI 總線(xiàn)規范,用 HDL 設計并實(shí)現了一個(gè)帶有移位寄存器的SPI 總線(xiàn)模塊,具有簡(jiǎn)潔高效、便于修改、可擴展性強等特點(diǎn)。



關(guān)鍵詞: SPI 同步串行接口 Verilog

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>