文獻標識碼: A
文章編號: 0258-7998(2011)07-0057-04
MIL-STD-1553B總線作為一種高可靠性的軍用數(shù)據(jù)傳輸總線,在國內(nèi)外軍事領域的應用極為廣泛,許多航空航天設備中都包含大量的1553B總線接口電路,通過1553B總線進行系統(tǒng)設備間的主要通信。目前,國內(nèi)自主開發(fā)的1553B總線接口電路設計大多基于進口協(xié)議芯片(如采用DDC公司的BU-61580[1],或基于HOLT公司的HI-6110[2]),需大量的輔助電路完成緩沖及接口功能,導致設計成本較高。如果完全自主開發(fā)1553B協(xié)議模塊,可采用基于NIOS II處理器和SoPC技術的設計方案,如參考文獻[3]提出了一種基于SoPC的1553B總線通用接口設計方案,并進行了初步設計,但該方案僅通過串口進行了簡單的功能測試,未對1553B總線協(xié)議下的BC/RT/BM多功能處理進行詳細描述,也沒有真正應用于PCI總線或其他總線平臺。因此,為了設計一款低成本、多功能、真正實用的1553B總線接口卡,本文提出了一種基于SoPC技術的1553B總線接口卡設計與實現(xiàn)方法,并結合實際應用對其進行了系統(tǒng)多功能測試。
1 系統(tǒng)結構
系統(tǒng)硬件為一塊PCI板卡,核心為FPGA,系統(tǒng)結構框圖如圖1所示。其中,1553B總線的耦合方式采用變壓器耦合(采用PM-DB2725),總線收發(fā)信號需經(jīng)電平轉換器(采用HI-1567)轉換。FPGA采用SoPC技術,通過AVALON總線連接CPU、存儲器、定時器等設備,以PCI總線和中斷方式與主機通信,形成一個嵌入式微計算機系統(tǒng)。FPGA內(nèi)部主要包括總線編解碼模塊、協(xié)議處理模塊、配置模塊、PCI總線接口模塊等。
2 系統(tǒng)硬件設計關鍵技術
1553B總線接口卡的硬件設計采用了Altera公司的Quartus II9.0開發(fā)環(huán)境[4],以下介紹其關鍵內(nèi)容。
2.1 FPGA內(nèi)的SoPC設計
系統(tǒng)的FPGA芯片為Altera的EP3C16Q240,本身具有可編程、可裁剪等特點,通過采用SoPC技術并應用Quartus開發(fā)環(huán)境下提供的可裁減IP模塊,可在FPGA內(nèi)快速構建一個嵌入式微計算機系統(tǒng),以實現(xiàn)系統(tǒng)的1553B接口功能。實際系統(tǒng)中應用的IP模塊包括:NIOSII CPU、Timer、SDRAM、PCI-Complier、Onchip-Mem、FIFO,以及用于軟件調(diào)試及程序引導的JTAG-UART、EPCS-Control等。
由于FPGA芯片內(nèi)部資源有限,如何充分利用現(xiàn)有資源實現(xiàn)系統(tǒng)功能是SoPC設計的關鍵之一。解決的方法是根據(jù)需求精簡配置IP模塊。例如,F(xiàn)IFO和Onchip-Mem共用芯片內(nèi)有限的嵌入式存儲單元,通過權衡二者的空間分配,即保證了編解碼緩存的容量和總線吞吐能力,又保證了雙口RAM有足夠的配置空間。又如將PCI-Complier配置為32 bit從模式,可有效地節(jié)省芯片的資源。
系統(tǒng)通過采用SoPC技術定義必要的模塊及合理分配芯片資源,在實現(xiàn)系統(tǒng)功能的同時加快了開發(fā)周期,提升了系統(tǒng)性能。
2.2 總線編解碼模塊的設計
由于1553B總線采用曼徹斯特Ⅱ編碼方式,而Quartus開發(fā)環(huán)境系統(tǒng)未提供相關IP模塊,故設計了針對曼徹斯特II的總線編解碼模塊。該自定義IP模塊基于Verilog語言設計,主要完成1553B總線信號同步頭的提取、串并轉換、奇偶校驗及訪問FIFO等功能,實現(xiàn)總線信號的編碼和解碼。圖2所示為從1553B總線讀取信號波形進行解碼的過程,這也是該模塊的主要設計難點。
解碼過程中,同步頭檢測的設計難點是如何根據(jù)不同的跳變斜率和數(shù)據(jù)有效情況判斷同步頭。根據(jù)1553B總線信號編碼方式的特點,同步頭在3 μs時間范圍的中間時刻存在電平跳變,根據(jù)其跳變方式的不同,可區(qū)分是命令/狀態(tài)字還是數(shù)據(jù)字??紤]到總線信號經(jīng)遠距離傳輸和變壓器轉換后,同步頭跳變斜率的上升或下降時間發(fā)生了一定變化,此外也必須驗證同步頭后的數(shù)據(jù)位是否有效,因此,編制Verilog程序時必須考慮到同步頭跳變斜率范圍和數(shù)據(jù)有效情況,如以下語句所示:
sync_csw<='1' when
(sftreg(2to21)="1111111111****0000000000"
and data_edge='1') else '0';
其中,sync_csw='1' 代表已正確找到命令/狀態(tài)字的同步頭,data_edge='1'代表同步頭后第一位數(shù)據(jù)有效,1111111111****0000000000代表由8 MHz時鐘同步采樣的同步頭跳變斜率允許在0.5 μs范圍內(nèi)。
此外,總線編解碼模塊設計還包括串行到并行的轉換、并行到串行的轉換、奇偶校驗程序以及讀寫FIFO等。通過將總線編解碼模塊定義成符合AVALON總線接口標準的自定義外設,可將其連接到系統(tǒng)內(nèi)的AVALON總線上,實現(xiàn)其與系統(tǒng)內(nèi)其他設備的信息交換,從而保證該模塊的相對獨立性、可重用性和可移植性,便于系統(tǒng)的更新升級。
2.3 雙向中斷的設計與實現(xiàn)
1553B總線接口卡的雙向中斷處理功能主要通過PCI總線接口模塊實現(xiàn),包括兩類中斷:一類方向為主機至板卡,是由主機PCI總線控制產(chǎn)生,需要板內(nèi)NIOSII CPU響應的中斷,稱為向內(nèi)中斷;另一類方向為板卡至主機,是由1553B總線接口卡控制產(chǎn)生,通過PCI中斷輸出,需要主機CPU響應的中斷,稱為向外中斷。如圖3所示。
這兩類中斷均通過編譯器PCI-Complier提供的郵槽寄存器(MailSlot)實現(xiàn),編譯器本身提供了占用PCI配置空間的兩組郵槽寄存器MailSlot1 和MailSlot2,每組含8個寄存器,均為單向訪問方式。MailSlot1僅NIOSII CPU可以訪問,在NIOSII CPU向其寫入數(shù)據(jù)后,產(chǎn)生PCI中斷,由主機CPU響應,調(diào)用板卡驅動程序的中斷服務子程序,且主機只能讀取該組寄存器的數(shù)據(jù);MailSlot2僅主機CPU能訪問,在主機CPU向其寫入數(shù)據(jù)后,產(chǎn)生中斷,由NIOSII CPU響應,執(zhí)行板內(nèi)中斷服務程序,且NIOSII CPU只能讀取該組寄存器的數(shù)據(jù)。為實現(xiàn)雙向中斷,在硬件設計上應注意以下幾點:
(1)在PCI-Complier配置向導界面中應打開Avalon CRA Port選項;
(2)在PCI-Complier模塊與NIOSII CPU之間設置相應的中斷類型號;
(3)PCI總線INTA管腳應具有較強的拉電流能力,可采用集電極開路或總線驅動芯片IDTQS386。
通過基于郵槽寄存器的雙向中斷方式,把中斷的實現(xiàn)轉換成了對特定寄存器的讀寫操作,實現(xiàn)方式更加簡單,而且在產(chǎn)生中斷的同時,可以通過郵槽寄存器傳遞相關信息,如中斷類型、錯誤狀態(tài)和相關數(shù)據(jù)地址等。基于此,在1553B總線接口卡內(nèi),通過內(nèi)中斷實現(xiàn)了對板卡運行狀態(tài)的管理以及對運行時BC和RT消息數(shù)據(jù)的插入或更換;通過外中斷實現(xiàn)了主機程序對消息的即時處理;此外,還結合中斷掩碼、中斷優(yōu)先級、中斷日志列表等軟件技術大大增強了1553B接口卡的中斷處理功能。這也正是采用SoPC技術的優(yōu)勢。
3 系統(tǒng)軟件設計
1553B總線接口卡的軟件設計指的是板內(nèi)的1553B協(xié)議處理程序設計,主要依托NIOS II9.0集成開發(fā)環(huán)境[5],采用C語言編寫。協(xié)議處理程序負責控制系統(tǒng)硬件,完成1553B總線協(xié)議的處理,使系統(tǒng)能工作在BC、RT、BM三種總線工作模式。系統(tǒng)硬件在加電后,將自動引導系統(tǒng)進入?yún)f(xié)議處理程序的main()入口函數(shù),因此協(xié)議處理程序是系統(tǒng)的實際核心。
3.1 1553B協(xié)議處理程序總體設計
協(xié)議處理程序主要包括4個主要模塊,如圖4所示。其中初始化模塊和運行處理模塊為main()函數(shù)調(diào)用的子函數(shù):初始化模塊除了負責加電啟動時硬件的初始化配置,還包括在BC、RT、BM三種不同工作模式時分別進行的初始化;運行處理模塊負責管理系統(tǒng)工作狀態(tài),并在系統(tǒng)進入運行狀態(tài)時調(diào)用當前工作方式對應的主循環(huán)函數(shù)。定時中斷處理函數(shù)負責BC消息幀的計時以及產(chǎn)生RT/BM消息的時間戳。向內(nèi)中斷處理模塊負責響應來自外部主機的命令,它占用郵槽寄存器組MailSlot2的兩個寄存器,其中一個寄存器負責接收主機的運行控制命令,并由命令中斷處理子模塊,另外一個寄存器負責響應主機的BC消息更新請求或RT消息讀寫請求,并調(diào)用對應的BC或RT中斷子模塊來處理。
圖5反映了協(xié)議處理程序的主要工作流程。系統(tǒng)加電后,進入?yún)f(xié)議處理程序的main()函數(shù)。首先調(diào)用啟動初始化模塊,注冊定時器,使能通過郵槽寄存器產(chǎn)生的向外中斷,注冊向內(nèi)中斷處理服務子程序,初始化Onchip-Mem內(nèi)的配置寄存器和SDRAM內(nèi)的全局變量;然后調(diào)用usleep()休眠函數(shù),等待向內(nèi)中斷,直到系統(tǒng)收到向內(nèi)中斷,并且從郵槽寄存器中讀到初始化命令時,系統(tǒng)將根據(jù)Onchip-Mem內(nèi)的配置寄存器信息(由主機通過PCI內(nèi)存空間提前寫入),配置板卡為BC、RT、BM三種模式之一,并執(zhí)行相應的初始化模塊,配置存儲器空間,成功后板卡進入暫停狀態(tài),否則回到未初始化狀態(tài),繼續(xù)等待向內(nèi)中斷;系統(tǒng)在暫停狀態(tài)時如果收到向內(nèi)中斷和來自郵槽寄存器的運行命令,則進入板卡的正常工作循環(huán),根據(jù)板卡的BC、RT或BM工作模式反復執(zhí)行相應的主循環(huán)模塊;循環(huán)運行期間如果收到向內(nèi)中斷和來自郵槽寄存器的停止命令,則在處理完當前消息塊后返回暫停狀態(tài),等待下一運行或初始化命令。
協(xié)議處理程序采用的工作流程,使1553B總線接口卡可以同時支持BC、RT、BM三種工作模式,并在三種模式間任意切換,無需硬件復位重啟,減少了系統(tǒng)啟動和切換的延時。限于篇幅,本文僅以BC工作模式為例介紹1553B總線接口卡軟件的具體設計方法。
3.2 BC模塊設計
BC模塊指的是1553B總線接口卡BC工作BC模式時協(xié)議處理程序調(diào)用的子功能模塊,主要包括BC初始化模塊、BC主循環(huán)模塊和BC中斷處理模塊。
BC初始化模塊功能包括:復位配置寄存器和全局變量;將Onchip-Mem內(nèi)的前64 B存儲單位配置成32個16字的寄存器,并按表1定義初始化相關寄存器,賦予默認值;在SDRAM和Onchip-Mem內(nèi)配置BC消息數(shù)據(jù)區(qū)和中斷日志緩沖區(qū),最多支持4 096個BC消息塊和1 024個中斷。需要注意的是,外部主機必須在板卡初始化完成后和運行前(即系統(tǒng)處于暫停狀態(tài)時)對相關寄存器和數(shù)據(jù)區(qū)進行配置,如自定義消息幀周期、中斷屏蔽值,以及加載BC消息數(shù)據(jù)。
BC消息數(shù)據(jù)區(qū)的基本單元是數(shù)據(jù)結構體BcMsgBlock,如下列代碼所示:
struct BcMsgBlock //BC基本消息塊
{ unsigned short m_Control;//控制字
unsigned short m_MsgStatus;//消息狀態(tài)
unsigned short m_Command1;//命令字1
unsigned short m_Command2;//命令字2
unsigned short m_Status1;//狀態(tài)字1
unsigned short m_Status2;//狀態(tài)字2
unsigned short m_Gap_Time;//消息間隔
unsigned short m_NextMsg;//下一消息
unsigned m_Data[32]; }
在控制字內(nèi)可以定義消息塊的重試次數(shù)、A/B總線、中斷使能和控制碼等,從而加入許多BC消息處理功能。每處理完畢一個消息塊,在其消息狀態(tài)字內(nèi)會保存有當前消息執(zhí)行結果和錯誤類型,可供主機查詢和進一步處理。
BC主循環(huán)模塊在板卡進入運行狀態(tài)時被調(diào)用,負責按1553B總線協(xié)議實現(xiàn)BC功能,其主要流程如圖6所示。
BC中斷處理模塊的功能相對簡單,主要負責響應外部主機通過MailSlot2中另一個郵槽寄存器發(fā)來的BC消息更新請求,將指定的BcMsgBlock數(shù)據(jù)寫入對應的存儲空間。由于是通過中斷服務子程序調(diào)用,它使得系統(tǒng)在暫停和運行狀態(tài)時均可以對某個數(shù)據(jù)塊進行更新,從而增強了系統(tǒng)組織BC消息幀的靈活性。
4 系統(tǒng)應用實例
通過上述系統(tǒng)硬件和軟件的設計,1553B總線接口卡構成了一個完整的嵌入式微計算機系統(tǒng),可以完成復雜的BC/RT/BM功能。但是接口卡本身不能獨立起作用,需要外部主機提供驅動和應用程序接口(即API),才能用于第三方開發(fā)。
因此,為了將1553B總線接口卡應用于實際系統(tǒng)中,在WinDriver和Visual C++開發(fā)環(huán)境下開發(fā)了系統(tǒng)的驅動程序和API。仍以板卡的BC模式為例,它的API封裝在DLL中,主要包括以下有關函數(shù):
bool InitBC_Config();//首先調(diào)用,使用默認BC設置
void SetBC_IntMask(WORD mask);//設置中斷屏蔽值
void SetBC_FirstMsg(int i);//設置起始消息索引
void SetBC_ValidMsgCnts(int n);//設置有效消息個數(shù)
void SetBC_Broadcast(bool enable);//使能廣播
void SetBC_IntLogList(bool enable);//使能中斷日志列表
void SetBCMsgFrmPeriod(bool enable, int frmTimeUs);
void SetBC_IntCallback(void* fun);//設置中斷回調(diào)函數(shù)
int GetBC_CurrMsgIndex();//獲取當前正執(zhí)行消息索引
WORD GetBC_CurrIntInfo();//獲取當前中斷信息
int LoadBCMsgBlk(int i, BcMsgBlk* pMsg);//加載消息
bool ReadBCMsgBlk(int i, BcMsgBlk* pMsg);//讀消息
bool StartBC();//啟動BC
bool StopBC();//停止BC
在1553B總線接口卡驅動和API的基礎之上,可以開發(fā)板卡的應用程序,用于各種基于1553B總線的系統(tǒng)之中。經(jīng)實驗驗證了板卡完全可以按照1553B協(xié)議工作于BC模式,且功能也較全面,便于各種應用開發(fā)。
目前,1553B總線接口卡已經(jīng)應用到實際飛機航空電子系統(tǒng)測試設備和仿真設備之中,基于BC、RT和BM功能都進行了有關應用程序開發(fā),充分驗證了其設計方案的 可行性。
根據(jù)本文方法開發(fā)的1553B總線接口卡目前已經(jīng)實現(xiàn)了BC、RT、BM三種總線功能的實際應用,相比其他同類設計有如下優(yōu)點:
(1)采用SOPC技術,使用開發(fā)環(huán)境提供大部分IP模塊,縮短了開發(fā)周期,自主開發(fā)1553B協(xié)議處理模塊,節(jié)省經(jīng)濟成本;
(2)多功能融合設計,根據(jù)需求可配置為BC、RT、BM三者之一,硬件電路具有通用性、可拓展性;
(3)總線接口卡與主機之間的通信采用雙向中斷方式,避免了查詢方式帶來的CPU利用率低的弊端,增強了系統(tǒng)功能和靈活性;
(4)以NIOSII CPU為核心,協(xié)議處理模塊基于C編寫,軟件可移植性好,系統(tǒng)軟件和API升級簡單,便于第三方應用開發(fā)。
本文所述基于SoPC技術的1553B總線接口卡設計與實現(xiàn)方案,不僅對于類似的系統(tǒng)設計有借鑒意義,同時也具有良好的經(jīng)濟效益和應用前景。
參考文獻
[1] 史國慶,高曉光.基于DSP的1553B總線接口卡設計與實現(xiàn)[J].計算機測量與控制,2005,13(12):1392-1393.
[2] 劉安,馮金富.基于NIOSII處理器的MIL-STD-1553B接口卡設計[J].電子技術應用,2008(10):138-141.
[3] 謝拴勤,史軍芳.基于SoPC的1553B總線通用接口設計[J].計算機測量與控制,2008,16(5):727-730.
[4] Altera Corporation.Quartus II help version 9.0[M].Altera Corporation,2009.
[5] Altera Corporation. NIOS II help version 9.0[M].Altera Corporation,2009.