VHDL的串行同步通信SPI設計_第1頁
VHDL的串行同步通信SPI設計_第2頁
VHDL的串行同步通信SPI設計_第3頁
VHDL的串行同步通信SPI設計_第4頁
VHDL的串行同步通信SPI設計_第5頁
已閱讀5頁,還剩10頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、課課 程程 設設 計計 課程名稱_電子技術綜合設計與實訓 題目名稱 基于 VHDL 的串行同步通信 SPI 設計學生學院_ 自動化_專業班級_電子信息科學與技術_學 號_3107001554_ 學生姓名_陳振添_指導教師_蔡述庭_ _2009 年 12 月 21 日廣東工業大學課程設計任務書題目名稱基于 VHDL 的串行同步通信 SPI 設計學生學院自動化專業班級電子信息科學與技術姓 名陳振添學 號3107001554一、課程設計的內容 設計一個同步串行通訊 SPI二、課程設計的要求與數據設計要求包括:1.深入了解串行通信的方案內容和協議,思考設計方法。2.設計串行通信方案,并寫好傳輸程序 V

2、HDL。3.下載到 DE2 板調試,檢測其可行性。三、課程設計應完成的工作1. 利用 VHDL 語言編程實現 SPI; 2. 利用 DE2 板對所設計的思想進行驗證; 3. 總結 VHDL 設計結果,撰寫課程設計報告。四、課程設計進程安排序號設計各階段內容地點起止日期1任務的確定-spi實驗 2號樓 21412.142查找資料實驗 2號樓 30712.153編寫 SPI 的各個模塊 VHDL 程序實驗 2號樓 21612.164仿真,分配管腳實驗 2號樓 21412.175驗證修改 驗收實驗 2號樓 21412.186整理說明書,報告實驗樓12.19五、應收集的資料及主要參考文獻1 PIC 單

3、片機原理及應用(第 3 版) 北京航天航空大學出版社2 黃智偉,王彥FPGA 系統設計與實踐M北京:電子工業出版社,2005發出任務書日期: 年 月 日 指導教師簽名:計劃完成日期: 年 月 日 基層教學單位責任人簽章:主管院長簽章:摘摘 要要本設計是用 Quartus 作為開發環境,以 DE2 板為硬件平臺實現的 SPI 同步串行通訊。設計過程方便。根據接收和發送兩個主要部分實現了 SPI 的基本功能。此外,該設計還實現了波特率發生器,數碼管顯示的功能。用 DE2 板實現具有電路簡潔,開發周期短的優點。充分利用了 EDA 設計的優點。開發過程用了 VHDL 硬件描述語言進行描述,從底層設計,

4、分模塊進行,充分提高了設計者的數字邏輯設計的概念。關鍵詞:關鍵詞:SPI,同步串行通訊,Quartus,DE2 板,VHDL 硬件描述語言。目 錄1 引言引言.62 SPI 簡介簡介.62.1 SPI 協議和工作原理.62.2 波特率.73 模塊設計模塊設計.73.1 頂層模塊 RTL 綜合.73.2 波特率發生器模塊.83.3 SDO 數據發送模塊.93.4 SDI 數據接收模塊.103.5 數碼管顯示模塊.114實驗驗證實驗驗證.124.1 實驗驗證方案選擇.124.2 實驗現象.125 結論與問題討論結論與問題討論.125.1 完成設計要求的程度.125.2 遇到的問題及解決方法.135

5、.3 存在的不足及改進思路.135.4 心得體會.13參考文獻參考文獻.141 引言引言 串行擴展通信接口是器件間進行數據交換的平臺和重要渠道。主控同步串行通信模塊主要應用于系統內部近距離的串行通訊,如 SPI,IC 等。SPI是英文 Serial Peripheral Interface 的縮寫,中文意思是串行外圍設備接口,SPI 是 Motorola 公司推出的一種同步串行通訊方式,是一種三線同步總線,因其硬件功能很強,與 SPI 有關的軟件就相當簡單,使 CPU 有更多的時間處理其他事務。2 SPI 簡介簡介2.1 SPI 協議和工作原理協議和工作原理顧名思義,串行接口的數據傳輸方式是串

