五十嵐/MIPSシミュレータキャッシュ
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[五十嵐]]
*MIPSシミュレータ用キャッシュ [#ke7699c8]
ライトスルーキャッシュを実装することになったのでこのページは参考程度にお願いします.~
**概要 [#nee594b3]
-特徴
--ライトバック方式
--ダイレクトマップ方式
-主なモジュール
--CacheControlUnit:制御装置,他層のモジュール(CPU,メモリ)とデータをやり取りする.
--CacheRAM:キャッシュRAM,保持する情報はタグ,valid,dirty,メモリデータの4つ.
--CacheHitDetecter:キャッシュがヒットしたかどうかを検知する.
-ブロック図
#ref(五十嵐/MIPSシミュレータキャッシュ/cache_block.png,50%)
**動作概要 [#oe81e5af]
-状態遷移図
#ref(五十嵐/MIPSシミュレータキャッシュ/mips_cache_std.png,60%)
--それぞれの遷移に付随する論理(outputは制御信号のみ)
|edge |condition |output|用途|
|wait |!cpu_read & !cpu_write |CENTER:-|要求なし|
|read_hit |cpu_read & cache_hit |cache_cpu_done, cache_read|リードヒット|
|write_hit |cpu_write & cache_hit |cache_cpu_done, cache_write|ライトヒット|
|read_miss |リードミス・ライトミス時の状態遷移図参照||リードミス|
|read_wait |リードミス・ライトミス時の状態遷移図参照||メモリ応答待機|
|read_done |リードミス・ライトミス時の状態遷移図参照||メモリ応答完了|
|write_miss |リードミス・ライトミス時の状態遷移図参照||ライトミス|
|write_wait |リードミス・ライトミス時の状態遷移図参照||メモリ応答待機|
|write_done |リードミス・ライトミス時の状態遷移図参照||メモリ応答完了|
-リードミス・ライトミス時の状態遷移図
#ref(五十嵐/MIPSシミュレータキャッシュ/mips_cache_wb_std.png,60%)
--それぞれの遷移に付随する論理(outputは制御信号のみ)
|edge |condition |output |用途|
|read_miss |cpu_read & !cache_hit |cache_read |リードミス|
|write_miss |cpu_write & !cache_hit |cache_read |ライトミス|
|write_wait |!mem_done & (dirty==1) | |メモリ応答待機|
|write_next |(mem_done & (dirty==1))|(valid==0)|(dirty==0) |cache_read, cache_mem_write |次データをメモリに書き込む|
|mem_read |( (mem_done & (dirty==1))|(valid==0)|(dirty==0) )&(state==wb_4) |cache_mem_read|メモリからデータの読み出し開始|
|read_wait |!mem_done | |メモリ応答待機|
|read_next |mem_done |cache_write, cache_mem_read |次データをメモリから読み出す|
|read_done |mem_done & (state==r_4) |cache_cpu_done, cache_write|リードミス解決|
|write_done |mem_done & (state==r_4) |cache_cpu_done, cache_write |ライトミス解決|
-リードヒット時の動作
--該当するキャッシュのメモリデータをCPUに返す
-ライトヒット時の動作
--該当するキャッシュにメモリデータの書き込みを行う
--dirtyを1に設定する(メモリと内容が異なっていて,書き戻す必要がある)
-リードミス時の動作
--追い出されるキャッシュラインの先頭からひとつずつデータを取り出す
--dirtyが1の時,メモリに書き戻される
--上記2つの動作を追い出されるデータ分繰り返す
--新たにキャッシュされるデータをメモリから読み出しキャッシュRAMに書き込む(キャッシュラインのサイズ分繰り返される)
--CPUに要求データを返す
-ライトミス時の動作
--追い出されるキャッシュラインの先頭からひとつずつデータを取り出す
--dirtyが1の時,メモリに書き戻される
--上記2つの動作を追い出されるデータ分繰り返す
--新たにキャッシュされるデータをメモリから読み出しキャッシュRAMに書き込む(キャッシュラインのサイズ分繰り返される)
--CPUからのデータを該当するキャッシュに書き込む
**メモ [#c9be22d9]
-バースト転送モードの実装(ライトバッファの実装)を考慮すると,ライトバック方式のキャッシュを採用する利点はあるのだろうか?
-ライトミス時に新たなデータをキャッシュする場合,読みだしてきたアドレスと書き込みたいアドレスが一致したらCPUからのデータを書き込むようにすればいいかもしれない.
-ブロック図に信号線が足りてなかった.CacheControlUnitからCacheRAMに対して書き込むデータ(cpu_cache_dataと同じ内容)が必要.
**コメント [#t0f5de3a]
- 遷移に付随する論理のoutput信号名をブロック図で使用されている信号名に修正. -- [[五十嵐]] &new{2009-09-04 (金) 17:55:37};
#comment
終了行:
[[五十嵐]]
*MIPSシミュレータ用キャッシュ [#ke7699c8]
ライトスルーキャッシュを実装することになったのでこのページは参考程度にお願いします.~
**概要 [#nee594b3]
-特徴
--ライトバック方式
--ダイレクトマップ方式
-主なモジュール
--CacheControlUnit:制御装置,他層のモジュール(CPU,メモリ)とデータをやり取りする.
--CacheRAM:キャッシュRAM,保持する情報はタグ,valid,dirty,メモリデータの4つ.
--CacheHitDetecter:キャッシュがヒットしたかどうかを検知する.
-ブロック図
#ref(五十嵐/MIPSシミュレータキャッシュ/cache_block.png,50%)
**動作概要 [#oe81e5af]
-状態遷移図
#ref(五十嵐/MIPSシミュレータキャッシュ/mips_cache_std.png,60%)
--それぞれの遷移に付随する論理(outputは制御信号のみ)
|edge |condition |output|用途|
|wait |!cpu_read & !cpu_write |CENTER:-|要求なし|
|read_hit |cpu_read & cache_hit |cache_cpu_done, cache_read|リードヒット|
|write_hit |cpu_write & cache_hit |cache_cpu_done, cache_write|ライトヒット|
|read_miss |リードミス・ライトミス時の状態遷移図参照||リードミス|
|read_wait |リードミス・ライトミス時の状態遷移図参照||メモリ応答待機|
|read_done |リードミス・ライトミス時の状態遷移図参照||メモリ応答完了|
|write_miss |リードミス・ライトミス時の状態遷移図参照||ライトミス|
|write_wait |リードミス・ライトミス時の状態遷移図参照||メモリ応答待機|
|write_done |リードミス・ライトミス時の状態遷移図参照||メモリ応答完了|
-リードミス・ライトミス時の状態遷移図
#ref(五十嵐/MIPSシミュレータキャッシュ/mips_cache_wb_std.png,60%)
--それぞれの遷移に付随する論理(outputは制御信号のみ)
|edge |condition |output |用途|
|read_miss |cpu_read & !cache_hit |cache_read |リードミス|
|write_miss |cpu_write & !cache_hit |cache_read |ライトミス|
|write_wait |!mem_done & (dirty==1) | |メモリ応答待機|
|write_next |(mem_done & (dirty==1))|(valid==0)|(dirty==0) |cache_read, cache_mem_write |次データをメモリに書き込む|
|mem_read |( (mem_done & (dirty==1))|(valid==0)|(dirty==0) )&(state==wb_4) |cache_mem_read|メモリからデータの読み出し開始|
|read_wait |!mem_done | |メモリ応答待機|
|read_next |mem_done |cache_write, cache_mem_read |次データをメモリから読み出す|
|read_done |mem_done & (state==r_4) |cache_cpu_done, cache_write|リードミス解決|
|write_done |mem_done & (state==r_4) |cache_cpu_done, cache_write |ライトミス解決|
-リードヒット時の動作
--該当するキャッシュのメモリデータをCPUに返す
-ライトヒット時の動作
--該当するキャッシュにメモリデータの書き込みを行う
--dirtyを1に設定する(メモリと内容が異なっていて,書き戻す必要がある)
-リードミス時の動作
--追い出されるキャッシュラインの先頭からひとつずつデータを取り出す
--dirtyが1の時,メモリに書き戻される
--上記2つの動作を追い出されるデータ分繰り返す
--新たにキャッシュされるデータをメモリから読み出しキャッシュRAMに書き込む(キャッシュラインのサイズ分繰り返される)
--CPUに要求データを返す
-ライトミス時の動作
--追い出されるキャッシュラインの先頭からひとつずつデータを取り出す
--dirtyが1の時,メモリに書き戻される
--上記2つの動作を追い出されるデータ分繰り返す
--新たにキャッシュされるデータをメモリから読み出しキャッシュRAMに書き込む(キャッシュラインのサイズ分繰り返される)
--CPUからのデータを該当するキャッシュに書き込む
**メモ [#c9be22d9]
-バースト転送モードの実装(ライトバッファの実装)を考慮すると,ライトバック方式のキャッシュを採用する利点はあるのだろうか?
-ライトミス時に新たなデータをキャッシュする場合,読みだしてきたアドレスと書き込みたいアドレスが一致したらCPUからのデータを書き込むようにすればいいかもしれない.
-ブロック図に信号線が足りてなかった.CacheControlUnitからCacheRAMに対して書き込むデータ(cpu_cache_dataと同じ内容)が必要.
**コメント [#t0f5de3a]
- 遷移に付随する論理のoutput信号名をブロック図で使用されている信号名に修正. -- [[五十嵐]] &new{2009-09-04 (金) 17:55:37};
#comment
ページ名: