肖鵬,屈盼讓,孫少華,李慶楠
(中航工業西安航空計算技術研究所,陜西西安,710119)
串行通信廣泛應用于數字通信和工業控制領域,傳統的專用串口通信芯片接口復雜,體積較大,隨著微電子技術的發展,FPGA在數字電路設計中被廣泛使用,完全可以將串口通信的功能集成在FPGA內,這樣不僅減少了外圍電路的體積,降低了設計的復雜性,同時可通過設計可以提高數據通信的可靠性。
如圖1所示,異步串行通信系統由傳感器/數據模塊、電平轉換模塊、FPGA和上位機組成。核心部分是FPGA。FPGA控制完成串行數據的采集和發送,上位機通過軟件讀取FPGA中FIFO的數據或向FIFO中發送數據。
在數據接收中對數據的接收是在監測到起始位后按照要求的波特率采樣,在通信過程中受到干擾的話就會出現監測到假數據起始位,造成數據錯誤和誤碼。為了提高接收數據的準確性,減少誤碼率,應采用數據傳輸波特率n(n≥1)倍的速率對數據進行采樣。

圖1 系統原理框圖

圖2 16倍波特率速率采樣示意圖

圖3 16倍波特率速率采樣時情況1

圖4 16倍波特率速率采樣時情況2
以16倍波特率速率采樣為例:采用數據傳輸速率的16倍進行采樣,采樣時鐘連續采樣到8個低電平信號時可以確定此時的低電平信號為正確的數據起始位,這樣可以排除干擾信號產生的錯誤起始位信號。在采集到第8個低電平之后,每隔16個采樣時鐘對數據采樣一次,并將采樣到的數據作為接收的數據發送給移位寄存器,最后通過移位存入到接收FIFO中。采樣過程如圖2所示。
采用n倍波特率速率采樣的方法的關鍵是采樣到次低電平信號確定起始位,此時可以保證該位為起始位數據波形的中點,這種采樣方法可以提高對串行數據波特率的容錯性。當采用n倍波特率速率采樣時保證數據采集的兩種極限情況,一種情況是數據采樣的最后一次采樣在實際數據最后一位有效的最開始時,如圖3所示。另一種情況是數據采樣的最后一次采樣在實際數據最后一位有效的最后時刻,如圖4所示。根據這兩種情況可計算出采用n倍波特率速率采樣的比特率容錯范圍。
假設標準波特率為,實際波特率為,則對于圖3情形有式(1)。

可得出實際波特率 BRmin=0.952Bs
對于圖4情形有式(2)。

可得出實際波特率 BRmax= 1 .048Bs。那么采用n倍波特率速率采樣串行數據,FPGA設計實現的波特率的誤差在正負4.8%之內就可以準確的采樣到數據,考慮到遠端傳輸可能出現誤差,將設計的波特率誤差控制在2.5%以內以保證數據的準確。
上述計算忽略了波特率速率倍數n的影響,實際應用中發現n的值越大,波特率的容錯范圍會更寬。
以UART RS422為例,使用VHDL語言編寫UART RS422收發控制邏輯。波特率發生器使用獨立的時鐘且波特率可配置。接收數據采樣使用FGPA系統主時鐘,則采樣速率相對波特率的倍數即位時鐘頻率相對波特率的倍數。硬件平臺資源:FPGA使用Xilinx Virtex-4,串行通信協議芯片使用MAX3490,系統主時鐘頻率20MHz,異步UART收發波特率發生器使用時鐘頻率16MHz。
試驗中將PC機作為上位機,通過UART RS232與 FPGA通 信,RS232的 通信是FPGA開發板接口電路實現。UART RS422發送的數據通過外部回繞接收回來以觀察數據的正確。通過分析計算的能夠準確接收數據的實際波特率與對應理想波特率差的范圍如圖5中兩條實線包含的范圍。
實驗中通過配置分頻因子寄存器配置波特率,在不同的波特率下觀察接收的數據是否與發送的數據一致,實驗中選取常用的波特率及常用波特率附近的波特率進行試驗,配置的UART RS422波特率如表1所示。

圖5 波特率容錯范圍

表1 實驗使用波特率對應表(bps)
在上位機PC上通過串口調試助手發送配置寄存器地址和數據讀寫地址。實驗結果如圖6所示。

圖6 實驗結果數據
圖中圓點表明實驗中FPGA接收的數據正確,叉點表明實驗中數據不正確。從圖中可以看出,實際波特率與對應波特率差在兩條實線范圍內的實驗點FPGA接收到的數據均是真確的,而實際波特率與對應波特率差在兩條實線范圍外的實驗點FPGA接收的數據都不正確。
本文設計一種基于FPGA的異步串行通信模塊,并設計一種通用的異步串行通信數據接收模塊的數據采集方法以提高對異步串行傳輸波特率的容錯度。設計實驗進行波特率容錯的驗證。通過對實驗的結果可以得出,實際波特率與對應理想波特率的差在±4.8%的范圍內的,FPGA采集到的數據均是正確的,實際波特率與對應理想波特率的差超出這個范圍的,FPGA采集到的數據都不正確。以此驗證了設計的方法可以提高異步串行通信中對數據傳輸波特率的容錯性,當電路受到干擾使得晶振輸出的時鐘頻率發生微弱變化的時候能夠繼續保證串行數據的準確性,提高了異步串行通信的抗干擾能力。
參考文獻
[1]黨俊博,李哲,李雅俊.基于FPGA的串口通信電路設計與實現[J]電子科技,2016,29(07): 106~109.
[2]韓佩富,潘峰,趙新秋 基于VHDL的異步串行通信電路設計[J].微電子技術,2003,31(04): 29-33.