0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

采用FPGA芯片實現(xiàn)UART功能模塊的設計

電子設計 ? 來源:郭婷 ? 作者:電子設計 ? 2019-01-15 09:01 ? 次閱讀

引言

通用異步收發(fā)器(Universal Asynchronous Receiver/Transmitter,UART)可以和各種標準串行接口,如RS 232和RS 485等進行全雙工異步通信,具有傳輸距離遠、成本低、可靠性高等優(yōu)點。一般UART由專用芯片如8250,16450來實現(xiàn),但專用芯片引腳都較多,內(nèi)含許多輔助功能,在實際使用時往往只需要用到UART的基本功能,使用專用芯片會造成資源浪費和成本提高。

一般而言UART和外界通信只需要兩條信號線RXD和TXD,其中RXD是UART的接收端,TXD是UART的發(fā)送端,接收與發(fā)送是全雙工形式。由于可編程邏輯器件技術的快速發(fā)展,FPGA的功能日益強大,其開發(fā)周期短、可重復編程的優(yōu)點也越來越明顯,在FPGA芯片上集成UART功能模塊并和其他模塊組合可以很方便地實現(xiàn)一個能與其他設備進行串行通信的片上系統(tǒng)。

1 UART功能設計

1.1 UART的工作原理

異步通信時,UART發(fā)送/接收數(shù)據(jù)的傳輸格式如圖1所示,一個字符單位由開始位、數(shù)據(jù)位、停止位組成。

采用FPGA芯片實現(xiàn)UART功能模塊的設計

異步通信的一幀傳輸經(jīng)歷以下步驟:

(1)無傳輸。發(fā)送方連續(xù)發(fā)送信號,處于信息“1”狀態(tài)。

(2)起始傳輸。發(fā)送方在任何時刻將傳號變成空號,即“1”跳變到“O”,并持續(xù)1位時間表明發(fā)送方開始傳輸數(shù)據(jù)。而同時,接收方收到空號后,開始與發(fā)送方同步,并期望收到隨后的數(shù)據(jù)。

(3)奇偶傳輸。數(shù)據(jù)傳輸之后是可供選擇的奇偶位發(fā)送或接收。

(4)停止傳輸。最后是發(fā)送或接收的停止位,其狀態(tài)恒為“1”。

發(fā)送或接收一個完整的字節(jié)信息,首先是一個作為起始位的邏輯“0”位,接著是8個數(shù)據(jù)位,然后是停止位邏輯“1”位,數(shù)據(jù)線空閑時為高或“1”狀態(tài)。起始位和停止位的作用是使接收器能把局部時鐘與每個新開始接收的字符再同步。異步通信沒有可參照的時鐘信號,發(fā)送器可以隨時發(fā)送數(shù)據(jù),任何時刻串行數(shù)據(jù)到來時,接收器必須準確地發(fā)現(xiàn)起始位下降沿的出現(xiàn)時間,從而正確采樣數(shù)據(jù)。

設計時可參考由專用芯片實現(xiàn)的UART的功能并進行一定精簡,如可以用FPGA的片內(nèi)RAM替代UART的FIFO,不用單獨在UART模塊中實現(xiàn)。設計的基本原則是保留最主要的功能,基于FPGA的UART系統(tǒng)由波特率時鐘發(fā)生器、接收器和發(fā)送器3個子模塊組成,如圖2所示。

采用FPGA芯片實現(xiàn)UART功能模塊的設計

1.2 接收器設計

比較而言,UART發(fā)送器的設計相對容易,只要每隔一個發(fā)送周期并按照數(shù)據(jù)幀格式輸出數(shù)據(jù)即可,本文將對接收器的設計和實現(xiàn)做詳細說明,發(fā)送器的設計方法基本相同。

接收器的工作過程如下,在接收數(shù)據(jù)寄存器被讀出一幀數(shù)據(jù)或系統(tǒng)開始工作以后,接收進程被啟動。接收進程啟動之后,檢測起始位,檢測到有效起始位后,以約定波特率的時鐘開始接收數(shù)據(jù),根據(jù)數(shù)據(jù)位數(shù)的約定,計數(shù)器統(tǒng)計接收位數(shù)。一幀數(shù)據(jù)接收完畢之后,如果使用了奇偶校驗,則檢測校驗位,如無誤則接收停止位。停止位接收完畢后,將接收數(shù)據(jù)轉存到數(shù)據(jù)寄存器中。

