【2019年整理】基于FPGA的SPI接口設(shè)計(jì)-徐慧軍_第1頁(yè)
【2019年整理】基于FPGA的SPI接口設(shè)計(jì)-徐慧軍_第2頁(yè)
【2019年整理】基于FPGA的SPI接口設(shè)計(jì)-徐慧軍_第3頁(yè)
【2019年整理】基于FPGA的SPI接口設(shè)計(jì)-徐慧軍_第4頁(yè)
【2019年整理】基于FPGA的SPI接口設(shè)計(jì)-徐慧軍_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、基于ISE的SPI接口的仿真設(shè)計(jì)一、SPI介紹SPI 總線系統(tǒng)是一種同步串行外設(shè)接口,它可以使MCU 與各種外圍設(shè)備以串行方式進(jìn)行通信以交換信息。外圍設(shè)置FLASHRAM 、網(wǎng)絡(luò)控制器、 LCD 顯示驅(qū)動(dòng)器、 A/D 轉(zhuǎn)換器和 MCU 等。 SPI 總線系統(tǒng)可直接與各個(gè)廠家生產(chǎn)的多種標(biāo)準(zhǔn)外圍器件直接接口,該接口一般使用 4 條線:串行時(shí)鐘線( SCK ) 、主機(jī)輸入/從機(jī)輸出數(shù)據(jù)線MISO 、 主機(jī)輸出 /從機(jī)輸入數(shù)據(jù)線MOST 和低電平有效的從機(jī)選擇線SS(有的SPI接口芯片帶有中斷信號(hào)線INT或INT、有的SPI接口芯片沒(méi)有主機(jī)輸出 /從機(jī)輸入數(shù)據(jù)線MOSI) 。SPI 的通信原理很簡(jiǎn)單,

2、 它以主從方式工作, 這種模式通常有一個(gè)主設(shè)備和一個(gè)或多個(gè)從設(shè)備,需要至少4 根線,事實(shí)上3 根也可以(單向傳輸時(shí)) 。也是所有基于SPI的設(shè)備共有的,它們是SDI (數(shù)據(jù)輸入),SDO (數(shù)據(jù)輸出),SCK(時(shí)鐘) , CS (片選) 。(1) MOSI -主設(shè)備數(shù)據(jù)輸出,從設(shè)備數(shù)據(jù)輸入(2) MISO -主設(shè)備數(shù)據(jù)輸入,從設(shè)備數(shù)據(jù)輸出(3) SCLK -時(shí)鐘信號(hào),由主設(shè)備產(chǎn)生(4) CS -從設(shè)備使能信號(hào),由主設(shè)備控制其中 CS 是控制芯片是否被選中的, 也就是說(shuō)只有片選信號(hào)為預(yù)先規(guī)定的使能信號(hào)時(shí)(高電位或低電位) ,對(duì)此芯片的操作才有效。這就允許在同一總線上連接多個(gè) SPI 設(shè)備成為可能

3、。接下來(lái)就負(fù)責(zé)通訊的 3 根線了。 通訊是通過(guò)數(shù)據(jù)交換完成的, 這里先要知道SPI 是串行通訊協(xié)議,也就是說(shuō)數(shù)據(jù)是一位一位的傳輸?shù)?。這就是SCK 時(shí)鐘線存在的原因,由 SCK 提供時(shí)鐘脈沖, SDI , SDO 則基于此脈沖完成數(shù)據(jù)傳輸。數(shù)據(jù)輸出通過(guò)SDO 線, 數(shù)據(jù)在時(shí)鐘上升沿或下降沿時(shí)改變, 在緊接著的下降沿或上升沿被讀取。完成一位數(shù)據(jù)傳輸,輸入也使用同樣原理。這樣,在至少8次時(shí)鐘信號(hào)的改變(上沿和下沿為一次) ,就可以完成8 位數(shù)據(jù)的傳輸。要注意的是, SCK 信號(hào)線只由主設(shè)備控制,從設(shè)備不能控制信號(hào)線。同樣,在一個(gè)基于 SPI 的設(shè)備中,至少有一個(gè)主控設(shè)備。這樣傳輸?shù)奶攸c(diǎn):這樣的傳輸方

