









摘" 要:在異步串行通信中,由于串行接口硬件設備的工作頻率限制,以及信號跳變引起的抖動、環境干擾等影響,采用傳統方法實現異步串行通信的通信接口無法可靠地完成高速率通信。文章采用VHDL語言,設計一種基于奈奎斯特的異步串行通信接口,包括數據接收、數據發送和2倍波特率的采樣時鐘三個模塊。ISE和ModelSim聯合仿真與實際工程的驗證表明,使用新方法設計的接口在5 Mbit/s的高速率下,系統可穩定、可靠地與外部設備進行數字通信。
關鍵詞:奈奎斯特采樣;FPGA;VHDL;異步串行通信
中圖分類號:TN911.72" 文獻標識碼:A" 文章編號:2096-4706(2024)09-0024-06
Design of FPGA Asynchronous Serial Communication Interface Based on Nyquist Sampling
CHEN Wei1,2, PU Hongping1,2, YANG Shiyong1,2, ZHANG Shuhui1,2
(1.School of Automation and Information Engineering, Sichuan University of Science amp; Engineering, Yibin" 644000, China; 2.Artificial Intelligence Key Laboratory of Sichuan Province, Yibin" 643000, China)
Abstract: In asynchronous serial communication, due to the frequency limitations of serial interface hardware devices, as well as the effects of signal jitter and environmental interference caused by signal jumps, communication interface that it uses traditional methods for implementing asynchronous serial communication cannot reliably complete high-speed communication. It uses VHDL language to design an asynchronous serial communication interface based on Nyquist, which includes three modules: data reception, data transmission, and a sampling clock with a 2x baud rate. The joint simulation of ISE and ModelSim and practical engineering verification show that the interface designed using the new method can make system digital communicate with external devices stably and reliably at a high speed of 5 Mbit/s.
Keywords: Nyquist sampling; FPGA; VHDL; asynchronous serial communication
0" 引" 言
在工業界中,數字通信是控制信息和傳遞數據的主要傳輸手段。然而,隨著現代電子工業的不斷發展,工業控制、工業測量等系統經常需要接入眾多的、不同種類的外部傳感設備,這就導致系統接口的復雜程度不斷提高。傳輸數據量的不斷增長,對通信方式也有著更高的需求。
通常,外接設備與系統的通信方式采用異步串口進行數據傳輸[1]。通用異步收發器(Universal Asynchronous Receiver Transmitter, UART)是一種遵循異步串行通信協議的串行通信接口,具有傳輸線少、可靠性高、成本低、易實現等特點[2,3],因此被廣泛地應用于農業、工業、軍事等眾多領域[4–6]。隨著外接設備的日益豐富,外設與系統的數據傳輸也需要更高速率。針對這一需求,異步串行通信的傳統方法常有:8倍、16倍、25倍波特率分頻器[7–9]。通過對系統時鐘進行分頻,根據分頻系數的奇偶性采用奇數分頻或偶數分頻,將分頻系數作為數據采樣時鐘的節拍,并在采樣時鐘中間進行取數。然而,這些異步串行通信的傳統方法已無法滿足外設與系統之間的高速通信要求。為了滿足高速通信這一需求,需要解決高速異步串行通信的數據可靠傳輸這一難題。
因此,本文首先針對16倍波特率分頻器的傳統方法進行理論分析與研究,再通過對奈奎斯特采樣進行理論分析,提出設計一種基于奈奎斯特采樣的FPGA異步串行通信接口。
1" UART通信原理
在串口通信中,異步串行通信方式是以字符為單位進行傳輸,每個字符都可以作為獨立的信息進行傳輸。每幀數據的各個比特時間間隔是相同,而相鄰的兩幀數據時間間隔是不固定的,可以隨意設置。通信雙方都必須保持相同的數據幀格式(即“起始位+數據位+校驗位+停止位”)和波特率。具體格式如圖1所示。
在異步串行的通信協議中,當信號處于靜默狀態時,信號默認為高電平。數據幀的第1位是起始位,低電平有效,標志著數據幀的開始。第2位至第9位是傳輸信息的數據位,共8位。第10位是奇偶校驗位,該驗證用于確定在傳輸過程中,數據幀的數據部分是否產生誤比特。第11位是數據幀的停止位,默認為高電平有效,標志著數據幀的結束。
2" 實現UART波特率的方法
2.1" 實現UART波特率的傳統方法
在傳統的異步串行通信中,異步串行接口設備通常采用內部或者外部的時鐘晶振來限制串行通信波特率[10-12]。
通常,實現UART通信的方法采用16倍波特率分頻器的方式,如圖2所示。用以設計波特率控制模塊,再將波特率模塊控制模塊產生的時鐘作為接收和發送模塊的工作時鐘,FPGA生成波特率的分頻公式為:
式中,fclk為系統時鐘,fbaud為波特率,Ndvsr為波特率分頻系數。
從式(1)可以看出,FPGA要準確無誤的接收一個bit,其工作頻率至少要是波特率的16倍,即fclk≥fbaud 16。若波特率為5 Mbit/s,則FPGA的工作頻率至少取80 MHz才能夠滿足通信需求。因此,傳統實現方式往往適用于低速率,速率越高,對應的系統的工作頻率越高。采樣過程如圖2所示。
從圖2可以看出,傳統方法采用16個采樣點,對1 bit數據劃為16個刻度,每個采樣點都對數據進行采樣,并存儲數據。在最后一次采樣完成時,使用數據表決器[9]進行數據值的判決。因此電路結構復雜,同時增加了FPGA運算資源的開銷。
2.2" 基于奈奎斯特采樣生成UART波特率的方法
在數字通信中,主要識別0或1(即高低電平)信號,具有信號互斥的鮮明特點。在數據傳輸中,由于串行接口硬件設備限制、信號抖動等因素對傳統的采樣產生一個提前(或滯后)時鐘誤差。因此,本文采用了Gardner算法[13]對傳輸數據進行位同步,利用數據傳輸的相鄰數據位的已知信號來判斷時鐘誤差,其計算式為:
式中,e(n)為第n個字節的時鐘誤差估計值,x(n)為起始位,x(n-1)為靜默狀態,x(n-1/2)為檢驗位。
故而,利用Garnder算法對誤差進行消除后,僅需在信號穩定區域進行檢測,可以減少無用檢測及判決。因此,本文基于奈奎斯特采樣的原理,設計2倍于波特率的采樣速率,能夠無失真地保留信號的完整信息的特點,且減少了無用的采樣及判決。奈奎斯特采樣如式(3)所示:
式中,fs為采樣頻率,fmax為最大波特率。
基于奈奎斯特采樣生成UART波特率的方法如圖3所示,其計算式為:
式中,Rclk為采樣速率,fclk為系統時鐘,fbaud為波特率。
從式(4)可以看出,FPGA要準確無誤地接收一個bit,其工作頻率只需要波特率的2倍,即fclk≥2 fbaud。若波特率為5 Mbit/s,則FPGA的工作頻率只需要10 MHz就能夠滿足通信需求。因此,采用奈奎斯特采樣生成UART波特率的方法降低了FPGA的工作頻率的通信要求。采樣過程如圖3所示。
從圖3可以看出,由于信號穩定區域居于1 bit中心區域,因此,通過采用同步時鐘將1 bit數據平均劃分為兩段,并在采樣時鐘的上升沿處(1 bit數字信號的中點處)對外部輸入數字信號進行采樣。這樣就能獲得最可靠的數字信號(0或1),且不需要數據表決器進行數據值的判決。
與需對每個bit電平采樣16次的傳統實現方式相比,本文所提出的方式僅需在每個bit電平的中點處進行一次采樣。這樣既節省了FPGA的邏輯資源,又減少了無用檢測及判決,還提高了系統的運行效率。
3" UART模塊設計
UART模塊主要由接收和發送模塊組成,發送模塊主要根據數據幀的格式,通過位移寄存器實現發送數據的并串轉換,由低位到高位進行傳輸。接收模塊主要通過接收位移寄存器對接收數據進行采樣,實現數據的串并轉換。
3.1" 接收模塊
接收模塊主要由數據監視模塊、采樣時鐘、奈奎斯特采樣模塊和數據決策模塊組成,如圖4所示。
其中,數據監視模塊主要實現對外部輸入信號的數據進行監視。當RX為低電平輸入時,首先采用Gardner算法對輸入數據進行位同步,再開始產生采樣時鐘,接收模塊開始運行,且實時判別數據有效性。若低電平不滿足1 bit的持續時間,則判別為無效信號,并返回Idle狀態,關閉采樣時鐘,且實時監測信號變化。反之,則判別為起始位有效,進入數據采集模塊進行。
在數據采集模塊中,FPGA生成奈奎斯特采樣時鐘,用以進行數據采樣。同時,將接收數據進行串并轉換,以及對數據進行同步采樣計數,以確保FPGA狀態與數據采樣速率同步。
在接收數據進行串并轉換后,由數據決策模塊對接收數據進行有效性判定。其判決條件為同時對數據的起始位和停止位進行分別進行高低電平判別。若條件滿足,則判定數據有效,更新當前接收到的數據,并返回Idle狀態,等待下一次數據接收。若條件不滿足,則判定數據無效,丟掉當前接收數據,并返回Idle狀態,繼續監測RX輸入電平的狀態。
3.2" 發送模塊
發送模塊主要由信號監視模塊、發送時鐘、發送模塊和數據判別模塊組成,如圖5所示。
其中,信號監視模塊主要實現對TX開始信號進行監視。若TX信號輸入為高電平時,開始產生發送時鐘,發送模塊開始運行。若TX信號輸入為低電平時,則輸出端口輸出高電平。
在數據發送模塊中,FPGA生成發送時鐘,用以數據發送。同時,通過位移寄存器將發送數據進行并串轉換。以及對數據進行同步發送計數,以確保FPGA狀態與數據發送速率同步。
在發射模塊對數據位發送后,發送模塊對數據停止位進行發送,通過數據判斷模塊對發送數據進行停止位計數,若停止位滿足1 bit的持續時間,則數據發送完成,返回Idle狀態等待下一次數據發送。若停止位不滿足1 bit的持續時間,則對數據的停止位繼續計數。
4" 系統設計與仿真
為驗證UART接收和發送模塊的功能,設計了一個UART系統,該系統主要由頂層模塊、接收模塊和發送模塊組成。通過頂層模塊將接收模塊和發送模塊聯合組成一個完整的系統,其系統框架如圖6如所示。
4.1" 系統仿真
為驗證系統的功能,采用ModelSim仿真軟件進行功能時序及功能驗證。通過將Testbench的仿真數據作為UART的輸入數據,而接收模塊接收到的數據直接透傳至發送模塊,作為UART的輸出數據,并發送。既可完成整個收發鏈路的時序和功能驗證,又能在ModelSim軟件里面進行代碼調試。
ModelSim軟件仿真的FPGA工作頻率及UART參數設置如表1所示。
i_rx_din為數據輸入端,將Testbench模擬數據(8'h7B)的高低電平作為接收模塊的輸入端的輸入信號,rx_dout為數據接收端,如圖7所示。rx_dout接收數據的二進制表示形式為0111 1011。與i_rx_din輸入端的數據8'h7B高低電平一致,UART系統接收功能驗證正確。
在接收模塊完成數據接收后,將接收模塊的完成標志doen_tick信號作為發送模塊的tx_start信號。通過tx_start信號控制發送數據的開始,將tx_din的輸入數據通過o_tx_dout端發送出。仿真結果顯示:發射端o_tx_dout發送的高低電平與接收模塊中i_rx_din輸入的高低電平端相同,UART發送模塊得到正確驗證,整個系統的功能也得到驗證,如圖8所示。
4.2" 系統驗證及驗證結果
為進一步驗證該系統設計的可行性,本文選用ALINX的AX309開發板,其FPGA選用Xilinx公司的XC6SLX9-FTG256BIV2037,其開發工具為ISE14.7。將開發板的TX端與RT端進行短接,通過串口調試助手工具進行數據的收發驗證,其框架如圖9所示。
驗證結果(如圖10所示)表明,串口調試助手的發送數據與接收數據一致,UART系統的接收和發送功能正確。通過定時發送數據的接收結果,驗證了UART功能的穩定性。并且,基于奈奎斯特采樣的異步串行通信已應用于國產FPGA的實際項目中,經驗證其工作穩定可靠,項目中使用的波特率為5 Mbit/s。實際項目測試環境如圖11所示。
5" 結" 論
本文采用VHDL語言,在FPGA上設計和實現了基于奈奎斯特采樣的異步串行通信接口,適用于1 200~5 000 000 bit/s波特率范圍,對于高速UART通信,可以有效地進行數據接收和發送。與傳統的實現UART通信的方法相比,基于奈奎斯特采樣生成UART波特率的方法減少了無用檢測及判決,降低了FPGA的邏輯資源消耗,還提高了系統的運行效率,增強了通信的可靠性和穩定性。在實際運用中,基于奈奎斯特采樣的異步串行通信具有較強的可移植性,適用于Xilinx與國產安路的開發平臺,具有很好的實際使用價值。
參考文獻:
[1] 趙書安,周木春,葛超,等.基于國產芯片的雷達伺服多通信系統 [J].電子測量技術,2023,46(18):36-44.
[2] 胡立坤,王慶超.基于UART的可靠通信與性能分析 [J].計算機工程,2006(10):15-17+21.
[3] 呂陽,劉莉娜,鄭良廣,等.基于Verilog HDL的通用UART模塊設計與實現 [J].電子設計工程,2020,28(8):174-179.
[4] 陳仁,王海英,華建文,等.基于FPGA的星載UART通訊設計與實現 [J].科學技術與工程,2015,15(13):212-217.
[5] 胥飛燕,鄭華榮,周宦銀,等.基于FPGA的多串口控制器的設計與實現 [J].物聯網技術,2017,7(10):31–32.
[6] 劉博.基于FPGA的UART模塊設計與實現 [J].無線電工程,2018,48(5):433-438.
[7] 豐淑鳳,朱曉瑩,王旭.基于FPGA的寬波特率誤差容忍范圍的UART設計 [J].信息技術與信息化,2021(9):169-171+176.
[8] 吳朝暉,曲立國.UART波特率檢測電路的FPGA設計算法與實現 [J].現代電子技術,2022,45(20):41-44.
[9] 張名淑,張雅迪,王旭,等.基于FPGA的UART抗干擾接收裝置設計與實現 [J].信息技術與信息化,2020(8):122-124.
[10] 王媛斌,王宏斌.FPGA與PC通信的UART串口設計 [J].蘭州工業學院學報,2020,27(5):56-61.
[11] 楊瀾,戚秀真.UART微控制器設計方法及其FPGA實現 [J].電子科技,2016,29(6):72-74.
[12] 王磊,李超,胡春喜.一種多功能通用異步串行UART接口的設計與實現 [J].四川兵工學報,2014,35(12):101-103+106.
[13] 李浩松,周寒冰,李明維,等.一種AD9371寬帶無線同步定時模塊簡化方法 [J].電訊技術,2021,61(1):106-110.
作者簡介:陳偉(1995—),男,漢族,四川廣安人,碩士研究生在讀,主要研究方向:信號檢測與處理;通訊作者:蒲紅平(1975—),男,漢族,四川廣安人,副教授,博士,主要研究方向:大數據分析、智能控制、智能信號分析與處理、工業自動化研究與工程應用;楊仕勇(1989—),男,漢族,四川廣安人,碩士研究生在讀,主要研究方向:信號檢測與處理和自適應控制;張淑慧(1998—),女,漢族,甘肅蘭州人,碩士研究生在讀,主要研究方向:信號檢測與處理。