專利名稱:芯片初始化方法
技術(shù)領(lǐng)域:
本發(fā)明涉及芯片的初始化技術(shù),特別涉及對按照一定規(guī)律訪問或分配,并且初始化的存儲內(nèi)容有規(guī)律的內(nèi)部和外部存儲器的初始化。
背景技術(shù):
在各種電子系統(tǒng)中,芯片在使用前都需要進行一定的初始化工作,包括配置控制寄存器,初始化存儲器等。其中,有一類存儲器的初始化比較特殊,這類存儲器按照一定規(guī)律訪問,初始化的存儲內(nèi)容有規(guī)律,存儲單元數(shù)目比較多,一般為幾K,而且在芯片正常工作前要求必須將所有存儲內(nèi)容配置為指定數(shù)據(jù)。
例如,芯片中應(yīng)用比較廣泛的緩存指針的初始化就屬于這一類。緩存指針隊列是循環(huán)先進先出隊列(First In First Out,簡稱“FIFO”),并且初始化的存儲內(nèi)容即表項值有規(guī)律且固定,通常其對應(yīng)的表項數(shù)目為幾K。如圖1所示為緩存指針初始化完成后的示意圖??梢钥闯觯瑸榱诉M行圖1所示的緩存初始化,需要配置的表項數(shù)目為N個,其對應(yīng)的表項值為從0到最大緩存指針N-1之間遞增的數(shù)據(jù)。
緩存管理需要進行緩存指針的分配和回收,而這些緩存指針又比較有規(guī)律,數(shù)量如上所述一般為幾K。需要說明的是,緩存指針的分配和回收需要在初始化完成后進行。通常情況下,需要使用芯片內(nèi)部隨機存取存儲器(Random Access Memory,簡稱“RAM”)或外掛RAM存儲相應(yīng)的緩存指針,在芯片正常工作前,將存儲器初始化為如圖1所示的內(nèi)容。其中,緩存指針為0~N-1之間的值,可以通過一定的邏輯運算得到實際的緩存塊的地址,指向相應(yīng)的緩存塊;可用緩存計數(shù)(FreeCnt)初始化為N,即開始可有N個緩存指針可供使用;分配指針(AllocPtr)指向存儲器的當(dāng)前分配位置,初始化為0;回收指針(RecyPtr)指向存儲器的當(dāng)前回收位置,也初始化為0。熟悉本領(lǐng)域的技術(shù)人員理解,在緩存的管理中,AllocPtr和RecyPtr之間是已經(jīng)分配出去的緩存指針,F(xiàn)reeCnt用于防止越界。
當(dāng)需要進行緩存分配時,首先判斷FreeCnt不為0,表明當(dāng)前有可用緩存;接著從AllocPtr指向的存儲器位置讀出緩存指針值,即0,這就是第一個可用緩存指針;然后FreeCnt減一,表明當(dāng)前可用指針減少一個;最后將AllocPtr加一,指向下一個可用緩存指針。在分配下一個緩存指針時,同樣如前所述繼續(xù)進行操作,當(dāng)AllocPtr加到N-1后,再重新置為0。
緩存回收時,首先判斷FreeCnt不等于N,表明此時可以進行緩存回收;接著將緩存指針寫入RecyPtr指向的存儲器位置,需要說明的是,這時寫入的值不一定為0,可以是已分配出去的任意緩存指針值,該緩存指針值從回收指令中獲得;接著FreeCnt加一,表明可用指針增加一個;最后將RecyPtr加一,指向下一個回收位置。在下一次回收操作中,同樣也如前所述繼續(xù)進行操作,當(dāng)RecyPtr加到N-1后,再重新置為0。
熟悉本領(lǐng)域的技術(shù)人員可以很容易看出,這里的存儲器相當(dāng)于一個循環(huán)的FIFO隊列,緩存指針不斷被寫入和讀出供芯片使用在現(xiàn)有的技術(shù)中,可以通過硬件或者軟件的方式,實現(xiàn)芯片中的按照一定規(guī)律訪問、并且初始化的存儲內(nèi)容有規(guī)律的內(nèi)部和外部存儲器的初始化。
技術(shù)方案一采用硬件的方式實現(xiàn)上述表項的初始化,需要在芯片內(nèi)部設(shè)計初始化模塊,當(dāng)芯片工作時,首先啟動初始化模塊對需要初始化的存儲器進行配置,最后輸出一個狀態(tài)信號,表明初始化結(jié)束。
技術(shù)方案二采用軟件的方式實現(xiàn)上述表項的初始化,由硬件配合給該存儲器提供軟件訪問接口,當(dāng)芯片工作時,先由驅(qū)動軟件將需要配置的數(shù)據(jù)寫入相應(yīng)存儲器,之后再開始正常工作。
在實際應(yīng)用中,上述方案存在以下問題現(xiàn)有的技術(shù)方案初始化按照一定規(guī)律訪問并且初始化的存儲內(nèi)容有規(guī)律的內(nèi)部和外部存儲器時,需要占用較多芯片資源,并且初始化速度慢。
造成這種情況的主要原因在于,現(xiàn)有的技術(shù)方案需要設(shè)計專用的初始化模塊或軟件配置接口模塊,這些模塊不可避免的要占用芯片的資源,并且由于現(xiàn)有的技術(shù)需要專門的硬件或軟件初始化過程對所有的存儲單元進行初始化,而存儲單元一般情況下又比較多,因此會造成初始化時間比較長,速度慢。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的主要目的在于提供一種芯片初始化方法,使得初始化占用的芯片資源少并且初始化速度快。
為實現(xiàn)上述目的,本發(fā)明提供了一種芯片初始化方法,包含以下步驟A為需要初始化的存儲器設(shè)置第一計數(shù)器,并設(shè)定其初始值;B在初次遍歷所述存儲器的存儲單元時,對所述第一計數(shù)器計數(shù),并將所述第一計數(shù)器的當(dāng)前計數(shù)值、或者該計數(shù)值的代數(shù)或邏輯運算結(jié)果,作為當(dāng)前存儲單元的初始化的數(shù)據(jù)讀出。
其中,所述存儲器以循環(huán)先進先出隊列的形式存儲數(shù)據(jù)。
初次遍歷以后,再次訪問所述存儲器的存儲單元時,直接讀取該存儲單元內(nèi)的數(shù)據(jù)。
所述第一計數(shù)器的初始值為0;并且初次遍歷中,每次訪問下一個存儲單元時,將所述第一計數(shù)器加1。
所述初次遍歷的判定包含以下子步驟當(dāng)所述第一計數(shù)器的值小于所述存儲器中存儲單元的總數(shù)時,判定為初次遍歷。
所述初始化方法用于緩存管理,所述存儲器中存儲的數(shù)據(jù)是緩存指針。
所述初始化方法用于緩存管理時還包含以下步驟將可用緩存計數(shù)初始化為緩存指針總個數(shù)N,設(shè)置分配指針和回收指針,并均初始化為存儲所述緩存指針的隊列的首地址。
還包含以下步驟回收緩存時,將指向該緩存的緩存指針存入所述回收指針指向的存儲單元;將所述可用緩存計數(shù)加1,將所述回收指針模N加1。
還包含以下步驟需要分配緩存時,判斷所述可用緩存計數(shù)是否大于0,如果是,則進行緩存分配,并在分配成功后,將所述分配指針模N加1,所述可用緩存計數(shù)減1。
所述步驟B中,初次遍歷時,以所述第一計數(shù)器的計數(shù)值作為當(dāng)前所述存儲單元的初始化的緩存指針數(shù)值。
通過比較可以發(fā)現(xiàn),本發(fā)明的技術(shù)方案與現(xiàn)有技術(shù)的區(qū)別在于,對于初始化的存儲內(nèi)容有規(guī)律并且依次遍歷訪問的內(nèi)部或外部存儲器,在芯片中設(shè)置計數(shù)器,在初次遍歷時計數(shù)器計數(shù),并將計數(shù)器的當(dāng)前計數(shù)值、或者該計數(shù)值的代數(shù)或邏輯運算結(jié)果,作為當(dāng)前存儲單元的初始化的數(shù)據(jù)讀出。
這種技術(shù)方案上的區(qū)別,帶來了較為明顯的有益效果,即首先,由于本發(fā)明芯片的初始化方法只需要利用一個分配計數(shù)器和相關(guān)判斷邏輯即可以進行初始化操作,不需要設(shè)計專用的初始化模塊或軟件配置接口模塊,因此大大減少了對芯片資源的占用;其次,本發(fā)明方案由分配計數(shù)器的計數(shù)值產(chǎn)生初始化后首次遍歷的表項值,不需要對所有表項一一進行初始化,尤其是在需要初始化的表項數(shù)目很大時,可以明顯地縮短初始化的時間。
圖1為現(xiàn)有的技術(shù)方案中,芯片中的緩存指針初始化完成后的示意圖;圖2根據(jù)本發(fā)明的一個較佳實施例的芯片中的緩存指針初始化完成后的示意圖。
具體實施例方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖對本發(fā)明作進一步地詳細描述。
首先說明本發(fā)明的基本原理??紤]到芯片中需要初始化的存儲器按照一定規(guī)律訪問并且初始化的存儲內(nèi)容有規(guī)律,因此可以考慮在芯片初始化后初次讀取時,用計數(shù)器的計數(shù)值生成初始化值;每讀取一次,計數(shù)器的計數(shù)值相應(yīng)改變一個固定的數(shù)值,直至遍歷所有需要初始化的存儲單元。這樣,就可以避免對所有存儲單元一一進行初始化的操作。熟悉本領(lǐng)域的技術(shù)人員可以理解,當(dāng)初始化后遍歷了所有需要初始化的存儲單元后,就相當(dāng)于對所有的存儲單元初始化數(shù)據(jù)進行了分配,和對所有存儲單元一一初始化的效果相同。
下面結(jié)合本發(fā)明的一個具體實施例來說明本發(fā)明方案。
由于緩存指針的初始化是應(yīng)用比較廣泛的按照一定規(guī)律訪問并且初始化的存儲內(nèi)容有規(guī)律的內(nèi)部和外部存儲器的初始化,下文以對緩存指針的初始化為較佳實施例說明本發(fā)明方案。
緩存初始化完成后的狀態(tài)如圖2所示,僅僅是設(shè)置了相關(guān)計數(shù)器和指針的值,沒有設(shè)置每一個存儲單元的初始值,每一個存儲單元中是任意的隨機值。
根據(jù)本發(fā)明的一個較佳實施例的芯片初始化方法中,對緩存指針進行初始化。其中,有N個存儲單元和值從0~N-1的N個緩存指針。熟悉本領(lǐng)域的技術(shù)人員可以理解,N的數(shù)目較大,一般取幾K。
其中,對緩存指針初始化并進行緩存的分配和回收的操作步驟如下。
首先,將分配計數(shù)器(AllocCnt)初始化為0,F(xiàn)reeCnt初始化為N,AllocPtr和RecyPtr初始化為指向緩存指針隊列首地址。其中,AllocCnt為本發(fā)明一個較佳實施例中新增加的一個計數(shù)器,F(xiàn)reeCnt、AllocPtr和RecyPtr的意義和上文所述完全相同,在此不贅述。需要說明的是,本發(fā)明方案中,不對緩存指針的存儲器進行任何初始化,上電后存儲器單元的數(shù)據(jù)為任意值。
當(dāng)進行緩存分配時,首先要求FreeCnt不為0,此時若AllocCnt小于N,則將AllocCnt的值作為分配得到的緩存指針并將AllocCnt加一,否則將AllocPtr指向的存儲單元中的數(shù)據(jù)作為分配得到的緩存指針。其中,當(dāng)FreeCnt不為0時,表明當(dāng)前有可用緩存,可以進行分配,否則緩存分配失敗。熟悉本領(lǐng)域的技術(shù)人員可以理解,在AllocCnt小于N時,初次遍歷還沒有完成。
接著,在緩存分配成功后,將FreeCnt減一,并將AllocPtr加一指向FIFO隊列的下一個存儲單元。其中,F(xiàn)reeCnt減一,表示可用緩存指針減少了一個。需要說明的是,AllocPtr是循環(huán)的,當(dāng)AllocPtr達到N-1時,再次分配緩存后,AllocPtr變?yōu)?。熟悉本領(lǐng)域的技術(shù)人員可以理解,初次遍歷時不變更AllocPtr僅變更FreeCnt和AllocCnt;再次遍歷時完全依照現(xiàn)有的技術(shù)方案,僅變更FreeCnt和AllocPtr,就可以實現(xiàn)本發(fā)明方案。
當(dāng)進行緩存回收時,首先要求FreeCnt不等于N,接著將緩存指針寫入RecyPtr指向的存儲器位置。需要說明的是,寫入的值可以是已分配出去的任意緩存指針值,該緩存指針值由通過緩存回收命令得到。
接著,將FreeCnt加一,并將RecyPtr指向下一個回收位置。需要說明的是,當(dāng)RecyPtr加到N-1后,再次回收緩存后,重新置為0。其中,F(xiàn)reeCnt加1是為了表明可用緩存指針增加一個。
可以看出,本發(fā)明中,AllocPtr和RecyPtr的加一均為模N加一。
如上所述,本發(fā)明的一個較佳實施例的芯片的初始化中,對緩存指針進行初始化時,無須對存儲器進行任何初始化,初次遍歷時的緩存分配需要的緩存指針先由計數(shù)器產(chǎn)生;在回收操作中,再將已分配的有效的緩存指針寫回存儲器。熟悉本領(lǐng)域的技術(shù)人員可以理解,當(dāng)計數(shù)器達到N后,此時有效的緩存指針要么已經(jīng)寫回存儲器,要么正在被其他模塊使用。
熟悉本領(lǐng)域的技術(shù)人員可以理解,本發(fā)明不限于芯片的緩存管理,可以應(yīng)用在與芯片相關(guān)的任何存儲內(nèi)容有規(guī)律的內(nèi)部或外部存儲器的初始化。在表項值依次為可以由連續(xù)的計數(shù)值通過一定的邏輯或代數(shù)運算得到的值的情況下,在初次遍歷時,可以將計數(shù)器的計數(shù)值通過一定的邏輯或代數(shù)運算后得到初始化的數(shù)據(jù),并不影響本發(fā)明的實質(zhì)。需要說明的是,當(dāng)需要初始化的存儲器的初次遍歷結(jié)束后,芯片完全依照現(xiàn)有的技術(shù)運行。
雖然通過參照本發(fā)明的某些優(yōu)選實施例,已經(jīng)對本發(fā)明進行了圖示和描述,但本領(lǐng)域的普通技術(shù)人員應(yīng)該明白,可以在形式上和細節(jié)上對其作各種各樣的改變,而不偏離所附權(quán)利要求書所限定的本發(fā)明的精神和范圍。
權(quán)利要求
1.一種芯片初始化方法,其特征在于,包含以下步驟A為需要初始化的存儲器設(shè)置第一計數(shù)器,并設(shè)定其初始值;B在初次遍歷所述存儲器的存儲單元時,對所述第一計數(shù)器計數(shù),并將所述第一計數(shù)器的當(dāng)前計數(shù)值、或者該計數(shù)值的代數(shù)或邏輯運算結(jié)果,作為當(dāng)前存儲單元的初始化的數(shù)據(jù)讀出。
2.根據(jù)權(quán)利要求1所述的芯片初始化方法,其特征在于,所述存儲器以循環(huán)先進先出隊列的形式存儲數(shù)據(jù)。
3.根據(jù)權(quán)利要求2所述的芯片初始化方法,其特征在于,初次遍歷以后,再次訪問所述存儲器的存儲單元時,直接讀取該存儲單元內(nèi)的數(shù)據(jù)。
4.根據(jù)權(quán)利要求3所述的芯片初始化方法,其特征在于,所述第一計數(shù)器的初始值為0;并且初次遍歷中,每次訪問下一個存儲單元時,將所述第一計數(shù)器加1。
5.根據(jù)權(quán)利要求4所述的芯片初始化方法,其特征在于,所述初次遍歷的判定包含以下子步驟當(dāng)所述第一計數(shù)器的值小于所述存儲器中存儲單元的總數(shù)時,判定為初次遍歷。
6.根據(jù)權(quán)利要求5所述的芯片初始化方法,其特征在于,所述初始化方法用于緩存管理,所述存儲器中存儲的數(shù)據(jù)是緩存指針。
7.根據(jù)權(quán)利要求6所述的芯片初始化方法,其特征在于,所述初始化方法用于緩存管理時還包含以下步驟將可用緩存計數(shù)初始化為緩存指針總個數(shù)N,設(shè)置分配指針和回收指針,并均初始化為存儲所述緩存指針的隊列的首地址。
8.根據(jù)權(quán)利要求7所述的芯片初始化方法,其特征在于,還包含以下步驟回收緩存時,將指向該緩存的緩存指針存入所述回收指針指向的存儲單元;將所述可用緩存計數(shù)加1,將所述回收指針模N加1。
9.根據(jù)權(quán)利要求7所述的芯片初始化方法,其特征在于,還包含以下步驟需要分配緩存時,判斷所述可用緩存計數(shù)是否大于0,如果是,則進行緩存分配,并在分配成功后,將所述分配指針模N加1,所述可用緩存計數(shù)減1。
10.根據(jù)權(quán)利要求6所述的芯片初始化方法,其特征在于,所述步驟B中,初次遍歷時,以所述第一計數(shù)器的計數(shù)值作為當(dāng)前所述存儲單元的初始化的緩存指針數(shù)值。
全文摘要
本發(fā)明涉及芯片的初始化技術(shù),公開了一種芯片初始化方法,使得初始化占用的芯片資源少并且初始化速度快。這種芯片初始化方法應(yīng)用于初始化的存儲內(nèi)容有規(guī)律并且依次遍歷訪問的內(nèi)部或外部存儲器,在芯片中設(shè)置計數(shù)器,在初次遍歷時計數(shù)器計數(shù),并將計數(shù)器的當(dāng)前計數(shù)值、或者該計數(shù)值的代數(shù)或邏輯運算結(jié)果,作為當(dāng)前存儲單元的初始化的數(shù)據(jù)讀出。
文檔編號G06F9/00GK1753099SQ20041008305
公開日2006年3月29日 申請日期2004年9月21日 優(yōu)先權(quán)日2004年9月21日
發(fā)明者范嘉旗 申請人:華為技術(shù)有限公司