6、行的,即數據是一位一位地進行傳輸 雖然串行接口的傳輸方式導致其傳輸速度會比較慢,但是它卻具有較強的抗干擾能力,并能有較長的傳輸距離,RS232 口的最大傳輸距離為 15m。SPI 接口主要應用在 EEPROM,FLASH,實時時鐘,AD 轉換器,還有數字信號處理器和數字信號解碼器之間。SPI,是一種高速的,全雙工,同步的通信總線,并且在芯片的管腳上只占用四根線,節約了芯片的管腳,同時為 PCB 的布局上節省空間,提供方便,正是出于這種簡單易用的特性,現在越來越多的芯片集成了這種通信協議,比如 AT91RM9200.SPI 的通信原理很簡單,它以主從方式工作,這種模式通常有一個主設備和一個或多個

7、從設備,需要至少 4 根線,事實上 3 根也可以(單向傳輸時) 。也是所有基于 SPI 的設備共有的,它們是 SDI(數據輸入) ,SDO(數據輸出) ,SCK(時鐘) ,CS(片選) 。(1)SDO - 主設備數據輸出,從設備數據輸入(2)SDI - 主設備數據輸入,從設備數據輸出(3)SCLK - 時鐘信號,由主設備產生(4)CS - 從設備使能信號,由主設備控制其中 CS 是控制芯片是否被選中的,也就是說只有片選信號為預先規定的使能信號時(高電位或低電位) ,對此芯片的操作才有效。這就允許在同一總線上連接多個 SPI 設備成為可能。接下來就負責通訊的 3 根線了。通訊是通過數據交換完成的

8、,這里先要知道 SPI 是串行通訊協議,也就是說數據是一位一位的傳輸的。這就是 SCK 時鐘線存在的原因,由SCK 提供時鐘脈沖,SDI,SDO 則基于此脈沖完成數據傳輸。數據輸出通過 SDO 線,數據在時鐘上升沿或下降沿時改變,在緊接著的下降沿或上升沿被讀取。完成一位數據傳輸,輸入也使用同樣原理。這樣,在至少 8 次時鐘信號的改變(上沿和下沿為一次) ,就可以完成 8 位數據的傳輸。SPI 是一個環形總線結構,由 ss(cs) 、sck、sdi、sdo 構成,其時序其實很簡單,主要是在 sck 的控制下,兩個雙向移位寄存器進行數據交換。假設下面的 8 位寄存器裝的是待發送的數據 101010

9、10,上升沿發送、下降沿接收、高位先發送。那么第一個上升沿來的時候 數據將會是 sdo=1;寄存器中的 10101010 左移一位,后面補入送來的一位未知數 x,成了 0101010 x。下降沿到來的時候,sdi 上的電平將鎖存到寄存器中去,那么這時寄存器=0101010sdi,這樣在 8 個時鐘脈沖以后,兩個寄存器的內容互相交換一次。這樣就完成里一個 spi 時序。2.2 波特率波特率這是一個衡量通信速度的參數。它表示每秒鐘傳送的 bit 的個數。例如 300 波特表示每秒鐘發送 300 個 bit。當我們提到時鐘周期時,我們就是指波特率例如如果協議需要4800 波特率,那么時鐘是 4800

10、Hz。這意味著串口通信在數據線上的采樣率為 4800Hz。通常電話線的波特率為 14400,28800 和 36600。波特率可以遠遠大于這些值,但是波特率和距離成反比。串行 口每秒發送或接收數據的碼元數為傳碼 ,單位為波特,也叫波特率。若發送或接收一位數據所需時間為 T,則波特率為 1 T,相應的發送 或接收時鐘為 1 T Hz 。發送和接收設備的波特率應 一致。位 同步是實現收發雙方的碼元同步,由數據傳輸系統的同步控制電路實現。發送端由發送時鐘 的定時脈沖對數據序列取樣再生,接收端由接收時 鐘的定時脈沖對接收數據序列取樣判斷,恢復原來 的數據序列。因此,接收時鐘和發送時鐘必須同頻 同相,這

