文 豐,杜志美,薛志超,張志龍
(1.中北大學(xué) 儀器與電子學(xué)院,山西 太原 030051;2.中北大學(xué) 電子測(cè)試技術(shù)重點(diǎn)實(shí)驗(yàn)室,山西 太原 030051;3.中國(guó)運(yùn)載火箭技術(shù)研究院空間物理重點(diǎn)實(shí)驗(yàn)室,北京 100076)
飛機(jī)、輪船等機(jī)動(dòng)平臺(tái)上使用的電子設(shè)備越來(lái)越多,功能越來(lái)越復(fù)雜,將各電子設(shè)備有效組合在同一網(wǎng)絡(luò)平臺(tái)至關(guān)重要.MIL-STD-1553B是為適應(yīng)飛機(jī)飛行過(guò)程中通信安全提出的電子系統(tǒng)信息傳輸標(biāo)準(zhǔn),其優(yōu)越的實(shí)時(shí)性、高度的數(shù)據(jù)可靠性以及同時(shí)可掛載多個(gè)終端等優(yōu)勢(shì)在飛機(jī)電子系統(tǒng)中得到廣泛使用.
MIL-STD-1553B總線上有總線控制器(BC)、遠(yuǎn)程終端(RT)和總線監(jiān)視器(MT)3種類(lèi)型的終端[1,2].以往使用的BU-61580 16位非零等待緩沖模式,外部接口電路簡(jiǎn)單,通過(guò)主控器對(duì)協(xié)議芯片的操作較為方便,但只能實(shí)現(xiàn)單一的總線控制器、遠(yuǎn)程終端或者總線監(jiān)控器功能;而將BU-61580的連接模式設(shè)置為透明模式時(shí),BU-61580具有外部RAM擴(kuò)展的功能,同時(shí)可與主控器共享RAM接口,提高了數(shù)據(jù)存儲(chǔ)容量和實(shí)時(shí)性.在芯片價(jià)格較為昂貴,電路板空間資源受到限制的情況下,透明模式還使得BU-61580具備遠(yuǎn)程終端和總線監(jiān)控器同時(shí)工作的功能,實(shí)現(xiàn)了資源的合理利用.
1553B總線接口電路包括可編程邏輯器件FPGA、1553B協(xié)議芯片BU-61580、耦合變壓器三部分.
本系統(tǒng)主處理器FPGA采用Spartan-3系列芯片XC3S400,滿(mǎn)足可同時(shí)連接并控制總線控制器和總線監(jiān)視器的接口和時(shí)序要求,F(xiàn)PGA代碼在ISE14.7編譯環(huán)境下采用硬件描述語(yǔ)言VHDL編寫(xiě).BU-61580芯片作為一種全集成化多協(xié)議的接口芯片,由兩個(gè)低功耗的雙端收發(fā)器、4 K字靜態(tài)RAM以及直接面向主處理器的緩存接口組成[3].在共用RAM和DMA配置模式下,BU-61580能最大外擴(kuò)64 K RAM.同時(shí),該芯片集成了3種終端協(xié)議邏輯,各個(gè)終端連接到總線上都可形成廣播通道.為保證數(shù)據(jù)的完整性和系統(tǒng)的容錯(cuò)性,每個(gè)終端同時(shí)連接到多條總線上,指定一條總線用作通信的主控制總線,其余作為空閑的冗余總線[4].總線結(jié)構(gòu)如圖1 所示.
圖1 1553B標(biāo)準(zhǔn)總線拓?fù)浣Y(jié)構(gòu)Fig.1 1553B standard bus topology
各終端所發(fā)信息以消息的形式在1553B總線上進(jìn)行傳輸,每條消息的傳送內(nèi)容有命令字、數(shù)據(jù)字和狀態(tài)字.1553B總線網(wǎng)絡(luò)采用集中控制方式,即由BC向總線上發(fā)送命令.信息的傳輸過(guò)程首先由BC通過(guò)編碼器將命令字發(fā)送到總線,RT將總線中命令字的地址與自身地址進(jìn)行比較,決定是否接收該命令字[5].MT并不參與總線消息通信,而是監(jiān)聽(tīng)總線上傳送的消息,并將它們記錄并保存在存儲(chǔ)器中,供脫機(jī)分析使用.BU-61580默認(rèn)模式采用16 MHz時(shí)鐘頻率,設(shè)置配置寄存器#5最高位,將外部時(shí)鐘頻率改為12 MHz,在該時(shí)鐘工作模式下,時(shí)鐘經(jīng)過(guò)內(nèi)部倍頻后解碼/編碼器的采樣頻率為24 MHz,相比于 16 MHz 的時(shí)鐘采樣率,24 MHz時(shí)鐘頻率下解碼/編碼方式的采樣率提高了電路內(nèi)部解碼/編碼器的容錯(cuò)能力.透明模式接口電路原理圖如圖2 所示.
圖2 透明模式接口電路原理圖Fig.2 Schematic diagram of the transparent mode interface circuit
透明模式的實(shí)現(xiàn)需要將BU-61580的輸入引腳TRANSPARENT/BUFFERED置1.在FPGA內(nèi)部開(kāi)辟容量為4 K字的RAM空間用于擴(kuò)展.FPGA接收BU-61580的輸出控制信號(hào)IOEN、READYD、INT,進(jìn)而判斷是否可以對(duì)其進(jìn)行有效操作.MEMWR和MEMOE信號(hào)用來(lái)控制RAM的讀寫(xiě).透明模式下FPGA與BU-61580之間的數(shù)據(jù)總線和地址總線具有雙向驅(qū)動(dòng)的功能,由于FPGA通用I/O引腳是LVTTL邏輯+3.3 V,BU-61580是邏輯+5 V,F(xiàn)PGA的輸出信號(hào)可以直接驅(qū)動(dòng)BU-61580,而不能承受+5 V的輸入電壓[6],因此,需要在BU-61580信號(hào)輸出引腳、數(shù)據(jù)總線接口和地址總線接口處采用電平轉(zhuǎn)換芯片SN74LVC2T45和SN74LVTH162245與FPGA之間進(jìn)行電氣隔離.由于設(shè)備間連接電纜長(zhǎng)度要求,總線耦合方式不宜選用直接耦合,從而采用變壓器耦合,選用變壓器型號(hào)為B-3226,變壓比為1∶1.79,傳輸距離小于6 m.
總線監(jiān)控器功能是監(jiān)聽(tīng)總線上傳送的消息,并將它們記錄下來(lái),這就要求對(duì)協(xié)議芯片的寄存器和存儲(chǔ)器進(jìn)行初始化配置,確??偩€監(jiān)控器功能的執(zhí)行,并指定消息命令和數(shù)據(jù)的存儲(chǔ)地址.配置過(guò)程中,上位機(jī)根據(jù)協(xié)議芯片規(guī)定的配置要求,將數(shù)據(jù)及其對(duì)應(yīng)的地址打包發(fā)送,即發(fā)送一個(gè)數(shù)據(jù)后再發(fā)送該數(shù)據(jù)對(duì)應(yīng)的地址.由于配置過(guò)程中總線數(shù)據(jù)的傳輸速率與主機(jī)系統(tǒng)總線傳輸速率存在差異,為確保數(shù)據(jù)傳送的準(zhǔn)確性和連續(xù)性,在FPGA內(nèi)部為接口電路設(shè)計(jì)了可自動(dòng)讀寫(xiě)邏輯,分別為容量1 K字節(jié)的下傳FIFO和容量為2 K字節(jié)的上傳FIFO,F(xiàn)PGA內(nèi)部自動(dòng)讀寫(xiě)邏輯原理如圖3 所示.
圖3 電路緩存設(shè)計(jì)Fig.3 Circuit cache design
BU-61580芯片提供3種不同的總線控制器模式,分別為字監(jiān)控器模式、選擇消息監(jiān)控器模式、RT/選擇消息監(jiān)控器混合模式[7].本設(shè)計(jì)采用選擇消息監(jiān)控器模式,該方法極大地減少了主處理器的處理負(fù)擔(dān).典型的選擇消息監(jiān)控器模式的存儲(chǔ)器結(jié)構(gòu)如表1 所示[8].
表1 典型的選擇消息監(jiān)控器模式的存儲(chǔ)器結(jié)構(gòu)Tab.1 Typical memory structure for selecting message monitor mode
存儲(chǔ)器固定位置設(shè)置有獨(dú)立的命令堆棧指針(Command Stack Pointer)和數(shù)據(jù)堆棧指針(Data Stack Pointer)[9,10],分別用來(lái)指向命令堆棧和數(shù)據(jù)堆棧,其中命令堆棧大小為1 K字,存放監(jiān)控消息的描述符;數(shù)據(jù)堆棧大小為2 K字,存放監(jiān)控消息的數(shù)據(jù)字和狀態(tài)字,且相鄰兩條消息的數(shù)據(jù)字和狀態(tài)字在堆棧中無(wú)間隔順序存儲(chǔ).
總線監(jiān)控器啟動(dòng)后實(shí)現(xiàn)對(duì)1553B總線上傳送消息的監(jiān)聽(tīng).配置中斷屏蔽寄存器采用消息中斷機(jī)制,寄存器#2采用電平中斷且中斷狀態(tài)自動(dòng)清除.當(dāng)MT監(jiān)聽(tīng)到總線一條消息傳送完成時(shí),INT引腳會(huì)產(chǎn)生中斷請(qǐng)求,輸出為低電平,在FPGA讀取中斷狀態(tài)寄存器后,中斷狀態(tài)清除,輸出恢復(fù)為高電平.該中斷機(jī)制的選擇有利于FPGA通過(guò)判斷INT引腳輸出來(lái)判斷總線上是否有消息傳送,避免造成總線消息丟失.當(dāng)INT輸出為低電平時(shí),F(xiàn)PGA便對(duì)BU-61580的存儲(chǔ)單元進(jìn)行讀取.總線消息數(shù)據(jù)波形和INT輸出變化如圖4 所示.
圖4 總線消息數(shù)據(jù)波形和INT輸出變化Fig.4 Bus message data waveform and INT output changes
在讀取數(shù)據(jù)堆棧時(shí),最初采用的方法是通過(guò)命令堆棧描述符中的數(shù)據(jù)塊指針(DATA BLOCK POINTER)來(lái)進(jìn)行尋址,可以正確尋找到該消息對(duì)應(yīng)的數(shù)據(jù)塊,但是讀取的數(shù)據(jù)字長(zhǎng)度由FPGA控制,較為固定,只能滿(mǎn)足總線上單一消息循環(huán)發(fā)送的情況,而無(wú)法滿(mǎn)足多消息發(fā)送的情況.因此,改用初始化命令堆棧指針(f_command_stack_pointer)和數(shù)據(jù)堆棧指針(f_data_stack_pointer)進(jìn)行尋址,通過(guò)與固定地址單元指針command_stack_pointer和data_stack_pointer 進(jìn)行比較判斷數(shù)據(jù)堆棧讀取是否完成.
由于在實(shí)驗(yàn)過(guò)程中,BC將某條消息以一定的時(shí)間間隔循環(huán)發(fā)送到總線,而MT的存儲(chǔ)空間有限,會(huì)造成命令堆棧和數(shù)據(jù)堆棧的溢出.如果不考慮該情況,上傳到上位機(jī)的消息會(huì)每隔一段時(shí)間出現(xiàn)一次丟失.該消息的丟失主要通過(guò)相鄰兩條消息的時(shí)間標(biāo)記字來(lái)判斷,因此,需要對(duì)初始化指針f_command_stack_pointer和f_data_stack_pointer進(jìn)行復(fù)位.消息數(shù)據(jù)上傳流程圖如圖5 所示.
圖5 消息數(shù)據(jù)上傳流程圖Fig.5 Message data upload flowchart
圖6 所示為MT監(jiān)控到的總線消息信息,該消息由總線控制器BC循環(huán)發(fā)送,遠(yuǎn)程終端RT接收,F(xiàn)PGA對(duì)MT內(nèi)存單元進(jìn)行讀取并上傳至上位機(jī)顯示.
圖6 MT監(jiān)控到的總線消息信息Fig.6 Bus message information monitored by MT
如圖6 所示,每行記錄一條消息,前4個(gè)字為命令堆棧描述符,分別為塊狀態(tài)字、時(shí)間標(biāo)記字、數(shù)據(jù)塊地址和消息命令字,其中塊狀態(tài)字為協(xié)議芯片根據(jù)消息處理結(jié)果更新的單元,此處顯示為8100H;時(shí)間標(biāo)記字記錄每條消息傳送的時(shí)間標(biāo)記,由相鄰兩條消息的時(shí)間標(biāo)記差可計(jì)算出消息發(fā)送的時(shí)間間隔;數(shù)據(jù)塊地址存儲(chǔ)的是該條消息數(shù)據(jù)字在數(shù)據(jù)堆棧中的起始地址.數(shù)據(jù)堆棧存儲(chǔ)的是數(shù)據(jù)字和狀態(tài)字,在堆棧中無(wú)間隔順序存儲(chǔ),圖中所示消息數(shù)據(jù)字為EB90H,0001H,0002H,0003H,0004H,0005H,0006H,0007H,0008H,0009H,狀態(tài)字為6000H,數(shù)據(jù)長(zhǎng)度為11個(gè)字,與相鄰兩條消息的數(shù)據(jù)塊首地址差相等,說(shuō)明MT總線消息的監(jiān)聽(tīng)完整準(zhǔn)確.
本文在1553B傳輸協(xié)議的基礎(chǔ)上,利用可編程邏輯器件FPGA和協(xié)議芯片BU-61580完成透明模式接口電路設(shè)計(jì),運(yùn)用VHDL硬件描述語(yǔ)言進(jìn)行編程實(shí)現(xiàn)硬件的接口功能,通過(guò)上位機(jī)的配置實(shí)現(xiàn)總線監(jiān)控器功能,該設(shè)計(jì)方法靈活,便于操作.透明模式的應(yīng)用可以實(shí)現(xiàn)BU-61580外部RAM空間的擴(kuò)展,在電路板空間資源無(wú)法容納兩片BU-61580的情況下,可以采用透明模式利用一片BU-61580實(shí)現(xiàn)遠(yuǎn)程終端和總線監(jiān)視器同時(shí)工作,很大程度上節(jié)約了成本.