《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于SoPC技術(shù)的1553B總線接口卡設(shè)計(jì)與實(shí)現(xiàn)
基于SoPC技術(shù)的1553B總線接口卡設(shè)計(jì)與實(shí)現(xiàn)
來源:電子技術(shù)應(yīng)用2011年第7期
黃 偉1,吳華興1,魯 藝1, 周 雷2
1.空軍工程大學(xué) 工程學(xué)院,陜西 西安710038; 2.解放軍93846部隊(duì),陜西 西安710038
摘要: 提出了一種1553B總線接口卡設(shè)計(jì)方案。通過采用SoPC技術(shù)、基于Verilog的自定義IP模塊設(shè)計(jì)以及基于郵槽寄存器的雙向中斷設(shè)計(jì),快速構(gòu)建了系統(tǒng)硬件。在NIOS II開發(fā)環(huán)境下采用C語言開發(fā)了系統(tǒng)核心軟件—1553B協(xié)議處理程序,給出了BC模塊的設(shè)計(jì)實(shí)例。結(jié)合系統(tǒng)驅(qū)動、API和實(shí)際應(yīng)用程序開發(fā)對系統(tǒng)進(jìn)行了多功能測試,驗(yàn)證了其可行性。
關(guān)鍵詞: SoPC 1553B 中斷 協(xié)議處理
中圖分類號: TP336
文獻(xiàn)標(biāo)識碼: A
文章編號: 0258-7998(2011)07-0057-04
Design and implementation of 1553B bus interface board based on SoPC
Huang Wei1,Wu Huaxing1,Lu Yi1,Zhou Lei2
1.The Engineering Institute of AFEU, Xi′an 710038, China; 2.PLA Unit 93846, Xi′an 710038,China;
Abstract: This paper proposes a design method of 1553B bus interface board. The hardware is quickly built by SoPC technology, Verilog-based design of custom IP module, and design of bidirectional interrupt via MailSlot registers. The core software of 1553B protocol handler program is developed with C language in NIOS II IDE, and a BC module design instance is proposed. System’s multi functions and feasibility are demonstrated, with designs of system driver, API and practical applications.
Key words : 1553B;SoPC;interrupt;protocol handler


    MIL-STD-1553B總線作為一種高可靠性的軍用數(shù)據(jù)傳輸總線,在國內(nèi)外軍事領(lǐng)域的應(yīng)用極為廣泛,許多航空航天設(shè)備中都包含大量的1553B總線接口電路,通過1553B總線進(jìn)行系統(tǒng)設(shè)備間的主要通信。目前,國內(nèi)自主開發(fā)的1553B總線接口電路設(shè)計(jì)大多基于進(jìn)口協(xié)議芯片(如采用DDC公司的BU-61580[1],或基于HOLT公司的HI-6110[2]),需大量的輔助電路完成緩沖及接口功能,導(dǎo)致設(shè)計(jì)成本較高。如果完全自主開發(fā)1553B協(xié)議模塊,可采用基于NIOS II處理器和SoPC技術(shù)的設(shè)計(jì)方案,如參考文獻(xiàn)[3]提出了一種基于SoPC的1553B總線通用接口設(shè)計(jì)方案,并進(jìn)行了初步設(shè)計(jì),但該方案僅通過串口進(jìn)行了簡單的功能測試,未對1553B總線協(xié)議下的BC/RT/BM多功能處理進(jìn)行詳細(xì)描述,也沒有真正應(yīng)用于PCI總線或其他總線平臺。因此,為了設(shè)計(jì)一款低成本、多功能、真正實(shí)用的1553B總線接口卡,本文提出了一種基于SoPC技術(shù)的1553B總線接口卡設(shè)計(jì)與實(shí)現(xiàn)方法,并結(jié)合實(shí)際應(yīng)用對其進(jìn)行了系統(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í)器等設(shè)備,以PCI總線和中斷方式與主機(jī)通信,形成一個嵌入式微計(jì)算機(jī)系統(tǒng)。FPGA內(nèi)部主要包括總線編解碼模塊、協(xié)議處理模塊、配置模塊、PCI總線接口模塊等。