為確保接收器可靠工作,在接收端開始接收數(shù)據(jù)位之前,處于搜索狀態(tài),這時接收端以16倍波特率的速率讀取線路狀態(tài),檢測線路上出現(xiàn)低電平的時刻。因為異步傳輸?shù)奶攸c是以起始位為基準同步的。然而,通信線上的噪音也極有可能使傳號“1”跳變到空號“0”。所以接收器以16倍的波特率對這種跳變進行檢測,直至在連續(xù)8個接收時鐘以后采樣值仍然是低電平,才認為是一個真正的起始位,而不是噪音引起的,其中若有一次采樣得到的為高電平則認為起始信號無效,返回初始狀態(tài)重新等待起始信號的到來。找到起始位以后,就開始接收數(shù)據(jù),最可靠的接收應該是接收時鐘的出現(xiàn)時刻正好對著數(shù)據(jù)位的中央。由于在起始位檢測時,已使時鐘對準了位中央,用16倍波特率的時鐘作為接收時鐘,就是為了確保在位寬的中心時間對接收的位序列進行可靠采樣,當采樣計數(shù)器計數(shù)結束后所有數(shù)據(jù)位都已經(jīng)輸入完成。最后對停止位的高電平進行檢測,若正確檢測到高電平,說明本幀的各位正確接收完畢,將數(shù)據(jù)轉存到數(shù)據(jù)寄存器中,否則出錯。

采用有限狀態(tài)機模型可以更清晰明確地描述接收器的功能,便于代碼實現(xiàn)。接收器的狀態(tài)轉換圖如圖3所示,為突出主要過程,圖中省略了奇偶校驗的情況。接收器狀態(tài)機由5個工作狀態(tài)組成,分別是空閑狀態(tài)、起始位確認、采樣數(shù)據(jù)位、停止位確認和數(shù)據(jù)正確,觸發(fā)狀態(tài)轉換的事件和在各個狀態(tài)執(zhí)行的動作見圖中的文字說明。

采用FPGA芯片實現(xiàn)UART功能模塊的設計

在狀態(tài)機模型的基礎上,使用VHDL來描述接收器功能,其主要代碼如下:

采用FPGA芯片實現(xiàn)UART功能模塊的設計

實現(xiàn)用16倍波特率時鐘確定起始位的具體方法是設計兩個輸入數(shù)據(jù)位寄存器rxd1和rxd2,使用語句“rxd1<=rxd;rxd2<=rxd1;”接收數(shù)據(jù)并進行判斷。當檢測到rxdl=O并且rxd2=1時可以確定下降沿發(fā)生,連續(xù)7個時鐘rxd2=0即確定檢測到起始位,之后為了確保在數(shù)據(jù)位中央接收數(shù)據(jù),同樣用16倍波特率時鐘對數(shù)據(jù)位進行采樣。接收數(shù)據(jù)的方法是設計一個寄存器rxd_buf(7 downto 0),用語句“rxd_buf(7)<=rxd2;rxd_buf(6 DOWNTO 0)<=rxd_buf(7 DOWNTO 1);”實現(xiàn)移位寄存器右移操作,執(zhí)行8次后接收到一個完整數(shù)據(jù)。

1.3 波特率發(fā)生器設計

波特率發(fā)生器實質(zhì)是設計一個分頻器,用于產(chǎn)生和RS 232通信同步的時鐘。在系統(tǒng)中用一個計數(shù)器來完成這個功能,分頻系數(shù)N決定了波特率的數(shù)值。該計數(shù)器一般工作在一個頻率較高的系統(tǒng)時鐘下,當計數(shù)到N/2時將輸出置為高電平,再計數(shù)到N/2的數(shù)值后將輸出置為低電平,如此反復即可得到占空比50%的波特率時鐘,具體的波特率依賴于所使用的系統(tǒng)時鐘頻率和N的大小。如系統(tǒng)時鐘頻率是40 MHz,要求波特率是9 600,則16倍波特率時鐘的周期約等于260個系統(tǒng)時鐘周期,則計數(shù)器取260/2=130時,當計數(shù)溢出時輸出電平取反就可以得到16倍約定波特率的時鐘。

使用VHDL來描述波特率發(fā)生器的完整代碼如下:

采用FPGA芯片實現(xiàn)UART功能模塊的設計

2 數(shù)據(jù)傳輸測試

隨著邏輯設計復雜性的不斷增加,僅依賴于軟件方式的仿真測試來了解系統(tǒng)的硬件功能有很多的局限性,應用QuartusⅡ集成開發(fā)環(huán)境中提供的SignalTapⅡ嵌入式邏輯分析儀,可以將測試信息隨設計文件下載于目標芯片中,用以捕獲目標芯片內(nèi)部系統(tǒng)信號節(jié)點處的信息或總線上的數(shù)據(jù)流,而又不影響原硬件系統(tǒng)的正常工作。測試信息通過器件的JTAG端口傳出,并送入計算機進行顯示和分析,這是一種高效的硬件測試手段,并很好地結合了傳統(tǒng)的系統(tǒng)測試方法。

