punk@1: signature DataCacheBlocking where { punk@1: import ¶Assert®¶; punk@1: punk@1: import ¶Counter®¶; punk@1: punk@1: import ¶FIFOF_®¶; punk@1: punk@1: import ¶FIFOF®¶; punk@1: punk@1: import ¶FIFO®¶; punk@1: punk@1: import ¶Inout®¶; punk@1: punk@1: import ¶List®¶; punk@1: punk@1: import BFIFO; punk@1: punk@1: import ¶Clocks®¶; punk@1: punk@1: import ¶ListN®¶; punk@1: punk@1: import ¶PrimArray®¶; punk@1: punk@1: import ¶RegFile®¶; punk@1: punk@1: import ¶Vector®¶; punk@1: punk@1: import ¶Connectable®¶; punk@1: punk@1: import ¶GetPut®¶; punk@1: punk@1: import ¶ClientServer®¶; punk@1: punk@1: import Trace; punk@1: punk@1: import MemTypes; punk@1: punk@1: import ProcTypes; punk@1: punk@1: interface (DataCacheBlocking.DCacheStats :: *) = { punk@1: DataCacheBlocking.num_accesses :: ¶GetPut®¶.¶Get®¶ ProcTypes.Stat; punk@1: DataCacheBlocking.num_misses :: ¶GetPut®¶.¶Get®¶ ProcTypes.Stat; punk@1: DataCacheBlocking.num_writebacks :: ¶GetPut®¶.¶Get®¶ ProcTypes.Stat punk@1: }; punk@1: punk@1: instance DataCacheBlocking ¶Prelude®¶.¶PrimMakeUndefined®¶ DataCacheBlocking.DCacheStats; punk@1: punk@1: instance DataCacheBlocking ¶Prelude®¶.¶PrimDeepSeqCond®¶ DataCacheBlocking.DCacheStats; punk@1: punk@1: instance DataCacheBlocking ¶Prelude®¶.¶PrimMakeUninitialized®¶ DataCacheBlocking.DCacheStats; punk@1: punk@1: interface (DataCacheBlocking.DCache :: * -> * -> *) req_t resp_t = { punk@1: DataCacheBlocking.proc_server :: ¶ClientServer®¶.¶Server®¶ req_t resp_t; punk@1: DataCacheBlocking.mmem_client :: ¶ClientServer®¶.¶Client®¶ MemTypes.MainMemReq MemTypes.MainMemResp; punk@1: DataCacheBlocking.statsEn_put :: ¶GetPut®¶.¶Put®¶ ¶Prelude®¶.¶Bool®¶; punk@1: DataCacheBlocking.stats :: DataCacheBlocking.DCacheStats punk@1: }; punk@1: punk@1: instance DataCacheBlocking (¶Prelude®¶.¶PrimMakeUndefined®¶ resp_t) => punk@1: ¶Prelude®¶.¶PrimMakeUndefined®¶ (DataCacheBlocking.DCache req_t resp_t); punk@1: punk@1: instance DataCacheBlocking (¶Prelude®¶.¶PrimDeepSeqCond®¶ resp_t) => punk@1: ¶Prelude®¶.¶PrimDeepSeqCond®¶ (DataCacheBlocking.DCache req_t resp_t); punk@1: punk@1: instance DataCacheBlocking ¶Prelude®¶.¶PrimMakeUninitialized®¶ punk@1: (DataCacheBlocking.DCache req_t resp_t); punk@1: punk@1: type (DataCacheBlocking.CacheLineIndexSz :: #) = 10; punk@1: punk@1: type (DataCacheBlocking.CacheLineTagSz :: #) = 20; punk@1: punk@1: type (DataCacheBlocking.CacheLineSz :: #) = 32; punk@1: punk@1: type (DataCacheBlocking.CacheLineIndex :: *) = ¶Prelude®¶.¶Bit®¶ DataCacheBlocking.CacheLineIndexSz; punk@1: punk@1: type (DataCacheBlocking.CacheLineTag :: *) = ¶Prelude®¶.¶Bit®¶ DataCacheBlocking.CacheLineTagSz; punk@1: punk@1: type (DataCacheBlocking.CacheLine :: *) = ¶Prelude®¶.¶Bit®¶ DataCacheBlocking.CacheLineSz; punk@1: punk@1: data (DataCacheBlocking.CacheStage :: *) = punk@1: DataCacheBlocking.Init () | punk@1: DataCacheBlocking.Access () | punk@1: DataCacheBlocking.RefillReq () | punk@1: DataCacheBlocking.RefillResp (); punk@1: punk@1: instance DataCacheBlocking ¶Prelude®¶.¶PrimMakeUndefined®¶ DataCacheBlocking.CacheStage; punk@1: punk@1: instance DataCacheBlocking ¶Prelude®¶.¶PrimDeepSeqCond®¶ DataCacheBlocking.CacheStage; punk@1: punk@1: instance DataCacheBlocking ¶Prelude®¶.¶PrimMakeUninitialized®¶ DataCacheBlocking.CacheStage; punk@1: punk@1: instance DataCacheBlocking ¶Prelude®¶.¶Eq®¶ DataCacheBlocking.CacheStage; punk@1: punk@1: instance DataCacheBlocking ¶Prelude®¶.¶Bits®¶ DataCacheBlocking.CacheStage 2; punk@1: punk@1: DataCacheBlocking.getAddr :: MemTypes.DataReq -> ¶Prelude®¶.¶Bit®¶ MemTypes.AddrSz; punk@1: punk@1: DataCacheBlocking.getCacheLineIndex :: MemTypes.DataReq -> DataCacheBlocking.CacheLineIndex; punk@1: punk@1: DataCacheBlocking.getCacheLineTag :: MemTypes.DataReq -> DataCacheBlocking.CacheLineTag; punk@1: punk@1: DataCacheBlocking.getCacheLineAddr :: MemTypes.DataReq -> ¶Prelude®¶.¶Bit®¶ MemTypes.AddrSz; punk@1: punk@1: DataCacheBlocking.mkDataCache :: (¶Prelude®¶.¶IsModule®¶ _m__ _c__) => punk@1: _m__ (DataCacheBlocking.DCache MemTypes.DataReq MemTypes.DataResp) punk@1: }