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