于在第一確定單元檢測(cè)確定處理器寫(xiě)Cache操作對(duì)應(yīng)的Cache行在Cache的已導(dǎo)出部分時(shí),執(zhí)行處理器寫(xiě)Cache操作。
[0161]第一導(dǎo)出單元707,用于在第一確定單元檢測(cè)確定處理器寫(xiě)Cache操作對(duì)應(yīng)的Cache行在Cache的已導(dǎo)出部分時(shí),將寫(xiě)Cache操作寫(xiě)入Cache行中的內(nèi)容進(jìn)行導(dǎo)出,并進(jìn)入第一判斷單元;
[0162]第二確定單元708,用于在接收單元接收到處理器寫(xiě)Cache信號(hào)使第二判斷單元的判斷結(jié)果為存在對(duì)Cache的寫(xiě)操作時(shí),檢測(cè)確定處理器寫(xiě)Cache操作對(duì)應(yīng)的Cache行在Cache的未導(dǎo)出部分;
[0163]第二處理單元709,用于在第二確定單元檢測(cè)確定處理器寫(xiě)Cache操作對(duì)應(yīng)的Cache行在Cache的未導(dǎo)出部分時(shí),執(zhí)行處理器寫(xiě)Cache操作,并暫停將Cache中的內(nèi)容進(jìn)行導(dǎo)出,并進(jìn)入第一判斷單元;
[0164]第三確定單元710,用于在接收單元接收到處理器讀Cache信號(hào)使第二判斷單元的判斷結(jié)果為存在對(duì)Cache的讀操作時(shí),檢測(cè)確定處理器讀Cache操作對(duì)應(yīng)的Cache行是下一被導(dǎo)出的Cache行;
[0165]第四處理單元711,用于在第三確定單元檢測(cè)確定處理器讀Cache操作對(duì)應(yīng)的Cache行是下一被導(dǎo)出的Cache行時(shí),執(zhí)行處理器讀Cache操作;
[0166]第二導(dǎo)出單元712,用于在第三確定單元檢測(cè)確定處理器讀Cache操作對(duì)應(yīng)的Cache行是下一被導(dǎo)出的Cache行時(shí),將讀Cache操作對(duì)應(yīng)的Cache行中的內(nèi)容進(jìn)行導(dǎo)出,并進(jìn)入第一判斷單元。
[0167]第四確定單元713,用于在接收單元接收到處理器讀Cache信號(hào)使第二判斷單元的判斷結(jié)果為存在對(duì)Cache的讀操作時(shí),檢測(cè)確定處理器讀Cache操作對(duì)應(yīng)的Cache行不是下一被導(dǎo)出的Cache行;
[0168]第三處理單元714,用于第四確定單元檢測(cè)確定處理器讀Cache操作對(duì)應(yīng)的Cache行不是下一被導(dǎo)出的Cache行,執(zhí)行處理器讀Cache操作,暫停將Cache中的內(nèi)容進(jìn)行導(dǎo)出。
[0169]在本發(fā)明的一些實(shí)施例中,本發(fā)明實(shí)施例建立處理器Cache檢查點(diǎn)的裝置還可以包括:
[0170]控制單元,用于控制地址生成器由Cache行地址范圍的一端開(kāi)始生成第一地址。
[0171]在本發(fā)明的一些實(shí)施例中,將Cache中的內(nèi)容逐行導(dǎo)出的過(guò)程具體為:將控制單元控制地址生成器生成的第一地址所對(duì)應(yīng)的Cache行中的內(nèi)容導(dǎo)出到壓縮器內(nèi)存儲(chǔ),每導(dǎo)出一 Cache行后則控制單元控制地址生成器將第一地址變化為下一 Cache行地址。
[0172]在本發(fā)明的一些實(shí)施例中,第一確定單元可以包括:
[0173]接收子單元,用于接收比較器的比較結(jié)果,比較器用于比較處理器寫(xiě)Cache操作對(duì)應(yīng)的Cache行地址與當(dāng)前第一地址的大??;
[0174]第一確定子單元,用于當(dāng)?shù)刂飞善饔蒀ache行地址范圍的低地址端開(kāi)始生成第一地址時(shí),接收子單元接收到的比較結(jié)果為處理器寫(xiě)Cache操作對(duì)應(yīng)的Cache行地址小于當(dāng)前第一地址,確定處理器寫(xiě)Cache操作對(duì)應(yīng)的Cache行在Cache的已導(dǎo)出部分;
[0175]第二確定子單元,用于當(dāng)?shù)刂飞善饔蒀ache行地址范圍的高地址端開(kāi)始生成第一地址時(shí),接收子單元接收到的比較結(jié)果為處理器寫(xiě)Cache操作對(duì)應(yīng)的Cache行地址大于當(dāng)前第一地址,確定處理器寫(xiě)Cache操作對(duì)應(yīng)的Cache行在Cache的已導(dǎo)出部分。
[0176]在本發(fā)明的一些實(shí)施例中,第二確定單元可以包括:
[0177]接收子單元,用于接收比較器的比較結(jié)果,比較器用于比較處理器寫(xiě)Cache操作對(duì)應(yīng)的Cache行地址與當(dāng)前第一地址的大小;
[0178]第三確定子單元,用于當(dāng)?shù)刂飞善饔蒀ache行地址范圍的低地址端開(kāi)始生成第一地址時(shí),接收子單元接收到的比較結(jié)果為處理器寫(xiě)Cache操作對(duì)應(yīng)的Cache行地址大于或等于當(dāng)前第一地址,確定處理器寫(xiě)Cache操作對(duì)應(yīng)的Cache行在Cache的未導(dǎo)出部分;
[0179]第四確定子單元,用于當(dāng)?shù)刂飞善饔蒀ache行地址范圍的高地址端開(kāi)始生成第一地址時(shí),接收子單元接收到的比較結(jié)果為處理器寫(xiě)Cache操作對(duì)應(yīng)的Cache行地址小于或等于當(dāng)前第一地址,確定處理器寫(xiě)Cache操作對(duì)應(yīng)的Cache行在Cache的未導(dǎo)出部分。
[0180]在本發(fā)明的一些實(shí)施例中,第三確定單元可以包括:
[0181]接收子單元,用于接收比較器的比較結(jié)果,比較器還用于比較處理器讀Cache操作對(duì)應(yīng)的Cache行地址與當(dāng)前第一地址的大??;
[0182]第五確定子單元,用于接收子單元接收的比較結(jié)果為處理器讀Cache操作對(duì)應(yīng)的Cache行地址等于當(dāng)前第一地址,確定處理器讀Cache操作對(duì)應(yīng)的Cache行是下一被導(dǎo)出的Cache 行。
[0183]這樣,本發(fā)明實(shí)施例從檢查點(diǎn)建立時(shí)刻起,在不存在對(duì)Cache的讀寫(xiě)操作即Cache空閑狀態(tài)時(shí),逐行導(dǎo)出Cache中的內(nèi)容到壓縮器內(nèi)存儲(chǔ),在Cache不空閑時(shí),暫停Cache導(dǎo)出過(guò)程,但當(dāng)對(duì)Cache進(jìn)行寫(xiě)操作即發(fā)生Cache更新操作時(shí),且更新操作發(fā)生在Cache的已導(dǎo)出部分,更新的數(shù)據(jù)需要同時(shí)存儲(chǔ)到壓縮器內(nèi),這樣導(dǎo)出到壓縮器中的數(shù)據(jù)是每一 Cache行內(nèi)的最新數(shù)據(jù),建立的Cache檢查點(diǎn)是建立過(guò)程結(jié)束時(shí)刻的Cache狀態(tài)。在整個(gè)Cache檢查點(diǎn)建立過(guò)程中,在處理器一直處于正常工作的狀態(tài)時(shí),沒(méi)有因?yàn)榻ache檢查點(diǎn)中斷或推遲處理器的任何操作,建立Cache檢查點(diǎn)的過(guò)程不存在影響處理器運(yùn)行的情況,保證了系統(tǒng)的正常運(yùn)行。
[0184]相應(yīng)的,參見(jiàn)圖8所不,本發(fā)明實(shí)施例建立處理器Cache檢查點(diǎn)的系統(tǒng)實(shí)施例一,可以包括:
[0185]導(dǎo)出控制器801,可以是上述的建立處理器Cache檢查點(diǎn)的裝置實(shí)施例。
[0186]地址生成器802,用于根據(jù)導(dǎo)出控制器的控制生成第一地址;
[0187]比較器803,用于比較處理器寫(xiě)Cache操作對(duì)應(yīng)的Cache行地址與當(dāng)前第一地址的大小,比較處理器讀Cache操作對(duì)應(yīng)的Cache行地址與當(dāng)前第一地址的大小,并將比較結(jié)果發(fā)送給導(dǎo)出控制器;
[0188]壓縮器804,用于存儲(chǔ)Cache行的內(nèi)容。
[0189]本系統(tǒng)實(shí)施例的工作原理是:
[0190]導(dǎo)出控制器在接收外部輸入的使能信號(hào)時(shí),控制地址生成器由Cache行地址范圍的一端開(kāi)始生成第一地址,并判斷是否存在對(duì)Cache的讀寫(xiě)操作;
[0191]如果不存在對(duì)Cache的讀寫(xiě)操作時(shí),將第一地址所對(duì)應(yīng)的Cache行中的內(nèi)容導(dǎo)出到壓縮器內(nèi)存儲(chǔ),并控制地址生成器將第一地址變化為下一 Cache行地址,判斷全部Cache行是否已經(jīng)被導(dǎo)出;如果全部Cache行已經(jīng)被導(dǎo)出,則建立處理器Cache檢查點(diǎn)結(jié)束,如果Cache行沒(méi)有被全部導(dǎo)出,繼續(xù)判斷是否存在對(duì)Cache的讀寫(xiě)操作;如果存在對(duì)Cache的讀寫(xiě)操作時(shí),判斷讀寫(xiě)操作的類型;
[0192]如果對(duì)Cache的讀寫(xiě)操作為對(duì)Cache的寫(xiě)操作,接收比較器的比較結(jié)果,判斷比較結(jié)果是否為寫(xiě)操作對(duì)應(yīng)的Cache行是已導(dǎo)出的Cache行;如果對(duì)Cache的讀寫(xiě)操作為對(duì)Cache的讀操作,接收比較器的比較結(jié)果,判斷比較器的比較結(jié)果是否為讀操作對(duì)應(yīng)的Cache行地址等于當(dāng)前第一地址;
[0193]如果比較器的比較結(jié)果為寫(xiě)操作對(duì)應(yīng)的Cache行是已導(dǎo)出的Cache行,將寫(xiě)操作寫(xiě)入該Cache行的內(nèi)容同時(shí)存儲(chǔ)到壓縮器內(nèi)存儲(chǔ),返回判斷全部Cache行是否已經(jīng)被導(dǎo)出;如果比較器的比較結(jié)果為寫(xiě)操作對(duì)應(yīng)的Cache行不是已導(dǎo)出的Cache行,暫停對(duì)Cache行的導(dǎo)出,返回判斷全部Cache行是否已經(jīng)被導(dǎo)出;
[0194]如果比較器的比較結(jié)果為讀操作對(duì)應(yīng)的Cache行地址等于當(dāng)前第一地址,并控制地址生成器將第一地址變化為下一 Cache行地址,返回判斷全部Cache行是否已經(jīng)被導(dǎo)出;如果比較器的比較結(jié)果為讀操作對(duì)應(yīng)的Cache行地址不等于當(dāng)前第一地址,暫停對(duì)Cache行的導(dǎo)出,返回判斷全部Cache行是否已經(jīng)被導(dǎo)出。
[0195]也就是說(shuō),在將Cache中的內(nèi)容逐行導(dǎo)出的過(guò)程中,當(dāng)接收到處理器寫(xiě)Cache信號(hào)時(shí),檢測(cè)確定處理器寫(xiě)Cache操作對(duì)應(yīng)的Cache行在Cache的已導(dǎo)出部分,則執(zhí)行處理器寫(xiě)Cache操作,并同時(shí)將寫(xiě)Cache操作寫(xiě)入Cache行中的內(nèi)容進(jìn)行導(dǎo)出。
[0196]當(dāng)接收到處理器寫(xiě)Cache信號(hào)時(shí),檢測(cè)確定處理器寫(xiě)Cache操作對(duì)應(yīng)的Cache行在Cache的未導(dǎo)出部分,則執(zhí)行處理器寫(xiě)Cache操作,并暫停將Cache中的內(nèi)容進(jìn)行導(dǎo)出。
[0197]當(dāng)接收到的處理器讀Cache信號(hào)時(shí),檢測(cè)確定處理器讀Cache操作對(duì)應(yīng)的Cache行是下一被導(dǎo)出的Cache行,則執(zhí)行處理器讀Cache操作,并同時(shí)將讀Cache操作對(duì)應(yīng)的Cache行中的內(nèi)容進(jìn)行導(dǎo)出。
[0198]當(dāng)接收到處理器讀Cache信號(hào)時(shí),檢測(cè)確定處理器讀Cache操作對(duì)應(yīng)的Cache行不是下一被導(dǎo)出的Cache行,執(zhí)行處理器讀Cache操作,并暫停將Cache中的內(nèi)容進(jìn)行導(dǎo)出。
[0199]這樣,可以實(shí)現(xiàn)將導(dǎo)出結(jié)束時(shí)刻的Cache狀態(tài)導(dǎo)出到壓縮器中存儲(chǔ)。
[0200]參見(jiàn)圖9所示,是本發(fā)明實(shí)施例建立處理器Cache檢查點(diǎn)的系統(tǒng)實(shí)施例二,在實(shí)際應(yīng)用中,結(jié)合具體的Cache結(jié)構(gòu),本發(fā)明實(shí)施例增加的硬件模塊包括地址生成器、比較器、導(dǎo)出控制器、壓縮器以及若干個(gè)選擇器。
[0201]在實(shí)際應(yīng)用中,當(dāng)Dump_enable使能信號(hào)有效,系統(tǒng)使能了 Cache檢查點(diǎn)建立,開(kāi)始建立Cache檢查點(diǎn),導(dǎo)出控制器控制地址生成器開(kāi)始生成第一地址(以從低地址端生成第一地址為例);
[0202]導(dǎo)出控制器接收處理器訪存單元(LSQ)發(fā)出的Valid信號(hào),判斷是否存在對(duì)Cache的讀寫(xiě)操作;
[0203]當(dāng)Valid信號(hào)無(wú)效時(shí),代表Cache空閑,導(dǎo)出控制器向壓縮器發(fā)送使能Dump信號(hào),通過(guò)Addr_sel信號(hào)選擇地址生成器生成的第一地址作為Cache讀寫(xiě)地址,將地址生成器生成的第一地址對(duì)應(yīng)的Cache行內(nèi)容導(dǎo)出到壓縮器,導(dǎo)出數(shù)據(jù)包括該Cache行內(nèi)的Tag、Valid、Data等全部數(shù)據(jù),然后控制地址生成器自增到下一 Cache地址。如果Cache仍空閑,重復(fù)上述過(guò)程;
[0204]當(dāng)Valid信號(hào)有效時(shí),代表Cache不空閑,導(dǎo)出控制器無(wú)效Dump信號(hào),暫停導(dǎo)出過(guò)程。但當(dāng)檢測(cè)到以下兩種情況發(fā)生時(shí),導(dǎo)出控制器使能Dump信號(hào),導(dǎo)出相應(yīng)數(shù)據(jù):
[0205]第一,接收LSQ發(fā)送的寫(xiě)信號(hào)Wr或者讀信號(hào)Rw,以判斷讀寫(xiě)操作的類型,當(dāng)為處理器更新已導(dǎo)出部分的Cache時(shí),即Wr信號(hào)有效,同時(shí)接收比較器Cpr_res信號(hào),當(dāng)?shù)谝坏刂沸∮贑ache的讀寫(xiě)地址Address時(shí),同時(shí)將更新的數(shù)據(jù)導(dǎo)出到壓縮器中;
[0206]第二,當(dāng)為讀操作時(shí),接收比較器Cpr_res信號(hào),當(dāng)Cache的讀寫(xiě)地址Address等于第一地址時(shí),將第一地址對(duì)應(yīng)的Cache行內(nèi)容導(dǎo)出到壓縮器內(nèi)存儲(chǔ);
[0207]具體的,導(dǎo)出控制器發(fā)出Dsel信號(hào),選擇壓縮器的數(shù)據(jù)來(lái)源,當(dāng)將更新的數(shù)據(jù)存儲(chǔ)到壓縮器中時(shí),利用Dsel信號(hào)控制選擇ND數(shù)據(jù)流;當(dāng)將Cache的數(shù)據(jù)導(dǎo)出到壓縮器中時(shí),利用Dsel信號(hào)控制選擇Cache的數(shù)據(jù)流;
[0208]當(dāng)?shù)刂飞善鬟_(dá)到地址最大值時(shí),導(dǎo)出結(jié)束,Cache此時(shí)刻的狀態(tài)全部存儲(chǔ)在壓縮器中,一個(gè)Cache檢查點(diǎn)建立過(guò)程完成。
[0209]其中,LSQ (load store queue,訪存隊(duì)列)其作用就是緩存處理器對(duì)于Cache的訪存操作,并將訪存操作發(fā)送到Cache,在本發(fā)明實(shí)施例中,LSQ的作用是向Cache發(fā)送讀寫(xiě)命令,以使能相應(yīng)的Wr或Rw信號(hào),在Wr寫(xiě)使能信號(hào)有效時(shí),送入寫(xiě)數(shù)據(jù),在Rw讀使能信號(hào)有效時(shí),讀出數(shù)據(jù)。
[0210]另外,FSM (Finite State Machine,有限狀態(tài)機(jī)),其相當(dāng)于Cache的控制器模塊,用于生成各種Cache控制信號(hào),并與其它模塊(LSQ和內(nèi)存Mem)進(jìn)行交互。FulI信號(hào)用于標(biāo)示壓縮器存儲(chǔ)空間是否已滿,如果存儲(chǔ)空間已滿,則不能繼續(xù)存儲(chǔ)新數(shù)據(jù)。
[0211]這樣,本發(fā)明實(shí)施例從檢查點(diǎn)建立時(shí)刻起,在處理器不存在對(duì)Cache的讀寫(xiě)操作即Cache空閑狀態(tài)時(shí),逐行導(dǎo)出Cache中的內(nèi)容到壓縮器內(nèi)存儲(chǔ),在Cache不空閑時(shí),暫停Cache導(dǎo)出過(guò)程,但當(dāng)對(duì)Cache進(jìn)行寫(xiě)操作即發(fā)生Cache更新操作時(shí),且更新操作發(fā)生在Cache的已導(dǎo)出部分,更新的數(shù)據(jù)需要同時(shí)存儲(chǔ)到壓縮器內(nèi),這樣導(dǎo)出到壓縮器中的數(shù)據(jù)是每