基于千兆網(wǎng)的FPGA多通道數據采集系統設計
FPGA豐富的邏輯資源、充沛的I/O引腳以及較低的功耗,被廣泛應用于嵌入式系統和高速數據通信領(lǐng)域?,F如今,各大FPGA生產(chǎn)廠(chǎng)商為方便用戶(hù)的設計和使用,提供了較多的、可利用的IP核資源,極大地減少了產(chǎn)品的開(kāi)發(fā)周期和開(kāi)發(fā)難度,從而使用戶(hù)得以更專(zhuān)注地構思各種各樣創(chuàng )意且實(shí)用的功能,而不是把大量時(shí)間浪費在產(chǎn)品的調試和驗證中。
本文引用地址:http://dyxdggzs.com/article/277032.htm千兆以太網(wǎng)技術(shù)在工程上的應用是當前的研究熱點(diǎn)之一。相比于其他RS-232或RS-485等串口通信,千兆以太網(wǎng)更加普及和通用,可以直接與Internet上的其他終端相連;相比于百兆網(wǎng)絡(luò ),千兆以太網(wǎng)傳輸速度更快、傳輸距離更遠,再結合UDP/IP協(xié)議棧,可以更方便地與上位機進(jìn)行通信。
本文結合FPGA和千兆以太網(wǎng)靈活與快速的優(yōu)勢,設計了一個(gè)多通道并支持不同格式的數據采集系統。為了更好地為上位機軟件所支持,搭建了一個(gè)簡(jiǎn)單的UDP/IP數據通道來(lái)完成數據到上位機的高速傳輸。同時(shí),為了克服UDP這類(lèi)不可靠的、面向無(wú)連接的協(xié)議帶來(lái)的數據錯誤和缺失問(wèn)題,使用一塊DDR2SDRAM芯片來(lái)緩存各通道數據,在應用層制定了與上位機交互及丟包處理的通信協(xié)議,從而保證了采集數據到達上位機的可靠性。
1系統總體結構
系統的設計目標是為了讓不同通道、不同格式的數據都能通過(guò)同一個(gè)網(wǎng)絡(luò )通道被快速無(wú)誤地傳遞給上位機,由于設備與上位機運行狀態(tài)的不同,采集數據速率的變化,甚至網(wǎng)線(xiàn)質(zhì)量,使傳輸過(guò)程中的錯誤和丟包情況在所難免,所以需要有適當的機制和存儲器緩存來(lái)保證傳輸的可靠性。

圖1 系統總體結構
圖1所示即為本系統的總體結構,除了使用一塊DDR2 SDRAM芯片之外,網(wǎng)絡(luò )模型中物理層的功能由一塊PHY芯片來(lái)完成。目前一般PHY芯片均能兼容10Mbit.s-1、100Mbit.s-1、1 000 Mbit.s-13種速率的以太網(wǎng)傳輸,并向上層提供多種接口,如MII、GMII、RGMII和TBI接口等,對于上位機一側則直接是普通的RJ45網(wǎng)口插槽。物理層接收數據鏈路層的并行數據,并將其轉換為原始的比特流;同時(shí)也將原始比特流轉化成并行數據,提交給數據鏈路層。
2 FPGA模塊功能
FPGA模塊通過(guò)響應上位機的指令,完成數據采集、打包、傳輸、丟包重傳等工作。所有工作的基礎是MAC子層、網(wǎng)絡(luò )層、傳輸層等OSI參考模型各層協(xié)議的可靠實(shí)現,每一層都按照標準接口向上一層提供特定服務(wù),而把如何實(shí)現這些服務(wù)的細節對上一層加以屏蔽。

圖2 FPGA模塊結構
圖2顯示了系統FPGA模塊的具體結構,以及各個(gè)子模塊之間的關(guān)系。為縮短設計周期,提高設計質(zhì)量,在模塊中分別調用了Altera公司現有的以太網(wǎng)控制器IP核和DDR2控制器IP核資源。
2.1 DDR2讀寫(xiě)控制
若不考慮網(wǎng)絡(luò )中丟包的情況,數據一邊采集,一邊打包向上位機發(fā)送,是不需要外部存儲器來(lái)緩存的。但是在實(shí)際測試中發(fā)現,目前普通配置的PC機無(wú)法承受千兆以太網(wǎng)的快速傳輸能力,丟包很常見(jiàn),尤其是增加到多個(gè)通道時(shí),設備向上位機的輸出能力加大,丟包率也立即隨之升高。所以,使用一片DDR2 SDRAM緩存各通道的數據是必要的。
設計中直接調用Altera公司提供的DDR2 SDRAM控制器,并選用一塊它可以驅動(dòng)的芯片來(lái)提高工作效率。芯片可使用的緩存空間是要重點(diǎn)關(guān)注的。每個(gè)通道都要分配固定的緩存區域,所以要將有限的內存空間作合理的劃分。如果是圖像數據,單個(gè)通道至少要有緩存兩幀以上的空間。DDR2讀寫(xiě)控制模塊直接調用DDR2 SDRAM控制器IP核,但由于該IP核提供給用戶(hù)端的接口使用不方便,需要按照其文檔上介紹的時(shí)序來(lái)進(jìn)行突發(fā)式讀寫(xiě)。
本模塊的功能主要是協(xié)調各通道采集數據的寫(xiě)入和讀出。如圖3所示,寫(xiě)操作時(shí),各通道的數據首先用FPGA資源進(jìn)行緩存,然后寫(xiě)入控制狀態(tài)機通過(guò)輪詢(xún)的方式依次檢查各個(gè)通道已經(jīng)緩存的數據量,如果足夠一次突發(fā)寫(xiě),則將其寫(xiě)入SDRAM芯片的相應通道塊中,然后再檢查下一通道;讀操作時(shí),讀出控制狀態(tài)機也依次檢查各個(gè)通道寫(xiě)入SDRAM芯片的數據量,如果足夠一次突發(fā)讀,則將其讀出,通過(guò)網(wǎng)絡(luò )發(fā)送出去。

