基于FPGA和PCI的AFDX終端接口卡設計
航空電子系統的發(fā)展已成為現代飛機性能不斷提高的重要因素。以ARINC429和1553B為代表的現役機載總線(xiàn)已不能滿(mǎn)足現代航空電子系統對通信速度和帶寬的要求。美國航空電子技術(shù)委員會(huì )(AEEC)提出了航空電子全雙工交換式以太網(wǎng)AFDX(Avionics Full Duplex Switched Ethernet),它是在商用交換式以太網(wǎng)的基礎上,經(jīng)過(guò)實(shí)時(shí)性和可靠性等方面的改進(jìn)建立起來(lái)的,符合IEEE802.3和ARINC664規范。
AFDX是一種全雙工、高數據率、雙冗余的總線(xiàn),具有傳輸速度快、易擴展、可維護性好等優(yōu)點(diǎn),可以有效減少系統布線(xiàn),減輕飛機重量。不僅能滿(mǎn)足航空電子系統數據通信對帶寬的需求,并已成功應用于A(yíng)380和B787,也是我國新研制大型客機的理想選擇[1]。作為AFDX的重要組成部分,終端接口卡性能的好壞直接影響到AFDX網(wǎng)絡(luò )的整體性能。因此,設計可靠性高、實(shí)時(shí)性好、滿(mǎn)足實(shí)際應用需求的AFDX終端接口卡具有廣闊的應用前景和良好的經(jīng)濟、軍事效益。
1 AFDX終端接口卡總體設計
依據ARINC664規范對終端系統的要求,在參考了參考文獻[2]對終端協(xié)議芯片的設計和相關(guān)成熟產(chǎn)品的基礎上,提出一種AFDX終端接口卡的設計方案。該接口卡性能特點(diǎn)為:采用Stratix II系列FPGA芯片實(shí)現協(xié)議棧主要功能,可以實(shí)現256個(gè)傳輸虛鏈路(最多2 048個(gè)接收虛鏈路);獨立的MAC核簡(jiǎn)化了設計,保證了系統的穩定性和100 Mb/s的傳輸速率;PCI總線(xiàn)可實(shí)現132~264 Mb/s的高速數據傳輸,最大限度地滿(mǎn)足接口卡對時(shí)延的性能要求;2個(gè)100/10 Mb/s端口,實(shí)現全雙工的雙冗余通道。AFDX終端接口硬件框圖如圖1所示。
FPGA模塊是系統的核心協(xié)議芯片,實(shí)現AFDX協(xié)議棧的主要功能,包括流量整形、虛鏈路調度、完整性檢查、冗余管理等。MAC模塊連接物理層和FPGA,為數據的發(fā)送和接收提供數據接口和控制接口,控制PHY進(jìn)行發(fā)送和接收。PHY模塊實(shí)現以太網(wǎng)的物理層接口功能。PCI接口電路是主機連接AFDX終端接口卡的橋梁,提供主機和接口卡間高速、雙向交互數據的接口。CPU模塊是系統的核心控制模塊,協(xié)調各模塊之間的工作,實(shí)現AFDX協(xié)議棧UDP、IP層的功能。
2 AFDX終端接口卡的關(guān)鍵模塊設計
2.1 FPGA芯片設計
航空電子系統的運行環(huán)境特殊,對AFDX終端接口卡芯片的性能參數、工作溫度和穩定性的要求高,因此,應選用集成度高、邏輯資源和存儲器資源豐富、速度快、可以完成復雜的時(shí)序與組合邏輯電路功能的芯片。普通商業(yè)級的FPGA無(wú)法勝任,必須要采用工業(yè)級FPGA。綜合考慮各方面因素,本接口卡選用Altera公司Stratix II EP2S180系列FPGA。FPGA芯片的內部功能結構如圖2所示。
配置數據存儲器在片內控制器的作用下完成終端接口卡的初始化,對有關(guān)硬件進(jìn)行配置。初始化完成后,即可進(jìn)行數據的發(fā)送和接收工作。發(fā)送數據時(shí),CPU模塊經(jīng)PCI接口通過(guò)DMA方式,將航空電子系統中的數據幀傳送到發(fā)送數據緩存器中;發(fā)送模塊按照調度算法將數據幀調度到相應VL中,為數據幀添加序列號(SN)后,同時(shí)發(fā)往MAC A和MAC B;接收數據時(shí),PHY模塊將數據幀發(fā)送至MAC模塊(MAC A和MAC B),經(jīng)MAC模塊CRC校驗后發(fā)送至接收模塊。接收模塊將MAC模塊傳來(lái)的數據存入自身緩存中,并進(jìn)行完整性檢查和冗余管理;CPU檢測到已收到新數據幀后啟動(dòng)DMA,將數據幀送至航空電子系統。數據緩存器用于存儲發(fā)送和接收過(guò)程中的數據。
2.1.1 接收模塊
數據接收模塊負責接收從MAC送來(lái)的數據,實(shí)現完整性檢查,消除從冗余通道接收的重復有效幀。該模塊包括完整性檢查模塊、冗余檢查模塊、SN表和包分棟器。
完整性檢查模塊校驗每個(gè)從MAC模塊傳來(lái)的接收幀是否具有該VL所期待的SN。冗余檢查模塊接收所有經(jīng)過(guò)完整性檢查的合法幀,若接收到兩個(gè)具有相同SN號的幀時(shí),將轉發(fā)先接收到的,然后丟棄第二個(gè)。SN表存儲接口卡各接收虛鏈路最后收到幀的SN,用于完整性檢查[2]。VL號映射表存儲各接收VL的邏輯VL號與物理VL號的對應關(guān)系。查詢(xún)該映射表,可得到VL的邏輯VL號所對應的物理VL號。包分揀器根據VL號判斷到來(lái)的幀屬于哪條虛鏈路,并將該幀存入該虛鏈路對應的數據接收緩存中[3]。
2.1.2 發(fā)送模塊
發(fā)送模塊實(shí)現流量整形、多路復用及傳輸端冗余控制(TRC)功能。該模塊包括:寄存器模塊、虛鏈路調度模塊、傳輸端冗余控制。
寄存器模塊存儲發(fā)送模塊所用到的信息,如VL的BAG值(帶寬分配間隔)、Lmax值(最大幀長(cháng)度)等。虛鏈路調度模塊由整形模塊和多路復用模塊組成。為消除虛鏈路相互競爭引入的抖動(dòng),本設計的虛鏈路調度方案使用周期為125 μs的靜態(tài)調度方法。整形模塊負責確保每一條VL都遵守它所分配的帶寬限制,控制并監視BAG和Jitter定時(shí)器,使數據流以比較均勻的速度向外發(fā)送,限制VL上的突發(fā)流量。通過(guò)多路復用技術(shù)將整形后的虛鏈路的幀合并到一條物理鏈路上,并確保多路復用后輸出的抖動(dòng)在可接受的范圍內。傳輸端冗余控制(TRC)模塊的主要作用是根據調度模塊的輸入決定將要傳送幀的目的地,可以只傳送給MAC A和MAC B中的一個(gè),也可以同時(shí)傳送給MAC A和MAC B。
2.2 MAC模塊
為簡(jiǎn)化設計,本系統采用ACTEL公司的兩個(gè)Core10/100 Ethernet IP核建立兩個(gè)獨立的通道。該IP核具有100 Mb/s的傳輸速率,已經(jīng)在實(shí)驗和實(shí)際應用中多次驗證符合IEEE802.3標準和ARINC664規范,可較好地實(shí)現MAC功能,其主要組成模塊及關(guān)系如圖3所示[4]。
控制、狀態(tài)寄存器及控制邏輯(CSR)模塊向外部模塊提供控制接口和MII管理接口,包含控制寄存器、狀態(tài)寄存器及控制邏輯。主機通過(guò)CSR模塊實(shí)現對Core10/100的中斷控制和電源管理,從而達到控制IP核的目的。數據控制模塊將外部模塊需要發(fā)送的數據存入內部的發(fā)送FIFO中,等待發(fā)送,并自動(dòng)使用CPU間隙將接收FIFO中收到的數據發(fā)往外部模塊。發(fā)送、接收FIFO分別用于暫存待發(fā)送的數據和接收到的數據,為外部存儲器工作于FIFO模式提供接口。發(fā)送及接收控制模塊作為發(fā)送及接收的MII接口,控制PHY芯片進(jìn)行數據的發(fā)送與接收。發(fā)送控制模塊從發(fā)送FIFO中讀取待發(fā)送數據,形成幀,并通過(guò)MII接口發(fā)送數據幀;接收控制模塊通過(guò)接收MII把數據從外部PHY設備傳送到接收數據存儲器中,并完成地址過(guò)濾。
主機與IP核之間的數據交換是通過(guò)FIFO緩存器進(jìn)行的。數據交換包括發(fā)送和接收兩個(gè)獨立的過(guò)程,這兩個(gè)過(guò)程都存在三種狀態(tài):運行、終止和暫停。發(fā)送和接收進(jìn)程各有一個(gè)描述符列表,位置由CSR中的寄存器來(lái)定義。Core10/100執行載波監聽(tīng)多路訪(fǎng)問(wèn)/沖突檢測(CSMA/CD)算法來(lái)解決沖突[4]。其算法流程如圖4所示。
2.3 PCI接口模塊
2.3.1 硬件設計
為避免設計所有PCI總線(xiàn)協(xié)議需要的接口邏輯,減輕工作難度,本設計采用PLX公司的64 bit總線(xiàn)控制器PCI9656。PCI9656與FPGA連接如圖5所示。
PCI9656符合PCI V2.2協(xié)議,支持32/64 bit、33/66 MHz時(shí)鐘,采用流水線(xiàn)架構技術(shù)可以支持7個(gè)外部主控器,支持多路復用,可直接生成所有的控制、地址和數據信號以驅動(dòng)PCI總線(xiàn),而不需要額外驅動(dòng)電路。
根據需要,將PCI地址空間劃分為用戶(hù)配置空間、發(fā)送緩沖空間和接收緩沖空間。EEPROM作為配置信息存儲器,在控制器的作用下完成對PCI設備的初始化配置。本設計采用0類(lèi)配置空間,需配置的信息包括設備的廠(chǎng)商、類(lèi)別、設備所申請的存儲器和I/O空間、設備的中斷信息及工作方式等。
申請局部總線(xiàn)控制權時(shí),PCI9656使LHOLD變高;FPGA檢測到LHOLD變高后,立即回應LHOLDA,總線(xiàn)申請成功。讀數據時(shí),PCI9656先使LW/R變低,下一個(gè)周期使ADS變低,并根據地址高兩位進(jìn)行譯碼,選擇要訪(fǎng)問(wèn)的SDRAM控制器模塊,使能SDRAM;當FPGA發(fā)出REDAY信號有效后,從SDRAM中讀數據。寫(xiě)數據時(shí),PCI9656使LW/R變高,下一個(gè)周期使ADS變低,此時(shí)地址有效,并根據地址高兩位進(jìn)行譯碼,選擇要訪(fǎng)問(wèn)的SDRAM控制器模塊,使能SDRAM;當FPGA發(fā)出REDAY信號有效后,把數據寫(xiě)到SDRAM中。當數據傳輸結束時(shí),PCI9656使REDAY信號無(wú)效、LW/R變高,下一個(gè)時(shí)鐘周期撤銷(xiāo)LHOLD,再下一個(gè)周期FPGA會(huì )撤銷(xiāo)LHOLDA信號,至此取消總線(xiàn)成功。
2.3.2 驅動(dòng)程序
本設計設備驅動(dòng)程序采用微軟的WDM驅動(dòng)程序模式,實(shí)現即插即用。驅動(dòng)程序的開(kāi)發(fā)和調試采用DriverStudio開(kāi)發(fā)工具包中的DriverWorks和SoftICE作為主要的工具。
設計驅動(dòng)程序主要需要考慮四方面因素:PCI設備的硬件訪(fǎng)問(wèn);中斷處理;DMA數據傳輸和安全性、穩定性、可靠性。為實(shí)現AFDX對數據傳輸實(shí)時(shí)性的要求,設備驅動(dòng)程序采用中斷方式。為滿(mǎn)足快速傳送數據、I/O響應時(shí)間短和CPU額外開(kāi)銷(xiāo)小的需求,采用DMA的塊傳輸方式進(jìn)行數據傳輸。為保證驅動(dòng)程序的可靠性和穩定性,設計采用Windows 98/2000/XP內核模式的標準驅動(dòng)程序例程。
驅動(dòng)程序可分為兩部分,一部分用于PCI9656各個(gè)配置寄存器賦值并初始化;另一部分用于主程序,用來(lái)完成PCI9656與主機CPU之間的數據交互。使用DriverStudio中的DriverWizard創(chuàng )建PCI驅動(dòng)程序框架,采用VC++6.0的面向對象設計思想創(chuàng )建了接口芯片抽象類(lèi)C_PCI9656,將PCI9656芯片的屬性和需實(shí)現的操作封裝起來(lái)。在頭文件Register_PCI9656.h中定義PCI9656提供的內部寄存器,包括PCI配置寄存器、DMA寄存器、運行時(shí)間寄存器和消息隊列寄存器等。資源分配通過(guò)IRP(I/O Request Packe)例程實(shí)現。DMA傳輸流程如圖6所示[5]。
首先在應用程序中創(chuàng )建一個(gè)事件對象,將該事件傳遞給驅動(dòng)程序并產(chǎn)生中斷,中斷例程判讀中斷來(lái)源。若是Local中斷,則應用程序發(fā)送DMA讀寫(xiě)命令,該操作將IRP傳遞給驅動(dòng)調用SerialRead()或SerialWrite()例程,運行回調例程O(píng)nDmaReady()判定是否符合DMA傳輸條件并開(kāi)啟StartDMA()例程實(shí)現DMA傳輸,產(chǎn)生DMA中斷;若是DMA中斷,則調用OnDmaReady()例程判定DMA傳輸是否結束,未結束則再一次開(kāi)啟StartDMA()例程繼續DMA傳輸并產(chǎn)生中斷。如此循環(huán)一直到完成所有的DMA傳輸,應用程序結束線(xiàn)程。為提高設備驅動(dòng)程序的安全性和可靠性,在設計中采用自旋鎖來(lái)保護共享數據和設備寄存器,編寫(xiě)程序時(shí)嚴格遵循編程規范和C++語(yǔ)言標準語(yǔ)法格式。
3 仿真與測試
基于本文的設計方案,借助Altera公司的Quartus II軟件對AFDX接口卡的關(guān)鍵模塊進(jìn)行了功能和時(shí)序仿真。發(fā)送模塊時(shí)序仿真如圖7所示。當主機需要發(fā)送數據時(shí),通過(guò)給發(fā)送模塊發(fā)送一個(gè)脈沖信號TxStartFrm來(lái)指示數據幀發(fā)送的開(kāi)始,發(fā)送模塊檢測到這個(gè)脈沖后使發(fā)送使能MTxEn有效,開(kāi)始數據的發(fā)送。由圖7可知,發(fā)送模塊發(fā)送的數據與待發(fā)送數據一致,較好地完成了發(fā)送模塊的功能。
接收模塊時(shí)序仿真如圖8所示。當接收開(kāi)始信號RxStartFrm有效時(shí),RxValid信號被置為可用狀態(tài),開(kāi)始數據的接收過(guò)程。接收MRxD表示從MAC發(fā)送過(guò)來(lái)的數據。由圖8可知,接收模塊工作正常,較好地完成了接收模塊的功能,滿(mǎn)足設計的要求。
在對系統的功能和時(shí)序進(jìn)行仿真并保證仿真正確的基礎上,將協(xié)議芯片的設計下載到Altera公司生產(chǎn)的Stratix II系列的EP2S180F1020C5中,并使用Sniffer協(xié)議分析軟件進(jìn)行在線(xiàn)系統驗證。驗證表明,該協(xié)議芯片最高工作頻率可達152.64 MHz,滿(mǎn)足AFDX協(xié)議對時(shí)延和抖動(dòng)的要求,且能正確、完整地完成發(fā)送和接收功能,通信正常。使用SoftICE調試了PCI驅動(dòng)程序,結果表明,驅動(dòng)程序能正確加載,能實(shí)現對硬件的正確驅動(dòng)和控制管理,中斷正常,當PCI傳輸大量的數據時(shí),數據傳輸也正確。
本文根據ARINC664規范和AFDX協(xié)議對接口卡時(shí)延和抖動(dòng)的性能要求,提出了一種基于FPGA和PCI的AFDX終端接口卡設計方案,給出了關(guān)鍵模塊的詳細設計,編寫(xiě)了總線(xiàn)接口驅動(dòng)程序。使用Quartus II軟件對各功能模塊進(jìn)行了功能和時(shí)序仿真,并搭建測試平臺進(jìn)行初步測試驗證。結果表明,本文提出的設計方案可行性好,穩定性高,傳輸速度快,時(shí)延小,抖動(dòng)始終小于最大抖動(dòng),符合要求,為下一步的研究開(kāi)發(fā)提供了可借鑒經(jīng)驗。
評論