4、式有一個(gè)優(yōu)點(diǎn), 與普通的串行通訊不同, 普通的串行通訊一次連續(xù)傳送至少8 位數(shù)據(jù),而SPI 允許數(shù)據(jù)一位一位的傳送,甚至允許暫停,因?yàn)?SCK 時(shí)鐘線由主控設(shè)備控制,當(dāng)沒(méi)有時(shí)鐘跳變時(shí),從設(shè)備不采集或傳送數(shù)據(jù)。也就是說(shuō),主設(shè)備通過(guò)對(duì)SCK 時(shí)鐘線的控制可以完成對(duì)通訊的控制。SPI 還是一個(gè)數(shù)據(jù)交換協(xié)議:因?yàn)镾PI 的數(shù)據(jù)輸入和輸出線獨(dú)立,所以允許同時(shí)完成數(shù)據(jù)的輸入和輸出。不同的 SPI 設(shè)備的實(shí)現(xiàn)方式不盡相同,主要是數(shù)據(jù)改變和采集的時(shí)間不同,在時(shí)鐘信號(hào)上沿或下沿采集有不同定義,具體請(qǐng)參考相關(guān)器件的文檔。在點(diǎn)對(duì)點(diǎn)的通信中, SPI 接口不需要進(jìn)行尋址操作,且為全雙工通信,顯得簡(jiǎn)單高效。 在多個(gè)從設(shè)

5、備的系統(tǒng)中, 每個(gè)從設(shè)備需要獨(dú)立的使能信號(hào), 硬件上比I2C 系統(tǒng)要稍微復(fù)雜一些。二、 SPI 工作模式SPI由工作方式的不同,可分為兩種模式:主模式和從模式(1) 主模式將Master的數(shù)據(jù)傳送給Slave , 8位數(shù)據(jù)傳送,傳送完畢,申請(qǐng)中斷,如圖 所示:SPI工作主模式(2)從模式此時(shí),從控制器從SIMO引腳接收串行數(shù)據(jù)并把數(shù)據(jù)移入自身移位寄存器的 最低位或最高位。要注意的是,其是在主控制器輸出時(shí)鐘SCLK勺控制下,在SCLK 的上升沿或者下降沿讀出一個(gè)數(shù)據(jù)輸出給主設(shè)備。其傳播模型如下圖所示:SPI工作從模式須注意的是,主設(shè)備可以再在任意時(shí)亥I起動(dòng)數(shù)據(jù)發(fā)送,因?yàn)樗刂浦鳶CLK信號(hào),而在

