本發(fā)明涉及嵌入式系統(tǒng)領域,特別是一種時分復用的多核dsp程序引導及更新方法。
背景技術(shù):
1、數(shù)字信號處理器(dsp,digital?signal?proccessor)具有高速輸入輸出、運算精度高、實時性強等優(yōu)點,但dsp的外設資源有限,且不適合用于并行運算,因此常常在dsp的外圍配置fpga芯片,用于拓展dsp的外設接口、處理并行運算。同時為了固化dsp的程序,實現(xiàn)上電自動運行程序,系統(tǒng)集成了非易失性存儲芯片flash,用于存放dsp程序和相關數(shù)據(jù)。然而隨著科學技術(shù)的高速發(fā)展,信息處理系統(tǒng)對運算速度、數(shù)據(jù)吞吐量、高集成、小體積等方面提出了更高的要求。受限于物理極限、功耗與散熱、制造成本等方面,對單核dsp性能提高的收益甚微,因此dsp設計師從單核拓展為多核,用以滿足當前應用的需求,但仍然給板卡體積、成本控制帶來不小的挑戰(zhàn)。
2、常見的dsp程序引導方法是在dsp外圍配置非易失性存儲器,在dsp復位后,利用dsp的引導加載器將存儲器中的程序自動搬移到dsp內(nèi)部存儲空間并執(zhí)行,實現(xiàn)一次引導。但一次引導的程序長度固定且有限,往往不能滿足應用需求,因此在一次引導的程序中嵌入二次引導程序的功能,搬移更多的程序數(shù)據(jù),最終實現(xiàn)dsp的引導。論文《基于tms320c6713的flash燒寫及bootload程序設計》、論文《tms320vc33的引導加載方法設計與實現(xiàn)》、論文《tms320c671x系列dsp的引導程序設計技術(shù)》均采用該方法實現(xiàn)單核dsp的程序引導。該方法可推廣到多核dsp的程序引導,需要給每個dsp核配置一塊非易失性存儲器,存在成本高、板卡體積大、功耗高等缺點。
3、論文《基于多核dsp的實時雷達信號處理平臺設計》中公開了一種多核dsp程序引導方法,采用多模式引導加載和多核啟動引導加載的方案。具體通過在dsp主核的程序中添加多模啟動模塊,將dsp從核的程序入口地址賦值給從核相應的寄存器中,并通過主核向從核發(fā)送ipc中斷來喚醒從核實現(xiàn)引導。該方法雖然能夠通過1片flash實現(xiàn)多核dsp程序引導及更新,但若是主核引導失敗,其他從核均無法完成引導。
4、發(fā)明專利《一種無存儲器時實現(xiàn)多核dsp處理器的自舉方法》中公開了一種多核dsp程序引導方法,通過emfi口實現(xiàn)多核自舉功能。具體通過外部串口接收程序數(shù)據(jù)并存放在fpga板卡上的sdram,并將二級引導程序?qū)懭雂sp核0的地址,發(fā)送復位信號后使核0跳轉(zhuǎn)到二級引導程序完成引導,然后dsp核0通過emif讀取其他核的程序并分別保存到各自核的內(nèi)存中,最后向各核發(fā)送信號實現(xiàn)各核的程序引導。該方法雖然實現(xiàn)了多核dsp程序引導,但dsp的程序需要通過外部注入,無法實現(xiàn)上電自引導,且核0出現(xiàn)異常后,其他核均無法完成引導。
技術(shù)實現(xiàn)思路
1、本發(fā)明解決的技術(shù)問題是:克服現(xiàn)有技術(shù)的不足,提供了一種時分復用的多核dsp程序引導及更新方法,通過fpga對多核dsp的復位信號控制以及對flash的訪問控制實現(xiàn)多核dsp的順序引導,實現(xiàn)僅需要一塊flash芯片即可實現(xiàn)多核dsp的引導;通過設計握手機制讓主dsp進入程序更新流程,fpga配合主dsp的讀寫控制需求進行flash地址偏移控制,從而實現(xiàn)多核dsp的程序更新固化。
2、本發(fā)明的技術(shù)解決方案是:一種時分復用的多核dsp程序引導及更新方法,包括:
3、將多核dsp的emif總線和復位信號與fpga連接,并將fpga與一片flash連接,通過fpga的外部數(shù)據(jù)接口與外部設備連接;
4、將多核dsp的程序按既定順序固化于flash中,所述程序包括二次引導程序和應用程序;選定多核dsp中一個dsp核作為主dsp,其余為從dsp,主dsp通過emif總線和fpga的外部數(shù)據(jù)接口與外部設備通信;
5、fpga端,通過對多核dsp的復位信號控制和對flash的訪問控制,實現(xiàn)對多核dsp進行程序引導及更新控制;
6、多核dsp端,在fpga引導控制下,每個dsp核利用dsp復位后的自舉功能,先進行一次引導,從該dsp核的boot空間搬移二次引導程序至該dsp核中的sram,通過運行二次引導程序,再從flash中讀取該dsp核的應用程序并搬移至sram中運行,完成二次引導;主dsp的二次引導完成后,執(zhí)行主dsp的應用程序,通過與外部設備建立通信機制實現(xiàn)握手功能,接收外部設備發(fā)送的指令,握手成功后,進入程序更新流程,與fpga更新控制配合,按照指令要求對需要進行程序更新的dsp核進行程序更新;從dsp的二次引導完成后,執(zhí)行從dsp的應用程序。
7、進一步,fpga端通過運行引導更新控制程序,實現(xiàn)對flash的訪問控制,對多核dsp進行程序引導及更新控制;
8、多核dsp包括n個dsp核,x代表第x個dsp核,x=1、2、3、……、n,dsp核1為主dsp,dsp核2~dsp核n為從dsp;
9、所述引導更新控制程序,包括如下步驟:
10、(f1)將主dsp、從dsp的啟動寄存器add_boot_x置為無效,代表對應的dsp核沒有引導成功;
11、(f2)將主dsp的程序更新寄存器add_updata置為0,代表沒有dsp核需要更新程序;
12、(f3)初始化外部數(shù)據(jù)接口;
13、(f4)通過復位信號引腳對所有dsp核進行復位并保持;
14、(f5)對主dsp進行程序引導控制:
15、(f5.1)將dsp核1的emif總線與flash的數(shù)據(jù)總線、地址總線和讀寫控制信號連接,并將地址總線偏移到dsp核1的程序在flash存儲的首地址;
16、(f5.2)取消對dsp核1的復位,同時啟動計時器;
17、(f5.3)讀取dsp核1啟動寄存器add_boot_1數(shù)值,若該數(shù)值無效則進入步驟(f5.4),否則進入步驟(f6);
18、(f5.4)讀取計時器數(shù)值,若計時器數(shù)值大于設定的閾值,進入步驟(f6),否則進入步驟(f5.3);
19、(f6)對從dsp按照既定順序進行程序引導:
20、(f6.1)將計數(shù)k初始化為2;
21、(f6.2)將dsp核k的emif總線與flash的數(shù)據(jù)總線、地址總線和讀寫控制信號連接,并將地址總線偏移到dsp核k的程序在flash存儲的首地址;
22、(f6.3)取消對dsp核k的復位,同時啟動計時器;
23、(f6.4)讀取dsp核k啟動寄存器add_boot_k數(shù)值,若該數(shù)值無效則進入步驟(f6.5),否則進入步驟(f?6.6);
24、(f6.5)讀取計時器數(shù)值,若計時器數(shù)值大于設定的閾值,進入步驟(f?6.6),否則進入步驟(f6.4);
25、(f6.6)計數(shù)k加1;
26、(f6.7)判斷是否所有dsp核都取消復位,是則進入步驟(f7),否則進入步驟(f6.2);
27、(f7)根據(jù)各dsp核的啟動寄存器數(shù)值,判斷各核啟動是否成功,并將判斷結(jié)果通過外部數(shù)據(jù)接口進行反饋;
28、(f8)對dsp進行程序更新控制:
29、(f8.1)讀取寄存器add_updata數(shù)值,若該值等于dsp核的編號x,則進入步驟(f8.2),否則進入步驟(f8.1);
30、(f8.2)將dsp核x的emif總線與flash的數(shù)據(jù)總線、地址總線和讀寫控制信號連接,并將地址總線偏移到dsp核x的程序在flash存儲的首地址;
31、(f8.3)將寄存器add_updata內(nèi)的數(shù)值置為0,進入步驟(f8.1)。
32、進一步,在多核dsp程序引導及更新控制程序的步驟(f5.2)或步驟(f6.3)取消對dsp核x的復位時,dsp端進行一次引導、二次引導,包括如下步驟:
33、(d1)通過emif總線從boot空間的起始地址,搬移二次引導程序至sram;
34、(d2)運行dsp二次引導程序:
35、(d2.1)將整型變量ptra置0,整型變量add1a置為程序運行存放的首地址,整型變量add2a置為dsp核x的應用程序在flash存放的首地址;
36、(d2.2)將地址(add1a+ptra)內(nèi)的數(shù)值賦值為地址(add2a+ptra)內(nèi)的數(shù)值;
37、(d2.3)ptra加1;
38、(d2.4)判斷ptra是否大于dsp核x的應用程序在flash存放的空間長度,是則進入步驟(d3),否則進入步驟(d2.2);
39、(d3)根據(jù)dsp核x的應用程序入口地址跳轉(zhuǎn)程序,運行dsp核x的應用程序。
40、進一步,主dsp的應用程序,包括如下步驟:
41、(z1)將dsp核1的啟動寄存器add_boot_1數(shù)值置為有效,代表dsp核1引導成功;
42、(z?2)啟動計時器;
43、(z?3)若收到外部設備發(fā)送的握手指令,則進入步驟(z?6),否則進入步驟(z?4);
44、(2-4)若計時器計數(shù)大于設定的閾值,則進入步驟(z?5);
45、(z5)執(zhí)行dsp核1的目標功能程序,結(jié)束;
46、(z6)通過外部數(shù)據(jù)接口向外部設備反饋握手成功;
47、(z7)判斷是否收到外部設備發(fā)送的核x程序更新指令以及待更新用的程序數(shù)據(jù),是則進入步驟(z8),否則進入步驟(z7);
48、(z8)將程序更新寄存器add_updata置為x;
49、(z9)將整型變量ptrb置0,整型變量add1?b置為待更新用的程序數(shù)據(jù)存放的首地址,整型變量add2b置為dsp核x的應用程序在flash存放的首地址;
50、(z10)判斷程序更新寄存器add_updata的數(shù)值是否為0,是則進入步驟(z11),否則進入步驟(z8);
51、(z11)按地址順序?qū)⒋掠玫某绦驍?shù)據(jù)寫入dsp核x的應用程序在flash存放的地址空間;
52、(z11.1)將地址(add2b+ptrb)內(nèi)的數(shù)值賦值為地址(add1?b+ptrb)內(nèi)的數(shù)值;
53、(z11.2)ptrb加1;
54、(z11.3)判斷ptrb是否大于待更新用的程序數(shù)據(jù)的空間長度,是則進入步驟(z12),否則進入步驟(z11.1);
55、(z12)通過外部數(shù)據(jù)接口反饋dsp核x的應用程序更新成功。
56、進一步,從dsp的應用程序,包括如下步驟:
57、(c1)將dsp核x的啟動寄存器add_boot_x數(shù)值置為有效,代表dsp核x引導成功,x=2、3、……、n;
58、(c2)執(zhí)行dsp核x的目標功能程序。
59、進一步,所述目標功能程序是指完成系統(tǒng)最終功能所分解到該dsp核的功能程序,不同用途的目標功能程序不同。
60、本發(fā)明還提供一種計算機程序產(chǎn)品,所述計算機程序產(chǎn)品被處理器執(zhí)行時實現(xiàn)前所述方法的步驟。
61、本發(fā)明與現(xiàn)有技術(shù)相比的優(yōu)點在于:
62、傳統(tǒng)多核dsp程序引導需要多塊flash芯片支持,即flash芯片數(shù)與dsp核數(shù)相等,本發(fā)明僅需要1片flash芯片即可實現(xiàn)多核dsp程序引導,可顯著縮小布板面積、降低成本,同時每個核的引導相對獨立,不存在主核引導失敗導致其他核引導失敗的情況。