ruby: mesi: slight renaming
This commit is contained in:
parent
b80e574d01
commit
b6d804a1e6
2 changed files with 37 additions and 37 deletions
|
@ -149,7 +149,7 @@ machine(L1Cache, "MESI Directory L1 Cache CMP")
|
||||||
bool isPresent(Address);
|
bool isPresent(Address);
|
||||||
}
|
}
|
||||||
|
|
||||||
TBETable L1_TBEs, template="<L1Cache_TBE>", constructor="m_number_of_TBEs";
|
TBETable TBEs, template="<L1Cache_TBE>", constructor="m_number_of_TBEs";
|
||||||
|
|
||||||
MessageBuffer mandatoryQueue, ordered="false";
|
MessageBuffer mandatoryQueue, ordered="false";
|
||||||
|
|
||||||
|
@ -208,7 +208,7 @@ machine(L1Cache, "MESI Directory L1 Cache CMP")
|
||||||
}
|
}
|
||||||
|
|
||||||
AccessPermission getAccessPermission(Address addr) {
|
AccessPermission getAccessPermission(Address addr) {
|
||||||
TBE tbe := L1_TBEs[addr];
|
TBE tbe := TBEs[addr];
|
||||||
if(is_valid(tbe)) {
|
if(is_valid(tbe)) {
|
||||||
DPRINTF(RubySlicc, "%s\n", L1Cache_State_to_permission(tbe.TBEState));
|
DPRINTF(RubySlicc, "%s\n", L1Cache_State_to_permission(tbe.TBEState));
|
||||||
return L1Cache_State_to_permission(tbe.TBEState);
|
return L1Cache_State_to_permission(tbe.TBEState);
|
||||||
|
@ -225,7 +225,7 @@ machine(L1Cache, "MESI Directory L1 Cache CMP")
|
||||||
}
|
}
|
||||||
|
|
||||||
DataBlock getDataBlock(Address addr), return_by_ref="yes" {
|
DataBlock getDataBlock(Address addr), return_by_ref="yes" {
|
||||||
TBE tbe := L1_TBEs[addr];
|
TBE tbe := TBEs[addr];
|
||||||
if(is_valid(tbe)) {
|
if(is_valid(tbe)) {
|
||||||
return tbe.DataBlk;
|
return tbe.DataBlk;
|
||||||
}
|
}
|
||||||
|
@ -290,7 +290,7 @@ machine(L1Cache, "MESI Directory L1 Cache CMP")
|
||||||
// cache. We should drop this request.
|
// cache. We should drop this request.
|
||||||
trigger(prefetch_request_type_to_event(in_msg.Type),
|
trigger(prefetch_request_type_to_event(in_msg.Type),
|
||||||
in_msg.LineAddress,
|
in_msg.LineAddress,
|
||||||
L1Icache_entry, L1_TBEs[in_msg.LineAddress]);
|
L1Icache_entry, TBEs[in_msg.LineAddress]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check to see if it is in the OTHER L1
|
// Check to see if it is in the OTHER L1
|
||||||
|
@ -300,7 +300,7 @@ machine(L1Cache, "MESI Directory L1 Cache CMP")
|
||||||
// this request.
|
// this request.
|
||||||
trigger(prefetch_request_type_to_event(in_msg.Type),
|
trigger(prefetch_request_type_to_event(in_msg.Type),
|
||||||
in_msg.LineAddress,
|
in_msg.LineAddress,
|
||||||
L1Dcache_entry, L1_TBEs[in_msg.LineAddress]);
|
L1Dcache_entry, TBEs[in_msg.LineAddress]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (L1Icache.cacheAvail(in_msg.LineAddress)) {
|
if (L1Icache.cacheAvail(in_msg.LineAddress)) {
|
||||||
|
@ -308,13 +308,13 @@ machine(L1Cache, "MESI Directory L1 Cache CMP")
|
||||||
// in the L1 so let's see if the L2 has it
|
// in the L1 so let's see if the L2 has it
|
||||||
trigger(prefetch_request_type_to_event(in_msg.Type),
|
trigger(prefetch_request_type_to_event(in_msg.Type),
|
||||||
in_msg.LineAddress,
|
in_msg.LineAddress,
|
||||||
L1Icache_entry, L1_TBEs[in_msg.LineAddress]);
|
L1Icache_entry, TBEs[in_msg.LineAddress]);
|
||||||
} else {
|
} else {
|
||||||
// No room in the L1, so we need to make room in the L1
|
// No room in the L1, so we need to make room in the L1
|
||||||
trigger(Event:L1_Replacement,
|
trigger(Event:L1_Replacement,
|
||||||
L1Icache.cacheProbe(in_msg.LineAddress),
|
L1Icache.cacheProbe(in_msg.LineAddress),
|
||||||
getL1ICacheEntry(L1Icache.cacheProbe(in_msg.LineAddress)),
|
getL1ICacheEntry(L1Icache.cacheProbe(in_msg.LineAddress)),
|
||||||
L1_TBEs[L1Icache.cacheProbe(in_msg.LineAddress)]);
|
TBEs[L1Icache.cacheProbe(in_msg.LineAddress)]);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Data prefetch
|
// Data prefetch
|
||||||
|
@ -324,7 +324,7 @@ machine(L1Cache, "MESI Directory L1 Cache CMP")
|
||||||
// cache. We should drop this request.
|
// cache. We should drop this request.
|
||||||
trigger(prefetch_request_type_to_event(in_msg.Type),
|
trigger(prefetch_request_type_to_event(in_msg.Type),
|
||||||
in_msg.LineAddress,
|
in_msg.LineAddress,
|
||||||
L1Dcache_entry, L1_TBEs[in_msg.LineAddress]);
|
L1Dcache_entry, TBEs[in_msg.LineAddress]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check to see if it is in the OTHER L1
|
// Check to see if it is in the OTHER L1
|
||||||
|
@ -334,7 +334,7 @@ machine(L1Cache, "MESI Directory L1 Cache CMP")
|
||||||
// request.
|
// request.
|
||||||
trigger(prefetch_request_type_to_event(in_msg.Type),
|
trigger(prefetch_request_type_to_event(in_msg.Type),
|
||||||
in_msg.LineAddress,
|
in_msg.LineAddress,
|
||||||
L1Icache_entry, L1_TBEs[in_msg.LineAddress]);
|
L1Icache_entry, TBEs[in_msg.LineAddress]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (L1Dcache.cacheAvail(in_msg.LineAddress)) {
|
if (L1Dcache.cacheAvail(in_msg.LineAddress)) {
|
||||||
|
@ -342,13 +342,13 @@ machine(L1Cache, "MESI Directory L1 Cache CMP")
|
||||||
// the L1 let's see if the L2 has it
|
// the L1 let's see if the L2 has it
|
||||||
trigger(prefetch_request_type_to_event(in_msg.Type),
|
trigger(prefetch_request_type_to_event(in_msg.Type),
|
||||||
in_msg.LineAddress,
|
in_msg.LineAddress,
|
||||||
L1Dcache_entry, L1_TBEs[in_msg.LineAddress]);
|
L1Dcache_entry, TBEs[in_msg.LineAddress]);
|
||||||
} else {
|
} else {
|
||||||
// No room in the L1, so we need to make room in the L1
|
// No room in the L1, so we need to make room in the L1
|
||||||
trigger(Event:L1_Replacement,
|
trigger(Event:L1_Replacement,
|
||||||
L1Dcache.cacheProbe(in_msg.LineAddress),
|
L1Dcache.cacheProbe(in_msg.LineAddress),
|
||||||
getL1DCacheEntry(L1Dcache.cacheProbe(in_msg.LineAddress)),
|
getL1DCacheEntry(L1Dcache.cacheProbe(in_msg.LineAddress)),
|
||||||
L1_TBEs[L1Dcache.cacheProbe(in_msg.LineAddress)]);
|
TBEs[L1Dcache.cacheProbe(in_msg.LineAddress)]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -362,7 +362,7 @@ machine(L1Cache, "MESI Directory L1 Cache CMP")
|
||||||
assert(in_msg.Destination.isElement(machineID));
|
assert(in_msg.Destination.isElement(machineID));
|
||||||
|
|
||||||
Entry cache_entry := getCacheEntry(in_msg.Addr);
|
Entry cache_entry := getCacheEntry(in_msg.Addr);
|
||||||
TBE tbe := L1_TBEs[in_msg.Addr];
|
TBE tbe := TBEs[in_msg.Addr];
|
||||||
|
|
||||||
if(in_msg.Type == CoherenceResponseType:DATA_EXCLUSIVE) {
|
if(in_msg.Type == CoherenceResponseType:DATA_EXCLUSIVE) {
|
||||||
trigger(Event:Data_Exclusive, in_msg.Addr, cache_entry, tbe);
|
trigger(Event:Data_Exclusive, in_msg.Addr, cache_entry, tbe);
|
||||||
|
@ -402,7 +402,7 @@ machine(L1Cache, "MESI Directory L1 Cache CMP")
|
||||||
assert(in_msg.Destination.isElement(machineID));
|
assert(in_msg.Destination.isElement(machineID));
|
||||||
|
|
||||||
Entry cache_entry := getCacheEntry(in_msg.Addr);
|
Entry cache_entry := getCacheEntry(in_msg.Addr);
|
||||||
TBE tbe := L1_TBEs[in_msg.Addr];
|
TBE tbe := TBEs[in_msg.Addr];
|
||||||
|
|
||||||
if (in_msg.Type == CoherenceRequestType:INV) {
|
if (in_msg.Type == CoherenceRequestType:INV) {
|
||||||
trigger(Event:Inv, in_msg.Addr, cache_entry, tbe);
|
trigger(Event:Inv, in_msg.Addr, cache_entry, tbe);
|
||||||
|
@ -435,7 +435,7 @@ machine(L1Cache, "MESI Directory L1 Cache CMP")
|
||||||
if (is_valid(L1Icache_entry)) {
|
if (is_valid(L1Icache_entry)) {
|
||||||
// The tag matches for the L1, so the L1 asks the L2 for it.
|
// The tag matches for the L1, so the L1 asks the L2 for it.
|
||||||
trigger(mandatory_request_type_to_event(in_msg.Type), in_msg.LineAddress,
|
trigger(mandatory_request_type_to_event(in_msg.Type), in_msg.LineAddress,
|
||||||
L1Icache_entry, L1_TBEs[in_msg.LineAddress]);
|
L1Icache_entry, TBEs[in_msg.LineAddress]);
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
// Check to see if it is in the OTHER L1
|
// Check to see if it is in the OTHER L1
|
||||||
|
@ -443,19 +443,19 @@ machine(L1Cache, "MESI Directory L1 Cache CMP")
|
||||||
if (is_valid(L1Dcache_entry)) {
|
if (is_valid(L1Dcache_entry)) {
|
||||||
// The block is in the wrong L1, put the request on the queue to the shared L2
|
// The block is in the wrong L1, put the request on the queue to the shared L2
|
||||||
trigger(Event:L1_Replacement, in_msg.LineAddress,
|
trigger(Event:L1_Replacement, in_msg.LineAddress,
|
||||||
L1Dcache_entry, L1_TBEs[in_msg.LineAddress]);
|
L1Dcache_entry, TBEs[in_msg.LineAddress]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (L1Icache.cacheAvail(in_msg.LineAddress)) {
|
if (L1Icache.cacheAvail(in_msg.LineAddress)) {
|
||||||
// L1 does't have the line, but we have space for it
|
// L1 does't have the line, but we have space for it
|
||||||
// in the L1 so let's see if the L2 has it.
|
// in the L1 so let's see if the L2 has it.
|
||||||
trigger(mandatory_request_type_to_event(in_msg.Type), in_msg.LineAddress,
|
trigger(mandatory_request_type_to_event(in_msg.Type), in_msg.LineAddress,
|
||||||
L1Icache_entry, L1_TBEs[in_msg.LineAddress]);
|
L1Icache_entry, TBEs[in_msg.LineAddress]);
|
||||||
} else {
|
} else {
|
||||||
// No room in the L1, so we need to make room in the L1
|
// No room in the L1, so we need to make room in the L1
|
||||||
trigger(Event:L1_Replacement, L1Icache.cacheProbe(in_msg.LineAddress),
|
trigger(Event:L1_Replacement, L1Icache.cacheProbe(in_msg.LineAddress),
|
||||||
getL1ICacheEntry(L1Icache.cacheProbe(in_msg.LineAddress)),
|
getL1ICacheEntry(L1Icache.cacheProbe(in_msg.LineAddress)),
|
||||||
L1_TBEs[L1Icache.cacheProbe(in_msg.LineAddress)]);
|
TBEs[L1Icache.cacheProbe(in_msg.LineAddress)]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -465,7 +465,7 @@ machine(L1Cache, "MESI Directory L1 Cache CMP")
|
||||||
if (is_valid(L1Dcache_entry)) {
|
if (is_valid(L1Dcache_entry)) {
|
||||||
// The tag matches for the L1, so the L1 ask the L2 for it
|
// The tag matches for the L1, so the L1 ask the L2 for it
|
||||||
trigger(mandatory_request_type_to_event(in_msg.Type), in_msg.LineAddress,
|
trigger(mandatory_request_type_to_event(in_msg.Type), in_msg.LineAddress,
|
||||||
L1Dcache_entry, L1_TBEs[in_msg.LineAddress]);
|
L1Dcache_entry, TBEs[in_msg.LineAddress]);
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
// Check to see if it is in the OTHER L1
|
// Check to see if it is in the OTHER L1
|
||||||
|
@ -473,19 +473,19 @@ machine(L1Cache, "MESI Directory L1 Cache CMP")
|
||||||
if (is_valid(L1Icache_entry)) {
|
if (is_valid(L1Icache_entry)) {
|
||||||
// The block is in the wrong L1, put the request on the queue to the shared L2
|
// The block is in the wrong L1, put the request on the queue to the shared L2
|
||||||
trigger(Event:L1_Replacement, in_msg.LineAddress,
|
trigger(Event:L1_Replacement, in_msg.LineAddress,
|
||||||
L1Icache_entry, L1_TBEs[in_msg.LineAddress]);
|
L1Icache_entry, TBEs[in_msg.LineAddress]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (L1Dcache.cacheAvail(in_msg.LineAddress)) {
|
if (L1Dcache.cacheAvail(in_msg.LineAddress)) {
|
||||||
// L1 does't have the line, but we have space for it
|
// L1 does't have the line, but we have space for it
|
||||||
// in the L1 let's see if the L2 has it.
|
// in the L1 let's see if the L2 has it.
|
||||||
trigger(mandatory_request_type_to_event(in_msg.Type), in_msg.LineAddress,
|
trigger(mandatory_request_type_to_event(in_msg.Type), in_msg.LineAddress,
|
||||||
L1Dcache_entry, L1_TBEs[in_msg.LineAddress]);
|
L1Dcache_entry, TBEs[in_msg.LineAddress]);
|
||||||
} else {
|
} else {
|
||||||
// No room in the L1, so we need to make room in the L1
|
// No room in the L1, so we need to make room in the L1
|
||||||
trigger(Event:L1_Replacement, L1Dcache.cacheProbe(in_msg.LineAddress),
|
trigger(Event:L1_Replacement, L1Dcache.cacheProbe(in_msg.LineAddress),
|
||||||
getL1DCacheEntry(L1Dcache.cacheProbe(in_msg.LineAddress)),
|
getL1DCacheEntry(L1Dcache.cacheProbe(in_msg.LineAddress)),
|
||||||
L1_TBEs[L1Dcache.cacheProbe(in_msg.LineAddress)]);
|
TBEs[L1Dcache.cacheProbe(in_msg.LineAddress)]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -829,10 +829,10 @@ machine(L1Cache, "MESI Directory L1 Cache CMP")
|
||||||
}
|
}
|
||||||
|
|
||||||
action(i_allocateTBE, "i", desc="Allocate TBE (isPrefetch=0, number of invalidates=0)") {
|
action(i_allocateTBE, "i", desc="Allocate TBE (isPrefetch=0, number of invalidates=0)") {
|
||||||
check_allocate(L1_TBEs);
|
check_allocate(TBEs);
|
||||||
assert(is_valid(cache_entry));
|
assert(is_valid(cache_entry));
|
||||||
L1_TBEs.allocate(address);
|
TBEs.allocate(address);
|
||||||
set_tbe(L1_TBEs[address]);
|
set_tbe(TBEs[address]);
|
||||||
tbe.isPrefetch := false;
|
tbe.isPrefetch := false;
|
||||||
tbe.Dirty := cache_entry.Dirty;
|
tbe.Dirty := cache_entry.Dirty;
|
||||||
tbe.DataBlk := cache_entry.DataBlk;
|
tbe.DataBlk := cache_entry.DataBlk;
|
||||||
|
@ -853,7 +853,7 @@ machine(L1Cache, "MESI Directory L1 Cache CMP")
|
||||||
}
|
}
|
||||||
|
|
||||||
action(s_deallocateTBE, "s", desc="Deallocate TBE") {
|
action(s_deallocateTBE, "s", desc="Deallocate TBE") {
|
||||||
L1_TBEs.deallocate(address);
|
TBEs.deallocate(address);
|
||||||
unset_tbe();
|
unset_tbe();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -146,7 +146,7 @@ machine(L2Cache, "MESI Directory L2 Cache CMP")
|
||||||
bool isPresent(Address);
|
bool isPresent(Address);
|
||||||
}
|
}
|
||||||
|
|
||||||
TBETable L2_TBEs, template="<L2Cache_TBE>", constructor="m_number_of_TBEs";
|
TBETable TBEs, template="<L2Cache_TBE>", constructor="m_number_of_TBEs";
|
||||||
|
|
||||||
void set_cache_entry(AbstractCacheEntry a);
|
void set_cache_entry(AbstractCacheEntry a);
|
||||||
void unset_cache_entry();
|
void unset_cache_entry();
|
||||||
|
@ -196,7 +196,7 @@ machine(L2Cache, "MESI Directory L2 Cache CMP")
|
||||||
}
|
}
|
||||||
|
|
||||||
AccessPermission getAccessPermission(Address addr) {
|
AccessPermission getAccessPermission(Address addr) {
|
||||||
TBE tbe := L2_TBEs[addr];
|
TBE tbe := TBEs[addr];
|
||||||
if(is_valid(tbe)) {
|
if(is_valid(tbe)) {
|
||||||
DPRINTF(RubySlicc, "%s\n", L2Cache_State_to_permission(tbe.TBEState));
|
DPRINTF(RubySlicc, "%s\n", L2Cache_State_to_permission(tbe.TBEState));
|
||||||
return L2Cache_State_to_permission(tbe.TBEState);
|
return L2Cache_State_to_permission(tbe.TBEState);
|
||||||
|
@ -213,7 +213,7 @@ machine(L2Cache, "MESI Directory L2 Cache CMP")
|
||||||
}
|
}
|
||||||
|
|
||||||
DataBlock getDataBlock(Address addr), return_by_ref="yes" {
|
DataBlock getDataBlock(Address addr), return_by_ref="yes" {
|
||||||
TBE tbe := L2_TBEs[addr];
|
TBE tbe := TBEs[addr];
|
||||||
if(is_valid(tbe)) {
|
if(is_valid(tbe)) {
|
||||||
return tbe.DataBlk;
|
return tbe.DataBlk;
|
||||||
}
|
}
|
||||||
|
@ -273,7 +273,7 @@ machine(L2Cache, "MESI Directory L2 Cache CMP")
|
||||||
if(L1unblockNetwork_in.isReady()) {
|
if(L1unblockNetwork_in.isReady()) {
|
||||||
peek(L1unblockNetwork_in, ResponseMsg) {
|
peek(L1unblockNetwork_in, ResponseMsg) {
|
||||||
Entry cache_entry := getCacheEntry(in_msg.Addr);
|
Entry cache_entry := getCacheEntry(in_msg.Addr);
|
||||||
TBE tbe := L2_TBEs[in_msg.Addr];
|
TBE tbe := TBEs[in_msg.Addr];
|
||||||
DPRINTF(RubySlicc, "Addr: %s State: %s Sender: %s Type: %s Dest: %s\n",
|
DPRINTF(RubySlicc, "Addr: %s State: %s Sender: %s Type: %s Dest: %s\n",
|
||||||
in_msg.Addr, getState(tbe, cache_entry, in_msg.Addr),
|
in_msg.Addr, getState(tbe, cache_entry, in_msg.Addr),
|
||||||
in_msg.Sender, in_msg.Type, in_msg.Destination);
|
in_msg.Sender, in_msg.Type, in_msg.Destination);
|
||||||
|
@ -297,7 +297,7 @@ machine(L2Cache, "MESI Directory L2 Cache CMP")
|
||||||
// test wether it's from a local L1 or an off chip source
|
// test wether it's from a local L1 or an off chip source
|
||||||
assert(in_msg.Destination.isElement(machineID));
|
assert(in_msg.Destination.isElement(machineID));
|
||||||
Entry cache_entry := getCacheEntry(in_msg.Addr);
|
Entry cache_entry := getCacheEntry(in_msg.Addr);
|
||||||
TBE tbe := L2_TBEs[in_msg.Addr];
|
TBE tbe := TBEs[in_msg.Addr];
|
||||||
|
|
||||||
if(machineIDToMachineType(in_msg.Sender) == MachineType:L1Cache) {
|
if(machineIDToMachineType(in_msg.Sender) == MachineType:L1Cache) {
|
||||||
if(in_msg.Type == CoherenceResponseType:DATA) {
|
if(in_msg.Type == CoherenceResponseType:DATA) {
|
||||||
|
@ -336,7 +336,7 @@ machine(L2Cache, "MESI Directory L2 Cache CMP")
|
||||||
if(L1RequestL2Network_in.isReady()) {
|
if(L1RequestL2Network_in.isReady()) {
|
||||||
peek(L1RequestL2Network_in, RequestMsg) {
|
peek(L1RequestL2Network_in, RequestMsg) {
|
||||||
Entry cache_entry := getCacheEntry(in_msg.Addr);
|
Entry cache_entry := getCacheEntry(in_msg.Addr);
|
||||||
TBE tbe := L2_TBEs[in_msg.Addr];
|
TBE tbe := TBEs[in_msg.Addr];
|
||||||
|
|
||||||
DPRINTF(RubySlicc, "Addr: %s State: %s Req: %s Type: %s Dest: %s\n",
|
DPRINTF(RubySlicc, "Addr: %s State: %s Req: %s Type: %s Dest: %s\n",
|
||||||
in_msg.Addr, getState(tbe, cache_entry, in_msg.Addr),
|
in_msg.Addr, getState(tbe, cache_entry, in_msg.Addr),
|
||||||
|
@ -361,10 +361,10 @@ machine(L2Cache, "MESI Directory L2 Cache CMP")
|
||||||
Entry L2cache_entry := getCacheEntry(L2cache.cacheProbe(in_msg.Addr));
|
Entry L2cache_entry := getCacheEntry(L2cache.cacheProbe(in_msg.Addr));
|
||||||
if (isDirty(L2cache_entry)) {
|
if (isDirty(L2cache_entry)) {
|
||||||
trigger(Event:L2_Replacement, L2cache.cacheProbe(in_msg.Addr),
|
trigger(Event:L2_Replacement, L2cache.cacheProbe(in_msg.Addr),
|
||||||
L2cache_entry, L2_TBEs[L2cache.cacheProbe(in_msg.Addr)]);
|
L2cache_entry, TBEs[L2cache.cacheProbe(in_msg.Addr)]);
|
||||||
} else {
|
} else {
|
||||||
trigger(Event:L2_Replacement_clean, L2cache.cacheProbe(in_msg.Addr),
|
trigger(Event:L2_Replacement_clean, L2cache.cacheProbe(in_msg.Addr),
|
||||||
L2cache_entry, L2_TBEs[L2cache.cacheProbe(in_msg.Addr)]);
|
L2cache_entry, TBEs[L2cache.cacheProbe(in_msg.Addr)]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -573,10 +573,10 @@ machine(L2Cache, "MESI Directory L2 Cache CMP")
|
||||||
|
|
||||||
// OTHER ACTIONS
|
// OTHER ACTIONS
|
||||||
action(i_allocateTBE, "i", desc="Allocate TBE for request") {
|
action(i_allocateTBE, "i", desc="Allocate TBE for request") {
|
||||||
check_allocate(L2_TBEs);
|
check_allocate(TBEs);
|
||||||
assert(is_valid(cache_entry));
|
assert(is_valid(cache_entry));
|
||||||
L2_TBEs.allocate(address);
|
TBEs.allocate(address);
|
||||||
set_tbe(L2_TBEs[address]);
|
set_tbe(TBEs[address]);
|
||||||
tbe.L1_GetS_IDs.clear();
|
tbe.L1_GetS_IDs.clear();
|
||||||
tbe.DataBlk := cache_entry.DataBlk;
|
tbe.DataBlk := cache_entry.DataBlk;
|
||||||
tbe.Dirty := cache_entry.Dirty;
|
tbe.Dirty := cache_entry.Dirty;
|
||||||
|
@ -584,7 +584,7 @@ machine(L2Cache, "MESI Directory L2 Cache CMP")
|
||||||
}
|
}
|
||||||
|
|
||||||
action(s_deallocateTBE, "s", desc="Deallocate external TBE") {
|
action(s_deallocateTBE, "s", desc="Deallocate external TBE") {
|
||||||
L2_TBEs.deallocate(address);
|
TBEs.deallocate(address);
|
||||||
unset_tbe();
|
unset_tbe();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue