成雅麗, 李錦明, 成乃朋
(中北大學 儀器與電子學院, 太原 030051)
隨著電子技術的飛速發展,人們對大容量數據的傳輸速度提出了越來越高的要求。為了能夠實時、有效地采集和傳輸數據,系統提出了一個基于FPGA與以太網的測試系統的設計。針對某設備發出的前端數據,對其進行采集與測試。FPGA具有體系結構和邏輯單元靈活、集成度高以及使用范圍寬的特點,可實現較大規模的電路,編程靈活[1]。設計運用FPGA內部程序并行處理的特點,結合千兆以太網的高速運行速度,將采集的數據進行實時處理和分析,并發送至上位機進行顯示。系統采用用戶數據報協議(User Datagram Protocol, UDP)進行數據傳輸,節約了網絡資源,實現了數據的高效率傳輸。
系統硬件部分主要由FPGA主控、A/D采集、16路無源觸點開關信號輸出、64路模擬電壓輸出、6路串口通信、電壓檢測和千兆以太網通信等模塊組成。FPGA主控模塊實現對7路AD采集、6路串口、電壓檢測以及千兆以太網等模塊的控制;千兆以太網模塊實現上位機與板卡之間的通信。系統采用220 V交流電供電,利用AC/DC電源適配器將220 V交流電轉換成28 V直流電源,然后通過DC/DC轉換器將28 V直流電壓轉換成5 V直流電源給所需模塊供電,采用TPS70358、TPS70345電源轉換芯片將5 V轉換成3.3 V、2.5 V、1.2 V直流電源,負責給FPGA以及所需模塊供電。系統工作電流≤0.2 A,并且內部電源與供電電源隔離。系統設計總體框圖如圖1所示。

圖1 系統總體框圖
A/D轉換單元負責將7路模擬信號轉換為數字信號,并輸出到FPGA。系統采用了8通道8 bits A/D轉換器AD7908,該轉換器能夠實現同時對8路輸入信號進行采樣轉換[2]。A/D采集電路如圖2所示。

圖2 A/D采集電路
系統設計了16路無觸點開關,每路負載容量為28 V/100 mA。利用FPGA控制光電耦合器實現對無觸點開關的電隔離控制[3]。單路無觸點開關接口設計如圖3所示。
系統設計了6組RS422數據接口,芯片選用MAX13433EETD+,按照RS422典型電路搭建數據接口,碼速率大于10 Mb/s,滿足任務需要,并且在接收端添加保護電路,防止外部電壓輸入不穩定造成的芯片損壞。串口收發電路如圖4所示。

圖3 單路無源觸點開關電路

圖4 串口收發電路
系統對0~32 V電壓檢測時,需要將該電壓信號與測試臺其他信號進行隔離。將28 V直流電源轉換成-5 V電源,利用轉換而成的±5 V電壓為隔離運放芯片ISO124供電。同時,利用兩個電阻進行分壓,將需檢測的電壓信號分壓為0~5 V電壓,并連接至ISO124芯片的輸入端,從而產生可被A/D芯片識別的電壓。為了保持電壓穩定,ISO124的輸出端先連接至電壓跟隨器[4],對輸出電壓進行模數轉換并發送至FPGA進行判斷。電壓檢測電路部分原理圖如圖5所示。


圖5 電壓檢測電路
系統采用RTL8211以太網GPHY芯片,支持10/100/1 000 b/s網絡速率[5]。圖6所示為RTL8211與FPGA的電路連接示意圖。

圖6 RTL8211與FPGA的電路連接示意圖
當網絡連接至千兆以太網時,FPGA和PHY芯片RTL8211EG的數據傳輸時通過千兆媒體獨立接口(Gigabit Medium Indpendent Interface,GMII)總線通信,發送時鐘E_GTXC由FPGA提供,頻率為125 MHz,數據為TXD0~TXD7,數據有效信號為TXEN[6]。接收時鐘E_RXC由PHY芯片提供,數據為RXD0~RXD7,數據有效信號為RXDV,數據在時鐘上升沿采樣[7]。
FPGA程序是在ISE中通過Verilog語言編寫的[8]。系統接收來自某設備的6路波特率為115 200 b/s的RS422數據,并且對其輸出的電壓信號進行循環采集。系統對接收的數據進行仲裁編幀,然后通過以太網模塊將其上傳至上位機進行顯示,以驗證其正確性。
系統采用了8位逐次逼近型AD7908,設置采樣方式為8路循環采樣,采樣頻率為1kHz[9]。第8路為無用數據,所以將第8路數據設置為固定值“EB”,這樣在進行數據處理時就能通過“EB”標志將7路數據解析出來。如圖7所示,對A/D采集模塊進行了仿真驗證,從圖中可以看出,A/D模塊實現了對7路數據的循環采集。