2 系統(tǒng)硬件設(shè)計(jì)關(guān)鍵技術(shù)
    1553B總線接口卡的硬件設(shè)計(jì)采用了Altera公司的Quartus II9.0開發(fā)環(huán)境[4],以下介紹其關(guān)鍵內(nèi)容。
2.1 FPGA內(nèi)的SoPC設(shè)計(jì)

 


    系統(tǒng)的FPGA芯片為Altera的EP3C16Q240,本身具有可編程、可裁剪等特點(diǎn),通過采用SoPC技術(shù)并應(yīng)用Quartus開發(fā)環(huán)境下提供的可裁減IP模塊,可在FPGA內(nèi)快速構(gòu)建一個嵌入式微計(jì)算機(jī)系統(tǒng),以實(shí)現(xiàn)系統(tǒng)的1553B接口功能。實(shí)際系統(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)有資源實(shí)現(xiàn)系統(tǒng)功能是SoPC設(shè)計(jì)的關(guān)鍵之一。解決的方法是根據(jù)需求精簡配置IP模塊。例如,F(xiàn)IFO和Onchip-Mem共用芯片內(nèi)有限的嵌入式存儲單元,通過權(quán)衡二者的空間分配,即保證了編解碼緩存的容量和總線吞吐能力,又保證了雙口RAM有足夠的配置空間。又如將PCI-Complier配置為32 bit從模式,可有效地節(jié)省芯片的資源。
    系統(tǒng)通過采用SoPC技術(shù)定義必要的模塊及合理分配芯片資源,在實(shí)現(xiàn)系統(tǒng)功能的同時(shí)加快了開發(fā)周期,提升了系統(tǒng)性能。
