国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于FPGA 的UART 串行通信參數(shù)自適應設計與實現(xiàn)

2021-08-20 10:28錢祥利
電子設計工程 2021年16期
關鍵詞:數(shù)據(jù)位波特率數(shù)據(jù)格式

楊 洋,和 蕾,王 旭,錢祥利,陳 飛,李 靜

(山東管理學院智能工程學院,山東濟南 250357)

通用異步收發(fā)傳輸(Universal Asynchronous Rece iver/Transmitter,UART)遵循串行通信協(xié)議標準[1],以其通信線路簡單、信息傳輸穩(wěn)定等特點,被廣泛應用于各種微處理器與嵌入式系統(tǒng),并作為標準外設之一。

1 通信參數(shù)自動配置設計方案

UART 采用異步全雙工通信模式,由于沒有專用時鐘信息線,因此數(shù)據(jù)發(fā)送方與接收方必須采用相同的傳輸速率,稱之為波特率,常用波特率有4 800 bps、9600 bps、19200bps、38 400bps、43000 bps、56 000 bps、57 600 bps、115 200 bps 等。UART 數(shù)據(jù)傳輸鏈路以數(shù)據(jù)幀為基本單元,如圖1 所示,一幀數(shù)據(jù)包括起始位、數(shù)據(jù)位、校驗位與停止位,其中數(shù)據(jù)位長度為5~8 bit,校驗模式可選奇校驗或偶校驗,并可以選擇是否采用校驗位,停止位長度可選1 bit、1.5 bit、2 bit,采用何種數(shù)據(jù)格式將視當前UART 鏈路傳輸要求而定。

圖1 UART串行異步通信數(shù)據(jù)格式

UART 通信鏈路的建立要求發(fā)送設備與接收設備具有一致的波特率與數(shù)據(jù)格式,否則會導致通信失敗。為了使接收設備能夠適應來自各種不同波特率發(fā)送設備的通信鏈路,而無需事先建立波特率,很多MCU 或嵌入式處理器在硬件或軟件層面集成了自動波特率檢測功能[2-4],能夠自動檢測到主設備的波特率并進行配置,達到自適應的目的。但是傳統(tǒng)的方法僅局限于波特率的自適應檢測,尚不能對數(shù)據(jù)格式進行自動配置,當串行通信鏈路數(shù)據(jù)格式變更時,就無法自動建立通信鏈路。為了改變現(xiàn)有技術存在的弊端,使UART 串行通信自適應的方法擁有更強的實用性,文中提出了串行通信參數(shù)自適應的概念,介紹了一種可靠的實現(xiàn)串行通信波特率、數(shù)據(jù)格式自動配置的方法,并基于Xilinx Artix-7 FPGA實現(xiàn)了UART 接口的模塊化設計與仿真驗證。

UART 串行通信參數(shù)自動配置在數(shù)據(jù)鏈路層進行,新的傳輸鏈路發(fā)起或者改變當前波特率、數(shù)據(jù)格式時,將進行通信參數(shù)的自適應配置。通信參數(shù)自適應采用特征值匹配的方法,包括參數(shù)配置字的發(fā)送、接收以及參數(shù)自適應與配置。如圖2 所示,配置字的固定長度為10 位,從功能上劃分為字頭波特率同步碼與數(shù)據(jù)格式配置碼。從機首先接收并檢測波特率同步碼,得到串行通信波特率,并以此波特率接收配置字節(jié)的數(shù)據(jù)格式配置碼,并將其寫入?yún)?shù)配置寄存器(SERIAL_CONFIG),完成通信參數(shù)的自動配置,建立串行通信的連接。

圖2 串行通信配置字節(jié)格式以及接收模式

1.1 波特率自適應檢測

傳統(tǒng)的自動波特率檢測方法主要有兩種:最小數(shù)法與固定數(shù)據(jù)傳輸法[5-6],最小數(shù)法是通過不斷檢測最小的脈沖寬度并與數(shù)據(jù)位脈寬比較,得到串行通信波特率值;固定數(shù)據(jù)傳輸法是通過發(fā)送特定配置數(shù)據(jù)來實現(xiàn)波特率信息的傳輸。第一種方法的缺點是波特率的識別與判定非常依賴于發(fā)送數(shù)據(jù)的內(nèi)容,需要不斷重復檢測,檢測效率低、握手時間慢??紤]到該設計不僅要完成波特率自適應檢測,還需要進行數(shù)據(jù)格式的自動配置,所以將波特率與數(shù)據(jù)格式捆綁為參數(shù)特征值,采用固定參數(shù)數(shù)據(jù)傳輸?shù)姆椒ā?/p>

