VHDL的串行同步通信SPI設(shè)計(jì)說(shuō)明_第1頁(yè)
VHDL的串行同步通信SPI設(shè)計(jì)說(shuō)明_第2頁(yè)
VHDL的串行同步通信SPI設(shè)計(jì)說(shuō)明_第3頁(yè)
已閱讀5頁(yè),還剩8頁(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、課程設(shè)計(jì)課程名稱.電子技術(shù)綜合設(shè)計(jì)與實(shí)訓(xùn)SPI設(shè)計(jì)題目名稱基于VHDL的串行同步通信學(xué)生學(xué)院自動(dòng)化專業(yè)班級(jí)電子信息科學(xué)與技術(shù)學(xué)號(hào)_3107001554學(xué)生匠匪指導(dǎo)教師_蔡述庭2009年12月21日工業(yè)大學(xué)課程設(shè)計(jì)任務(wù)書(shū)題目名稱基丁VHDLB申行同步通信SPI設(shè)計(jì)學(xué)生學(xué)院自動(dòng)化專業(yè)班級(jí)電子信息科學(xué)與技術(shù)姓名振添3107001554一、課程設(shè)計(jì)的容設(shè)計(jì)一個(gè)同步串行通訊SPI二、課程設(shè)計(jì)的要求與數(shù)據(jù)設(shè)計(jì)要求包括:1. 深入了解串行通信的方案容和協(xié)議,思考設(shè)計(jì)方法。2. 設(shè)計(jì)串行通信方案,并寫(xiě)好傳輸程序VHDL下載到DE2板調(diào)試,檢測(cè)其可行性。1. 三、課程設(shè)計(jì)應(yīng)完成的工作利用VHD通言編程實(shí)現(xiàn)SPI

2、;利用DE2板對(duì)所設(shè)計(jì)的思想進(jìn)行驗(yàn)證;總結(jié)VHD成計(jì)結(jié)果,撰寫(xiě)課程設(shè)計(jì)報(bào)告。四、課程設(shè)計(jì)進(jìn)程安排設(shè)計(jì)各階段容地點(diǎn)起止日期1任務(wù)的確定-spi實(shí)驗(yàn)2號(hào)樓21412.142查找資料實(shí)驗(yàn)2號(hào)樓30712.153編寫(xiě)SPI的各個(gè)模塊VHDLS序?qū)嶒?yàn)2號(hào)樓21612.164仿真,分配管腳實(shí)驗(yàn)2號(hào)樓21412.175驗(yàn)證修改驗(yàn)收實(shí)驗(yàn)2號(hào)樓21412.186整理說(shuō)明書(shū),報(bào)告實(shí)驗(yàn)樓12.19五、應(yīng)收集的資料及主要參考文獻(xiàn)PIC單片機(jī)原理及應(yīng)用(第3版)北京航天航空大學(xué)2 黃智偉,王彥FPG麻統(tǒng)設(shè)計(jì)與實(shí)踐M發(fā)出任務(wù)書(shū)日期:年月計(jì)劃完成日期:年月主管院長(zhǎng)簽章:北京:電子工業(yè),2005日指導(dǎo)教師簽名:日基層教學(xué)單位

3、責(zé)任人簽章:摘要本設(shè)計(jì)是用Quartus作為開(kāi)發(fā)環(huán)境,以DE2板為硬件平臺(tái)實(shí)現(xiàn)的SPI同步申行通訊。設(shè)計(jì)過(guò)程方便。根據(jù)接收和發(fā)送兩個(gè)主要部分實(shí)現(xiàn)了SPI的基本功能。此外,該設(shè)計(jì)還實(shí)現(xiàn)了波特率發(fā)生器,數(shù)碼管顯示的功能。用DE2板實(shí)現(xiàn)具有電路簡(jiǎn)潔,開(kāi)發(fā)周期短的優(yōu)點(diǎn)。充分利用了ED雙計(jì)的優(yōu)點(diǎn)。開(kāi)發(fā)過(guò)程用了VHD應(yīng)件描述語(yǔ)言進(jìn)行描述,從底層設(shè)計(jì),分模塊進(jìn)行,充分提高了設(shè)計(jì)者的數(shù)字邏輯設(shè)計(jì)的概念。關(guān)鍵詞:SPI,同步申行通訊,Quartus,DE2K,VHDLJM件描述語(yǔ)言。2 1弓I言6SPI簡(jiǎn)介62.1SPI協(xié)議和工作原理63 2.2波特率7模塊設(shè)計(jì)73.1頂層模塊RTL綜合73.2波特率發(fā)生器模塊