11、是由接收端的定時提取和鎖相環 電路實現 的。傳碼率與位同步必須同時滿足 。否則,接收設備接收不到有效信息。 3 模塊設計模塊設計3.1 頂層模塊頂層模塊 RTL 綜合綜合頂層文件設計,將波特率發生模塊,數據發送模塊,數據接收模塊,和數碼顯示模塊通過例化語句組合成總的頂層模塊。其中數據發送模塊為并行輸入串行輸出模塊,在時鐘的上升沿發送一位數據,共需要 8 個時鐘脈沖即可發送完一字節數據。數據接收模塊為串行輸入并行輸出模塊,串行輸入的數據來自數據發送模塊,在時鐘的上升沿接收數據,即由“自己發送的數據自己同步接收”來模擬主從器件間數據的全雙工傳輸。數碼管顯示模塊則是循環顯示 08 數字,每循環一次代

12、表傳輸完一字節。以下是頂層模塊 VHDL 源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity spi isport(clk,stop,load: in std_logic; data_in: std_logic_vector(7 downto 0 ); deng_out : out std_logic_vector(7 downto 0 );shuma_out :out std_logic_vector(6 downto 0 );end spi;architecture one

13、of spi iscomponent sdiport(clk_sdi : in std_logic; sdi_in : in std_logic; load : in std_logic; shuma:out integer range 0 to 8; sdi_out : out std_logic_vector(7 downto 0 );end component;component sdoport(clk_sdo,load : in std_logic; sdo_in : in std_logic_vector(7 downto 0); sdo_out : out std_logic);e

14、nd component;component SHUMGport(num:in INTEGER RANGE 0 TO 8;dout:out std_logic_vector(6 downto 0);end component;component fenpinport(clk,stop:in std_logic;clok:out std_logic); end component;signal A,B : std_logic;signal C : INTEGER range 0 to 8;beginu1:sdi port map(sdi_out=deng_out,clk_sdi=A,sdi_in

15、=B,shuma=C,load=load);u2:sdo port map(sdo_out=B,sdo_in=data_in,load=load,clk_sdo=A);u3:SHUMG port map(dout=shuma_out,num=C);u4:fenpin port map(clk=clk,stop=stop,clok=A); end one ;綜合后為:3.2 波特率發生器模塊波特率發生器模塊由于 SPI 同步串行通訊的缺點是波特率不高,通常常用的 SPI 波特率有2400,4800,9600,19200 等比較低的波特率,晶振的頻率一般都比較高,需要分頻后才能供給 SPI 使用。

16、假設采用 6MHZ 的晶振作為外部時鐘,那么要產生 9600 波特率的時鐘信號,則需要對 6MHZ 的時鐘進行 625 分頻。除此之外,為了提高接收電路接收數據的準確度,采取“過采樣法”對發送來的同一個數據進行多次采樣,這里對數據進行三次采樣取平均值。輸入 6 MHz 的時鐘 ,經過計數分頻后得到 9 6 0 0 Hz 的接收時鐘信號和脈沖出現的頻率是波特率的 3 倍的采樣時鐘信號。下面是實現該功能的 VHDL 程序:library ieee; use ieee.std_logic_1164.all; entity fenpin is port(clk,stop:in std_logic;cl

17、ok,clk3:out std_logic); end fenpin;architecture one of fenpin is beginprocess(clk)variable counter:integer range 0 to 625; beginif stop = 1 thenif clkevent and clk=1thenif counter=625 then counter:=0;clok=1;else counter:=counter+1;clok=0;end if;end if;if(counter=106 or counter=313 or counter=520)the

18、n clk3=1;else clk3=0;end if;end if;end process;end one; 其中,c l k 為 6 MHz 的時鐘;c l o k 為 9 6 0 0 Hz 的接收時鐘;c l k3 為脈沖出現的頻率是波特率的 3 倍的采樣時鐘。3.3 SDO 數據發送模塊數據發送模塊發送電路是在時序脈沖的控制下,利用移位寄存器并行輸入串行輸出的把數據一位一位的送出去。VHDL 源程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sdo isport(c

19、lk_sdo,load : in std_logic; sdo_in : in std_logic_vector(7 downto 0); sdo_out : out std_logic);end sdo;architecture one of sdo issignal buff : std_logic_vector(7 downto 0);beginprocess(clk_sdo)beginif clk_sdoevent and clk_sdo = 1 thenif load = 1 thenbuff=sdo_in;else buff(7 downto 1) = buff(6 downto

20、0);end if;end if;sdo_out = buff (7);end process;end one ;其中,sdo_in : in std_logic_vector(7 downto 0); 為并行輸入端 口 8 位數據,clk_sdo 為輸入端口發送時鐘;sdo_out : out std_logic 為輸出串行端口;當 load=1 ,則把待發送的數據送入數據緩沖區 BUFF,然后根據時鐘的上升沿的到來把數據一位一位的從緩沖器送給串行輸出。如圖所示,第一次裝載待發送數據 10101010,第二次裝載待發送數據 01010101 于緩沖區,共 2 字節數據,從仿真圖上可以看到,串

21、行輸出分貝輸出了 2 字節數據:10101010,和 01010101 3.4 SDI 數據接收模塊數據接收模塊接收電路的功能是在時鐘控制下,采樣串行輸 入端口上的數據,執行采樣判斷, 檢測幀同步標志, 把后續數據依次送達對應的并行輸出端口上。下面 是實現上述功能的 VHDL 源程序: library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sdi isport(clk_sdi : in std_logic; sdi_in : in std_logic; shuma:out integer

22、range 0 to 8; sdi_out : out std_logic_vector(7 downto 0 );end sdi;architecture one of sdi issignal buff : std_logic_vector(7 downto 0);beginprocess(clk_sdi)variable cout : integer range 0 to 8 ;beginif clk_sdievent and clk_sdi = 1 thenif cout=8 then cout:=0;sdi_out=buff;else buff(7-cout)=sdi_in;cout

23、 := cout + 1 ; end if;end if;shuma = cout;end process;end one ;數據一位一位的接收,接收一位就把它存放于接收緩沖寄存器,等待緩沖器滿后就并行輸出數據由程序讀取。如仿真圖所示,串行傳來的兩字節數據 10101010 和 01010101,數碼管循環顯示從 08,當顯示 8 時代表緩沖器滿,并串行輸出數據,SDI_OUT 為串行輸出的數據。3.5 數碼管顯示模塊數碼管顯示模塊library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std

24、_logic_unsigned.all;entity SHUMG is port(num:in INTEGER RANGE 0 TO 8;dout:out std_logic_vector(6 downto 0);end SHUMG;architecture a1 of SHUMG isbeginwith num selectdout=1111110 when 0, 0110000 when 1, 1101101 when 2, 1111001 when 3, 0110011 when 4, 1011011 when 5, 1011111 when 6, 1110000 when 7, 111

25、1111 when 8, 0000000 when others;end a1;數碼管顯示模塊用來方便表示出數據傳輸的過程,從 08 循環顯示,8 代表數據傳輸完畢準備傳送或接收下一字節數據。4實驗驗證實驗驗證4.1 實驗驗證方案選擇實驗驗證方案選擇由于要在 DE2 板上驗證 SPI 有一定難度。我們的方案一我們的方案一就是利用串口調試助手,PC 機作為從器件,目標板做為主器件進行 SPI 通訊。我們的方案二我們的方案二是完全在 DE2 板上模擬主從同步串行通訊,但是由于考慮到 DE2 板上可以用的驗證設備(開關和 LED 燈)不夠,所以我們決定在 DE2 版上對所設計的 SPI 模塊進行調整

26、,自己發送的數據自己接收,模擬實現了主從之間通過不串行通訊。在這里我們采用的是方案 2,優點是易于實現。我們把 SDO 發送數據模塊直接接到了 SDI數據接收模塊,因此我們只要驗證:通過發送以自己數據,待 8 個時序脈沖后數據發送完的同時也被接收,則說明我們的思路正確。4.2 實驗現象實驗現象說明:開關 SW8 代表 LOAD 數據裝載。 開關 SW9 代表時鐘時能SW0SW7 作為發送數據的數據緩沖器,即發送模塊數據輸入端,存待發送的數據。 LED0LED7 讀取數據接收模塊的數據接收狀態。 數碼管循環顯示 08.當我們撥動開關,準備好待發送數據時,先 LOAD 把數據送入緩沖區,然后使時鐘時能,這是開始發送和接收數據同步。數碼管從 08 顯示,當數碼管顯示 8 時,燈的狀態與開關的狀態相對應,燈亮代表數據位 1,燈滅為

溫馨提示

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

評論

0/150

提交評論