punk@1
|
1 signature InstCacheBlocking where {
|
punk@1
|
2 import ¶Assert®¶;
|
punk@1
|
3
|
punk@1
|
4 import ¶Counter®¶;
|
punk@1
|
5
|
punk@1
|
6 import ¶FIFOF_®¶;
|
punk@1
|
7
|
punk@1
|
8 import ¶FIFOF®¶;
|
punk@1
|
9
|
punk@1
|
10 import ¶FIFO®¶;
|
punk@1
|
11
|
punk@1
|
12 import ¶Inout®¶;
|
punk@1
|
13
|
punk@1
|
14 import ¶List®¶;
|
punk@1
|
15
|
punk@1
|
16 import BFIFO;
|
punk@1
|
17
|
punk@1
|
18 import ¶Clocks®¶;
|
punk@1
|
19
|
punk@1
|
20 import ¶ListN®¶;
|
punk@1
|
21
|
punk@1
|
22 import ¶PrimArray®¶;
|
punk@1
|
23
|
punk@1
|
24 import ¶RWire®¶;
|
punk@1
|
25
|
punk@1
|
26 import ¶RegFile®¶;
|
punk@1
|
27
|
punk@1
|
28 import ¶Vector®¶;
|
punk@1
|
29
|
punk@1
|
30 import ¶Connectable®¶;
|
punk@1
|
31
|
punk@1
|
32 import ¶GetPut®¶;
|
punk@1
|
33
|
punk@1
|
34 import ¶ClientServer®¶;
|
punk@1
|
35
|
punk@1
|
36 import Trace;
|
punk@1
|
37
|
punk@1
|
38 import MemTypes;
|
punk@1
|
39
|
punk@1
|
40 import ProcTypes;
|
punk@1
|
41
|
punk@1
|
42 interface (InstCacheBlocking.ICacheStats :: *) = {
|
punk@1
|
43 InstCacheBlocking.num_accesses :: ¶GetPut®¶.¶Get®¶ ProcTypes.Stat;
|
punk@1
|
44 InstCacheBlocking.num_misses :: ¶GetPut®¶.¶Get®¶ ProcTypes.Stat;
|
punk@1
|
45 InstCacheBlocking.num_evictions :: ¶GetPut®¶.¶Get®¶ ProcTypes.Stat
|
punk@1
|
46 };
|
punk@1
|
47
|
punk@1
|
48 instance InstCacheBlocking ¶Prelude®¶.¶PrimMakeUndefined®¶ InstCacheBlocking.ICacheStats;
|
punk@1
|
49
|
punk@1
|
50 instance InstCacheBlocking ¶Prelude®¶.¶PrimDeepSeqCond®¶ InstCacheBlocking.ICacheStats;
|
punk@1
|
51
|
punk@1
|
52 instance InstCacheBlocking ¶Prelude®¶.¶PrimMakeUninitialized®¶ InstCacheBlocking.ICacheStats;
|
punk@1
|
53
|
punk@1
|
54 interface (InstCacheBlocking.ICache :: * -> * -> *) req_t resp_t = {
|
punk@1
|
55 InstCacheBlocking.proc_server :: ¶ClientServer®¶.¶Server®¶ req_t resp_t;
|
punk@1
|
56 InstCacheBlocking.mmem_client :: ¶ClientServer®¶.¶Client®¶ MemTypes.MainMemReq MemTypes.MainMemResp;
|
punk@1
|
57 InstCacheBlocking.statsEn_put :: ¶GetPut®¶.¶Put®¶ ¶Prelude®¶.¶Bool®¶;
|
punk@1
|
58 InstCacheBlocking.stats :: InstCacheBlocking.ICacheStats
|
punk@1
|
59 };
|
punk@1
|
60
|
punk@1
|
61 instance InstCacheBlocking (¶Prelude®¶.¶PrimMakeUndefined®¶ resp_t) =>
|
punk@1
|
62 ¶Prelude®¶.¶PrimMakeUndefined®¶ (InstCacheBlocking.ICache req_t resp_t);
|
punk@1
|
63
|
punk@1
|
64 instance InstCacheBlocking (¶Prelude®¶.¶PrimDeepSeqCond®¶ resp_t) =>
|
punk@1
|
65 ¶Prelude®¶.¶PrimDeepSeqCond®¶ (InstCacheBlocking.ICache req_t resp_t);
|
punk@1
|
66
|
punk@1
|
67 instance InstCacheBlocking ¶Prelude®¶.¶PrimMakeUninitialized®¶
|
punk@1
|
68 (InstCacheBlocking.ICache req_t resp_t);
|
punk@1
|
69
|
punk@1
|
70 type (InstCacheBlocking.CacheLineIndexSz :: #) = 10;
|
punk@1
|
71
|
punk@1
|
72 type (InstCacheBlocking.CacheLineTagSz :: #) = 20;
|
punk@1
|
73
|
punk@1
|
74 type (InstCacheBlocking.CacheLineSz :: #) = 32;
|
punk@1
|
75
|
punk@1
|
76 type (InstCacheBlocking.CacheLineIndex :: *) = ¶Prelude®¶.¶Bit®¶ InstCacheBlocking.CacheLineIndexSz;
|
punk@1
|
77
|
punk@1
|
78 type (InstCacheBlocking.CacheLineTag :: *) = ¶Prelude®¶.¶Bit®¶ InstCacheBlocking.CacheLineTagSz;
|
punk@1
|
79
|
punk@1
|
80 type (InstCacheBlocking.CacheLine :: *) = ¶Prelude®¶.¶Bit®¶ InstCacheBlocking.CacheLineSz;
|
punk@1
|
81
|
punk@1
|
82 data (InstCacheBlocking.CacheStage :: *) =
|
punk@1
|
83 InstCacheBlocking.Init () |
|
punk@1
|
84 InstCacheBlocking.Access () |
|
punk@1
|
85 InstCacheBlocking.Evict () |
|
punk@1
|
86 InstCacheBlocking.RefillReq () |
|
punk@1
|
87 InstCacheBlocking.RefillResp ();
|
punk@1
|
88
|
punk@1
|
89 instance InstCacheBlocking ¶Prelude®¶.¶PrimMakeUndefined®¶ InstCacheBlocking.CacheStage;
|
punk@1
|
90
|
punk@1
|
91 instance InstCacheBlocking ¶Prelude®¶.¶PrimDeepSeqCond®¶ InstCacheBlocking.CacheStage;
|
punk@1
|
92
|
punk@1
|
93 instance InstCacheBlocking ¶Prelude®¶.¶PrimMakeUninitialized®¶ InstCacheBlocking.CacheStage;
|
punk@1
|
94
|
punk@1
|
95 instance InstCacheBlocking ¶Prelude®¶.¶Eq®¶ InstCacheBlocking.CacheStage;
|
punk@1
|
96
|
punk@1
|
97 instance InstCacheBlocking ¶Prelude®¶.¶Bits®¶ InstCacheBlocking.CacheStage 3;
|
punk@1
|
98
|
punk@1
|
99 InstCacheBlocking.getAddr :: MemTypes.InstReq -> ¶Prelude®¶.¶Bit®¶ MemTypes.AddrSz;
|
punk@1
|
100
|
punk@1
|
101 InstCacheBlocking.getCacheLineIndex :: MemTypes.InstReq -> InstCacheBlocking.CacheLineIndex;
|
punk@1
|
102
|
punk@1
|
103 InstCacheBlocking.getCacheLineTag :: MemTypes.InstReq -> InstCacheBlocking.CacheLineTag;
|
punk@1
|
104
|
punk@1
|
105 InstCacheBlocking.getCacheLineAddr :: MemTypes.InstReq -> ¶Prelude®¶.¶Bit®¶ MemTypes.AddrSz;
|
punk@1
|
106
|
punk@1
|
107 InstCacheBlocking.mkInstCache :: (¶Prelude®¶.¶IsModule®¶ _m__ _c__) =>
|
punk@1
|
108 _m__ (InstCacheBlocking.ICache MemTypes.InstReq MemTypes.InstResp)
|
punk@1
|
109 }
|