6、從模式下,從控制器要發(fā)送數(shù)據(jù),必須要用先設(shè)置片選信號(hào)以確保使 能端CS輸入允許。三、SPI傳輸模式SPI的工作模式分為主模式和從模式,二者都需要在 SCK的作用下才能工 作;但主模式不需要CS信號(hào),而從模式必須在CS信號(hào)有效的情況下才能完成。 不論是在主模式下還是在從模式下, 都要在時(shí)鐘極性(CPOL和時(shí)鐘相位(CPHA 的配合下才能有效地完成一次數(shù)據(jù)傳輸。 其中,時(shí)鐘極性表示時(shí)鐘信號(hào)在空閑時(shí) 的電平;時(shí)鐘相位決定數(shù)據(jù)是在 SCK的上升沿采樣還是下降沿采樣。根據(jù)時(shí)鐘 極性和時(shí)鐘相位的不同組合,可以得到 SPI總線的4種工作模式,如圖所示:播入數(shù)墉采樣時(shí)刻.: ?nSPI四種傳輸模式(1) SP

7、I0模式下的CPOL為0, SCK勺空閑電平為低;CPHA為0,數(shù)據(jù)在 串行同步時(shí)鐘的第一個(gè)跳變沿(由于 CPOL為低,因此第1個(gè)跳變沿只能為上 升沿)時(shí)數(shù)據(jù)被采樣。(2) SPI1模式下的CPOL也為0, SCK勺空閑電平為低;但是 CPHA為1, 數(shù)據(jù)在串行同步時(shí)鐘的第二個(gè)跳變沿(由于 CPOL為低,因此第2個(gè)跳變沿只 能為下降沿)時(shí)數(shù)據(jù)被采樣。(3) SPI2模式下的CPOL為1, SCK勺空閑電平為高;CPHA為0,數(shù)據(jù)在 串行同步時(shí)鐘的第1個(gè)跳變沿(由于CPOL為高,因此第1個(gè)跳變沿只能為下 降沿)時(shí)數(shù)據(jù)被采樣。(4) SPI3模式下的CPOL為1, SCK勺空閑電平為高;CPHA為

8、1,數(shù)據(jù)在 串行同步時(shí)鐘的第 2個(gè)跳變沿(由于CPOL為高,因此第1個(gè)跳變沿只能為 上升沿)時(shí)數(shù)據(jù)被采樣。在上述4種模式中,使用的最為廣泛的是 SPI0和SPI3方式。由于每一種 模式都與其他三種不兼容,因此為了完成主、從設(shè)備間的通訊,主、從設(shè)備的 CPOL和CPHA必須有相同的設(shè)置。讀者需要注意的是:如果主設(shè)備/從設(shè)備在SCK±升沿發(fā)送數(shù)據(jù),則從設(shè)備/主設(shè)備最好在下降沿采樣數(shù)據(jù);如果主設(shè)備/從 設(shè)備在SCKF降沿發(fā)送數(shù)據(jù),則從設(shè)備/主設(shè)備最好在SCKt升沿采樣數(shù)據(jù)。四、SPI協(xié)議SPI接口是一種事實(shí)標(biāo)準(zhǔn),并沒(méi)有標(biāo)準(zhǔn)協(xié)議,大部分廠家都是參照Motorola的SPI接口定義來(lái)設(shè)計(jì)的,但

9、正因?yàn)闆](méi)有確切的版本協(xié)議,不同廠家產(chǎn)品的SPI接口在技術(shù)上存在一定的差別,容易引起歧義,有的甚至無(wú)法互聯(lián)(需要用軟件 進(jìn)行必要的額修改)。本次設(shè)計(jì)基于一種使用較為普遍的協(xié)議來(lái)進(jìn)行設(shè)計(jì),通過(guò) 簡(jiǎn)單協(xié)議來(lái)理解并設(shè)計(jì)SPI接口功能。SPI協(xié)議是一個(gè)環(huán)形總線結(jié)構(gòu),其時(shí)序其實(shí)比較簡(jiǎn)單,主要是在時(shí)鐘脈沖 SCK的控制下,兩個(gè)雙向移位寄存器 SPI數(shù)據(jù)寄存器數(shù)據(jù) 進(jìn)行數(shù)據(jù)交換。我們 假設(shè)主機(jī)的8位寄存器SPIDATA1內(nèi)的數(shù)據(jù)是10101010,而從機(jī)的8位寄存 器SPIDATA2內(nèi)的數(shù)據(jù)是01010101,在上升沿的時(shí)候發(fā)送數(shù)據(jù),在下降沿的時(shí) 候接收數(shù)據(jù),最高位的數(shù)據(jù)先發(fā)送,主機(jī)和從機(jī)之間全雙工通信,也就

10、是說(shuō)兩個(gè) SPI接口同時(shí)發(fā)送和接收數(shù)據(jù),如圖所示。從圖中我們也可以看到,SPIDATA移位寄存器總是將最高位的數(shù)據(jù)移出,接著將剩余的數(shù)據(jù)分別左移一位,然后將接 收到得數(shù)據(jù)移入其最低位。MSBSPIDATA2LSB如圖所示,當(dāng)?shù)谝粋€(gè)上升沿來(lái)的時(shí)候,SPIDATA1將最高位1移除,并將所 有數(shù)據(jù)左移1位,這時(shí)MOSI線為高電平,而SPIDATA2W最高位0移出,并 將所有數(shù)據(jù)左移1位,這樣MISO線為低電平。然后當(dāng)下降沿到來(lái)的時(shí)候,SPIDATA俏鎖存MISO線上的電平,并將其移入其最低位,同樣的,SPIDATA第 鎖存MOSI線上的電平,并將其移入最低位。經(jīng)過(guò) 8個(gè)脈沖后,兩個(gè)移位寄存 器就實(shí)現(xiàn)

11、了數(shù)據(jù)的交換,也就是完成了一次SPI的時(shí)序。10101010101010101010101010101010500 -BI 吧?3-¥口 miputkrig con ten Esfirm prevQJt mmimndk¥YLM9364-D outpirtlng EXfiEenl9 from wrfieMarSlb BSLK"手"wfTta' bN ( j tEVIDE fldttaSS bil (0| sh ihtl rEQQleFKddP 4 wnd M v-afije 招 X frnrian五、仿真實(shí)現(xiàn)SPI時(shí)序圖如下圖所示:11G謝1nj

