}
}
+ action(p_profileMiss, "pm", desc="Profile cache miss") {
+ ++L2cache.demand_misses;
+ }
+
+ action(p_profileHit, "ph", desc="Profile cache hit") {
+ ++L2cache.demand_hits;
+ }
+
action(t_allocateTBE, "t", desc="allocate TBE Entry") {
if (is_invalid(tbe)) {
check_allocate(TBEs);
z_stall;
}
transition({M, V}, RdBlk) {TagArrayRead, DataArrayRead} {
+ p_profileHit;
sd_sendData;
ut_updateTag;
p_popRequestQueue;
}
transition(W, RdBlk, WI) {TagArrayRead, DataArrayRead} {
+ p_profileHit;
t_allocateTBE;
wb_writeBack;
}
transition(I, RdBlk, IV) {TagArrayRead} {
+ p_profileMiss;
t_allocateTBE;
rd_requestData;
p_popRequestQueue;
}
transition(IV, RdBlk) {
+ p_profileMiss;
t_allocateTBE;
rd_requestData;
p_popRequestQueue;
}
- transition({V, I},Atomic, A) {TagArrayRead} {
+ transition(V, Atomic, A) {TagArrayRead} {
+ p_profileHit;
+ i_invL2;
+ t_allocateTBE;
+ at_atomicThrough;
+ ina_incrementNumAtomics;
+ p_popRequestQueue;
+ }
+
+transition(I, Atomic, A) {TagArrayRead} {
+ p_profileMiss;
i_invL2;
t_allocateTBE;
at_atomicThrough;
}
transition(A, Atomic) {
+ p_profileMiss;
at_atomicThrough;
ina_incrementNumAtomics;
p_popRequestQueue;
}
transition({M, W}, Atomic, WI) {TagArrayRead} {
+ p_profileHit;
t_allocateTBE;
wb_writeBack;
}
transition(I, WrVicBlk) {TagArrayRead} {
+ p_profileMiss;
wt_writeThrough;
p_popRequestQueue;
}
transition(V, WrVicBlk) {TagArrayRead, DataArrayWrite} {
+ p_profileHit;
ut_updateTag;
wdb_writeDirtyBytes;
wt_writeThrough;
}
transition({V, M}, WrVicBlkBack, M) {TagArrayRead, TagArrayWrite, DataArrayWrite} {
+ p_profileHit;
ut_updateTag;
swb_sendWBAck;
wdb_writeDirtyBytes;
}
transition(W, WrVicBlkBack) {TagArrayRead, TagArrayWrite, DataArrayWrite} {
+ p_profileHit;
ut_updateTag;
swb_sendWBAck;
wdb_writeDirtyBytes;
}
transition(I, WrVicBlkBack, W) {TagArrayRead, TagArrayWrite, DataArrayWrite} {
+ p_profileMiss;
a_allocateBlock;
ut_updateTag;
swb_sendWBAck;
// built-int action
}
+ // added for profiling
+ action(uu_profileDataMiss, "\udm", desc="Profile the demand miss"){
+ ++L1cache.demand_misses;
+ }
+
+ action(uu_profileDataHit, "\udh", desc="Profile the demand hit"){
+ ++L1cache.demand_hits;
+ }
+
+
// Transitions
// ArrayRead/Write assumptions:
// All requests read Tag Array
transition(I, Load) {TagArrayRead} {
n_issueRdBlk;
+ uu_profileDataMiss;
p_popMandatoryQueue;
}
transition(V, Load) {TagArrayRead, DataArrayRead} {
l_loadDone;
mru_updateMRU;
+ uu_profileDataHit;
p_popMandatoryQueue;
}
a_allocate;
dw_dirtyWrite;
s_storeDone;
+ uu_profileDataMiss;
wt_writeThrough;
ic_invCache;
p_popMandatoryQueue;
transition(V, StoreThrough, I) {TagArrayRead, TagArrayWrite, DataArrayWrite} {
dw_dirtyWrite;
s_storeDone;
+ uu_profileDataHit;
wt_writeThrough;
ic_invCache;
p_popMandatoryQueue;