From 6fbeb4e5ec5f12916853f9a168d6a730992dd63e Mon Sep 17 00:00:00 2001 From: David Li Date: Sun, 27 Dec 2015 09:27:23 -0700 Subject: Include fetch requests in cache --- src/memory.rs | 22 ++++++++++++++++------ src/simulator.rs | 2 +- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/memory.rs b/src/memory.rs index ae3b6fc..e65eb10 100644 --- a/src/memory.rs +++ b/src/memory.rs @@ -32,13 +32,21 @@ pub struct Memory { memory: Vec, } +#[derive(Clone)] +struct FetchRequest { + cycles_left: u32, +} + #[derive(Clone)] struct CacheBlock { valid: bool, tag: u32, contents: Vec, + fetch_request: Option, } +type CacheSet = Vec; + // TODO: probably want different caches for different strategies, and // investigate how LRU is implemented // TODO: use hashtable for a way? @@ -47,7 +55,7 @@ pub struct Cache { num_sets: usize, num_ways: usize, block_words: usize, - cache: Vec>, + cache: Vec, } impl Memory { @@ -95,15 +103,17 @@ impl MemoryInterface for Memory { impl Cache { pub fn new(sets: usize, ways: usize, block_words: usize) -> Cache { + let set = vec![CacheBlock { + valid: false, + tag: 0, + contents: vec![0; block_words], + fetch_request: None, + }; ways]; Cache { num_sets: sets, num_ways: ways, block_words: block_words, - cache: vec![vec![CacheBlock { - valid: false, - tag: 0, - contents: vec![0; block_words], - }; ways]; sets], + cache: vec![set; sets], } } diff --git a/src/simulator.rs b/src/simulator.rs index 277e52f..f91ccbc 100644 --- a/src/simulator.rs +++ b/src/simulator.rs @@ -75,7 +75,7 @@ impl Simulator { }; let mut cores = vec![base_core; self.num_cores]; // hardcode GP - cores[0].registers.write_word(isa::Register::X3, 0x10860); + cores[0].registers.write_word(isa::Register::X3, 0x108D0); // hardcode SP cores[0].registers.write_word(isa::Register::X2, 0x7FFC); loop { -- cgit v1.2.3