4、93.3 SDCa據(jù)發(fā)送模塊103.4 SDI數(shù)據(jù)接收模塊114 3.5數(shù)碼管顯示模塊12實(shí)驗(yàn)驗(yàn)證134.1實(shí)驗(yàn)驗(yàn)證方案選擇134.2實(shí)驗(yàn)現(xiàn)象135結(jié)論與問(wèn)題討論135.1完成設(shè)計(jì)要求的程度135.2遇到的問(wèn)題及解決方法145.3存在的不足及改進(jìn)思路145.4心得體會(huì)14參考文獻(xiàn)151引言申行擴(kuò)展通信接口是器件間進(jìn)行數(shù)據(jù)交換的平臺(tái)和重要渠道。主控同步申行通信模塊主要應(yīng)用丁系統(tǒng)部近距離的申行通訊,如SPI,|AC等。SPI是英文SerialPeripheralInterface的縮寫(xiě),中文意思是申行外圍設(shè)備接口,SPI是Motorola公司推出的一種同步申行通訊方式,是一種三線同步總線,因其硬件

5、功能很強(qiáng),與SPI有關(guān)的軟件就相當(dāng)簡(jiǎn)單,使CPUt更多的時(shí)間處理其他事務(wù)。2SPI簡(jiǎn)介2.1SPI協(xié)議和工作原理顧名思義,串行接口的數(shù)據(jù)傳輸方式是串行的,即數(shù)據(jù)是一位一位地進(jìn)行傳輸雖然串行接口的傳輸方式導(dǎo)致其傳輸速度會(huì)比較慢,但是它卻具有較強(qiáng)的抗干擾能力,并能有較長(zhǎng)的傳輸距離,RS232口的最大傳輸距離為15mnSPI接口主要應(yīng)用在EEPROMFLASH實(shí)時(shí)時(shí)鐘,AD轉(zhuǎn)換器,還有數(shù)字信號(hào)處理器和數(shù)字信號(hào)解碼器之間。SPI,是一種高速的,全雙工,同步的通信總線,并且在芯片的管腳上只占用四根線,節(jié)約了芯片的管腳,同時(shí)為PCB的布局上節(jié)省空間,提供方便,正是出于這種簡(jiǎn)單易用的特性,現(xiàn)在越來(lái)越多的芯片

6、集成了這種通信協(xié)議,比如AT91RM9200.SPI的通信原理很簡(jiǎn)單,它以主從方式工作,這種模式通常有一個(gè)主設(shè)備和一個(gè)或多個(gè)從設(shè)備,需要至少4根線,事實(shí)上3根也可以(單向傳輸時(shí))。也是所有基于SPI的設(shè)備共有的,它們是SDI(數(shù)據(jù)輸入),SDO(數(shù)據(jù)輸出),SCK(時(shí)鐘),CS(片選)。(1)SDO-主設(shè)備數(shù)據(jù)輸出,從設(shè)備數(shù)據(jù)輸入(2)SDI-主設(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è)S

7、PI設(shè)備成為可能。接下來(lái)就負(fù)責(zé)通訊的3根線了。通訊是通過(guò)數(shù)據(jù)交換完成的,這里先要知道SPI是串行通訊協(xié)議,也就是說(shuō)數(shù)據(jù)是一位一位的傳輸?shù)摹_@就是SCK時(shí)鐘線存在的原因,由SC錐供時(shí)鐘脈沖,SDI,SDCU基于此脈沖完成數(shù)據(jù)傳輸。數(shù)據(jù)輸出通過(guò)SDO線,數(shù)據(jù)在時(shí)鐘上升沿或下降沿時(shí)改變,在緊接著的下降沿或上升沿被讀取。完成一位數(shù)據(jù)傳輸,輸入也使用同樣原理。這樣,在至少8次時(shí)鐘信號(hào)的改變(上沿和下沿為一次),就可以完成8位數(shù)據(jù)的傳輸。SPI是一個(gè)環(huán)形總線結(jié)構(gòu),由ss(cs)、sck、sdi、sdo構(gòu)成,其時(shí)序其實(shí)很簡(jiǎn)單,主要是在sck的控制下,兩個(gè)雙向移位寄存器進(jìn)行數(shù)據(jù)交換。假設(shè)下面的8位寄存器裝的是

8、待發(fā)送的數(shù)據(jù)10101010,上升沿發(fā)送、下降沿接收、高位先發(fā)送。那么第一個(gè)上升沿來(lái)的時(shí)候數(shù)據(jù)將會(huì)是sdo=1;寄存器中的10101010左移一位,后面補(bǔ)入送來(lái)的一位未知數(shù)x,成了0101010xo下降沿到來(lái)的時(shí)候,sdi上的電平將鎖存到寄存器中去,那么這時(shí)寄存器=0101010sdi,這樣在8個(gè)時(shí)鐘脈沖以后,兩個(gè)寄存器的容互相交換一次。這樣就完成里一個(gè)spi時(shí)序。2.2波特率這是一個(gè)衡量通信速度的參數(shù)。它表示每秒鐘傳送的bit的個(gè)數(shù)。例如300波特表示每秒鐘發(fā)送300個(gè)bit。當(dāng)我們提到時(shí)鐘周期時(shí),我們就是指波特率例如如果協(xié)議需要4800波特率,那么時(shí)鐘是4800Hz。這意味著串口通信在數(shù)據(jù)

9、線上的采樣率為4800Hz。通常線的波特率為14400,28800和36600。波特率可以遠(yuǎn)遠(yuǎn)大于這些值,但是波特率和距離成反比。串行口每秒發(fā)送或接收數(shù)據(jù)的碼元數(shù)為傳碼,單位為波特,也叫波特率。若發(fā)送或接收一位數(shù)據(jù)所需時(shí)間為T(mén),則波特率為1/T,相應(yīng)的發(fā)送或接收時(shí)鐘為1/THz。發(fā)送和接收設(shè)備的波特率應(yīng)一致。位同步是實(shí)現(xiàn)收發(fā)雙方的碼元同步,由數(shù)據(jù)傳輸系統(tǒng)的同步控制電路實(shí)現(xiàn)。發(fā)送端由發(fā)送時(shí)鐘的定時(shí)脈沖對(duì)數(shù)據(jù)序列取樣再生,接收端由接收時(shí)鐘的定時(shí)脈沖對(duì)接收數(shù)據(jù)序列取樣判斷,恢復(fù)原來(lái)的數(shù)據(jù)序列。因此,接收時(shí)鐘和發(fā)送時(shí)鐘必須同頻同相,這是由接收端的定時(shí)提取和鎖相環(huán)電路實(shí)現(xiàn)的。傳碼率與位同步必須同時(shí)滿足。

10、否則,接收設(shè)備接收不到有效信息。3模塊設(shè)計(jì)3.1頂層模塊RTL綜合頂層文件設(shè)計(jì),將波特率發(fā)生模塊,數(shù)據(jù)發(fā)送模塊,數(shù)據(jù)接收模塊,和數(shù)碼顯示模塊通過(guò)例化語(yǔ)句組合成總的頂層模塊。其中數(shù)據(jù)發(fā)送模塊為并行輸入串行輸出模塊,在時(shí)鐘的上升沿發(fā)送一位數(shù)據(jù),共需要8個(gè)時(shí)鐘脈沖即可發(fā)送完一字節(jié)數(shù)據(jù)。數(shù)據(jù)接收模塊為串行輸入并行輸出模塊,串行輸入的數(shù)據(jù)來(lái)自數(shù)據(jù)發(fā)送模塊,在時(shí)鐘的上升沿接收數(shù)據(jù),即由“自己發(fā)送的數(shù)據(jù)自己同步接收”來(lái)模擬主從器件間數(shù)據(jù)的全雙工傳輸。數(shù)碼管顯示模塊則是循環(huán)顯示08數(shù)字,每循環(huán)一次代表傳輸完一字節(jié)。以下是頂層模塊VHDL源程序:libraryieee;useieee.std_logic_116

