punk@1: signature InstCacheBlocking 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 ¶RWire®¶; 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 (InstCacheBlocking.ICacheStats :: *) = { punk@1: InstCacheBlocking.num_accesses :: ¶GetPut®¶.¶Get®¶ ProcTypes.Stat; punk@1: InstCacheBlocking.num_misses :: ¶GetPut®¶.¶Get®¶ ProcTypes.Stat; punk@1: InstCacheBlocking.num_evictions :: ¶GetPut®¶.¶Get®¶ ProcTypes.Stat punk@1: }; punk@1: punk@1: instance InstCacheBlocking ¶Prelude®¶.¶PrimMakeUndefined®¶ InstCacheBlocking.ICacheStats; punk@1: punk@1: instance InstCacheBlocking ¶Prelude®¶.¶PrimDeepSeqCond®¶ InstCacheBlocking.ICacheStats; punk@1: punk@1: instance InstCacheBlocking ¶Prelude®¶.¶PrimMakeUninitialized®¶ InstCacheBlocking.ICacheStats; punk@1: punk@1: interface (InstCacheBlocking.ICache :: * -> * -> *) req_t resp_t = { punk@1: InstCacheBlocking.proc_server :: ¶ClientServer®¶.¶Server®¶ req_t resp_t; punk@1: InstCacheBlocking.mmem_client :: ¶ClientServer®¶.¶Client®¶ MemTypes.MainMemReq MemTypes.MainMemResp; punk@1: InstCacheBlocking.statsEn_put :: ¶GetPut®¶.¶Put®¶ ¶Prelude®¶.¶Bool®¶; punk@1: InstCacheBlocking.stats :: InstCacheBlocking.ICacheStats punk@1: }; punk@1: punk@1: instance InstCacheBlocking (¶Prelude®¶.¶PrimMakeUndefined®¶ resp_t) => punk@1: ¶Prelude®¶.¶PrimMakeUndefined®¶ (InstCacheBlocking.ICache req_t resp_t); punk@1: punk@1: instance InstCacheBlocking (¶Prelude®¶.¶PrimDeepSeqCond®¶ resp_t) => punk@1: ¶Prelude®¶.¶PrimDeepSeqCond®¶ (InstCacheBlocking.ICache req_t resp_t); punk@1: punk@1: instance InstCacheBlocking ¶Prelude®¶.¶PrimMakeUninitialized®¶ punk@1: (InstCacheBlocking.ICache req_t resp_t); punk@1: punk@1: type (InstCacheBlocking.CacheLineIndexSz :: #) = 10; punk@1: punk@1: type (InstCacheBlocking.CacheLineTagSz :: #) = 20; punk@1: punk@1: type (InstCacheBlocking.CacheLineSz :: #) = 32; punk@1: punk@1: type (InstCacheBlocking.CacheLineIndex :: *) = ¶Prelude®¶.¶Bit®¶ InstCacheBlocking.CacheLineIndexSz; punk@1: punk@1: type (InstCacheBlocking.CacheLineTag :: *) = ¶Prelude®¶.¶Bit®¶ InstCacheBlocking.CacheLineTagSz; punk@1: punk@1: type (InstCacheBlocking.CacheLine :: *) = ¶Prelude®¶.¶Bit®¶ InstCacheBlocking.CacheLineSz; punk@1: punk@1: data (InstCacheBlocking.CacheStage :: *) = punk@1: InstCacheBlocking.Init () | punk@1: InstCacheBlocking.Access () | punk@1: InstCacheBlocking.Evict () | punk@1: InstCacheBlocking.RefillReq () | punk@1: InstCacheBlocking.RefillResp (); punk@1: punk@1: instance InstCacheBlocking ¶Prelude®¶.¶PrimMakeUndefined®¶ InstCacheBlocking.CacheStage; punk@1: punk@1: instance InstCacheBlocking ¶Prelude®¶.¶PrimDeepSeqCond®¶ InstCacheBlocking.CacheStage; punk@1: punk@1: instance InstCacheBlocking ¶Prelude®¶.¶PrimMakeUninitialized®¶ InstCacheBlocking.CacheStage; punk@1: punk@1: instance InstCacheBlocking ¶Prelude®¶.¶Eq®¶ InstCacheBlocking.CacheStage; punk@1: punk@1: instance InstCacheBlocking ¶Prelude®¶.¶Bits®¶ InstCacheBlocking.CacheStage 3; punk@1: punk@1: InstCacheBlocking.getAddr :: MemTypes.InstReq -> ¶Prelude®¶.¶Bit®¶ MemTypes.AddrSz; punk@1: punk@1: InstCacheBlocking.getCacheLineIndex :: MemTypes.InstReq -> InstCacheBlocking.CacheLineIndex; punk@1: punk@1: InstCacheBlocking.getCacheLineTag :: MemTypes.InstReq -> InstCacheBlocking.CacheLineTag; punk@1: punk@1: InstCacheBlocking.getCacheLineAddr :: MemTypes.InstReq -> ¶Prelude®¶.¶Bit®¶ MemTypes.AddrSz; punk@1: punk@1: InstCacheBlocking.mkInstCache :: (¶Prelude®¶.¶IsModule®¶ _m__ _c__) => punk@1: _m__ (InstCacheBlocking.ICache MemTypes.InstReq MemTypes.InstResp) punk@1: }