為高效、快速地實現(xiàn)波特率檢測,對傳統(tǒng)的固定數(shù)據(jù)傳輸法進行改進,采用特征值匹配法[7]與查表法[8]相結合的方式。如圖2 所示,配置字節(jié)中前3 位設定為波特率同步碼,將其作為波特率檢測的特征值,接收機利用邊沿檢測電路捕獲特征值,并通過時鐘計數(shù)器測量邊沿時間,完成對波特率同步碼的時間測量[9]。為消除邊沿檢測有可能引發(fā)的亞穩(wěn)態(tài),采用兩級D 觸發(fā)器進行邊沿檢測[10]。時鐘計數(shù)區(qū)間包含2 bit 脈沖寬度,采用100 MHz 的系統(tǒng)時鐘作為時鐘激勵,其頻率遠大于波特率。通過計算可得,通信采用115 200 bps 的波特率時,時鐘計數(shù)的時間測量誤差比小于0.12%,因此,能夠保證很高的時間測量精度。波特率的理論計算公式為:

由于標準波特率在有限的幾個固定數(shù)值之間變化,同時為了減小FPGA 運算資源的開銷,可采用查表法得到鏈路波特率。時鐘計數(shù)范圍與對應波特率的對照表如表1 所示,由此得到串行通信的波特率。然后將對應的波特率配置碼暫存到通信參數(shù)配置寄存器SERIAL_CONFIG 的低4 位,供串行通信接收、發(fā)送模塊讀取調用。

表1 波特率、時鐘計數(shù)范圍與參數(shù)配置寄存器SERIAL_CONFIG低4位配置碼對照表

1.2 通信數(shù)據(jù)格式的自動配置

圖3 為邊沿檢測、時鐘計數(shù)與數(shù)據(jù)格式配置碼接收采樣信號的時序關系,在得到當前通信鏈路的波特率后,通過波特率發(fā)生器模塊(Baud Rate Generator)生成波特率采樣時鐘信號[11],完成配置字節(jié)中數(shù)據(jù)格式配置碼(2~7 bit)的接收,此時配置字節(jié)的1 bit 起到“偽起始位”的作用,為配置碼接收提供一個波特率位的時間緩沖。波特率發(fā)生器是通過對系統(tǒng)時鐘(100 MHz)分頻得到波特率采樣時鐘信號,分頻因子[12]作為時鐘計數(shù)寄存器的向上溢出值,其計算方法如下:

圖3 串行通信配置字節(jié)接收過程時序關系

數(shù)據(jù)接收采樣設定在1/2 的分頻因子位置,即在波特率信號周期的中間位置,這樣能夠提高串行通信對波特率誤差的容忍范圍[13-14]。

如表2 所示,數(shù)據(jù)格式配置碼接收完畢后暫存到SERIAL_CONFIG 的4~9 位。該寄存器能夠被參數(shù)接收模塊、數(shù)據(jù)收發(fā)模塊訪問,參數(shù)接收模塊對其具有寫入權限,數(shù)據(jù)收發(fā)模塊對其具有讀取權限。

表2 串行通信數(shù)據(jù)格式對在參數(shù)配置寄存器中的配置碼

2 UART模塊的設計與實現(xiàn)

為實現(xiàn)通信參數(shù)自適應的UART 通信方案,基于Xilinx Artix-7 系列FPGA 與Vivado 開發(fā)平臺[15],利用Verilog HDL 硬件描述語言,從邏輯電路層面實現(xiàn)了設計。整體設計從功能可劃分為4 個模塊單元:TX module(發(fā)送模塊)、Baud Rate Generator(波特率產(chǎn)生器)、Parameters RX(參數(shù)接收模塊)與Data RX(數(shù)據(jù)接收模塊)。基于FPGA 的串行通信功能模塊結構如圖4 所示。

圖4 基于FPGA的串行通信功能模塊結構

2.1 數(shù)據(jù)發(fā)送模塊

在串行通信參數(shù)配置完畢后,發(fā)送模塊便可對通信參數(shù)寄存器進行讀取。如圖4 所示,發(fā)送控制器是發(fā)送模塊的控制核心,在數(shù)據(jù)發(fā)送鏈路建立之初,讀取寄存器中波特率信息、數(shù)據(jù)格式信息。發(fā)送控制器的主要作用還包括:

