歡迎您光臨本站 登入註冊首頁

概述

   非同步串列通信要求的傳輸線少,可靠性高,傳輸距離遠,被廣泛應用於微機和外設的數據交換。實現串口通信主要需要完成兩部分工作:將串口電平轉換為設備電路板的工作電平,即實……

    非同步串列通信要求的傳輸線少,可靠性高,傳輸距離遠,被廣泛應用於微機和外設的數據交換。實現串口通信主要需要完成兩部分工作:

  1. 將串口電平轉換為設備電路板的工作電平,即實現RS-232電平和TTL/CMOS電平的轉換;
  2. 接收並且檢驗串列的數據,將數據變成并行的並提供給處理器處理。

    實現RS-232電平和TTL/CMOS電平轉換可以用介面晶元來實現,實現數據的串列到并行轉換用的是UART,它們是實現串列通信必不可少的兩個部分。雖然目前大部分處理器晶元中都集成了UART,但是一般FPGA晶元卻沒有這個特點,所以使用FPGA作為處理器可以有兩個選擇,第一個選擇是使用UART晶元進行串並轉換,第二個選擇是在FPGA內部實現UART功能。但所有的UART晶元都存在引腳較多、體積較大、與其他器件的介面較為複雜等缺點,從而會使設計的成本和難度增加。因此可以將需要的UART功能集成到FPGA內部,而利用VHDL語言將UART的核心功能集成,不僅解決傳統晶元的缺點,也使整個設計更加緊湊、穩定且可靠。

1、UART實現原理
    UART主要有UART內核、信號監測器、移位寄存器、波特率發生器、計數器、匯流排選擇器和奇偶校驗器總共7個模塊組成,如圖一所示。
 
UART各個模塊的功能如下:
(1)UART內核模塊
    UART內核模塊是整個設計的核心。在數據接收時,UART內核模塊負責控制波特率發生器和移位寄存器,使得移位寄存器在波特率始終的驅動下同步的接收並且保存RS-232接收埠上的串列數據。在數據發送時,UART內核模塊首先根據待發送的數據和奇偶校驗位的設置產生完整的發送序列(包括起始位、數據位、奇偶校驗位和停止位),之後控制移位寄存器將序列加在到移位寄存器的內部寄存器里,最後再控制波特率發生器驅動移位寄存器將數據串列輸出。
(2)信號監督器模塊
    信號檢測器用於對RS-232的輸入信號進行實時檢測,一旦發現新的數據則立即通知UART內核。
(3)移位寄存器模塊
    移位寄存器的作用是存儲輸入或者輸出的數據。當UART接受RS-232輸入時,移位寄存器在波特率模式下採集RS-232輸入信號,並且保存結果;當UART進行RS-232輸出時,UART內核首先將數據載入到移位寄存器內,再使移位寄存器在波特率模式下將數據輸出到RS-232輸出埠上。
(4)波特率發生器模塊
    由於RS-232傳輸必定是工作在某種波特率下,比如9600,為了便於和RS-232匯流排進行同步,需要產生符合RS-232傳輸波特率的時鐘,這就是波特率發生器的功能。
(5)奇偶檢驗器模塊
    奇偶校驗器模塊是根據奇偶校驗的設置和輸入數據計算出相應的奇偶校驗位,它是通過純組合邏輯實現的。
(6)匯流排選擇模塊
    匯流排選擇模塊用於選擇奇偶校驗器的輸入是數據發送匯流排還是數據接收匯流排。在接收數據時,匯流排選擇模塊將數據接收匯流排連接到奇偶校驗器的輸入端,來檢查已接收數據的奇偶校驗位是否正確;而在發送數據時,匯流排選擇模塊將數據發送匯流排連接到奇偶檢驗器的輸入端,UART內核模塊就能夠獲取並且保存待發送序列所需的奇偶校驗位了。
(7)計數器模塊
    計數器模塊的功能是記錄串列數據發送或者接收的數目,在計數到某數值時通知UART內核模塊。

2、UART工作流程
    UART的工作流程可以分為接收過程和發送過程兩部分。
    接收過程指的是UART監測到RS-232匯流排上的數據,順序讀取串列數據並且將其輸出給CPU的過程。當信號監測器監測到新的數據(RS-232輸入邏輯變為0,即RS-232傳輸協議的起始位)就會觸發接收過程,其流程圖如圖二所示。首先UART內核會重置波特率發生器和移位寄存器,並且設置移位寄存器的工作模式為波特率模式,以準備接收數據。其次,移位寄存器在波特率始終的驅動下工作,不斷讀取RS-232串列匯流排的輸入數據,並且將數據保存在內部的寄存器內。接收完成後,UART內核會對已接收的數據進行奇偶檢驗並且輸出校驗結果。最後,UART內核會重置信號監測器,以準備進行下一次數據接收。
 
    發送過程由載入和發送兩個步驟組成,如圖三所示。載入步驟是UART內核按RS-232串列發送的順序將起始位、數據位、奇偶校驗位和停止位載入到移位寄存器內,這個過程工作在系統時鐘下,相對於RS-232的傳輸速度來說非常快。完成載入步驟后,UART內核會重置波特率發生器,並且設置移位寄存器工作在波特率模式下,於是移位寄存器便在波特率時鐘的驅動下依次將載入的數據發送到RS-232的發送端TxD,這樣便產生了RS-232的數據發送時序。
 

3、UART各個模塊的實現
    除UART內核模塊以外,其他模塊都較為簡單,用於實現某一具體功能。現在重點對UART內核模塊的實現做出介紹。
    UART內核模塊的功能是控制數據接收、數據載入和數據發送的過程,這可以用狀態機來實現。下面就按接收和發送的過程來介紹UART內核模塊狀態機的實現。
(1)數據接收過程
    數據接收過程的流程圖如圖二所示,可以定義3個狀態——空閑、接收和接收完成,其中狀態變換圖如圖四所示。
 
(2)數據載入和發送過程
    數據載入和發送過程都是為了發送數據而設定的,所以將它們放在一起進行介紹。可以用4個狀態來實現上述的過程,即空閑、載入、發送和發送完成,其中的空閑狀態就是UART內核複位后的空閑狀態,和上面介紹的數據接收過程的空閑狀態一致。數據載入和發送過程的狀態轉換圖如圖五所示。
 

4、模擬結果
    在波特率為9600情況下對UART進行模擬,結果穩定可靠。該設計具有很好的可讀性和靈活性,具有很好的參考價值。


[admin via 研發互助社區 ] 基於FPGA的UART控制器的多模塊設計與實現已經有2917次圍觀

http://cocdig.com/docs/show-post-43101.html