石 然, 張永杰, 王金芳,饒范鈞,徐 挺 (1.上海航天控制技術(shù)研究所,上海 201109;2.上海慣性工程技術(shù)研究中心,上海 201109)
1553B是由美國在20世紀(jì)70年代提出的電子系統(tǒng)聯(lián)網(wǎng)標(biāo)準(zhǔn),它是一種集中控制、分布處理和實時響應(yīng)的集中式的時分串行總線,具有可靠性高、使用靈活等優(yōu)點,被廣泛應(yīng)用于航空、航海和航天等領(lǐng)域[1-3]。
1553B總線通信能夠得以實施,主要是依賴于1553B總線接口這樣的物理基礎(chǔ),因此1553B總線接口的設(shè)計得到廣泛重視。1553B接口主要由主處理器和總線協(xié)議處理器組成。主處理器可采用單片機[4]、ARM[5]或DSP[6-8],但這三種處理器均無法做到與總線協(xié)議處理器間的無縫鏈接,還需要粘合邏輯實現(xiàn)與總線協(xié)議處理器間的邏輯匹配,這就增加了1553B總線接口的復(fù)雜性。利用FPGA作為主處理器,則可很好地解決此問題。FPGA是一種可編程邏輯陣列,它可以將粘合邏輯集成在處理器內(nèi)部,實現(xiàn)1553B總線接口的最簡化。
總線協(xié)議處理器目前通常采用DDC公司的ACE系列芯片[9],其中以BU-61580最為著名。在BU-61580的使用中,常采用中斷響應(yīng)模式[10-11]。BU-61580完成一次收發(fā)指令后產(chǎn)生中斷信號,主處理器收到該中斷請求后,從BU-61580中取回數(shù)據(jù),并將待發(fā)送數(shù)據(jù)存入BU-61580中。從數(shù)據(jù)接收角度看,該模式效率很高,可以收到實時數(shù)據(jù)。但從數(shù)據(jù)發(fā)送角度看,中斷后存入的數(shù)據(jù)需要等待下次BC命令才能發(fā)出,存在發(fā)送延時,無法適應(yīng)諸如控制系統(tǒng)、導(dǎo)航系統(tǒng)等對于實時性要求很高的環(huán)境。因此有必要在軟件控制方法上進行改進,在保證可靠性的前提下提高接口電路的實時性。
本文從簡化結(jié)構(gòu)、提高實時性和適應(yīng)性的角度出發(fā),采用BU-61580作為總線協(xié)議處理器,以深圳國微的SMQV600作為主處理器,設(shè)計并實現(xiàn)了一種RT模式下的1553B總線接口。該接口在接收端和發(fā)送端均采用雙緩沖結(jié)構(gòu),同時保證了實時性和可靠性。文中給出了硬件的總體方案以及軟件程序流程,并通過實驗對該1553B接口進行了驗證。
1553B總線接口硬件上主要由SMQV600和BU-61580組成。SMQV600作為主處理器,負(fù)責(zé)控制BU-61580,響應(yīng)BC經(jīng)1553B總線發(fā)來的指令,并將分系統(tǒng)的數(shù)據(jù)回饋給BC系統(tǒng)。BU-61580作為總線協(xié)議處理器,能夠?qū)ν獍凑湛偩€協(xié)議發(fā)送和接收數(shù)據(jù),一方面把接收到的BC有效數(shù)據(jù)存在片內(nèi)RAM中供主處理器調(diào)用,另一方面也把將要發(fā)送的分系統(tǒng)數(shù)據(jù)存在片內(nèi)RAM中供BC采集[12]。
圖1中,BU-61580通過硬件的電平設(shè)置,工作在16位緩存、非零等待模式[13],終端地址位RTAD4~RTAD0和校驗位RTADP由跳線進行設(shè)定。BU-61580 具有A、B雙路總線收發(fā)端,兩路互為熱備份,A、B總線發(fā)送/接收端分別經(jīng)隔離變壓器后,再以變壓器耦合方式接入1553B總線通信。隔離變壓器采用BTTC公司的B-3226,變壓比選為1∶1.79,耦合變壓器采用ESI-410,變壓比為1∶1.4,該配置方式可允許的最大耦合長度為6m。
FPGA的IO引腳供電通常為3.3V,而BU-61580的邏輯引腳供電固定為5V,為此在電路中加入了58所的164245總線收發(fā)器起到電平轉(zhuǎn)換作用[14]。從圖 1中可以看出,該1553B接口電路中除必要的電平轉(zhuǎn)換以外,并無多余的粘合邏輯,電路簡單明了,有利于實現(xiàn)小型化和低功耗。
本文主要探討RT模式下的接口軟件設(shè)計。接口軟件由VHDL語言編寫而成,其軟件架構(gòu)如圖2所示。該軟件主要由BUSINITIAL、BUSCON-TROL、READ和WRITE這4個模塊組成。其中,READ和WRITE模塊負(fù)責(zé)對總線協(xié)議處理器BU-61580進行讀寫;BUSINITIAL模塊負(fù)責(zé)初始化總線協(xié)議處理器;BUSCONTROL模塊負(fù)責(zé)利用BU-61580接收BC通過1553B總線發(fā)送的各種指令,并按照指令要求進行相應(yīng)的操作。下面將對最重要的BUSCONTROL模塊的內(nèi)部設(shè)計進行詳細(xì)闡述。
該模塊內(nèi)部有2個進程,一個是主進程,響應(yīng)BU-61580中斷,從其配置寄存器中取出BC指令,再根據(jù)該指令執(zhí)行方式碼操作或是從BU-61580的內(nèi)部RAM中讀取BC發(fā)來的數(shù)據(jù)。為了保證接收數(shù)據(jù)的一致性與正確性,本文在BUSINITIAL模塊中將BU-61580配置為接收子地址雙緩沖模式,該模式為每一個給定的接收子地址分配2個存儲數(shù)據(jù)塊,并自動為子地址切換這2個存儲數(shù)據(jù)塊的激活和非激活狀態(tài),確保FPGA與BU-61580不會同時訪問同一個存儲數(shù)據(jù)塊,避免了訪問沖突導(dǎo)致的錯誤。如圖3(a)所示,在主進程中為了讀取最新數(shù)據(jù),需要關(guān)閉雙緩沖,通過子地址查詢表獲取數(shù)據(jù)塊地址,再反轉(zhuǎn)該地址的第5位,才能從該地址所指向的數(shù)據(jù)塊中讀取到剛收到的有效數(shù)據(jù),讀取完畢后還需重新啟用雙緩沖模式。
另一個是數(shù)據(jù)更新進程。該進程把準(zhǔn)備發(fā)送的有效數(shù)據(jù)存儲在BU-61580的內(nèi)部RAM中,供BC調(diào)用。通常的做法是查詢INT中斷信號,確認(rèn)BC已將數(shù)據(jù)取走后,再把新的數(shù)據(jù)存入內(nèi)部RAM,供BC下一次讀取。但該方法的實時性較差,BC的取數(shù)間隔越大,則數(shù)據(jù)延時越大,無法適應(yīng)高實時性應(yīng)用環(huán)境。
在本文中,為了保證實時性,定時將有效數(shù)據(jù)刷新至BU-61580的內(nèi)部RAM中,而不等待INT中斷信號。作為1553B總線接口,無法控制BC采樣時間,但可提高自身更新速率,改善數(shù)據(jù)實時性。但該方式存在風(fēng)險,極端情況下BC的取數(shù)可能發(fā)生在FPGA寫內(nèi)部RAM的過程中,從而產(chǎn)生沖突,導(dǎo)致BC取到的數(shù)據(jù)是FPGA更新前后兩幀數(shù)據(jù)的混疊,導(dǎo)致數(shù)據(jù)錯誤。為解決該問題,提出一種發(fā)送雙緩沖的數(shù)據(jù)更新方式。如圖3(b)所示,發(fā)送雙緩沖為BU-61580的每一個給定的發(fā)送子地址分配2個存儲數(shù)據(jù)塊,這里簡稱數(shù)據(jù)塊a和數(shù)據(jù)塊b。FPGA首先將數(shù)據(jù)寫入數(shù)據(jù)塊a,寫入完畢后將數(shù)據(jù)塊a的地址寫入子地址查詢表,這樣數(shù)據(jù)塊a就變?yōu)榧せ顮顟B(tài),數(shù)據(jù)塊b成為非激活狀態(tài)。下一次FPGA數(shù)據(jù)更新時,再以此方式激活數(shù)據(jù)塊b,休眠數(shù)據(jù)塊a。激活數(shù)據(jù)塊和非激活數(shù)據(jù)塊一直這樣按照固定周期互換。
在發(fā)送雙緩沖模式下,再考慮極端情況,即FPGA修改BU-61580的子地址查詢表發(fā)生在BC正在取數(shù)的時候。BU-61580收到BC的取數(shù)指令時,將進入一次子地址查詢表尋找對應(yīng)的內(nèi)部RAM數(shù)據(jù)塊,再將對應(yīng)數(shù)據(jù)塊中存儲的字節(jié)組幀后發(fā)往BC。BU-61580只在收到BC指令時使用一次子地址查詢表,因此BC取數(shù)時更改子地址查詢表也不會導(dǎo)致部分已取數(shù)據(jù)為數(shù)據(jù)塊b,后續(xù)取數(shù)為數(shù)據(jù)塊a的情況,BC取到的必然是一個單一數(shù)據(jù)塊中的字節(jié)。可見利用FPGA交替切換激活數(shù)據(jù)塊和非激活數(shù)據(jù)塊的發(fā)送雙緩存機制,可避免極端情況下的數(shù)據(jù)更新沖突,兼顧了總線接口系統(tǒng)的實時性和可靠性。
根據(jù)上述分析,F(xiàn)PGA內(nèi)的主進程和數(shù)據(jù)更新進程都需要訪問BU-61580,因此需要分時使用,以避免程序沖突。如圖4所示,程序中設(shè)置了標(biāo)志位BUS_busy來控制2個進程的訪問時間。在FPGA內(nèi),主進程的優(yōu)先級要高于數(shù)據(jù)更新進程,當(dāng)其訪問BU-61580期間,將標(biāo)志位BUS_busy置1,結(jié)束訪問時,再將BUS_busy置0。數(shù)據(jù)更新進程每次訪問BU-61580前,都要首先查詢BUS_busy是否為0,確保主進程沒有占用BU-61580后,才會開始正式訪問。值得注意的是在主進程中,每次將標(biāo)志位BUS_busy置1后,都會延時4μs才開始執(zhí)行下一條程序。BU-61580在16MHz晶振頻率下,完成讀或?qū)懸粭l指令的最長時間不大于4μs。因此該延時足以確保,數(shù)據(jù)更新進程在執(zhí)行讀寫操作BU-61580的過程中遭遇BUS_busy置1的情況時,能夠及時完成當(dāng)前操作再暫停進程釋放BU-61580控制權(quán)。
根據(jù)上述的軟件設(shè)計,以VHDL語言編寫了RT模式下的1553B接口軟件,該軟件主要完成2個功能:
1)實現(xiàn)1553B接收指令:終端地址6,子地址21,23個數(shù)據(jù)字,數(shù)據(jù)依次為0~22。采用RT子地址雙緩沖,子地址21接收端對應(yīng)的2個數(shù)據(jù)塊首地址分別為0×0260和0×0280。
2)實現(xiàn)1553B發(fā)送指令:終端地址6,子地址2,4個數(shù)據(jù)字,數(shù)據(jù)依次為9~6。以發(fā)送雙緩沖的方式將數(shù)據(jù)以1ms周期定期更新至BU-61580,子地址2發(fā)送端對應(yīng)的2個數(shù)據(jù)塊首地址分別為0×0540和0×0840。
通過BU-61580的專用測試用例對Modelsim軟件的軟件功能進行仿真驗證,驗證結(jié)果如圖4和圖5所示。仿真結(jié)果證明了1553B接口軟件已達到目標(biāo)功能,可以實現(xiàn)與BU-61580的交互通信。下面將把接口硬件與軟件結(jié)合接入總線網(wǎng)絡(luò)進行實驗驗證。
根據(jù)上文所述方法設(shè)計實現(xiàn)的1553B總線接口電路如圖6所示。使用DDC的PCI-1553板卡配合C++ Builder編寫的上位機作為BC端,通過變壓器耦合方式與本文設(shè)計的接口電路相連,對其進行通信測試。測試流程為先發(fā)送一次1553B接收指令,再以5ms為周期連續(xù)發(fā)送1553B發(fā)送指令。
為了便于觀察測試結(jié)果,對2.2節(jié)所述的軟件功能進行適應(yīng)性優(yōu)化,將發(fā)送指令中子地址2的數(shù)據(jù)字也改為23個,令程序在收到子地址21的23個數(shù)據(jù)字后,再將其按1ms周期存入子地址2對應(yīng)的數(shù)據(jù)塊供BC讀取。每次存入前均將23個數(shù)據(jù)字在現(xiàn)有基礎(chǔ)上加1。這樣通過BC接收數(shù)據(jù)就能同時確認(rèn)1553B總線接口是否已正確取到BC發(fā)送的數(shù)據(jù)。
實驗測試結(jié)果如圖7和圖8所示,從圖中可以看出1553B總線接口可以準(zhǔn)確響應(yīng)BC端發(fā)送的命令,正確地接收和發(fā)送數(shù)據(jù)。同時程序內(nèi)部也在以發(fā)送雙緩沖模式定期刷新數(shù)據(jù),上位機收到的總是延時在1ms以內(nèi)的最新的數(shù)據(jù),與5ms的指令發(fā)送周期無關(guān),實時性得到提高。該1553B總線接口結(jié)構(gòu)簡單,實時性好,能夠應(yīng)用在對響應(yīng)速率有嚴(yán)格要求的系統(tǒng)中,具有良好的適應(yīng)性,已在本單位若干項目中進行了多次應(yīng)用,可靠性得到驗證。
本文提出了一種RT模式下的1553B總線接口,該接口硬件上以BU-61580為總線協(xié)議處理器,以FPGA為主處理器,軟件上在接收和發(fā)送端均采用雙緩沖結(jié)構(gòu)。文中對總線接口的設(shè)計方案進行了詳細(xì)闡述,并通過仿真和實驗手段對總線接口的功能和性能進行了論證。該設(shè)計方案具有結(jié)構(gòu)簡單、實時性好、可靠性高的優(yōu)點,可以滿足各種不同應(yīng)用需求,對其他的1553B總線接口具有普遍的參考和借鑒意義。
本文提出了一種RT模式下的1553B總線接口,該接口硬件上以BU-61580為總線協(xié)議處理器,以深圳國微的SMQV600作為主處理器,在FPGA內(nèi)部實現(xiàn)接口粘合邏輯,降低了電路結(jié)構(gòu)的復(fù)雜性。
本文在FPGA軟件設(shè)計中,采用收發(fā)雙緩沖機制處理與BU-61580的數(shù)據(jù)通信,并通過仿真和實驗手段對其功能和性能進行了驗證。相較于常用的中斷響應(yīng)機制,該設(shè)計方案可以提高數(shù)據(jù)發(fā)送的實時性,并能夠避免極端情況下的數(shù)據(jù)更新沖突,保證了可靠性,更適合控制系統(tǒng)、導(dǎo)航系統(tǒng)等對于實時性和可靠性都有很高要求的應(yīng)用場景。
本文將FPGA的1553通信軟件分為4個軟件模塊進行設(shè)計,功能劃分明確,移植性好。該設(shè)計思路也可用于其他的1553B總線接口設(shè)計中,具有廣泛的適應(yīng)性。