本發(fā)明涉及可編程邏輯器件技術(shù)領(lǐng)域,尤其涉及一種遠程升級方法和裝置。
背景技術(shù):
遠程升級是現(xiàn)場可編程門陣列(FPGA)的一個主要優(yōu)點,通過升級涉及增強系統(tǒng)功能。
如圖1所示,遠程升級時,通過遠程升級通道(例如Ethernet以太網(wǎng),PCIe,USB等)或媒介(例如USB存儲條,SD存儲卡等)從遠端發(fā)送數(shù)據(jù)流到FPGA。FPGA的用戶邏輯通過通信協(xié)議(例如TCP/IP,PCI,UDP,UART等)或?qū)S薪涌诮邮諗?shù)據(jù)流,將數(shù)據(jù)流編程到FLASH中。FPGA上電時,通過主配置模式將數(shù)據(jù)流從FLASH取出,實現(xiàn)對FPGA的配置。
傳統(tǒng)的遠程升級數(shù)據(jù)流結(jié)構(gòu)如圖2所示,至少順序包括:應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序、黃金數(shù)據(jù)流、應(yīng)用數(shù)據(jù)流;其中,執(zhí)行應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序可直接跳轉(zhuǎn)到指定位置的應(yīng)用數(shù)據(jù)流;黃金數(shù)據(jù)流是一種正確的備用數(shù)據(jù)流,他有充分的完整性和可執(zhí)行性,特點是其數(shù)據(jù)版本較低。
更新應(yīng)用數(shù)據(jù)流時,遠程升級應(yīng)用環(huán)境負責多變,經(jīng)常會異常斷電,如果在升級的過程中異常斷電了,從傳統(tǒng)的遠程升級數(shù)據(jù)流的結(jié)構(gòu)可以發(fā)現(xiàn),在再次上電后,仍然會順序執(zhí)行應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序,進而跳轉(zhuǎn)到指定的應(yīng)用數(shù)據(jù)流,而此時的應(yīng)用數(shù)據(jù)流由于斷電已經(jīng)是不完整的數(shù)據(jù)流,不能成功的配置FPGA,會導(dǎo)致整個系統(tǒng)陷入死循環(huán)中,可靠性差,制約了FPGA的應(yīng)用。
技術(shù)實現(xiàn)要素:
本發(fā)明提供了一種遠程升級方法和裝置,解決了現(xiàn)有技術(shù)中遠程升級可靠性差,出現(xiàn)錯誤難以解決的問題。
為了解決上述技術(shù)問題,本發(fā)明提供了一種遠程升級方法,應(yīng)用于FPGA,包括至少一個存儲于FLASH中的遠程升級數(shù)據(jù)流,包括:
載入所述遠程升級數(shù)據(jù)流,所述遠程升級數(shù)據(jù)流至少順序包括:應(yīng)用數(shù)據(jù)流開關(guān)程序、應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序、黃金數(shù)據(jù)流、應(yīng)用數(shù)據(jù)流;其中,所述應(yīng)用數(shù)據(jù)流開關(guān)程序處于第一狀態(tài)時,所述應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序使能,所述應(yīng)用數(shù)據(jù)流開關(guān)程序處于第二狀態(tài)時,所述應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序去使能;
將所述應(yīng)用數(shù)據(jù)流開關(guān)程序配置為第一狀態(tài);
執(zhí)行所述應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序,根據(jù)所述應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序跳轉(zhuǎn)并載入指定位置的所述應(yīng)用數(shù)據(jù)流;在載入指定位置的所述應(yīng)用數(shù)據(jù)流的過程中,配置所述應(yīng)用數(shù)據(jù)流開關(guān)程序為第二狀態(tài);
若載入所述應(yīng)用數(shù)據(jù)流的過程中出現(xiàn)錯誤,則再次重新載入所述遠程升級數(shù)據(jù)流,并順序載入所述黃金數(shù)據(jù)流。
可選的,所述方法還包括:若載入所述應(yīng)用數(shù)據(jù)流的過程中未出現(xiàn)錯誤,則在載入所述應(yīng)用數(shù)據(jù)流完成后,配置所述應(yīng)用數(shù)據(jù)流開關(guān)程序為第一狀態(tài)。
可選的,所述應(yīng)用數(shù)據(jù)流開關(guān)程序處于第一狀態(tài)包括:所述應(yīng)用數(shù)據(jù)流開關(guān)程序被擦除,或所述應(yīng)用數(shù)據(jù)流開關(guān)程序被打開。
可選的,所述FLASH至少包括SPI FLASH和BPI FLASH中的任意一種,其中,當所述FLASH包括SPI FLASH時,所述應(yīng)用數(shù)據(jù)流開關(guān)程序由同步字和至少一個填充字組成;當所述FLASH包括BPI FLASH時,所述應(yīng)用數(shù)據(jù)流開關(guān)程序由總線位寬自動監(jiān)測和至少一個填充字組成。
可選的,當所述FLASH包括SPI FLASH時,所述應(yīng)用數(shù)據(jù)流開關(guān)程序被擦除包括:所述同步字被擦除;被擦除的同步字的存儲空間被所述填充字所覆蓋。
為了解決上述技術(shù)問題,本發(fā)明還提供了一種遠程升級裝置,應(yīng)用于FPGA,包括載入模塊、配置模塊;其中:
所述載入模塊載入遠程升級數(shù)據(jù)流,所述遠程升級數(shù)據(jù)流存儲于FLASH中,所述遠程升級數(shù)據(jù)流至少順序包括:應(yīng)用數(shù)據(jù)流開關(guān)程序、應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序、黃金數(shù)據(jù)流、應(yīng)用數(shù)據(jù)流;其中,所述應(yīng)用數(shù)據(jù)流開關(guān)程序處于第一狀態(tài)時,所述應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序使能,所述應(yīng)用數(shù)據(jù)流開關(guān)程序處于第二狀態(tài)時,所述應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序去使能;
所述配置模塊將所述應(yīng)用數(shù)據(jù)流開關(guān)程序配置為第一狀態(tài);
所述載入模塊執(zhí)行所述應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序,根據(jù)所述應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序跳轉(zhuǎn)并載入指定位置的所述應(yīng)用數(shù)據(jù)流;在載入指定位置的所述應(yīng)用數(shù)據(jù)流的過程中,所述配置模塊配置所述應(yīng)用數(shù)據(jù)流開關(guān)程序為第二狀態(tài);
若所述載入模塊載入所述應(yīng)用數(shù)據(jù)流的過程中出現(xiàn)錯誤,所述載入模塊再次重新載入所述遠程升級數(shù)據(jù)流,并順序載入所述黃金數(shù)據(jù)流。
可選的,所述配置模塊還用于:若所述載入模塊載入所述應(yīng)用數(shù)據(jù)流的過程中未出現(xiàn)錯誤,則在載入所述應(yīng)用數(shù)據(jù)流完成后,配置所述應(yīng)用數(shù)據(jù)流開關(guān)程序為第一狀態(tài)。
可選的,所述配置模塊將所述應(yīng)用數(shù)據(jù)流開關(guān)程序配置為第一狀態(tài)包括:將所述應(yīng)用數(shù)據(jù)流開關(guān)程序擦除,或?qū)⑺鰬?yīng)用數(shù)據(jù)流開關(guān)程序打開。
可選的,所述FLASH至少包括SPI FLASH和BPI FLASH中的任意一種,其中,當所述FLASH包括SPI FLASH時,所述應(yīng)用數(shù)據(jù)流開關(guān)程序由同步字和至少一個填充字組成;當所述FLASH包括BPI FLASH時,所述應(yīng)用數(shù)據(jù)流開關(guān)程序由總線位寬自動監(jiān)測和至少一個填充字組成。
可選的,所述當所述FLASH包括SPI FLASH時,所述配置模塊將所述應(yīng)用數(shù)據(jù)流開關(guān)程序擦除包括:將所述同步字擦除;被擦除的同步字的存儲空間被所述填充字所覆蓋。
有益效果
本發(fā)明提供了一種遠程升級方法和裝置,應(yīng)用于FPGA,包括至少一個存儲于FLASH中的遠程升級數(shù)據(jù)流,首先載入遠程升級數(shù)據(jù)流,將應(yīng)用數(shù)據(jù)流開關(guān)程序配置為第一狀態(tài),執(zhí)行應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序,根據(jù)應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序跳轉(zhuǎn)并載入指定位置的應(yīng)用數(shù)據(jù)流,在載入指定位置的應(yīng)用數(shù)據(jù)流的過程中,配置應(yīng)用數(shù)據(jù)流開關(guān)程序為第二狀態(tài),若載入應(yīng)用數(shù)據(jù)流的過程中出現(xiàn)錯誤,則再次重新載入遠程升級數(shù)據(jù)流,并順序載入黃金數(shù)據(jù)流。通過本發(fā)明的實施,有效的避免了由于異常斷電等情況導(dǎo)致載入應(yīng)用數(shù)據(jù)流中斷時載入不完整的應(yīng)用數(shù)據(jù)流,而是載入黃金數(shù)據(jù)流,提高了FPGA應(yīng)用的可靠性和穩(wěn)定性。
附圖說明
圖1為現(xiàn)有技術(shù)中遠程升級的流程圖;
圖2為現(xiàn)有技術(shù)中遠程升級數(shù)據(jù)流的組成示意圖;
圖3為現(xiàn)有技術(shù)中FPGA遠程升級方法流程圖;
圖4為本發(fā)明第一實施例提供的一種遠程升級方法流程圖;
圖5為本發(fā)明第一實施例提供的一種遠程升級數(shù)據(jù)流的組成示意圖;
圖6為本發(fā)明第一實施例提供的一種SPI FLASH組成示意圖;
圖7為本發(fā)明第一實施例提供的一種BPI FLASH組成示意圖;
圖8為本發(fā)明第二實施例提供的一種遠程升級裝置模塊示意圖;
圖9為本發(fā)明第三實施例提供的一種遠程升級方法流程圖。
具體實施方式
請參考圖3,圖3示出了現(xiàn)有技術(shù)中FPGA遠程升級的流程,包括:
S301、上電之后,載入應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序;
S302、根據(jù)應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序載入指定位置的應(yīng)用數(shù)據(jù)流;
S303、載入過程中是否發(fā)生錯誤,若是,轉(zhuǎn)到S304,若否,轉(zhuǎn)到S305;其中,這里的錯誤是由應(yīng)用數(shù)據(jù)流中的錯誤檢測程序所檢測到的,可以包括應(yīng)用數(shù)據(jù)流的版本錯誤,應(yīng)用數(shù)據(jù)流中的軟件代碼錯誤等等;
S304、載入黃金數(shù)據(jù)流;其中,載入黃金數(shù)據(jù)流是從FLASH 0地址載入的,黃金數(shù)據(jù)流是一種完整的備用數(shù)據(jù)流,一般不會發(fā)生變化,在故障時可以保證FPGA的正常工作。
S305、FPGA進入正常工作狀態(tài),或者說是用戶模式;與之對應(yīng)的,是FPGA載入FLASH中的應(yīng)用數(shù)據(jù)流未完成時的配置模式。
S306、是否進行遠程升級,若是,轉(zhuǎn)到S307,若否,則轉(zhuǎn)到S305;
S307、更新應(yīng)用數(shù)據(jù)流。更新應(yīng)用數(shù)據(jù)流的過程需要從FLASH中載入指定位置的新的應(yīng)用數(shù)據(jù)流,因此,跳轉(zhuǎn)到S301,載入應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序。
可以看出,現(xiàn)有技術(shù)中的遠程升級的方案針對可能出現(xiàn)的錯誤僅僅是利用應(yīng)用數(shù)據(jù)流中的錯誤檢測程序來檢測,這種檢測方式對于異常掉電等導(dǎo)致遠程升級錯誤的場景沒有作用,掉電恢復(fù)后,F(xiàn)PGA會嘗試執(zhí)行應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序,從而跳轉(zhuǎn)到不完整的應(yīng)用數(shù)據(jù)流中,而不完整的數(shù)據(jù)流并不能成功配置FPGA,F(xiàn)PGA讀完FLASH最后一個地址后,返回o地址載入應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序,如此往復(fù),整個系統(tǒng)陷入一個死循環(huán)。
本發(fā)明的構(gòu)思點在于:在應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序之前,設(shè)置一個應(yīng)用數(shù)據(jù)流開關(guān)程序,用應(yīng)用數(shù)據(jù)流開關(guān)程序的兩種狀態(tài)決定應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序的使能與否,當應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序使能時,執(zhí)行應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序可跳轉(zhuǎn)到指定的應(yīng)用數(shù)據(jù)流并進行載入,當應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序去使能時,執(zhí)行應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序不會進行跳轉(zhuǎn),而是順序執(zhí)行之后的黃金數(shù)據(jù)流,從而可以實現(xiàn)在載入錯誤時,避免再次載入不完整的應(yīng)用數(shù)據(jù)流,而是載入絕對完整的正確的黃金數(shù)據(jù)流,提升了FPGA應(yīng)用的可靠性和穩(wěn)定性。
下面結(jié)合附圖對本發(fā)明的具體實施方式作進一步說明。
第一實施例
請參考圖4,圖4為本發(fā)明第一實施例提供的一種遠程升級方法流程圖,應(yīng)用于FPGA,包括至少一個存儲于FLASH中的遠程升級數(shù)據(jù)流;遠程升級方法包括:
S401、載入遠程升級數(shù)據(jù)流,遠程升級數(shù)據(jù)流至少順序包括:應(yīng)用數(shù)據(jù)流開關(guān)程序、應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序、黃金數(shù)據(jù)流、應(yīng)用數(shù)據(jù)流;其中,應(yīng)用數(shù)據(jù)流開關(guān)程序處于第一狀態(tài)時,應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序使能,應(yīng)用數(shù)據(jù)流開關(guān)程序處于第二狀態(tài)時,應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序去使能;
S402、將應(yīng)用數(shù)據(jù)流開關(guān)程序配置為第一狀態(tài);
S403、執(zhí)行應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序,根據(jù)應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序跳轉(zhuǎn)并載入指定位置的應(yīng)用數(shù)據(jù)流;在載入指定位置的應(yīng)用數(shù)據(jù)流的過程中,配置應(yīng)用數(shù)據(jù)流開關(guān)程序為第二狀態(tài);
S404、若載入應(yīng)用數(shù)據(jù)流的過程中出現(xiàn)錯誤,則再次重新載入遠程升級數(shù)據(jù)流,并順序載入黃金數(shù)據(jù)流。
請參考圖5,圖5示出了本發(fā)明各實施例中的遠程升級數(shù)據(jù)流的組成,至少順序包括:應(yīng)用數(shù)據(jù)流開關(guān)程序、應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序、黃金數(shù)據(jù)流、應(yīng)用數(shù)據(jù)流。順序的含義是,存儲的位置從低地址到高地址的順序,正常載入過程也是按照遠程升級數(shù)據(jù)流的組成順序進行,如圖中的箭頭方向所示。應(yīng)用數(shù)據(jù)流開關(guān)程序可以控制應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序的使能與否,根據(jù)應(yīng)用數(shù)據(jù)流開關(guān)程序所處的狀態(tài),當應(yīng)用數(shù)據(jù)流開關(guān)程序處于第一狀態(tài)時,應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序使能,應(yīng)用數(shù)據(jù)流開關(guān)程序處于第二狀態(tài)時,應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序去使能。在本實施例中,應(yīng)用數(shù)據(jù)流開關(guān)程序的第一狀態(tài)和第二狀態(tài)是相反的,由于其是一種開關(guān)程序,就會具備開和關(guān)兩種狀態(tài),這兩種狀態(tài)分別對應(yīng)于第一狀態(tài)和第二狀態(tài),而第一狀態(tài)和第二狀態(tài)如何與開關(guān)這兩種狀態(tài)對應(yīng)則可以根據(jù)具體的應(yīng)用進行配置。在本實施例中,應(yīng)用數(shù)據(jù)流開關(guān)程序處于第一狀態(tài)時,應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序使能,那么,此時具體的第一狀態(tài)可以是:應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序被擦除,此時應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序使能,執(zhí)行應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序可直接進行跳轉(zhuǎn)操作,跳轉(zhuǎn)到指定的位置的應(yīng)用數(shù)據(jù)流進行載入。
應(yīng)用數(shù)據(jù)流開關(guān)程序和應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序一般占用的存儲空間是在FLASH中的一個最小擦除單元,且按照地址順序排列,應(yīng)用數(shù)據(jù)流開關(guān)程序在前,應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序在后,保證載入時是先載入應(yīng)用數(shù)據(jù)流開關(guān)程序,而后載入應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序,從而,如果載入的應(yīng)用數(shù)據(jù)流開關(guān)程序處于第一狀態(tài),那么應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序使能,繼續(xù)載入到應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序時就可以跳轉(zhuǎn)到指定位置的應(yīng)用數(shù)據(jù)流。而如果載入的應(yīng)用數(shù)據(jù)流開關(guān)程序處于第二狀態(tài)中,那么,應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序去使能,即使執(zhí)行到應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序也不進行跳轉(zhuǎn),而是順序載入接下來的黃金數(shù)據(jù)流。
在FLASH中可以存儲多個應(yīng)用數(shù)據(jù)流,這些應(yīng)用數(shù)據(jù)流一些是舊的應(yīng)用數(shù)據(jù)流,一些是新的,待升級的應(yīng)用數(shù)據(jù)流,升級的過程包括將新的應(yīng)用數(shù)據(jù)流覆蓋舊的應(yīng)用數(shù)據(jù)流。FLASH除了舊的應(yīng)用數(shù)據(jù)流之外,新的應(yīng)用數(shù)據(jù)流可以通過遠程升級通道或媒介獲取,可以經(jīng)過FPGA,也可以不經(jīng)過FPGA,可以經(jīng)過待升級的FPGA,也可以經(jīng)過其他FPGA。
在遠程升級的過程中,由于異常掉電等情況,載入應(yīng)用數(shù)據(jù)流可能出現(xiàn)錯誤,導(dǎo)致應(yīng)用數(shù)據(jù)流不完整,比如是一半的新應(yīng)用數(shù)據(jù)流,一般是舊的應(yīng)用數(shù)據(jù)流,這樣的應(yīng)用數(shù)據(jù)流并不能配置成功;在載入應(yīng)用數(shù)據(jù)流的過程中,將應(yīng)用數(shù)據(jù)流開關(guān)程序配置為第二狀態(tài),在第二狀態(tài)下,應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序處于去使能的狀態(tài)下,因此,在再次上電之后,當FPGA試圖重新載入遠程升級數(shù)據(jù)流時,由于應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序已經(jīng)去使能,在順序執(zhí)行到應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序時并不會跳轉(zhuǎn)到指定的應(yīng)用數(shù)據(jù)流,而是順序載入接下來的黃金數(shù)據(jù)流,黃金數(shù)據(jù)流是完整的正常數(shù)據(jù)流,可以保證FPGA的正常運作,且一般情況下黃金數(shù)據(jù)流不會被更改,避免黃金數(shù)據(jù)流在更改的過程中出現(xiàn)錯誤??梢哉J為,黃金數(shù)據(jù)流是一種絕對正確的備用數(shù)據(jù)流。雖然黃金數(shù)據(jù)流的版本相較于應(yīng)用數(shù)據(jù)流較低,但其穩(wěn)定性高,可以順利解決在使用過程中的各種突發(fā)的故障情況。
若在遠程升級過程中,載入應(yīng)用數(shù)據(jù)流的過程中未出現(xiàn)錯誤,則在載入應(yīng)用數(shù)據(jù)流完成后,配置應(yīng)用數(shù)據(jù)流開關(guān)程序為第一狀態(tài)。如果在載入應(yīng)用數(shù)據(jù)流的過程中沒有出現(xiàn)錯誤,那么就可以認為,遠程升級已經(jīng)完成,那么,F(xiàn)PGA就可以自如的載入升級完成后的應(yīng)用數(shù)據(jù)流,即應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序所指定的應(yīng)用數(shù)據(jù)流。
本實施例中的FLASH至少可以包括:SPI FLASH和BPI FLASH中的任意一種。其中,請參考圖6,圖6示出了一種SPI FLASH的組成示意,SPI FLASH的特點是串行,其工作效率較可并行的BPI FLASH更低。圖中,SPI FLASH的借口中,clk為時鐘信號C,cs_n為SPI FLASH片選信號S,mosi為SPI FLASH數(shù)據(jù)輸入信號D,miso為SPI FLASH數(shù)據(jù)輸出信號Q。
下表示出了一種存儲于SPI FLASH中的遠程升級數(shù)據(jù)流的組成部分。
表1
請參考圖7,圖7示出了一種BPI FLASH的組成示意。
下表示出了一種存儲于BPI FLASH中的遠程升級數(shù)據(jù)流的組成部分。
表2
SPI FLASH中的應(yīng)用數(shù)據(jù)流開關(guān)程序由同步字和至少一個填充字組成,BPI FLASH中應(yīng)用數(shù)據(jù)流開關(guān)程序由總線位寬自動監(jiān)測和至少一個填充字組成。
本發(fā)明提供了一種遠程升級方法,應(yīng)用與FPGA,載入遠程升級數(shù)據(jù)流,將應(yīng)用數(shù)據(jù)流開關(guān)程序配置為第一狀態(tài),執(zhí)行應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序,根據(jù)應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序跳轉(zhuǎn)并載入指定位置的應(yīng)用數(shù)據(jù)流,在載入指定位置的應(yīng)用數(shù)據(jù)流的過程中,配置應(yīng)用數(shù)據(jù)流開關(guān)程序為第二狀態(tài);若載入應(yīng)用數(shù)據(jù)流的過程中出現(xiàn)錯誤,則再次重新載入遠程升級數(shù)據(jù)流,并順序載入黃金數(shù)據(jù)流。通過本發(fā)明的實施,有效的避免了由于異常斷電等情況導(dǎo)致載入應(yīng)用數(shù)據(jù)流中斷時載入不完整的應(yīng)用數(shù)據(jù)流,而是載入黃金數(shù)據(jù)流,提高了FPGA應(yīng)用的可靠性和穩(wěn)定性。
第二實施例
請參考圖8,圖8為本發(fā)明第二實施例提供的一種遠程升級裝置模塊示意圖,應(yīng)用于FPGA,包括載入模塊、配置模塊;其中:
載入模塊載入遠程升級數(shù)據(jù)流,遠程升級數(shù)據(jù)流存儲于FLASH中,遠程升級數(shù)據(jù)流至少順序包括:應(yīng)用數(shù)據(jù)流開關(guān)程序、應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序、黃金數(shù)據(jù)流、應(yīng)用數(shù)據(jù)流;其中,應(yīng)用數(shù)據(jù)流開關(guān)程序處于第一狀態(tài)時,應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序使能,應(yīng)用數(shù)據(jù)流開關(guān)程序處于第二狀態(tài)時,應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序去使能;
配置模塊將應(yīng)用數(shù)據(jù)流開關(guān)程序配置為第一狀態(tài);
載入模塊執(zhí)行應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序,根據(jù)應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序跳轉(zhuǎn)并載入指定位置的應(yīng)用數(shù)據(jù)流;在載入指定位置的應(yīng)用數(shù)據(jù)流的過程中,配置模塊配置應(yīng)用數(shù)據(jù)流開關(guān)程序為第二狀態(tài);
若載入模塊載入應(yīng)用數(shù)據(jù)流的過程中出現(xiàn)錯誤,載入模塊再次重新載入遠程升級數(shù)據(jù)流,并順序載入黃金數(shù)據(jù)流。
遠程升級數(shù)據(jù)流的組成,至少順序包括:應(yīng)用數(shù)據(jù)流開關(guān)程序、應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序、黃金數(shù)據(jù)流、應(yīng)用數(shù)據(jù)流。順序的含義是,存儲的位置從低地址到高地址的順序,正常載入過程也是按照遠程升級數(shù)據(jù)流的組成順序進行,如圖中的箭頭方向所示。應(yīng)用數(shù)據(jù)流開關(guān)程序可以控制應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序的使能與否,根據(jù)應(yīng)用數(shù)據(jù)流開關(guān)程序所處的狀態(tài),當應(yīng)用數(shù)據(jù)流開關(guān)程序處于第一狀態(tài)時,應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序使能,應(yīng)用數(shù)據(jù)流開關(guān)程序處于第二狀態(tài)時,應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序去使能。在本實施例中,應(yīng)用數(shù)據(jù)流開關(guān)程序的第一狀態(tài)和第二狀態(tài)是相反的,由于其是一種開關(guān)程序,就會具備開和關(guān)兩種狀態(tài),這兩種狀態(tài)分別對應(yīng)于第一狀態(tài)和第二狀態(tài),而第一狀態(tài)和第二狀態(tài)如何與開關(guān)這兩種狀態(tài)對應(yīng)則可以根據(jù)具體的應(yīng)用進行配置。在本實施例中,應(yīng)用數(shù)據(jù)流開關(guān)程序處于第一狀態(tài)時,應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序使能,那么,此時具體的第一狀態(tài)可以是:應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序被擦除,此時應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序使能,執(zhí)行應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序可直接進行跳轉(zhuǎn)操作,跳轉(zhuǎn)到指定的位置的應(yīng)用數(shù)據(jù)流進行載入。
應(yīng)用數(shù)據(jù)流開關(guān)程序和應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序一般占用的存儲空間是在FLASH中的一個最小擦除單元,且按照地址順序排列,應(yīng)用數(shù)據(jù)流開關(guān)程序在前,應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序在后,保證載入時是先載入應(yīng)用數(shù)據(jù)流開關(guān)程序,而后載入應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序,從而,如果載入的應(yīng)用數(shù)據(jù)流開關(guān)程序處于第一狀態(tài),那么應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序使能,繼續(xù)載入到應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序時就可以跳轉(zhuǎn)到指定位置的應(yīng)用數(shù)據(jù)流。而如果載入的應(yīng)用數(shù)據(jù)流開關(guān)程序處于第二狀態(tài)中,那么,應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序去使能,即使執(zhí)行到應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序也不進行跳轉(zhuǎn),而是順序載入接下來的黃金數(shù)據(jù)流。
在FLASH中可以存儲多個應(yīng)用數(shù)據(jù)流,這些應(yīng)用數(shù)據(jù)流一些是舊的應(yīng)用數(shù)據(jù)流,一些是新的,待升級的應(yīng)用數(shù)據(jù)流,升級的過程包括將新的應(yīng)用數(shù)據(jù)流覆蓋舊的應(yīng)用數(shù)據(jù)流。FLASH除了舊的應(yīng)用數(shù)據(jù)流之外,新的應(yīng)用數(shù)據(jù)流可以通過遠程升級通道或媒介獲取,可以經(jīng)過FPGA,也可以不經(jīng)過FPGA,可以經(jīng)過待升級的FPGA,也可以經(jīng)過其他FPGA。
在遠程升級的過程中,由于異常掉電等情況,載入應(yīng)用數(shù)據(jù)流可能出現(xiàn)錯誤,導(dǎo)致應(yīng)用數(shù)據(jù)流不完整,比如是一半的新應(yīng)用數(shù)據(jù)流,一般是舊的應(yīng)用數(shù)據(jù)流,這樣的應(yīng)用數(shù)據(jù)流并不能配置成功;在載入應(yīng)用數(shù)據(jù)流的過程中,將應(yīng)用數(shù)據(jù)流開關(guān)程序配置為第二狀態(tài),在第二狀態(tài)下,應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序處于去使能的狀態(tài)下,因此,在再次上電之后,當FPGA試圖重新載入遠程升級數(shù)據(jù)流時,由于應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序已經(jīng)去使能,在順序執(zhí)行到應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序時并不會跳轉(zhuǎn)到指定的應(yīng)用數(shù)據(jù)流,而是順序載入接下來的黃金數(shù)據(jù)流,黃金數(shù)據(jù)流是完整的正常數(shù)據(jù)流,可以保證FPGA的正常運作,且一般情況下黃金數(shù)據(jù)流不會被更改,避免黃金數(shù)據(jù)流在更改的過程中出現(xiàn)錯誤??梢哉J為,黃金數(shù)據(jù)流是一種絕對正確的備用數(shù)據(jù)流。雖然黃金數(shù)據(jù)流的版本相較于應(yīng)用數(shù)據(jù)流較低,但其穩(wěn)定性高,可以順利解決在使用過程中的各種突發(fā)的故障情況。
若在遠程升級過程中,載入應(yīng)用數(shù)據(jù)流的過程中未出現(xiàn)錯誤,則在載入應(yīng)用數(shù)據(jù)流完成后,配置應(yīng)用數(shù)據(jù)流開關(guān)程序為第一狀態(tài)。如果在載入應(yīng)用數(shù)據(jù)流的過程中沒有出現(xiàn)錯誤,那么就可以認為,遠程升級已經(jīng)完成,那么,F(xiàn)PGA就可以自如的載入升級完成后的應(yīng)用數(shù)據(jù)流,即應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序所指定的應(yīng)用數(shù)據(jù)流。
第三實施例
請參考圖9,圖9為本發(fā)明第三實施例提供的一種遠程升級方法流程圖,包括:
S901、上電之后,載入應(yīng)用數(shù)據(jù)流開關(guān)程序;此時的應(yīng)用數(shù)據(jù)流開關(guān)程序為第一狀態(tài),應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序使能;
S902、載入應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序;
S903、根據(jù)應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序載入指定位置的應(yīng)用數(shù)據(jù)流;
S904、載入過程中是否發(fā)生錯誤,若是,轉(zhuǎn)到S905,若否,轉(zhuǎn)到S906;其中,這里的錯誤是由應(yīng)用數(shù)據(jù)流中的錯誤檢測程序所檢測到的,可以包括應(yīng)用數(shù)據(jù)流的版本錯誤,應(yīng)用數(shù)據(jù)流中的軟件代碼錯誤等等;
S905、載入黃金數(shù)據(jù)流;其中,載入黃金數(shù)據(jù)流是從FLASH 0地址載入的,黃金數(shù)據(jù)流是一種完整的備用數(shù)據(jù)流,一般不會發(fā)生變化,在故障時可以保證FPGA的正常工作。
S906、FPGA進入正常工作狀態(tài),或者說是用戶模式;與之對應(yīng)的,是FPGA載入FLASH中的應(yīng)用數(shù)據(jù)流未完成時的配置模式。
S907、是否進行遠程升級,若是,轉(zhuǎn)到S908,若否,則轉(zhuǎn)到S906;
S908、將應(yīng)用數(shù)據(jù)流開關(guān)程序配置為第二狀態(tài);此時應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序去使能;
S909、更新應(yīng)用數(shù)據(jù)流。更新應(yīng)用數(shù)據(jù)流的過程需要從FLASH中載入指定位置的新的應(yīng)用數(shù)據(jù)流,因此,跳轉(zhuǎn)到S901,載入應(yīng)用數(shù)據(jù)流開關(guān)程序。而此時,由于應(yīng)用數(shù)據(jù)流開關(guān)程序配置為第二狀態(tài),若出現(xiàn)錯誤時,重新載入時應(yīng)用數(shù)據(jù)流跳轉(zhuǎn)程序不會使能,也就不會跳轉(zhuǎn)到應(yīng)用數(shù)據(jù)流,而是順序載入黃金數(shù)據(jù)流。
顯然,本領(lǐng)域的技術(shù)人員應(yīng)該明白,上述本發(fā)明的各模塊或各步驟可以用通用的計算裝置來實現(xiàn),它們可以集中在單個的計算裝置上,或者分布在多個計算裝置所組成的網(wǎng)絡(luò)上,可選地,它們可以用計算裝置可執(zhí)行的程序代碼來實現(xiàn),從而,可以將它們存儲在存儲介質(zhì)(ROM/RAM、磁碟、光盤)中由計算裝置來執(zhí)行,并且在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟,或者將它們分別制作成各個集成電路模塊,或者將它們中的多個模塊或步驟制作成單個集成電路模塊來實現(xiàn)。所以,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。
以上內(nèi)容是結(jié)合具體的實施方式對本發(fā)明所作的進一步詳細說明,不能認定本發(fā)明的具體實施只局限于這些說明。對于本發(fā)明所屬技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干簡單推演或替換,都應(yīng)當視為屬于本發(fā)明的保護范圍。