12、I I T I I 1 下圖是基于Xilinx的Spartan-3E平臺(tái)采用Verilog語(yǔ)言編譯仿真后的SPI接口 時(shí)序圖:THck也皿曲:打IDIDXGia% . . U % m IK Q電 iPlda> 跑 FERimtM qODDOD0OOI1U4 SOT師。扁方|5Ltt w , i i i 1 i i i i加QI , i i 1 1 1 1 i ri 1川0u , i ri i d 1) i l i440 ospaa u , ii t i EM "i i 1 i ii b 1 h 1 i i 1-Lj-Ln_n_L_TT_rLjn_n_Hi r1L_TT_rhrr

13、TT_rT_rT_rL-L -1!n_jdrLL_jB_ji_r1 Ei:jTrLTLrLnTLTLrLTLnTLTLTLrLnjLrLTLrLnTLTLTrvLrirLrLrLrLruumrLruumr10L卜'-XL 45kMe DS附錄Verilog源代碼如下所示:'timescale 1ns / 1ps/ Company:/ Engineer:/ Create Date:00:34:32 0409/2013/ Design Name:/ Module Name:spi/ Project Name:/ Target Devices:/ Tool versions:/ De

14、scription:/ Dependencies:/ Revision:/ Revision 0.01 - File Created/ Additional Comments:/module spi(rst,clk,rd,wr,datain,spics,spiclk,spido,spidi,dataout );inputrst;置位信號(hào),低有效inputclk;時(shí)鐘信號(hào)inputrd;接收數(shù)據(jù)命令inputwr;/發(fā)送數(shù)據(jù)命令inputspidi;/spi數(shù)據(jù)輸入信號(hào)input 7:0 datain;/ 發(fā)送數(shù)據(jù)輸入output spics;/spi 片選信號(hào)output spiclk;/sp

15、i 時(shí)鐘信號(hào)output spido; /spi 數(shù)據(jù)輸出信號(hào)output 7:0 dataout; / 接收數(shù)據(jù)輸出reg spics;reg spiclk;reg spido;reg 7:0 dataout,dstate,dsend,dreceive; /cntreg 1:0 spistate;parameter idle = 2'b00;parameter send_data = 2'b01;parameter receive_data = 2'b10initialbegin spics spiclk spidoend<= 1'b1;<= 1&

16、#39;b1;<= 1'b1;always(posedge clk)beginif(!rst)beginspistate <= idle;spics<= 1'b1;spiclk <= 1'b1;spido<= 1'b1;dstate <= 8'd0;endelsebegincase(spistate)2'b00:beginif(wr=1'b0)&&(rd=1'b1) / 發(fā)送數(shù)據(jù)轉(zhuǎn)換beginspistate <= send_data;dstate <= 8'

17、d0;dsend <= datain;endelseif(wr=1'b1)&&(rd=1'b0) / 接 收 數(shù) 據(jù)轉(zhuǎn)換beginspistate <= receive_data;dstate <= 8'd0;endelsebeginspistate <= idle;dstate <= 8'd0;endend2'b01: / 發(fā)送數(shù)據(jù)狀態(tài)begincase(dstate)8'd0:/ 產(chǎn)生片選信號(hào)beginspics<= 1'b0;spiclk <= 1'b1;spido&

18、lt;= 1'b1;dstate <= 8'd1;end8'd1:beginspics<= 1'b0;spiclk <= 1'b1;spido<= 1'b1;dstate <= 8'd2;end8'd2:beginspics<= 1'b0;spiclk <= 1'b0;spido<= 1'b1;dstate <= 8'd3;end8'd3:beginspics<= 1'b0;spiclk <= 1'b1;spi

19、do<= dsend7; / 發(fā)送數(shù)據(jù)最高位dstate <= 8'd4;end8'd4:beginspics<= 1'b0;spiclk <= 1'b0;spido<= dsend7;dstate <= 8'd5;end8'd5:beginspics<= 1'b0;spiclk <= 1'b1;spido<= dsend6;dstate <= 8'd6;end8'd6:beginspics<= 1'b0;spiclk <= 1'

20、;b0;spido<= dsend6;dstate <= 8'd7;end8'd7:beginspics<= 1'b0;spiclk <= 1'b1;spido<= dsend5;dstate <= 8'd8;end8'd8:beginspics<= 1'b0;spiclk <= 1'b0;spido<= dsend5;dstate <= 8'd9;end8'd9:beginspics<= 1'b0;spiclk <= 1'b1

21、;spido<= dsend4;dstate <= 8'd10;end8'd10:beginspics<= 1'b0;spiclk <= 1'b0;spido<= dsend4;dstate <= 8'd11;end8'd11:beginspics<= 1'b0;spiclk <= 1'b1;spido<= dsend3;dstate <= 8'd12;end8'd12:beginspics<= 1'b0;spiclk <= 1'

