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