2.2 總線編解碼模塊的設(shè)計(jì)
    由于1553B總線采用曼徹斯特Ⅱ編碼方式,而Quartus開發(fā)環(huán)境系統(tǒng)未提供相關(guān)IP模塊,故設(shè)計(jì)了針對曼徹斯特II的總線編解碼模塊。該自定義IP模塊基于Verilog語言設(shè)計(jì),主要完成1553B總線信號同步頭的提取、串并轉(zhuǎn)換、奇偶校驗(yàn)及訪問FIFO等功能,實(shí)現(xiàn)總線信號的編碼和解碼。圖2所示為從1553B總線讀取信號波形進(jìn)行解碼的過程,這也是該模塊的主要設(shè)計(jì)難點(diǎn)。

    解碼過程中,同步頭檢測的設(shè)計(jì)難點(diǎn)是如何根據(jù)不同的跳變斜率和數(shù)據(jù)有效情況判斷同步頭。根據(jù)1553B總線信號編碼方式的特點(diǎn),同步頭在3 μs時(shí)間范圍的中間時(shí)刻存在電平跳變,根據(jù)其跳變方式的不同,可區(qū)分是命令/狀態(tài)字還是數(shù)據(jù)字??紤]到總線信號經(jīng)遠(yuǎn)距離傳輸和變壓器轉(zhuǎn)換后,同步頭跳變斜率的上升或下降時(shí)間發(fā)生了一定變化,此外也必須驗(yàn)證同步頭后的數(shù)據(jù)位是否有效,因此,編制Verilog程序時(shí)必須考慮到同步頭跳變斜率范圍和數(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時(shí)鐘同步采樣的同步頭跳變斜率允許在0.5 &mu;s范圍內(nèi)。
    此外,總線編解碼模塊設(shè)計(jì)還包括串行到并行的轉(zhuǎn)換、并行到串行的轉(zhuǎn)換、奇偶校驗(yàn)程序以及讀寫FIFO等。通過將總線編解碼模塊定義成符合AVALON總線接口標(biāo)準(zhǔn)的自定義外設(shè),可將其連接到系統(tǒng)內(nèi)的AVALON總線上,實(shí)現(xiàn)其與系統(tǒng)內(nèi)其他設(shè)備的信息交換,從而保證該模塊的相對獨(dú)立性、可重用性和可移植性,便于系統(tǒng)的更新升級。
2.3 雙向中斷的設(shè)計(jì)與實(shí)現(xiàn)
    1553B總線接口卡的雙向中斷處理功能主要通過PCI總線接口模塊實(shí)現(xiàn),包括兩類中斷:一類方向?yàn)橹鳈C(jī)至板卡,是由主機(jī)PCI總線控制產(chǎn)生,需要板內(nèi)NIOSII CPU響應(yīng)的中斷,稱為向內(nèi)中斷;另一類方向?yàn)榘蹇ㄖ林鳈C(jī),是由1553B總線接口卡控制產(chǎn)生,通過PCI中斷輸出,需要主機(jī)CPU響應(yīng)的中斷,稱為向外中斷。如圖3所示。

    這兩類中斷均通過編譯器PCI-Complier提供的郵槽寄存器(MailSlot)實(shí)現(xiàn),編譯器本身提供了占用PCI配置空間的兩組郵槽寄存器MailSlot1 和MailSlot2,每組含8個寄存器,均為單向訪問方式。MailSlot1僅NIOSII CPU可以訪問,在NIOSII CPU向其寫入數(shù)據(jù)后,產(chǎn)生PCI中斷,由主機(jī)CPU響應(yīng),調(diào)用板卡驅(qū)動程序的中斷服務(wù)子程序,且主機(jī)只能讀取該組寄存器的數(shù)據(jù);MailSlot2僅主機(jī)CPU能訪問,在主機(jī)CPU向其寫入數(shù)據(jù)后,產(chǎn)生中斷,由NIOSII CPU響應(yīng),執(zhí)行板內(nèi)中斷服務(wù)程序,且NIOSII CPU只能讀取該組寄存器的數(shù)據(jù)。為實(shí)現(xiàn)雙向中斷,在硬件設(shè)計(jì)上應(yīng)注意以下幾點(diǎn):
    (1)在PCI-Complier配置向?qū)Ы缑嬷袘?yīng)打開Avalon CRA Port選項(xiàng);
    (2)在PCI-Complier模塊與NIOSII CPU之間設(shè)置相應(yīng)的中斷類型號;
    (3)PCI總線INTA管腳應(yīng)具有較強(qiáng)的拉電流能力,可采用集電極開路或總線驅(qū)動芯片IDTQS386。
    通過基于郵槽寄存器的雙向中斷方式,把中斷的實(shí)現(xiàn)轉(zhuǎn)換成了對特定寄存器的讀寫操作,實(shí)現(xiàn)方式更加簡單,而且在產(chǎn)生中斷的同時(shí),可以通過郵槽寄存器傳遞相關(guān)信息,如中斷類型、錯誤狀態(tài)和相關(guān)數(shù)據(jù)地址等。基于此,在1553B總線接口卡內(nèi),通過內(nèi)中斷實(shí)現(xiàn)了對板卡運(yùn)行狀態(tài)的管理以及對運(yùn)行時(shí)BC和RT消息數(shù)據(jù)的插入或更換;通過外中斷實(shí)現(xiàn)了主機(jī)程序?qū)ο⒌募磿r(shí)處理;此外,還結(jié)合中斷掩碼、中斷優(yōu)先級、中斷日志列表等軟件技術(shù)大大增強(qiáng)了1553B接口卡的中斷處理功能。這也正是采用SoPC技術(shù)的優(yōu)勢。
3 系統(tǒng)軟件設(shè)計(jì)
    1553B總線接口卡的軟件設(shè)計(jì)指的是板內(nèi)的1553B協(xié)議處理程序設(shè)計(jì),主要依托NIOS II9.0集成開發(fā)環(huán)境[5],采用C語言編寫。協(xié)議處理程序負(fù)責(zé)控制系統(tǒng)硬件,完成1553B總線協(xié)議的處理,使系統(tǒng)能工作在BC、RT、BM三種總線工作模式。系統(tǒng)硬件在加電后,將自動引導(dǎo)系統(tǒng)進(jìn)入?yún)f(xié)議處理程序的main()入口函數(shù),因此協(xié)議處理程序是系統(tǒng)的實(shí)際核心。