本設計在Altera Cyclone系列的EPlC6Q240C8芯片上進行了驗證,使用QuarltusⅡ軟件將編譯好的.pof格式文件以AS模式下載到配置芯片EPCS1中。在計算機端運行串口調(diào)試助手軟件,將數(shù)據(jù)從計算機送出,并利用FPGA上的UART模塊進行接收,將發(fā)送數(shù)據(jù)與SignalTapⅡ獲取的波形進行對比,經(jīng)多次測試表明收發(fā)數(shù)據(jù)完全相同。

采用FPGA芯片實現(xiàn)UART功能模塊的設計

以其中一次的測試為例進行說明,從PC上輸入ASCII碼的“6”,設定波特率發(fā)生器時鐘作為SignalTapⅡ的采樣時鐘,采樣波形如圖4所示,其中“recstart”表示開始接收數(shù)據(jù)幀標志;“divl6”表示16倍波特率時鐘;“cnt_rxd”表示數(shù)據(jù)位采樣計數(shù)器,一次完整的采樣計數(shù)從Oh~9h共10次采樣(1個起始位,8個數(shù)據(jù)位,1個停止位);“rxd”表示串口的接收端;“rxd_buf”表示移位寄存器,當數(shù)據(jù)停止位確認后,移位寄存器輸出收到的數(shù)據(jù)“36h”,表明了該UART工作穩(wěn)定可靠。

應特別注意的是當利用SignalTapⅡ進行測試工作結束后,在生成最終產(chǎn)品前,應將SignalTapⅡ從芯片中除去,以免占用額外的資源,然后再重新編譯下載。全程編譯后報告消耗邏輯單元142個,只占芯片總資源的2%,沒有占用芯片的存儲單元和PLL單元,對于一個中大規(guī)模的FPGA芯片而言這是非常少的資源消耗。

3 結語

基于FPGA設計和實現(xiàn)UART,可以用片上很少的邏輯單元實現(xiàn)UART的基本功能。與傳統(tǒng)設計相比,能有效減少系統(tǒng)的PCB面積,降低系統(tǒng)的功耗,提高設計的穩(wěn)定性和可靠性,并可方便地進行系統(tǒng)升級和移植。

本設計具有較大的靈活性,通過調(diào)整波特率發(fā)生器的分頻參數(shù),就可以使其工作在不同的頻率。采用16倍波特率的采樣時鐘,可以實時有效探測數(shù)據(jù)的起始位,并可對數(shù)據(jù)位進行“對準”中央采樣,保證了所采樣數(shù)據(jù)的正確性。該模塊可以作為一個完整的IP核移植進各種FPGA中,在實際應用時可嵌入到其他系統(tǒng)中,很容易實現(xiàn)和遠端上位機的異步通信。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1621

    文章

    21511

    瀏覽量

    599070
  • 芯片
    +關注

    關注

    450

    文章

    49650

    瀏覽量

    417290
  • 收發(fā)器
    +關注

    關注

    10

    文章

    3339

    瀏覽量

    105553
