summaryrefslogtreecommitdiff
path: root/src/mem/protocol/MOESI_CMP_directory-L2cache.sm
diff options
context:
space:
mode:
authorBrad Beckmann <Brad.Beckmann@amd.com>2011-02-23 16:41:59 -0800
committerBrad Beckmann <Brad.Beckmann@amd.com>2011-02-23 16:41:59 -0800
commit12a05c23b7d351afee4b0c531021d8fb8ea5f57d (patch)
tree99a18647ecf642166068187915f2816a1007567d /src/mem/protocol/MOESI_CMP_directory-L2cache.sm
parent7842e955193c3fba850201acc45001306fe2ff9b (diff)
downloadgem5-12a05c23b7d351afee4b0c531021d8fb8ea5f57d.tar.xz
ruby: automate permission setting
This patch integrates permissions with cache and memory states, and then automates the setting of permissions within the generated code. No longer does one need to manually set the permissions within the setState funciton. This patch will faciliate easier functional access support by always correctly setting permissions for both cache and memory states. --HG-- rename : src/mem/slicc/ast/EnumDeclAST.py => src/mem/slicc/ast/StateDeclAST.py rename : src/mem/slicc/ast/TypeFieldEnumAST.py => src/mem/slicc/ast/TypeFieldStateAST.py
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;