1)將波特率時鐘轉化為發(fā)送狀態(tài)時序。在該時序的控制下,數(shù)據(jù)字節(jié)的各位將按照波特率時鐘頻率發(fā)送至TX 總線,無數(shù)據(jù)傳輸時保持高電平。

2)根據(jù)數(shù)據(jù)格式控制發(fā)送內(nèi)容,包括數(shù)據(jù)位長、停止位長、有無校驗位,如果存在校驗位,將根據(jù)校驗模式添加奇或偶校驗位。通過控制移位寄存器,實現(xiàn)發(fā)送數(shù)據(jù)的并串轉換。

2.2 配置參數(shù)與數(shù)據(jù)接收

接收模塊在波特率采樣時鐘激勵下進行配置參數(shù)與數(shù)據(jù)的接收,可進一步分為參數(shù)接收模塊與數(shù)據(jù)接收模塊。配置參數(shù)的接收優(yōu)先于數(shù)據(jù)接收。接收控制器作為接收模塊的控制核心,其主要作用有3個方面:

1)控制波特率檢測、配置參數(shù)接收和數(shù)據(jù)接收(或發(fā)送)的優(yōu)先級劃分,其中波特率檢測具有最高的優(yōu)先級,數(shù)據(jù)收發(fā)具有最低的優(yōu)先級。

2)對RX 進行持續(xù)邊沿檢測,確定發(fā)送起始位的到來,并將波特率時鐘轉化為接收狀態(tài)轉化時序。

3)控制接收移位寄存器,對接收數(shù)據(jù)進行采樣,實現(xiàn)接收數(shù)據(jù)的串并轉化。按照數(shù)據(jù)格式,控制接收的數(shù)據(jù)及數(shù)據(jù)長度和校驗。

接收控制器對接收優(yōu)先級的控制是通過有限狀態(tài)機[16]來實現(xiàn)的,配置參數(shù)寄存器的高2 位用于標識串行通信參數(shù)的接收情況(波特率、數(shù)據(jù)格式)。如圖5 所示,當檢測到信號下降沿,如果通信參數(shù)配置完畢,接收狀態(tài)機進入左側的配置參數(shù)接收狀態(tài)支路,否則進入配置參數(shù)接收支路。

圖5 配置參數(shù)與數(shù)據(jù)接收的有限狀態(tài)機

配置參數(shù)接收狀態(tài)包括空閑狀態(tài)、時鐘計數(shù)狀態(tài)、配置碼接收狀態(tài)、停止位;數(shù)據(jù)接收狀態(tài)機與配置參數(shù)接收狀態(tài)機共用空閑與停止位接收狀態(tài),其還包括數(shù)據(jù)位接收、奇偶校驗。在接收數(shù)據(jù)位時,在接收控制器的作用下,根據(jù)數(shù)據(jù)位長度及已經(jīng)接收到的數(shù)據(jù)位,選擇是否跳轉到下一個狀態(tài),并根據(jù)SERIAL_CONFIG 的第6 位確定下一個狀態(tài)為校驗狀態(tài)還是停止狀態(tài)。如果為校驗狀態(tài),則根據(jù)SERIAL_CONFIG 的第7 位來確定校驗模式并進行奇(或偶)偶校驗。最后,完成數(shù)據(jù)的存儲,并且給出數(shù)據(jù)是否成功接收或者校驗錯誤標識碼。

3 仿真驗證與測試結果

3.1 UART功能仿真

基于Vivado 仿真平臺進行串行通信參數(shù)自適應的功能仿真,主要分兩個部分:串行通信參數(shù)的接收、數(shù)據(jù)的收發(fā)。

1)串行通信參數(shù)的接收

波特率檢測以及配置參數(shù)的接收仿真如圖6所示,仿真波特率為38 400 bps,通信數(shù)據(jù)格式為8 bit 數(shù)據(jù)位、奇校驗、1 bit 停止位,配置碼為8b0001_1101。

圖6 波特率檢測以及串行通信參數(shù)接收功能仿真

當接收模塊檢測到信號下降沿到來時,并且配置參數(shù)寄存器的高2 位為“00”,則進入配置碼接收狀態(tài),在接收控制器的作用下,參數(shù)接收狀態(tài)機變量(rx_config_status)由“0”(空閑)變?yōu)椤?”,進行時鐘計數(shù),計數(shù)大小為5 208。通過查找表得到波特率為38 400 bps,將其存儲碼(“0111”)寫入配置參數(shù)寄存器(SERIAL_CONFIG)的低4 位。