收藏 人收藏

    評論

    相關推薦

    FPGA/CPLD設計UART

    。--- 串行外設用到RS232-C異步串行接口,一般采用專用的集成電路即UART實現(xiàn)。如8250、8251、NS16450等芯片都是常見的UART
    發(fā)表于 05-23 19:37

    用xilinx fpga實現(xiàn)一個非標準的SPI功能模塊

    有沒有西安的朋友愿意接個小項目,用xilinx fpga實現(xiàn)一個非標準的SPI功能模塊的,需要現(xiàn)場調(diào)試的,我們有硬件,需要您寫代碼和調(diào)試,有興趣的可以聯(lián)系我,419458768@qq.com
    發(fā)表于 10-24 10:21

    如何采用EDA或FPGA實現(xiàn)IP保護?

    隨著電路規(guī)模不斷擴大,以及競爭帶來的上市時間的壓力,越來越多的電路設計者開始利用設計良好的、經(jīng)反復驗證的電路功能模塊來加快設計進程。這些電路功能模塊被稱為IP
    發(fā)表于 09-03 07:44

    基于ASIC/SoC的UART核的設計

    基于ASIC/SoC的UART核的設計 摘要:本文描述了通用異步收發(fā)機UART(Universal Asynchronous Receive Transmitter)核的一種優(yōu)化設計實現(xiàn)的設計流程。通過
    發(fā)表于 06-19 09:55 ?26次下載

    SIMULINK功能模塊的處理

    SIMULINK功能模塊的處理功能模塊的基本操作,包括模塊的移動、復制、刪除、轉向、改變大小、模塊命名、顏色設定、參數(shù)設定、屬性設定、模塊
    發(fā)表于 06-19 12:50 ?2450次閱讀

    FPGA與CPLD實現(xiàn)UART

    UART 是廣泛使用的串行數(shù)據(jù)通訊電路。本設計包含UART 發(fā)送器、接收器和波特率發(fā)生器。設計應用EDA 技術,基于FPGA/CPLD 器件設計與實現(xiàn)
    發(fā)表于 12-17 00:15 ?57次下載
    <b class='flag-5'>FPGA</b>與CPLD<b class='flag-5'>實現(xiàn)</b><b class='flag-5'>UART</b>

    基于FPGA/CPLD的UART功能設計

    基于FPGA/CPLD的UART功能設計
    發(fā)表于 01-23 20:45 ?30次下載

    基于FPGA 的嵌入式系統(tǒng)程序開發(fā)實現(xiàn)對ARM 接口通信控制模塊、芯片驅(qū)動模塊的程序設計

    數(shù)字存儲示波器采用ARM 與FPGA 雙處理器結合的嵌入式系統(tǒng)設計方案,重點介紹在FPGA 中如何實現(xiàn)對外圍芯片的通信與驅(qū)動,
    發(fā)表于 11-18 05:47 ?2592次閱讀
    基于<b class='flag-5'>FPGA</b> 的嵌入式系統(tǒng)程序開發(fā)<b class='flag-5'>實現(xiàn)</b>對ARM 接口通信控制<b class='flag-5'>模塊</b>、<b class='flag-5'>芯片</b>驅(qū)動<b class='flag-5'>模塊</b>的程序設計

    基于FPGA異步串行通信接口模塊設計與實現(xiàn)

    在基于FPGA芯片的工程實踐中,經(jīng)常需要FPGA與上位機或其他處理器進行通信,為此設計了用于短距離通信的UART接口模塊。該
    發(fā)表于 11-18 11:33 ?5423次閱讀

    UART功能集成到FPGA內(nèi)部實現(xiàn)模塊的設計

    FPGA芯片卻沒有這個特點,所以使用FPGA作為處理器可以有兩個選擇,第一個選擇是使用UART芯片進行串并轉換,第二個選擇是在
    的頭像 發(fā)表于 10-18 07:54 ?2493次閱讀
    將<b class='flag-5'>UART</b><b class='flag-5'>功能</b>集成到<b class='flag-5'>FPGA</b>內(nèi)部<b class='flag-5'>實現(xiàn)</b>多<b class='flag-5'>模塊</b>的設計

    FPGA為基礎的UART模塊的詳細設計方案

      UART作為RS232協(xié)議的控制接口得到了廣泛的應用,將UART功能集成到FPGA芯片中,可使整個系統(tǒng)更為靈活、緊湊,減小整個電路的體
    發(fā)表于 07-07 15:51 ?12次下載
    以<b class='flag-5'>FPGA</b>為基礎的<b class='flag-5'>UART</b><b class='flag-5'>模塊</b>的詳細設計方案

    使用FPGA模塊化設計方法實現(xiàn)UART的設計論文

    UART作為RS232協(xié)議的控制接口得到了廣泛的應用,將UART功能集成到FPGA芯片中,可使整個系統(tǒng)更為靈活、緊湊,減小整個電路的體積,
    發(fā)表于 07-07 17:28 ?10次下載
    使用<b class='flag-5'>FPGA</b>和<b class='flag-5'>模塊</b>化設計方法<b class='flag-5'>實現(xiàn)</b><b class='flag-5'>UART</b>的設計論文

    一種基于FPGAUART電路的實現(xiàn)

    UART即通用異步收發(fā)器,傳統(tǒng)上采用功能的專用集成電路實現(xiàn)。但是在一般的使用中往往不需要完整的UART
    發(fā)表于 04-27 14:07 ?8次下載

    基于FPGAUART模塊設計與實現(xiàn)簡介

    基于FPGAUART模塊設計與實現(xiàn)介紹說明。
    發(fā)表于 06-01 09:43 ?20次下載

    QueueForMcu 基于單片機實現(xiàn)的隊列功能模塊

    QueueForMcu基于單片機實現(xiàn)的隊列功能模塊,主要用于8位、16位、32位非運行RTOS的單片機應用,兼容大多數(shù)單片機平臺。一、特性動態(tài)創(chuàng)建隊列對象動態(tài)設置隊列數(shù)據(jù)緩沖區(qū)靜態(tài)指定隊列元素
    發(fā)表于 12-31 19:35 ?1次下載
    QueueForMcu 基于單片機<b class='flag-5'>實現(xiàn)</b>的隊列<b class='flag-5'>功能模塊</b>