基于FPGA的串行外圍接口SPI設計與實現(2)

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

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

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

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

  圖4 SPI 模塊框圖

  圖4 SPI 模塊框圖

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

  

  

  

  

  3 設計的仿真、綜合與實現

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

  圖5 SPI 模塊的仿真波形

  圖5 SPI 模塊的仿真波形

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

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

  4 結語

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

上一頁12