為實現(xiàn)數(shù)據(jù)格式配置碼的接收,波特率產(chǎn)生器生成38 400 bps 的采樣時鐘baud_clk,接收狀態(tài)由“1”跳轉到“2”(接收配置碼),利用采樣時鐘對2~6 bit 進行中間采樣,接收配置碼為“111000”,將其存儲于配置參數(shù)寄存器中,同時將寄存器的最高位置1,標識串行通信參數(shù)接收完畢。

2)數(shù)據(jù)的收發(fā)

如圖7(a)所示,仿真模擬主機發(fā)送16 進制數(shù)據(jù)0x55,當信號下降沿到來時,接收模塊首先檢測SERIAL_CONFIG 的最高位,如果串行通信參數(shù)已經(jīng)配置完畢,則進入數(shù)據(jù)接收狀態(tài)機。

圖7 串行通信數(shù)據(jù)收發(fā)功能仿真

接收狀態(tài)機寄存器變量rx_state 表示空閑狀態(tài)(0)、起始位(1)、數(shù)據(jù)位(2)、校驗位(3)、停止位(4)5 個接收狀態(tài),并在接收控制器的作用下進行狀態(tài)的跳轉。波特率產(chǎn)生器生成38 400 bps 對應的采樣時鐘信號baud_clk,進行數(shù)據(jù)的中間采樣接收,最終完成數(shù)據(jù)0x55 的成功接收,并進行奇校驗,且校驗無誤。

圖7(b)為發(fā)送模塊功能仿真,當發(fā)送模塊接收到發(fā)送指令信號tx_data_tvalid,對寄存器變量數(shù)據(jù)tx_data進行并串轉換,輸送至uart_tx 信號線,并由發(fā)送控制器計算得到奇校驗碼,添加至數(shù)據(jù)位尾部一并發(fā)送。

3.2 UART模塊測試與綜合結果分析

為進一步驗證UART自適應串行參數(shù)配置接口的可靠性與穩(wěn)定性,將Artix-7FPGA開發(fā)板與PC進行聯(lián)機測試。PC 作為主機,集成了參數(shù)自適應功能的FPGA 開發(fā)板作為從機,在PC端利用串口調試助手發(fā)送配置參數(shù),建立串行通信鏈路,進行數(shù)據(jù)收發(fā)測試。

該測試采用中、低、高3 個波特率:9 600 bps、1 200 bps、115 200 bps,分別進行測試,每個波特率分別采用奇校驗、偶校驗、無校驗3 種校驗模式,數(shù)據(jù)位分別采用5~8 bit、停止位采用1~2 bit 長度,進行多組測試。測試結果表明FPGA 端的自適應串行參數(shù)接口能夠準確的獲取串行通信參數(shù),并能夠建立穩(wěn)定的通信鏈接。

4 結束語

文中基于FPGA實現(xiàn)通用異步串行通信的參數(shù)自動配置方法,利用特征值匹配與查表法相結合的方式,成功實現(xiàn)了波特率與數(shù)據(jù)格式的自適應檢測以及自動配置?;赬ilinx Artix-7 系列FPGA,利用Verilog 硬件描述語言實現(xiàn)了該方案的UART接口的硬件電路設計。仿真與測試表明,該方法能夠快速、穩(wěn)定地建立串行通信鏈路。整體設計具有很高的完整性和穩(wěn)定性。

這種方法突破了傳統(tǒng)的波特率自適應方法,不僅可以實現(xiàn)波特率的自適應,同時能夠實現(xiàn)串行通信參數(shù)中數(shù)據(jù)格式的自動配置,對通用串行通信的應用方法進行了補充與完善,具有很高的實用意義。

猜你喜歡
數(shù)據(jù)位波特率數(shù)據(jù)格式
A320飛機大氣數(shù)據(jù)的采集和計算在排故中的應用
CAN 總線波特率自適應程序設計
基于水利標準數(shù)據(jù)格式的BIM數(shù)據(jù)管理和水利BIM生態(tài)探索
微弱GPS信號避開比特跳變的捕獲算法
一種適用于FPGA系統(tǒng)中的變速箱電路設計
世界首個可記錄物體內(nèi)部結構等復雜信息的3D打印數(shù)據(jù)格式問世
減少調度自動化設備通訊串口丟包率的措施
論子函數(shù)在C語言數(shù)據(jù)格式輸出中的應用
基于ArcGIS的規(guī)劃數(shù)據(jù)格式轉換研究
C*Core芯片SCI串口波特率容限優(yōu)化