summaryrefslogtreecommitdiff
path: root/src/mem/protocol/MOESI_CMP_directory-L2cache.sm
diff options
context:
space:
mode:
Diffstat (limited to 'src/mem/protocol/MOESI_CMP_directory-L2cache.sm')
-rw-r--r--src/mem/protocol/MOESI_CMP_directory-L2cache.sm133
1 files changed, 65 insertions, 68 deletions
diff --git a/src/mem/protocol/MOESI_CMP_directory-L2cache.sm b/src/mem/protocol/MOESI_CMP_directory-L2cache.sm
index a638b171f..cdc91c292 100644
--- a/src/mem/protocol/MOESI_CMP_directory-L2cache.sm
+++ b/src/mem/protocol/MOESI_CMP_directory-L2cache.sm
@@ -51,80 +51,80 @@ machine(L2Cache, "Token protocol")
// MessageBuffer L1WritebackToL2Cache, network="From", virtual_network="3", ordered="false";
// STATES
- enumeration(State, desc="L2 Cache states", default="L2Cache_State_I") {
+ state_declaration(State, desc="L2 Cache states", default="L2Cache_State_I") {
// Stable states
- NP, desc="Not Present";
- I, desc="Invalid";
- ILS, desc="Idle/NP, but local sharers exist";
- ILX, desc="Idle/NP, but local exclusive exists";
- ILO, desc="Idle/NP, but local owner exists";
- ILOX, desc="Idle/NP, but local owner exists and chip is exclusive";
- ILOS, desc="Idle/NP, but local owner exists and local sharers as well";
- ILOSX, desc="Idle/NP, but local owner exists, local sharers exist, chip is exclusive ";
- S, desc="Shared, no local sharers";
- O, desc="Owned, no local sharers";
- OLS, desc="Owned with local sharers";
- OLSX, desc="Owned with local sharers, chip is exclusive";
- SLS, desc="Shared with local sharers";
- M, desc="Modified";
+ NP, AccessPermission:Invalid, desc="Not Present";
+ I, AccessPermission:Invalid, desc="Invalid";
+ ILS, AccessPermission:Busy, desc="Idle/NP, but local sharers exist";
+ ILX, AccessPermission:Busy, desc="Idle/NP, but local exclusive exists";
+ ILO, AccessPermission:Busy, desc="Idle/NP, but local owner exists";
+ ILOX, AccessPermission:Busy, desc="Idle/NP, but local owner exists and chip is exclusive";
+ ILOS, AccessPermission:Busy, desc="Idle/NP, but local owner exists and local sharers as well";
+ ILOSX, AccessPermission:Busy, desc="Idle/NP, but local owner exists, local sharers exist, chip is exclusive ";
+ S, AccessPermission:Read_Only, desc="Shared, no local sharers";
+ O, AccessPermission:Read_Only, desc="Owned, no local sharers";
+ OLS, AccessPermission:Read_Only, desc="Owned with local sharers";
+ OLSX, AccessPermission:Read_Only, desc="Owned with local sharers, chip is exclusive";
+ SLS, AccessPermission:Read_Only, desc="Shared with local sharers";
+ M, AccessPermission:Read_Write, desc="Modified";
// Transient States
- IFGX, desc="Blocked, forwarded global GETX to local owner/exclusive. No other on-chip invs needed";
- IFGS, desc="Blocked, forwarded global GETS to local owner";
- ISFGS, desc="Blocked, forwarded global GETS to local owner, local sharers exist";
+ IFGX, AccessPermission:Busy, desc="Blocked, forwarded global GETX to local owner/exclusive. No other on-chip invs needed";
+ IFGS, AccessPermission:Busy, desc="Blocked, forwarded global GETS to local owner";
+ ISFGS, AccessPermission:Busy, desc="Blocked, forwarded global GETS to local owner, local sharers exist";
// UNUSED
- IFGXX, desc="Blocked, forwarded global GETX to local owner but may need acks from other sharers";
- OFGX, desc="Blocked, forwarded global GETX to owner and got data but may need acks";
+ IFGXX, AccessPermission:Busy, desc="Blocked, forwarded global GETX to local owner but may need acks from other sharers";
+ OFGX, AccessPermission:Busy, desc="Blocked, forwarded global GETX to owner and got data but may need acks";
- OLSF, desc="Blocked, got Fwd_GETX with local sharers, waiting for local inv acks";
+ OLSF, AccessPermission:Busy, desc="Blocked, got Fwd_GETX with local sharers, waiting for local inv acks";
// writebacks
- ILOW, desc="local WB request, was ILO";
- ILOXW, desc="local WB request, was ILOX";
- ILOSW, desc="local WB request, was ILOS";
- ILOSXW, desc="local WB request, was ILOSX";
- SLSW, desc="local WB request, was SLS";
- OLSW, desc="local WB request, was OLS";
- ILSW, desc="local WB request, was ILS";
- IW, desc="local WB request from only sharer, was ILS";
- OW, desc="local WB request from only sharer, was OLS";
- SW, desc="local WB request from only sharer, was SLS";
- OXW, desc="local WB request from only sharer, was OLSX";
- OLSXW, desc="local WB request from sharer, was OLSX";
- ILXW, desc="local WB request, was ILX";
-
- IFLS, desc="Blocked, forwarded local GETS to _some_ local sharer";
- IFLO, desc="Blocked, forwarded local GETS to local owner";
- IFLOX, desc="Blocked, forwarded local GETS to local owner but chip is exclusive";
- IFLOXX, desc="Blocked, forwarded local GETX to local owner/exclusive, chip is exclusive";
- IFLOSX, desc="Blocked, forwarded local GETS to local owner w/ other sharers, chip is exclusive";
- IFLXO, desc="Blocked, forwarded local GETX to local owner with other sharers, chip is exclusive";
-
- IGS, desc="Semi-blocked, issued local GETS to directory";
- IGM, desc="Blocked, issued local GETX to directory. Need global acks and data";
- IGMLS, desc="Blocked, issued local GETX to directory but may need to INV local sharers";
- IGMO, desc="Blocked, have data for local GETX but need all acks";
- IGMIO, desc="Blocked, issued local GETX, local owner with possible local sharer, may need to INV";
- OGMIO, desc="Blocked, issued local GETX, was owner, may need to INV";
- IGMIOF, desc="Blocked, issued local GETX, local owner, waiting for global acks, got Fwd_GETX";
- IGMIOFS, desc="Blocked, issued local GETX, local owner, waiting for global acks, got Fwd_GETS";
- OGMIOF, desc="Blocked, issued local GETX, was owner, waiting for global acks, got Fwd_GETX";
-
- II, desc="Blocked, handling invalidations";
- MM, desc="Blocked, was M satisfying local GETX";
- SS, desc="Blocked, was S satisfying local GETS";
- OO, desc="Blocked, was O satisfying local GETS";
- OLSS, desc="Blocked, satisfying local GETS";
- OLSXS, desc="Blocked, satisfying local GETS";
- SLSS, desc="Blocked, satisfying local GETS";
-
- OI, desc="Blocked, doing writeback, was O";
- MI, desc="Blocked, doing writeback, was M";
- MII, desc="Blocked, doing writeback, was M, got Fwd_GETX";
- OLSI, desc="Blocked, doing writeback, was OLS";
- ILSI, desc="Blocked, doing writeback, was OLS got Fwd_GETX";
+ ILOW, AccessPermission:Busy, desc="local WB request, was ILO";
+ ILOXW, AccessPermission:Busy, desc="local WB request, was ILOX";
+ ILOSW, AccessPermission:Busy, desc="local WB request, was ILOS";
+ ILOSXW, AccessPermission:Busy, desc="local WB request, was ILOSX";
+ SLSW, AccessPermission:Busy, desc="local WB request, was SLS";
+ OLSW, AccessPermission:Busy, desc="local WB request, was OLS";
+ ILSW, AccessPermission:Busy, desc="local WB request, was ILS";
+ IW, AccessPermission:Busy, desc="local WB request from only sharer, was ILS";
+ OW, AccessPermission:Busy, desc="local WB request from only sharer, was OLS";
+ SW, AccessPermission:Busy, desc="local WB request from only sharer, was SLS";
+ OXW, AccessPermission:Busy, desc="local WB request from only sharer, was OLSX";
+ OLSXW, AccessPermission:Busy, desc="local WB request from sharer, was OLSX";
+ ILXW, AccessPermission:Busy, desc="local WB request, was ILX";
+
+ IFLS, AccessPermission:Busy, desc="Blocked, forwarded local GETS to _some_ local sharer";
+ IFLO, AccessPermission:Busy, desc="Blocked, forwarded local GETS to local owner";
+ IFLOX, AccessPermission:Busy, desc="Blocked, forwarded local GETS to local owner but chip is exclusive";
+ IFLOXX, AccessPermission:Busy, desc="Blocked, forwarded local GETX to local owner/exclusive, chip is exclusive";
+ IFLOSX, AccessPermission:Busy, desc="Blocked, forwarded local GETS to local owner w/ other sharers, chip is exclusive";
+ IFLXO, AccessPermission:Busy, desc="Blocked, forwarded local GETX to local owner with other sharers, chip is exclusive";
+
+ IGS, AccessPermission:Busy, desc="Semi-blocked, issued local GETS to directory";
+ IGM, AccessPermission:Busy, desc="Blocked, issued local GETX to directory. Need global acks and data";
+ IGMLS, AccessPermission:Busy, desc="Blocked, issued local GETX to directory but may need to INV local sharers";
+ IGMO, AccessPermission:Busy, desc="Blocked, have data for local GETX but need all acks";
+ IGMIO, AccessPermission:Busy, desc="Blocked, issued local GETX, local owner with possible local sharer, may need to INV";
+ OGMIO, AccessPermission:Busy, desc="Blocked, issued local GETX, was owner, may need to INV";
+ IGMIOF, AccessPermission:Busy, desc="Blocked, issued local GETX, local owner, waiting for global acks, got Fwd_GETX";
+ IGMIOFS, AccessPermission:Busy, desc="Blocked, issued local GETX, local owner, waiting for global acks, got Fwd_GETS";
+ OGMIOF, AccessPermission:Busy, desc="Blocked, issued local GETX, was owner, waiting for global acks, got Fwd_GETX";
+
+ II, AccessPermission:Busy, desc="Blocked, handling invalidations";
+ MM, AccessPermission:Busy, desc="Blocked, was M satisfying local GETX";
+ SS, AccessPermission:Busy, desc="Blocked, was S satisfying local GETS";
+ OO, AccessPermission:Busy, desc="Blocked, was O satisfying local GETS";
+ OLSS, AccessPermission:Busy, desc="Blocked, satisfying local GETS";
+ OLSXS, AccessPermission:Busy, desc="Blocked, satisfying local GETS";
+ SLSS, AccessPermission:Busy, desc="Blocked, satisfying local GETS";
+
+ OI, AccessPermission:Busy, desc="Blocked, doing writeback, was O";
+ MI, AccessPermission:Busy, desc="Blocked, doing writeback, was M";
+ MII, AccessPermission:Busy, desc="Blocked, doing writeback, was M, got Fwd_GETX";
+ OLSI, AccessPermission:Busy, desc="Blocked, doing writeback, was OLS";
+ ILSI, AccessPermission:Busy, desc="Blocked, doing writeback, was OLS got Fwd_GETX";
}
// EVENTS
@@ -486,9 +486,6 @@ machine(L2Cache, "Token protocol")
else {
cache_entry.CacheState := state;
}
-
- // Set permission
- cache_entry.changePermission(AccessPermission:Read_Only);
}
else if (localDirectory.isTagPresent(addr)) {
localDirectory[addr].DirState := state;