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