基于FPGA的串行外圍接口SPI設(shè)計與實現(xiàn)(2)

2012年05月23日 10:18 來源:互聯(lián)網(wǎng) 作者:秩名 我要評論(0)

標(biāo)簽:FPGA(1769)SPI(65)串行外圍(1)

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

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

  圖4 SPI 模塊框圖

  圖4 SPI 模塊框圖

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

  

  

  

  

  3 設(shè)計的仿真、綜合與實現(xiàn)

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

  圖5 SPI 模塊的仿真波形

  圖5 SPI 模塊的仿真波形

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

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

  4 結(jié)語

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

上一頁12