圖7 A/D采集模塊仿真圖
由于系統要同時完成6路RS422數據和7個通道模擬信號的采集,因此為了防止數據接收混亂導致數據失效,在接收數據的同時對每一路數據添加幀頭。將7個通道的模擬信號認為是第6路進行接收,待上位機接收到該通道數據后再對其進行解析。系統采用4個字節的幀標記,依次為BEH、90H、通道標識以及一個字節的幀計數。表1列出了7路數據的幀頭標志。

表1 4通道數據的幀頭標志
系統設置存儲器(First In First Out,FIFO)的大小為2 KB,在FIFO半滿信號有效時輸出數據并增加4個字節的幀標志位至以太網模塊,實現數據的仲裁和編幀[10]。即千兆網模塊每次讀取1 024 Byte發送至上位機。接收數據完畢后,在上位機軟件中對數據進行后續處理。
2.2.1 千兆以太網測試模塊
千兆以太網測試模塊采用的是UDP,FPGA通過GMII總線和以太網模塊的Gigabit PHY芯片RTL82IIEG通信[11],Gigabit PHY芯片通過網線和PC進行數據交換。千兆以太網模塊與PC的數據通信圖如圖8所示。

圖8 千兆以太網模塊與PC的連接圖
2.2.2 UDP協議
UDP是面向非連接的協議,只需知道對方的IP地址和端口號就可以將數據包發送出去[12]。UDP占用網絡資源較少,數據處理快,在應用程序運行時受環境影響較少,不太容易出錯。UDP報文格式如圖9所示。由于UDP是傳輸層(transport layer)協議,位于應用層與網絡層之間,因此UDP數據包需要經過IP協議的封裝傳至電腦[13]。

圖9 UDP報文格式
2.2.3 以太網發送數據檢測
發送數據時,采用Wireshark工具進行網絡抓包,如圖10所示,測試系統與電腦完成了連接,由圖中可以看出,源MAC Address為(00:0a:35:01:fe:c0),類型為IP(0x800)。
如圖11所示,UDP數據包中包含1 024 Byte,IP包總長度為1 052 B(04c1),端口號為8080。

圖10 Wireshark抓包圖1

圖11 Wireshark抓包圖2
測試系統與上位機進行通信時,當UDP發送模塊檢測到FIFO半滿信號時,就將數據組成UDP IP包格式通過GMII總線發送給PHY芯片,PHY芯片再將數據通過網口上發至PC。IP數據發送時,首先發送IP數據包的包頭,IP 包頭由 8 Byte的前導碼,目標MAC Address,源MAC Address和2 Byte的IP包類型組成。前導碼是由 7個0x55,1個0xD5 字節組成,表示一個IP 數據包傳輸的開始[14]。如圖12所示,發送第一路RS422數據給上位機,利用Chipscope 對其進行驗證,結果顯示,以太網模塊可靠地完成了數據的傳輸。

圖12 千兆以太網傳輸的數據
經過實際測試,UDP通信的速度可達900 Mb/s以上,實現了數據的高速傳輸。
系統采用Visual Basic語言編寫上位機軟件,提供了友好的人機交互界面[15]。 硬件電路中對要接收的電壓進行標定,標定結果如表2所示。

表2 測試電壓標定結果表
上位機接收的原始數據如圖13所示。利用Matlab對RS422數據中的幀計數進行提取和波形顯示,如圖14所示,數據未出現丟幀和錯幀現象。在上位機軟件中選擇電壓信號通道號,以波形的形式進行顯示,如圖15~21所示。對比其標定值,可以確定電壓信號均在正常范圍內。

圖13 上位機接收的原始數據

圖14 RS422幀計數顯示

圖15 通道1電壓28 V波形顯示

圖16 通道2電壓28 V波形顯示

圖17 通道3電壓28 V波形顯示

圖18 通道4電壓+15 V波形顯示

圖19 通道5電壓-15 V波形顯示

圖20 通道6電壓5 V波形顯示

圖21 通道7電壓28 V波形顯示
系統針對前端大容量數據的高速傳輸,設計了基于FPGA和以太網的測試系統。在聯調過程中觀察和分析測試結果,系統能夠對數據進行實時的采集和分析處理,通過千兆以太網模塊,實現了高速數據的傳輸,對采集的數據進行分析和波形顯示,測試結果良好。基于千兆以太網的測試系統硬件占用資源少,傳輸速率高,有很好的實際應用價值。