changeset 552db6109dd3 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=552db6109dd3
description:
        ruby: mesi three level: rename incorrectly named files
        Two files had been incorrectly named with a .cache suffix.

diffstat:

 src/mem/protocol/MESI_Three_Level-L0.cache   |   700 -----------------
 src/mem/protocol/MESI_Three_Level-L0cache.sm |   700 +++++++++++++++++
 src/mem/protocol/MESI_Three_Level-L1.cache   |  1046 --------------------------
 src/mem/protocol/MESI_Three_Level-L1cache.sm |  1046 ++++++++++++++++++++++++++
 src/mem/protocol/MESI_Three_Level.slicc      |     4 +-
 5 files changed, 1748 insertions(+), 1748 deletions(-)

diffs (truncated from 3522 to 300 lines):

diff -r f81d94b53661 -r 552db6109dd3 src/mem/protocol/MESI_Three_Level-L0.cache
--- a/src/mem/protocol/MESI_Three_Level-L0.cache        Thu Feb 20 17:27:07 
2014 -0600
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,700 +0,0 @@
-/*
- * Copyright (c) 2013 Mark D. Hill and David A. Wood
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-machine(L0Cache, "MESI Directory L0 Cache")
- : Sequencer * sequencer,
-   CacheMemory * Icache,
-   CacheMemory * Dcache,
-   Cycles request_latency = 2,
-   Cycles response_latency = 2,
-   bool send_evictions,
-{
-  // NODE L0 CACHE
-  // From this node's L0 cache to the network
-  MessageBuffer bufferFromCache, network="To", physical_network="0", 
ordered="true";
-
-  // To this node's L0 cache FROM the network
-  MessageBuffer bufferToCache, network="From", physical_network="0", 
ordered="true";
-
-  // Message queue between this controller and the processor
-  MessageBuffer mandatoryQueue, ordered="false";
-
-  // STATES
-  state_declaration(State, desc="Cache states", default="L0Cache_State_I") {
-    // Base states
-
-    // The cache entry has not been allocated.
-    NP, AccessPermission:Invalid, desc="Not present in either cache";
-
-    // The cache entry has been allocated, but is not in use.
-    I, AccessPermission:Invalid;
-
-    // The cache entry is in shared mode. The processor can read this entry
-    // but it cannot write to it.
-    S, AccessPermission:Read_Only;
-
-    // The cache entry is in exclusive mode. The processor can read this
-    // entry. It can write to this entry without informing the directory.
-    // On writing, the entry moves to M state.
-    E, AccessPermission:Read_Only;
-
-    // The processor has read and write permissions on this entry.
-    M, AccessPermission:Read_Write;
-
-    // Transient States
-
-    // The cache controller has requested that this entry be fetched in
-    // shared state so that the processor can read it.
-    IS, AccessPermission:Busy;
-
-    // The cache controller has requested that this entry be fetched in
-    // modify state so that the processor can read/write it.
-    IM, AccessPermission:Busy;
-
-    // The cache controller had read permission over the entry. But now the
-    // processor needs to write to it. So, the controller has requested for
-    // write permission.
-    SM, AccessPermission:Read_Only;
-  }
-
-  // EVENTS
-  enumeration(Event, desc="Cache events") {
-    // L0 events
-    Load,            desc="Load request from the home processor";
-    Ifetch,          desc="I-fetch request from the home processor";
-    Store,           desc="Store request from the home processor";
-
-    Inv,           desc="Invalidate request from L2 bank";
-
-    // internal generated request
-    L0_Replacement,  desc="L0 Replacement", format="!r";
-
-    // other requests
-    Fwd_GETX,   desc="GETX from other processor";
-    Fwd_GETS,   desc="GETS from other processor";
-    Fwd_GET_INSTR,   desc="GET_INSTR from other processor";
-
-    Data,               desc="Data for processor";
-    Data_Exclusive,     desc="Data for processor";
-    Data_Stale,         desc="Data for processor, but not for storage";
-
-    Ack,        desc="Ack for processor";
-    Ack_all,      desc="Last ack for processor";
-
-    WB_Ack,        desc="Ack for replacement";
-  }
-
-  // TYPES
-
-  // CacheEntry
-  structure(Entry, desc="...", interface="AbstractCacheEntry" ) {
-    State CacheState,        desc="cache state";
-    DataBlock DataBlk,       desc="data for the block";
-    bool Dirty, default="false",   desc="data is dirty";
-  }
-
-  // TBE fields
-  structure(TBE, desc="...") {
-    Address Addr,              desc="Physical address for this TBE";
-    State TBEState,        desc="Transient state";
-    DataBlock DataBlk,                desc="Buffer for the data block";
-    bool Dirty, default="false",   desc="data is dirty";
-    int pendingAcks, default="0", desc="number of pending acks";
-  }
-
-  structure(TBETable, external="yes") {
-    TBE lookup(Address);
-    void allocate(Address);
-    void deallocate(Address);
-    bool isPresent(Address);
-  }
-
-  TBETable TBEs, template="<L0Cache_TBE>", constructor="m_number_of_TBEs";
-
-  void set_cache_entry(AbstractCacheEntry a);
-  void unset_cache_entry();
-  void set_tbe(TBE a);
-  void unset_tbe();
-  void wakeUpBuffers(Address a);
-  void wakeUpAllBuffers(Address a);
-  void profileMsgDelay(int virtualNetworkType, Cycles c);
-
-  // inclusive cache returns L0 entries only
-  Entry getCacheEntry(Address addr), return_by_pointer="yes" {
-    Entry Dcache_entry := static_cast(Entry, "pointer", Dcache[addr]);
-    if(is_valid(Dcache_entry)) {
-      return Dcache_entry;
-    }
-
-    Entry Icache_entry := static_cast(Entry, "pointer", Icache[addr]);
-    return Icache_entry;
-  }
-
-  Entry getDCacheEntry(Address addr), return_by_pointer="yes" {
-    Entry Dcache_entry := static_cast(Entry, "pointer", Dcache[addr]);
-    return Dcache_entry;
-  }
-
-  Entry getICacheEntry(Address addr), return_by_pointer="yes" {
-    Entry Icache_entry := static_cast(Entry, "pointer", Icache[addr]);
-    return Icache_entry;
-  }
-
-  State getState(TBE tbe, Entry cache_entry, Address addr) {
-    assert((Dcache.isTagPresent(addr) && Icache.isTagPresent(addr)) == false);
-
-    if(is_valid(tbe)) {
-      return tbe.TBEState;
-    } else if (is_valid(cache_entry)) {
-      return cache_entry.CacheState;
-    }
-    return State:NP;
-  }
-
-  void setState(TBE tbe, Entry cache_entry, Address addr, State state) {
-    assert((Dcache.isTagPresent(addr) && Icache.isTagPresent(addr)) == false);
-
-    // MUST CHANGE
-    if(is_valid(tbe)) {
-      tbe.TBEState := state;
-    }
-
-    if (is_valid(cache_entry)) {
-      cache_entry.CacheState := state;
-    }
-  }
-
-  AccessPermission getAccessPermission(Address addr) {
-    TBE tbe := TBEs[addr];
-    if(is_valid(tbe)) {
-      DPRINTF(RubySlicc, "%s\n", L0Cache_State_to_permission(tbe.TBEState));
-      return L0Cache_State_to_permission(tbe.TBEState);
-    }
-
-    Entry cache_entry := getCacheEntry(addr);
-    if(is_valid(cache_entry)) {
-      DPRINTF(RubySlicc, "%s\n", 
L0Cache_State_to_permission(cache_entry.CacheState));
-      return L0Cache_State_to_permission(cache_entry.CacheState);
-    }
-
-    DPRINTF(RubySlicc, "%s\n", AccessPermission:NotPresent);
-    return AccessPermission:NotPresent;
-  }
-
-  DataBlock getDataBlock(Address addr), return_by_ref="yes" {
-    TBE tbe := TBEs[addr];
-    if(is_valid(tbe)) {
-        return tbe.DataBlk;
-    }
-
-    return getCacheEntry(addr).DataBlk;
-  }
-
-  void setAccessPermission(Entry cache_entry, Address addr, State state) {
-    if (is_valid(cache_entry)) {
-      cache_entry.changePermission(L0Cache_State_to_permission(state));
-    }
-  }
-
-  Event mandatory_request_type_to_event(RubyRequestType type) {
-    if (type == RubyRequestType:LD) {
-      return Event:Load;
-    } else if (type == RubyRequestType:IFETCH) {
-      return Event:Ifetch;
-    } else if ((type == RubyRequestType:ST) || (type == 
RubyRequestType:ATOMIC)) {
-      return Event:Store;
-    } else {
-      error("Invalid RubyRequestType");
-    }
-  }
-
-  int getPendingAcks(TBE tbe) {
-    return tbe.pendingAcks;
-  }
-
-  out_port(requestNetwork_out, CoherenceMsg, bufferFromCache);
-
-  // Messages for this L0 cache from the L1 cache
-  in_port(messgeBuffer_in, CoherenceMsg, bufferToCache, rank = 1) {
-    if (messgeBuffer_in.isReady()) {
-      peek(messgeBuffer_in, CoherenceMsg, block_on="Addr") {
-        assert(in_msg.Destination == machineID);
-
-        Entry cache_entry := getCacheEntry(in_msg.Addr);
-        TBE tbe := TBEs[in_msg.Addr];
-
-        if(in_msg.Class == CoherenceClass:DATA_EXCLUSIVE) {
-            trigger(Event:Data_Exclusive, in_msg.Addr, cache_entry, tbe);
-        } else if(in_msg.Class == CoherenceClass:DATA) {
-            trigger(Event:Data, in_msg.Addr, cache_entry, tbe);
-        } else if(in_msg.Class == CoherenceClass:STALE_DATA) {
-            trigger(Event:Data_Stale, in_msg.Addr, cache_entry, tbe);
-        } else if (in_msg.Class == CoherenceClass:ACK) {
-            trigger(Event:Ack, in_msg.Addr, cache_entry, tbe);
-        } else if (in_msg.Class == CoherenceClass:WB_ACK) {
-            trigger(Event:WB_Ack, in_msg.Addr, cache_entry, tbe);
-        } else if (in_msg.Class == CoherenceClass:INV) {
-          trigger(Event:Inv, in_msg.Addr, cache_entry, tbe);
-        } else if (in_msg.Class == CoherenceClass:GETX ||
-                   in_msg.Class == CoherenceClass:UPGRADE) {
-          // upgrade transforms to GETX due to race
-          trigger(Event:Fwd_GETX, in_msg.Addr, cache_entry, tbe);
-        } else if (in_msg.Class == CoherenceClass:GETS) {
-          trigger(Event:Fwd_GETS, in_msg.Addr, cache_entry, tbe);
-        } else if (in_msg.Class == CoherenceClass:GET_INSTR) {
-          trigger(Event:Fwd_GET_INSTR, in_msg.Addr, cache_entry, tbe);
-        } else {
-          error("Invalid forwarded request type");
-        }
-      }
-    }
-  }
-
-  // Mandatory Queue betweens Node's CPU and it's L0 caches
-  in_port(mandatoryQueue_in, RubyRequest, mandatoryQueue, desc="...", rank = 
0) {
-    if (mandatoryQueue_in.isReady()) {
-      peek(mandatoryQueue_in, RubyRequest, block_on="LineAddress") {
-
-        // Check for data access to blocks in I-cache and ifetchs to blocks in 
D-cache
-
-        if (in_msg.Type == RubyRequestType:IFETCH) {
-          // ** INSTRUCTION ACCESS ***
-
-          Entry Icache_entry := getICacheEntry(in_msg.LineAddress);
-          if (is_valid(Icache_entry)) {
-            // The tag matches for the L0, so the L0 asks the L2 for it.
-            trigger(mandatory_request_type_to_event(in_msg.Type), 
in_msg.LineAddress,
-                    Icache_entry, TBEs[in_msg.LineAddress]);
-          } else {
-
-            // Check to see if it is in the OTHER L0
-            Entry Dcache_entry := getDCacheEntry(in_msg.LineAddress);
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to