3.1 1553B協(xié)議處理程序總體設(shè)計(jì)
    協(xié)議處理程序主要包括4個主要模塊,如圖4所示。其中初始化模塊和運(yùn)行處理模塊為main()函數(shù)調(diào)用的子函數(shù):初始化模塊除了負(fù)責(zé)加電啟動時(shí)硬件的初始化配置,還包括在BC、RT、BM三種不同工作模式時(shí)分別進(jìn)行的初始化;運(yùn)行處理模塊負(fù)責(zé)管理系統(tǒng)工作狀態(tài),并在系統(tǒng)進(jìn)入運(yùn)行狀態(tài)時(shí)調(diào)用當(dāng)前工作方式對應(yīng)的主循環(huán)函數(shù)。定時(shí)中斷處理函數(shù)負(fù)責(zé)BC消息幀的計(jì)時(shí)以及產(chǎn)生RT/BM消息的時(shí)間戳。向內(nèi)中斷處理模塊負(fù)責(zé)響應(yīng)來自外部主機(jī)的命令,它占用郵槽寄存器組MailSlot2的兩個寄存器,其中一個寄存器負(fù)責(zé)接收主機(jī)的運(yùn)行控制命令,并由命令中斷處理子模塊,另外一個寄存器負(fù)責(zé)響應(yīng)主機(jī)的BC消息更新請求或RT消息讀寫請求,并調(diào)用對應(yīng)的BC或RT中斷子模塊來處理。

    圖5反映了協(xié)議處理程序的主要工作流程。系統(tǒng)加電后,進(jìn)入?yún)f(xié)議處理程序的main()函數(shù)。首先調(diào)用啟動初始化模塊,注冊定時(shí)器,使能通過郵槽寄存器產(chǎn)生的向外中斷,注冊向內(nèi)中斷處理服務(wù)子程序,初始化Onchip-Mem內(nèi)的配置寄存器和SDRAM內(nèi)的全局變量;然后調(diào)用usleep()休眠函數(shù),等待向內(nèi)中斷,直到系統(tǒng)收到向內(nèi)中斷,并且從郵槽寄存器中讀到初始化命令時(shí),系統(tǒng)將根據(jù)Onchip-Mem內(nèi)的配置寄存器信息(由主機(jī)通過PCI內(nèi)存空間提前寫入),配置板卡為BC、RT、BM三種模式之一,并執(zhí)行相應(yīng)的初始化模塊,配置存儲器空間,成功后板卡進(jìn)入暫停狀態(tài),否則回到未初始化狀態(tài),繼續(xù)等待向內(nèi)中斷;系統(tǒng)在暫停狀態(tài)時(shí)如果收到向內(nèi)中斷和來自郵槽寄存器的運(yùn)行命令,則進(jìn)入板卡的正常工作循環(huán),根據(jù)板卡的BC、RT或BM工作模式反復(fù)執(zhí)行相應(yīng)的主循環(huán)模塊;循環(huán)運(yùn)行期間如果收到向內(nèi)中斷和來自郵槽寄存器的停止命令,則在處理完當(dāng)前消息塊后返回暫停狀態(tài),等待下一運(yùn)行或初始化命令。

    協(xié)議處理程序采用的工作流程,使1553B總線接口卡可以同時(shí)支持BC、RT、BM三種工作模式,并在三種模式間任意切換,無需硬件復(fù)位重啟,減少了系統(tǒng)啟動和切換的延時(shí)。限于篇幅,本文僅以BC工作模式為例介紹1553B總線接口卡軟件的具體設(shè)計(jì)方法。
3.2 BC模塊設(shè)計(jì)
    BC模塊指的是1553B總線接口卡BC工作BC模式時(shí)協(xié)議處理程序調(diào)用的子功能模塊,主要包括BC初始化模塊、BC主循環(huán)模塊和BC中斷處理模塊。
    BC初始化模塊功能包括:復(fù)位配置寄存器和全局變量;將Onchip-Mem內(nèi)的前64 B存儲單位配置成32個16字的寄存器,并按表1定義初始化相關(guān)寄存器,賦予默認(rèn)值;在SDRAM和Onchip-Mem內(nèi)配置BC消息數(shù)據(jù)區(qū)和中斷日志緩沖區(qū),最多支持4 096個BC消息塊和1 024個中斷。需要注意的是,外部主機(jī)必須在板卡初始化完成后和運(yùn)行前(即系統(tǒng)處于暫停狀態(tài)時(shí))對相關(guān)寄存器和數(shù)據(jù)區(qū)進(jìn)行配置,如自定義消息幀周期、中斷屏蔽值,以及加載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é)果和錯誤類型,可供主機(jī)查詢和進(jìn)一步處理。
    BC主循環(huán)模塊在板卡進(jìn)入運(yùn)行狀態(tài)時(shí)被調(diào)用,負(fù)責(zé)按1553B總線協(xié)議實(shí)現(xiàn)BC功能,其主要流程如圖6所示。

    BC中斷處理模塊的功能相對簡單,主要負(fù)責(zé)響應(yīng)外部主機(jī)通過MailSlot2中另一個郵槽寄存器發(fā)來的BC消息更新請求,將指定的BcMsgBlock數(shù)據(jù)寫入對應(yīng)的存儲空間。由于是通過中斷服務(wù)子程序調(diào)用,它使得系統(tǒng)在暫停和運(yùn)行狀態(tài)時(shí)均可以對某個數(shù)據(jù)塊進(jìn)行更新,從而增強(qiáng)了系統(tǒng)組織BC消息幀的靈活性。