11、4.all;useieee.std_logic_unsigned.all;entityspiisport(clk,stop,load:instd_logic;data_in:std_logic_vector(7downto0);deng_out:outstd_logic_vector(7downto0);shuma_out:outstd_logic_vector(6downto0);endspi;architectureoneofspiiscomponentsdiport(clk_sdi:instd_logic;sdi_in:instd_logic;load:instd_logic;shuma

12、:outintegerrange0to8;sdi_out:outstd_logic_vector(7downto0);endcomponent;componentsdoport(clk_sdo,load:instd_logic;sdo_in:instd_logic_vector(7downto0);sdo_out:outstd_logic);endcomponent;componentSHUMGport(num:inINTEGERRANGE0TO8;dout:outstd_logic_vector(6downto0);endcomponent;componentfenpinport(clk,s

13、top:instd_logic;clok:outstd_logic);endcomponent;signalA,B:std_logic;signalC:INTEGERrange0to8;beginu1:sdiportmap(sdi_out=>deng_out,clk_sdi=>A,sdi_in=>B,shuma=>C,load=>load);u2:sdoportmap(sdo_out=>B,sdo_in=>data_in,load=>load,clk_sdo=>A);u3:SHUMGportmap(dout=>shuma_out,nu

14、m=>C);u4:fenpinportmap(clk=>clk,stop=>stop,clok=>A);endone;綜合后為:3.2波特率發(fā)生器模塊由于SPI同步串行通訊的缺點(diǎn)是波特率不高,通常常用的SPI波特率有2400,4800,9600,19200等比較低的波特率,晶振的頻率一般都比較高,需要分頻后才能供給SPI使用。假設(shè)采用6MHZ的晶振作為外部時(shí)鐘,那么要產(chǎn)生9600波特率的時(shí)鐘信號(hào),則需要對(duì)6MHZ的時(shí)鐘進(jìn)行625分頻。除此之外,為了提高接收電路接收數(shù)據(jù)的準(zhǔn)確度,采取“過(guò)采樣法”對(duì)發(fā)送來(lái)的同一個(gè)數(shù)據(jù)進(jìn)行多次采樣,這里對(duì)數(shù)據(jù)進(jìn)行三次采樣取平均值。輸入6MHz

15、的時(shí)鐘,經(jīng)過(guò)計(jì)數(shù)分頻后得到9600Hz的接收時(shí)鐘信號(hào)和脈沖出現(xiàn)的頻率是波特率的3倍的采樣時(shí)鐘信號(hào)。下面是實(shí)現(xiàn)該功能的VHDL程序:libraryieee;useieee.std_logic_1164.all;entityfenpinisport(clk,stop:instd_logic;clok,clk3:outstd_logic);endfenpin;architectureoneoffenpinisbeginprocess(clk)variablecounter:integerrange0to625;beginifstop='1'thenifclk'eventand

16、clk='1'thenifcounter=625thencounter:=0;clok<='1'elsecounter:=counter+1;clok<='0'endif;endif;if(counter=106orcounter=313orcounter=520)thenclk3<='1'elseclk3<='0'endif;endif;endprocess;endone;其中,clk為6MHz的時(shí)鐘;clok為9600Hz的接收時(shí)鐘;clk3為脈沖出現(xiàn)的頻率是波特率的3倍的采樣時(shí)鐘。3.

17、3SDO數(shù)據(jù)發(fā)送模塊發(fā)送電路是在時(shí)序脈沖的控制下,利用移位寄存器并行輸入串行輸出的把數(shù)據(jù)一位一位的送出去。VHDLW程序如下:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitysdoisport(clk_sdo,load:instd_logic;sdo_in:instd_logic_vector(7downto0);sdo_out:outstd_logic);endsdo;architectureoneofsdoissignalbuff:std_logic_vector(7downto0);b

18、eginprocess(clk_sdo)beginifclk_sdo'eventandclk_sdo='1'thenifload='1'thenbuff<=sdo_in;elsebuff(7downto1)<=buff(6downto0);endif;endif;sdo_out<=buff(7);endprocess;endone;其中,sdo_in:instd_logic_vector(7downto0);為并行輸入端口8位數(shù)據(jù),clk_sdo為輸入端口發(fā)送時(shí)鐘;sdo_out:outstd_logic為輸出串行端口;當(dāng)load=&#

19、39;1則把待發(fā)送的數(shù)據(jù)送入數(shù)據(jù)緩沖區(qū)BUFF,然后根據(jù)時(shí)鐘的上升沿的到來(lái)把數(shù)據(jù)一位一位的從緩沖器送給串行輸出。如圖所示,第一次裝載待發(fā)送數(shù)據(jù)10101010,第二次裝載待發(fā)送數(shù)據(jù)01010101于緩沖區(qū),共2字節(jié)數(shù)據(jù),從仿真圖上可以看到,串行輸出分貝輸出了2字節(jié)數(shù)據(jù):10101010,和01010101E-4»5一Tsd(i_i-zdoi-3.J.D-s-do-sdo-s4o-sdoQ1lUULUUUUUUUL'UUUULIULUUU.rnc"Trfo:-1III1iriH門(mén)ia3incnin.l偵卬J3.4SDI數(shù)據(jù)接收模塊接收電路的功能是在時(shí)鐘控制下,采樣串行

20、輸入端口上的數(shù)據(jù),執(zhí)行采樣判斷,檢測(cè)幀同步標(biāo)志,把后續(xù)數(shù)據(jù)依次送達(dá)對(duì)應(yīng)的并行輸出端口上。下面是實(shí)現(xiàn)上述功能的VHDL源程序:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitysdiisport(clk_sdi:instd_logic;sdi_in:instd_logic;shuma:outintegerrange0to8;sdi_out:outstd_logic_vector(7downto0);endsdi;architectureoneofsdiissignalbuff:std_logic

21、_vector(7downto0);beginprocess(clk_sdi)variablecout:integerrange0to8;beginifclk_sdi'eventandclk_sdi='1'thenifcout=8thencout:=0;sdi_out<=buff;elsebuff(7-cout)<=sdi_in;cout:=cout+1;endif;endif;shuma<=cout;endprocess;endone;數(shù)據(jù)一位一位的接收,接收一位就把它存放于接收緩沖寄存器,等待緩沖器滿后就并行輸出數(shù)據(jù)由程序讀取。如仿真圖所示,串行傳

22、來(lái)的兩字節(jié)數(shù)據(jù)10101010和01010101,數(shù)碼管循環(huán)顯示從08,當(dāng)顯示8時(shí)代表緩沖器滿,并串行輸出數(shù)據(jù),SDI_OUT為串行輸出的數(shù)據(jù)。3.5數(shù)碼管顯示模塊libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entitySHUMGisport(num:inINTEGERRANGE0TO8;dout:outstd_logic_vector(6downto0);endSHUMG;architecturea1ofSHUMGisbeginwithnum

23、selectdout<="1111110"when0,"0110000"when1,"1101101"when2,"1111001"when3,"0110011"when4,"1011011"when5,"1011111"when6,"1110000"when7,"1111111"when8,"0000000"whenothers;enda1;8代表數(shù)據(jù)傳輸完數(shù)碼管顯示模塊用來(lái)方便表示出數(shù)據(jù)

24、傳輸?shù)倪^(guò)程,從08循環(huán)顯示,畢準(zhǔn)備傳送或接收下一字節(jié)數(shù)據(jù)。4實(shí)驗(yàn)驗(yàn)證4.1實(shí)驗(yàn)驗(yàn)證方案選擇由于要在DE2板上驗(yàn)證SPI有一定難度。我們的方案一就是利用串口調(diào)試助手,PC機(jī)作為從器件,目標(biāo)板做為主器件進(jìn)行SPI通訊。我們的方案二是完全在DE2板上模擬主從同步串行通訊,但是由于考慮到DE2板上可以用的驗(yàn)證設(shè)備(開(kāi)關(guān)和LED燈)不夠,所以我們決定在DE2版上對(duì)所設(shè)計(jì)的SPI模塊進(jìn)行調(diào)整,自己發(fā)送的數(shù)據(jù)自己接收,模擬實(shí)現(xiàn)了主從之間通過(guò)不串行通訊。在這里我們采用的是方案2,優(yōu)點(diǎn)是易于實(shí)現(xiàn)。我們把SD破送數(shù)據(jù)模塊直接接到了SDI數(shù)據(jù)接收模塊,因此我們只要驗(yàn)證:通過(guò)發(fā)送以自己數(shù)據(jù),待8個(gè)時(shí)序脈沖后數(shù)據(jù)發(fā)送完的同時(shí)也被接收,則說(shuō)明我們的思路正確。4.2實(shí)驗(yàn)現(xiàn)象說(shuō)明:開(kāi)關(guān)SW8弋表LOA或據(jù)裝載。開(kāi)關(guān)SW9弋表時(shí)鐘時(shí)能SW0SW7為發(fā)送數(shù)據(jù)的數(shù)據(jù)緩沖器,即發(fā)送模塊數(shù)據(jù)輸入端,存待發(fā)送的數(shù)據(jù)。LED0LED7讀取數(shù)據(jù)接收模塊的數(shù)據(jù)接收狀態(tài)。數(shù)碼管循環(huán)顯示08.當(dāng)我們撥動(dòng)開(kāi)關(guān),準(zhǔn)備好待發(fā)送數(shù)據(jù)時(shí),先LOADS數(shù)據(jù)送入緩沖區(qū),然后使時(shí)鐘時(shí)能,這是開(kāi)始發(fā)送和接收數(shù)據(jù)同步。數(shù)碼管從08顯示,當(dāng)數(shù)碼管顯示8時(shí),燈的狀態(tài)與開(kāi)關(guān)的狀

溫馨提示

  • 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)論