22、;b0;spido<= dsend3;dstate <= 8'd13;end8'd13:beginspics<= 1'b0;spiclk <= 1'b1;spido<= dsend2;dstate <= 8'd14;end8'd14:beginspics<= 1'b0;spiclk <= 1'b0;spido<= dsend2;dstate <= 8'd15;end8'd15:beginspics<= 1'b0;spiclk <= 1&

23、#39;b1;spido<= dsend1;dstate <= 8'd16;end8'd16:beginspics<= 1'b0;spiclk <= 1'b0;spido<= dsend1;dstate <= 8'd17;end8'd17:beginspics<= 1'b0;spiclk <= 1'b1;spido<= dsend0;dstate <= 8'd18;end8'd18:beginspics<= 1'b0;spiclk <=

24、 1'b0;spido<= dsend0;dstate <= 8'd19;end8'd19:beginspics<= 1'b1;spiclk <= 1'b1;spido<= 1'b1;dstate <= 8'd20;end8'd20:beginspics<= 1'b1;spiclk <= 1'b1;spido<= 1'b1;dstate <= 8'd0;spistate <= idle;enddefault:beginspics<

25、;= 1'b1;spiclk <= 1'b1;spido<= 1'b1;spistate <= idle;end endcase end2'b10:/ 接收數(shù)據(jù)狀態(tài)begincase(dstate) / 片選信號(hào)有效8'd0:beginspics<= 1'b0;spiclk <= 1'b1;spido<= 1'b1;dstate <= 8'd1;end8'd1:beginspics<= 1'b0;spiclk <= 1'b1;spido<=

26、 1'b1;dstate <= 8'd2;end8'd2:beginspics<= 1'b0;spiclk <= 1'b0;spido<= 1'b1;dstate <= 8'd3;end8'd3:beginspics <= 1'b0;spiclk <= 1'b1;dstate <= 8'd4;end8'd4:beginspics <= 1'b0;spiclk <= 1'b0;/ 下降沿?cái)?shù)據(jù)讀取dreceive7 <=s

27、pidi; / 接收數(shù)據(jù) 最高位dstate <= 8'd5;end8'd5:beginspics <= 1'b0;spiclk <= 1'b1;dstate <= 8'd6;end8'd6:beginspics <= 1'b0;spiclk <= 1'b0;dreceive6 <=spidi;dstate <= 8'd7;end8'd7:beginspics <= 1'b0;spiclk <= 1'b1;dstate <= 8

28、9;d8;end8'd8:beginspics <= 1'b0;spiclk <= 1'b0;dreceive5 <=spidi;dstate <= 8'd9;end8'd9:beginspics <= 1'b0;spiclk <= 1'b1;dstate <= 8'd10;end8'd10:beginspics <= 1'b0;spiclk <= 1'b0;dreceive4 <=spidi;dstate <= 8'd11;end8

29、'd11:beginspics <= 1'b0;spiclk <= 1'b1;dstate <= 8'd12;end8'd12:beginspics <= 1'b0;spiclk <= 1'b0;dreceive3 <=spidi;dstate <= 8'd13;end8'd13:beginspics <= 1'b0;spiclk <= 1'b1;dstate <= 8'd14;end8'd14:beginspics <= 1

30、'b0;spiclk <= 1'b0;dreceive2 <=spidi;dstate <= 8'd15;end8'd15:beginspics <= 1'b0;spiclk <= 1'b1;dstate <= 8'd16;end8'd16:beginspics <= 1'b0;spiclk <= 1'b0;dreceive1 <=spidi;dstate <= 8'd17;end8'd17:beginspics <= 1'b

31、0;spiclk <= 1'b1;dstate <= 8'd18;end8'd18:beginspics <= 1'b0;spiclk <= 1'b0;dreceive0 <=spidi;dstate <= 8'd19;end8'd19:beginspics <= 1'b0;spiclk <= 1'b0;spido <= 1'b1;dstate <= 8'd20;dataout <=dreceive;end8'd20:/ 片 選beginspics <= 1'b1;信號(hào)無(wú)效spiclk <= 1'b1;spido <= 1'b1;dstate <= 8'd0;spistate <=idle;endendcaseenddefault:beginspics<= 1'b1;spiclk <= 1'b1;spido<= 1'b1;spistate <= idle;en

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論