4 系統(tǒng)應(yīng)用實(shí)例
    通過上述系統(tǒng)硬件和軟件的設(shè)計(jì),1553B總線接口卡構(gòu)成了一個完整的嵌入式微計(jì)算機(jī)系統(tǒng),可以完成復(fù)雜的BC/RT/BM功能。但是接口卡本身不能獨(dú)立起作用,需要外部主機(jī)提供驅(qū)動和應(yīng)用程序接口(即API),才能用于第三方開發(fā)。
    因此,為了將1553B總線接口卡應(yīng)用于實(shí)際系統(tǒng)中,在WinDriver和Visual C++開發(fā)環(huán)境下開發(fā)了系統(tǒng)的驅(qū)動程序和API。仍以板卡的BC模式為例,它的API封裝在DLL中,主要包括以下有關(guān)函數(shù):
    bool InitBC_Config();//首先調(diào)用,使用默認(rèn)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)實(shí)驗(yàn)驗(yàn)證了板卡完全可以按照1553B協(xié)議工作于BC模式,且功能也較全面,便于各種應(yīng)用開發(fā)。
    目前,1553B總線接口卡已經(jīng)應(yīng)用到實(shí)際飛機(jī)航空電子系統(tǒng)測試設(shè)備和仿真設(shè)備之中,基于BC、RT和BM功能都進(jìn)行了有關(guān)應(yīng)用程序開發(fā),充分驗(yàn)證了其設(shè)計(jì)方案的 可行性。
    根據(jù)本文方法開發(fā)的1553B總線接口卡目前已經(jīng)實(shí)現(xiàn)了BC、RT、BM三種總線功能的實(shí)際應(yīng)用,相比其他同類設(shè)計(jì)有如下優(yōu)點(diǎn):
    (1)采用SOPC技術(shù),使用開發(fā)環(huán)境提供大部分IP模塊,縮短了開發(fā)周期,自主開發(fā)1553B協(xié)議處理模塊,節(jié)省經(jīng)濟(jì)成本;
    (2)多功能融合設(shè)計(jì),根據(jù)需求可配置為BC、RT、BM三者之一,硬件電路具有通用性、可拓展性;
    (3)總線接口卡與主機(jī)之間的通信采用雙向中斷方式,避免了查詢方式帶來的CPU利用率低的弊端,增強(qiáng)了系統(tǒng)功能和靈活性;
    (4)以NIOSII CPU為核心,協(xié)議處理模塊基于C編寫,軟件可移植性好,系統(tǒng)軟件和API升級簡單,便于第三方應(yīng)用開發(fā)。
    本文所述基于SoPC技術(shù)的1553B總線接口卡設(shè)計(jì)與實(shí)現(xiàn)方案,不僅對于類似的系統(tǒng)設(shè)計(jì)有借鑒意義,同時(shí)也具有良好的經(jīng)濟(jì)效益和應(yīng)用前景。
參考文獻(xiàn)
[1] 史國慶,高曉光.基于DSP的1553B總線接口卡設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)測量與控制,2005,13(12):1392-1393.
[2] 劉安,馮金富.基于NIOSII處理器的MIL-STD-1553B接口卡設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2008(10):138-141.
[3] 謝拴勤,史軍芳.基于SoPC的1553B總線通用接口設(shè)計(jì)[J].計(jì)算機(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.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。