• 沒有找到結果。

The Detail Design of Write back Policy

第四章 Object Cache Controller

4.1 Object Cache Controller 架構圖

4.2.2 The Detail Design of Write back Policy

Figure 25. Write Back Policy

此機制不像 Write Through 不會每次都寫回到記憶體中,而是當要被置換掉 的 Cache Block 是 Dirty 才會寫回到記憶體中,對於記憶體的存取變少了因此可以 把效能大大提升,但實作上比較複雜,接下來本論文會再對毎一個狀態作詳細的 描述。部分有跟 Write Through 重疊的狀態就不會在此作介紹,但有些需要再重新 解釋才會提出,當初本來是設計出兩個獨立的 FSM 當設計完後發現,整個 FSM 很難讀懂,也怕將來要作修改不易我們也發現有很多重複的功能可以整合在一起,

一方面可以讓整個 FSM 變得相當簡單,二方面可以更容易理解也更容易去實作,

所以我們決定把兩個 FSM 重疊。

(1) WB2mem,會到此狀態代表此次的存取是 miss 所以需要去記憶體把資料 引進 Cache Storage 中,且發現用 Index 所指到的 Cache Storage 皆是滿的,

CIdle Analysis

WB2mem

RdFromMem RdMemComplt

CHitFinish

Cache write or read

Cache miss

&

cacheMB_dirty

WbMemComplt

WB_counter = 8

Mem_complt

Mem_complt

Transfer_counter =8

Cache_miss(R,W)

Cache_hit(R,W)

33

而且 Victim Block 也就是要被置換的 Block,此時是 Dirty,代表此值和記 憶體中的值是不一致的,因此必須把這些值寫回到記憶體中,保持記憶體 的一致性。在此也會產生相對應的信號線這些是屬於 Master Burst Write 的信號,送到記憶體中,要寫回到記憶體中的資料也是八個 word,因此 我們有用一個計數器去計算是否完成等待完成後就會進入到

WbMemComplt 狀態。

(2) WbMemComplt,此狀態代表寫八個 word 資料到記憶體中已經完成,此 時會進入到 RdFromMem。

(3) RdFromMem,此狀態代表將會從記憶體把資料讀出來,這邊我們也有採 用 overlapping execution 技巧,當一邊讀記憶體資料,一方面就可以直接 寫入到記憶體中,不需要等到八個 Word 讀取完成,只要記憶體發出信號 說已經把八個 Word 送完,也代表我們的 Cache Storage 也把資料更新完畢,

可以進入到下一個狀態中。

因為我們的處理器是雙核心,因此採用 Write Back 就必須要確保每顆核心所 看到的資料是一致的,但因為我們的 RISC core 會去對記憶體作讀寫次數比較少,

而且大部分的執行皆在 JAIP 中,因此這邊我們設計的演算法會盡可能的簡單,而 且不會去影響到效率,這邊我們針對 RISC core 會提出寫和讀得請求一一作探討。

第一當處理器要作寫入時,我們會給出一個位址,而且此位址不會在 Cache Storage 中,這樣就確保當 JAIP core 要讀剛剛 RISC core 寫的資料就必須去記憶體中讀出 再來就是要作一個對齊的動作,主要原因是我們使用 Burst Mode 每次八個 word,

假如沒有作對齊的話,而且此八個 word 中後面四個都是還未使用的位址,因此 會丟給 RISC 作寫入,此時換到 JAIP 要執行時,就會以為資料皆是在 Cache Storage 中就直接拿資料出來,殊不知此時資料是在記憶體中,因此每當要寫入我們會對 齊八個 word 才會進行寫入。第二點當 RISC core 需要作讀取時,這邊我們就會啟 動 flush 功能,此功能會把所有 Dirty block 全部寫回到記憶體中,這就可以確保

34

RISC core 和 JAIP core 所看到的資料皆是一致的,此法相對其他方法來說比較簡 單但也較沒有效率,但是因為我們只有少部分的功能才會使 RISC core 去讀記憶 體中的資料,因為大部份我們都是在硬體方面實作,未來的設計我們會朝向把所 有 RISC core 會作到的事情都移到 JAIP core 去執行,也就是實現全面的硬體化,

接下來我們會介紹 flush 的功能。

Figure 26. Flush Policy

當 cache_flush 傳送進來就會進入到 Checkset 的狀態,皆下來回從第零個集合 檢查到第最後一個集合,如果途中有發現任何 cache block 是 Dirty 的就會進入到 Start_flush 開始把資料寫回到記憶體中,當寫完後就會進入到 WbMemComplt 就 代表已經完成寫入到記憶體,接下來在回到 Checkset 中,在一直循環檢查哪一個 集合該寫回到記憶體中,當所有的集合都檢查完畢後,此時就會拉起 flush_complt 代表現在的 Cache Storage 皆無 Dirty Block 也就意謂記憶體和 Cache 的資料是相 同的,就能確保資料的一致性。

Idle

Checkset cacheMB_dirty Start_flush

mem_complt

cache_flush flush_complt

WbMemComplt

WB_counter =8

35

相關文件