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