楊可
摘要:通過(guò)分析機(jī)載網(wǎng)絡(luò)節(jié)點(diǎn)各個(gè)復(fù)位源的特點(diǎn),針對(duì)復(fù)位過(guò)程中產(chǎn)生的訪問(wèn)錯(cuò)誤和復(fù)位死鎖問(wèn)題,設(shè)計(jì)了一種軟硬件結(jié)合的復(fù)位方法。首先介紹了該復(fù)位方法的實(shí)現(xiàn)架構(gòu),其次分析了該復(fù)位方法的各種復(fù)位過(guò)程,最后說(shuō)明了應(yīng)用該復(fù)位方法時(shí)需要注意的問(wèn)題。結(jié)果表明該復(fù)位方法在成功復(fù)位網(wǎng)絡(luò)節(jié)點(diǎn)的同時(shí),還可以實(shí)時(shí)檢測(cè)網(wǎng)絡(luò)節(jié)點(diǎn)的運(yùn)行狀態(tài),有利于提高系統(tǒng)設(shè)計(jì)的可靠性。
關(guān)鍵詞: 網(wǎng)絡(luò)節(jié)點(diǎn)1; 復(fù)位2; 死鎖3; 故障檢測(cè)4
中圖分類(lèi)號(hào):TP331.2 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)03-0288-03
1 引言
隨著機(jī)載電子系統(tǒng)的發(fā)展,網(wǎng)絡(luò)節(jié)點(diǎn)的設(shè)計(jì)日益復(fù)雜,如何確保網(wǎng)絡(luò)節(jié)點(diǎn)的穩(wěn)定運(yùn)行已經(jīng)成為系統(tǒng)設(shè)計(jì)的關(guān)鍵。復(fù)位功能是系統(tǒng)正常運(yùn)行的先決條件[1],網(wǎng)絡(luò)節(jié)點(diǎn)需要使用一種可靠的復(fù)位方法。
復(fù)位就是為了把系統(tǒng)初始化到一個(gè)確定的狀態(tài)[2],它的基本功能就是在系統(tǒng)上電時(shí)提供復(fù)位信號(hào),直至系統(tǒng)穩(wěn)定后,撤銷(xiāo)復(fù)位信號(hào);或者在系統(tǒng)異常時(shí)對(duì)系統(tǒng)進(jìn)行復(fù)位,使系統(tǒng)恢復(fù)正常工作。
本文通過(guò)分析網(wǎng)絡(luò)節(jié)點(diǎn)的復(fù)位情況,設(shè)計(jì)了一種軟件和硬件結(jié)合的復(fù)位方法。該方法能夠處理各種復(fù)位之間的組合及順序,保證網(wǎng)絡(luò)節(jié)點(diǎn)在上電后成功復(fù)位,又可以實(shí)時(shí)檢測(cè)網(wǎng)絡(luò)節(jié)點(diǎn)的運(yùn)行,確保網(wǎng)絡(luò)節(jié)點(diǎn)出現(xiàn)故障后自動(dòng)進(jìn)行復(fù)位。
2 網(wǎng)絡(luò)節(jié)點(diǎn)復(fù)位分析
為了增強(qiáng)網(wǎng)絡(luò)節(jié)點(diǎn)的通用性,系統(tǒng)采用主機(jī)和網(wǎng)絡(luò)節(jié)點(diǎn)分離的方法。主機(jī)和網(wǎng)絡(luò)節(jié)點(diǎn)在上電后分別進(jìn)行復(fù)位,復(fù)位完成后主機(jī)通過(guò)主機(jī)接口訪問(wèn)網(wǎng)絡(luò)節(jié)點(diǎn)。
復(fù)位通常包括上電復(fù)位、外部復(fù)位、軟件復(fù)位和看門(mén)狗(WatchDog)復(fù)位[3],網(wǎng)絡(luò)節(jié)點(diǎn)的復(fù)位源由本地和外部?jī)刹糠謴?fù)位源組成,本地復(fù)位源包括上電復(fù)位和看門(mén)狗復(fù)位,外部復(fù)位源包括主機(jī)硬件復(fù)位和主機(jī)軟件復(fù)位。
上電復(fù)位:該復(fù)位在網(wǎng)絡(luò)節(jié)點(diǎn)上電時(shí)提供復(fù)位信號(hào),確保網(wǎng)絡(luò)節(jié)點(diǎn)在上電后進(jìn)入初始化狀態(tài)。由于網(wǎng)絡(luò)節(jié)點(diǎn)在上電時(shí)需要將程序從存儲(chǔ)器搬至FPGA,上電復(fù)位信號(hào)在程序搬運(yùn)完成前持續(xù)有效;
看門(mén)狗復(fù)位:該復(fù)位在網(wǎng)絡(luò)節(jié)點(diǎn)運(yùn)行異常時(shí)提供復(fù)位信號(hào),確保節(jié)點(diǎn)檢測(cè)到故障后進(jìn)行節(jié)點(diǎn)復(fù)位。檢測(cè)的故障包括軟件跑飛、時(shí)鐘故障和電源故障;
主機(jī)硬件復(fù)位:該復(fù)位為主機(jī)通過(guò)硬件連線提供的復(fù)位信號(hào),確保主機(jī)將節(jié)點(diǎn)復(fù)位到初始化狀態(tài)。復(fù)位的時(shí)機(jī)為主機(jī)上電或需要單獨(dú)復(fù)位節(jié)點(diǎn)時(shí);
主機(jī)軟件復(fù)位:該復(fù)位為主機(jī)通過(guò)軟件命令發(fā)送的復(fù)位。網(wǎng)絡(luò)節(jié)點(diǎn)在接收到軟件復(fù)位命令后通過(guò)解析生成復(fù)位信號(hào),然后控制需要復(fù)位的功能模塊和軟件進(jìn)行復(fù)位。
網(wǎng)絡(luò)節(jié)點(diǎn)在使用這幾種復(fù)位源時(shí),因?yàn)槭褂庙樞蝈e(cuò)誤或組合不當(dāng)會(huì)產(chǎn)生訪問(wèn)錯(cuò)誤或復(fù)位死鎖的問(wèn)題。
2.1 訪問(wèn)錯(cuò)誤
使用上電復(fù)位和主機(jī)硬件復(fù)位組合時(shí),如果上電復(fù)位先完成,則主機(jī)在主機(jī)硬件復(fù)位完成后可以正確訪問(wèn)網(wǎng)絡(luò)節(jié)點(diǎn)。如果主機(jī)硬件復(fù)位先于上電復(fù)位完成,主機(jī)訪問(wèn)網(wǎng)絡(luò)節(jié)點(diǎn)時(shí)網(wǎng)絡(luò)節(jié)點(diǎn)正在上電復(fù)位,會(huì)出現(xiàn)訪問(wèn)錯(cuò)誤,見(jiàn)圖1。
從圖1的示圖(A)可以看出,網(wǎng)絡(luò)節(jié)點(diǎn)在A1時(shí)刻完成上電復(fù)位。主機(jī)在之后的A2時(shí)刻完成主機(jī)硬件復(fù)位,此時(shí)主機(jī)訪問(wèn)網(wǎng)絡(luò)節(jié)點(diǎn)正確。示圖(B)可以看出,主機(jī)在B1時(shí)刻完成主機(jī)硬件復(fù)位,網(wǎng)絡(luò)節(jié)點(diǎn)在B2時(shí)刻完成上電復(fù)位。主機(jī)在B1到B2這段時(shí)間訪問(wèn)網(wǎng)絡(luò)節(jié)點(diǎn)時(shí)網(wǎng)絡(luò)節(jié)點(diǎn)還在上電復(fù)位,會(huì)出現(xiàn)訪問(wèn)錯(cuò)誤。
2.2 復(fù)位死鎖
為了避免訪問(wèn)錯(cuò)誤,網(wǎng)絡(luò)節(jié)點(diǎn)在復(fù)位后上報(bào)完成信號(hào)給主機(jī),主機(jī)撤銷(xiāo)主機(jī)硬件復(fù)位后再訪問(wèn)網(wǎng)絡(luò)節(jié)點(diǎn)。如果網(wǎng)絡(luò)節(jié)點(diǎn)將主機(jī)硬件復(fù)位作為復(fù)位完成信號(hào)的輸入,會(huì)出現(xiàn)復(fù)位死鎖的問(wèn)題,見(jiàn)圖2。
主機(jī)硬件復(fù)位信號(hào)作為網(wǎng)絡(luò)節(jié)點(diǎn)復(fù)位的輸入控制網(wǎng)絡(luò)節(jié)點(diǎn)開(kāi)始復(fù)位,所有的復(fù)位源撤銷(xiāo)后生成復(fù)位完成信號(hào),但主機(jī)在收到復(fù)位完成信號(hào)后才能撤銷(xiāo)主機(jī)硬件復(fù)位信號(hào),網(wǎng)絡(luò)節(jié)點(diǎn)出現(xiàn)了復(fù)位死鎖錯(cuò)誤。
由以上分析可以看出,復(fù)位的順序和組合會(huì)影響網(wǎng)絡(luò)節(jié)點(diǎn)的運(yùn)行,合理分配復(fù)位的順序以及作用的范圍非常重要。
3 復(fù)位系統(tǒng)設(shè)計(jì)
為了解決網(wǎng)絡(luò)節(jié)點(diǎn)訪問(wèn)錯(cuò)誤和復(fù)位死鎖的問(wèn)題,設(shè)計(jì)了一種復(fù)位方法。該復(fù)位方法基于先本地后外部的復(fù)位原則,按照從硬件到軟件的復(fù)位順序,使用上電復(fù)位、看門(mén)狗復(fù)位、主機(jī)硬件復(fù)位和主機(jī)軟件復(fù)位作為輸入,在復(fù)位完成后上報(bào)完成信號(hào)給主機(jī)。復(fù)位系統(tǒng)框圖見(jiàn)圖3。
功能模塊中的時(shí)鐘檢測(cè)單元負(fù)責(zé)檢測(cè)時(shí)鐘的正確性,生成硬件喂狗信號(hào),軟件中的軟件檢測(cè)程序檢測(cè)軟件的運(yùn)行情況,生成軟件喂狗信號(hào)。硬件喂狗和軟件喂狗信號(hào)通過(guò)邏輯與輸入復(fù)位芯片,由復(fù)位芯片生成看門(mén)狗復(fù)位,復(fù)位芯片同時(shí)對(duì)電源進(jìn)行檢測(cè)。
看門(mén)狗復(fù)位和上電復(fù)位通過(guò)邏輯與后生成本地復(fù)位。主機(jī)硬件復(fù)位和本地復(fù)位分別送給功能模塊,主機(jī)軟件復(fù)位通過(guò)軟件命令送給軟件。本地復(fù)位完成后由軟件生成復(fù)位完成信號(hào)上報(bào)給主機(jī),主機(jī)在主機(jī)上電復(fù)位完成后檢測(cè)該信號(hào),在該信號(hào)有效時(shí)主機(jī)才能訪問(wèn)網(wǎng)絡(luò)節(jié)點(diǎn)。
主機(jī)硬件復(fù)位和本地復(fù)位均可復(fù)位節(jié)點(diǎn)的所有功能模塊和軟件,主機(jī)軟件復(fù)位可以復(fù)位節(jié)點(diǎn)的相關(guān)軟件及功能模塊。所有的復(fù)位必須先完成功能模塊的復(fù)位后才可以完成軟件的復(fù)位。
網(wǎng)絡(luò)節(jié)點(diǎn)是主機(jī)訪問(wèn)的對(duì)象,當(dāng)本地復(fù)位和主機(jī)復(fù)位組合進(jìn)行復(fù)位時(shí),應(yīng)先完成本地復(fù)位,主機(jī)檢測(cè)到本地復(fù)位完成再開(kāi)始主機(jī)復(fù)位。
4 網(wǎng)絡(luò)節(jié)點(diǎn)復(fù)位過(guò)程
網(wǎng)絡(luò)節(jié)點(diǎn)的復(fù)位過(guò)程可以分為上電初始化復(fù)位、故障檢測(cè)復(fù)位和主機(jī)復(fù)位。
4.1上電初始化復(fù)位
上電后,網(wǎng)絡(luò)節(jié)點(diǎn)首先開(kāi)始上電初始化復(fù)位,使用上電復(fù)位作為輸入,復(fù)位過(guò)程如圖4。
上電初始化復(fù)位的持續(xù)時(shí)間由程序加載時(shí)間決定,可以通過(guò)加快程序加載減少上電初始化復(fù)位時(shí)間。
4.2故障檢測(cè)復(fù)位
網(wǎng)絡(luò)節(jié)點(diǎn)在運(yùn)行過(guò)程中實(shí)時(shí)檢測(cè)時(shí)鐘、電源及軟件運(yùn)行的情況。當(dāng)時(shí)鐘、電源及軟件出現(xiàn)異常時(shí)通過(guò)使能看門(mén)狗復(fù)位復(fù)位網(wǎng)絡(luò)節(jié)點(diǎn)。如果故障在復(fù)位后無(wú)法消除,則看門(mén)狗復(fù)位持續(xù)復(fù)位網(wǎng)絡(luò)節(jié)點(diǎn)。故障檢測(cè)復(fù)位過(guò)程如圖5。
4.3主機(jī)復(fù)位
主機(jī)在需要復(fù)位網(wǎng)絡(luò)節(jié)點(diǎn)時(shí),通過(guò)使能主機(jī)硬件復(fù)位或主機(jī)軟件復(fù)位進(jìn)行復(fù)位,主機(jī)復(fù)位過(guò)程如圖6。
主機(jī)硬件復(fù)位的持續(xù)時(shí)間由主機(jī)決定,在主機(jī)準(zhǔn)備好訪問(wèn)網(wǎng)絡(luò)節(jié)點(diǎn)前撤銷(xiāo)主機(jī)硬件復(fù)位即可。主機(jī)軟件復(fù)位通過(guò)軟件解析生成復(fù)位信號(hào),該復(fù)位信號(hào)在相關(guān)功能模塊和軟件開(kāi)始復(fù)位后撤銷(xiāo)。
當(dāng)本地復(fù)位和主機(jī)復(fù)位組合進(jìn)行復(fù)位時(shí),系統(tǒng)先執(zhí)行上電初始化復(fù)位過(guò)程,再執(zhí)行主機(jī)復(fù)位過(guò)程。
通過(guò)以上分析可以看出,上電初始化復(fù)位、故障檢測(cè)復(fù)位和主機(jī)復(fù)位均可成功復(fù)位系統(tǒng),其復(fù)位過(guò)程不會(huì)引起訪問(wèn)錯(cuò)誤或復(fù)位死鎖的問(wèn)題。
5 應(yīng)用中需要注意的問(wèn)題
本設(shè)計(jì)中主機(jī)和網(wǎng)絡(luò)節(jié)點(diǎn)上電時(shí)為異步復(fù)位,在應(yīng)用該復(fù)位方法時(shí)需要合理分配復(fù)位的過(guò)程。
PCIE總線規(guī)范中規(guī)定,設(shè)備退出復(fù)位狀態(tài)后,必須在80ms內(nèi)開(kāi)始鏈路定向和初始化。為了使軟件可見(jiàn),設(shè)備必須在復(fù)位結(jié)束的100ms內(nèi)準(zhǔn)備好接收配置請(qǐng)求。[4]
當(dāng)使用PCIE總線進(jìn)行通信時(shí),主機(jī)和網(wǎng)絡(luò)節(jié)點(diǎn)分別在復(fù)位完成后開(kāi)始鏈路定向和初始化,如果兩者復(fù)位結(jié)束的時(shí)間相差大于100ms, PCIE鏈路定向和初始化失敗,主機(jī)無(wú)法通過(guò)PCIE總線接口訪問(wèn)網(wǎng)絡(luò)節(jié)點(diǎn)。
為了解決該問(wèn)題,在使用PCIE總線等對(duì)初始化時(shí)間有要求的總線接口進(jìn)行通信時(shí),主機(jī)需要在網(wǎng)絡(luò)節(jié)點(diǎn)上電復(fù)位完成后單獨(dú)對(duì)網(wǎng)絡(luò)節(jié)點(diǎn)進(jìn)行一次主機(jī)復(fù)位,使主機(jī)和網(wǎng)絡(luò)節(jié)點(diǎn)同步完成復(fù)位,保證總線接口初始化成功。
6 結(jié)束語(yǔ)
本文針對(duì)網(wǎng)絡(luò)節(jié)點(diǎn)提出了一種軟硬件結(jié)合的復(fù)位方法。通過(guò)分析該復(fù)位方法的復(fù)位過(guò)程表明,該復(fù)位方法不但可以成功復(fù)位網(wǎng)絡(luò)節(jié)點(diǎn),還可以實(shí)時(shí)檢測(cè)網(wǎng)絡(luò)節(jié)點(diǎn)的運(yùn)行狀態(tài),同時(shí)消除訪問(wèn)錯(cuò)誤和復(fù)位死鎖的問(wèn)題,有利于提高系統(tǒng)設(shè)計(jì)的可靠性。目前該設(shè)計(jì)已成功應(yīng)用于機(jī)載網(wǎng)絡(luò)節(jié)點(diǎn)中。
參考文獻(xiàn):
[1] 王艷軍, 張勇. 一種實(shí)用的多芯片系統(tǒng)同步復(fù)位方法[J]. 光電技術(shù)應(yīng)用, 2007,22(5):60-62.
[2] 金立平.淺析MCU系統(tǒng)的復(fù)位電路[J].硅谷,2010(9):23.
[3] 孫國(guó)志,寧寧,張弛. 一種片上系統(tǒng)復(fù)位電路的設(shè)計(jì)[J]. 電子技術(shù)應(yīng)用,2012,38(12):32-35.
[4] Ravi Budruk, Don Anderson,Tom Shanley, PCI Express System Architecture.TIAN Y, WANG S,ZHANG B, translated, Beijing: Publishing House of Electronics Industry,2005.( Ravi Budruk, Don Anderson,Tom Shanley, PCI Express系統(tǒng)體系結(jié)構(gòu)標(biāo)準(zhǔn)教材[M]. 田玉敏,王崧,張波,譯. 北京:電子工業(yè)出版社,2005.
[5] 王國(guó)輝. Reset與嵌入式系統(tǒng)應(yīng)用的穩(wěn)定性[J]. 單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2013(8):5-8.
[6] 林學(xué)龍. MPC8xx系列處理器的嵌入式系統(tǒng)復(fù)位電路設(shè)計(jì)[J]. 單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2005(4):80-83.
[7] 郝建, 原茵茵. FPGA復(fù)位的可靠性設(shè)計(jì)方法[J]. 電子科技, 2013,26(10):125-127.
[8] 杜珺. 單片機(jī)復(fù)位狀態(tài)及外設(shè)復(fù)位信號(hào)的處理[J]. 信息技術(shù)與信息化,2014(12):70-71.