圖3 DDR2 讀寫(xiě)控制模塊結構
基于以上控制方式,設計對各通道的數據格式是不作限制,如圖1中所示,可以是PAL、Camera Link、VGA等各種格式的圖像或組合,只是在采集之前向上位機報告各個(gè)通道的數據信息。但需要說(shuō)明的是,這些數據的帶寬總和理論上不應超過(guò)千兆以太網(wǎng)的最大傳輸速率,這是采用輪詢(xún)方式得以成功的前提。其實(shí),如今普通PC機的處理能力遠遠不能達到這個(gè)最大限制,當速度到達100 Mbit.s-1時(shí),上位機丟包就已經(jīng)很?chē)乐?。如果是將采集的數據在上位機上顯示,最多可能只有70~80 Mbit.s-1;如果還要將數據寫(xiě)入硬盤(pán),那數據率則會(huì )更低,除了配備一塊上好的硬盤(pán)之外,還需要在上位機軟件的優(yōu)化上多作努力。
2.2以太網(wǎng)發(fā)送接收控制
本模塊的功能就是MAC子層、網(wǎng)絡(luò )層、傳輸層各層協(xié)議的具體實(shí)現,這些子模塊作為數據傳輸的通道,需要具有一定的緩存和查錯能力,同時(shí)為了能擴展其他協(xié)議,還必須保持相互之間的獨立性。如圖4所示,硬件設備接收數據的過(guò)程就是以太網(wǎng)幀經(jīng)過(guò)每一層,去除各層的首部并核對校驗,最后獲得純粹的用戶(hù)數據;發(fā)送數據的過(guò)程就是用戶(hù)數據每經(jīng)過(guò)一層,添加相應的首部和校驗,直到組成一個(gè)完整的以太網(wǎng)幀。
1)MAC子層的功能。設計中直接調用Altera公司提供的三速以太網(wǎng)控制器IP核實(shí)現MAC子層的功能,該IP核提供了統一的寄存器接口,用戶(hù)可以通過(guò)它來(lái)配置以太網(wǎng)最大幀長(cháng)、源MAC地址、目的MAC地址和PHY地址等重要信息。如圖4所示,發(fā)送數據時(shí),MAC模塊向數據幀添加以太網(wǎng)首部,并利用CRC算法添加32位的校驗碼;接收數據時(shí),MAC模塊同樣要進(jìn)行CRC校驗,對于不正確的數據幀要予以丟棄,用戶(hù)也可以通過(guò)配置寄存器決定是否將校驗位一并送至上一層。
(2)UDP/IP協(xié)議棧的實(shí)現。相對于TCP協(xié)議的三次握手,UDP和IP協(xié)議面向無(wú)連接的性質(zhì)使其在硬件上可以快速實(shí)現,至于連接的建立完全可以在應用層實(shí)現。
如圖4所示,UDP和IP協(xié)議的功能在硬件上的實(shí)現有較多相同之處:對于上層發(fā)送的數據均需要添加相應的首部和校驗和;對于下層接收的數據,檢驗校驗和,并去除首部,然后才能送到上一層;由于首部中有該數據包的長(cháng)度區域,所以無(wú)論是發(fā)送和接收,都需要將數據包全部緩存,才能確定其長(cháng)度大小,相當于一種“存儲-轉發(fā)”的機制。
當然,UDP協(xié)議與IP協(xié)議在實(shí)現時(shí)也有不同的地方,主要體現在校驗和的計算方法上。UDP協(xié)議的校驗和是將首部和數據一起校驗,而且這個(gè)首部不僅是8 Byte的UDP首部,還包括12Byte的偽首部。在UDP層計算校驗和還用到了IP層的地址,但這違背了網(wǎng)絡(luò )分層模型的理念。IP協(xié)議的校驗和只計算IP數據包的頭部,一般情況下只有固定的20 Byte.
2.3應用層協(xié)議處理
不同通道采集的數據按照規定的數據包長(cháng)度進(jìn)行打包,然后再發(fā)送到上面的以太網(wǎng)控制模塊,需要專(zhuān)門(mén)的模塊進(jìn)行組織和調度,并添加對應通道的標簽。同時(shí),網(wǎng)絡(luò )中也不只是設備到上位機方向的采集數據包,也有反方向的用于控制的命令包:首先要考慮的問(wèn)題是設備從何時(shí)開(kāi)始采集數據,何時(shí)停止采集,這都是要上位機發(fā)送命令來(lái)控制的;其次,對于丟失包的統計與處理,這一部分工作稍微有些困難,但無(wú)論是設備和上位機都可以完成,顯然交給上位機處理比較適宜,然后上位機向設備發(fā)送帶丟失包序號的短數據包,設備優(yōu)先從DDR2緩存中找到該丟失的數據包,發(fā)往上位機。
系統中完成這些功能的模塊相當于一個(gè)位于UDP/IP層之上的應用層協(xié)議,而這個(gè)協(xié)議的內容是由系統設計者所規定的,但必須為FPGA開(kāi)發(fā)人員和上位機軟件程序開(kāi)發(fā)人員所共享,這樣在不同機器上的對應層就有了一個(gè)可以互相通信的對等體(Peer)。這樣制定應用層協(xié)議,不但增加了系統相關(guān)功能的保密性,還可以由開(kāi)發(fā)人員自行裁剪應用層功能,靈活地協(xié)調軟硬件應該負責的細節,最后敲定最簡(jiǎn)潔的實(shí)現方案。
fpga相關(guān)文章:fpga是什么
評論