From 467093ebf238a1954e00576daf14a9f246b51e79 Mon Sep 17 00:00:00 2001 From: Joel Hestness Date: Tue, 10 Jul 2012 22:51:54 -0700 Subject: ruby: tag and data cache access support Updates to Ruby to support statistics counting of cache accesses. This feature serves multiple purposes beyond simple stats collection. It provides the foundation for ruby to model the cache tag and data arrays as physical resources, as well as provide the necessary input data for McPAT power modeling. --- src/mem/protocol/RubySlicc_Exports.sm | 20 ++++++++++++++++++++ src/mem/protocol/RubySlicc_Types.sm | 6 +++++- 2 files changed, 25 insertions(+), 1 deletion(-) (limited to 'src/mem/protocol') diff --git a/src/mem/protocol/RubySlicc_Exports.sm b/src/mem/protocol/RubySlicc_Exports.sm index ca80047f7..ef752c604 100644 --- a/src/mem/protocol/RubySlicc_Exports.sm +++ b/src/mem/protocol/RubySlicc_Exports.sm @@ -138,6 +138,7 @@ enumeration(RubyRequestType, desc="...", default="RubyRequestType_NULL") { } enumeration(SequencerRequestType, desc="...", default="SequencerRequestType_NULL") { + Default, desc="Replace this with access_types passed to the DMA Ruby object"; LD, desc="Load"; ST, desc="Store"; NULL, desc="Invalid request type"; @@ -176,6 +177,25 @@ enumeration(GenericRequestType, desc="...", default="GenericRequestType_NULL") { NULL, desc="null request type"; } +enumeration(CacheRequestType, desc="...", default="CacheRequestType_NULL") { + DataArrayRead, desc="Read access to the cache's data array"; + DataArrayWrite, desc="Write access to the cache's data array"; + TagArrayRead, desc="Read access to the cache's tag array"; + TagArrayWrite, desc="Write access to the cache's tag array"; +} + +enumeration(DirectoryRequestType, desc="...", default="DirectoryRequestType_NULL") { + Default, desc="Replace this with access_types passed to the Directory Ruby object"; +} + +enumeration(DMASequencerRequestType, desc="...", default="DMASequencerRequestType_NULL") { + Default, desc="Replace this with access_types passed to the DMA Ruby object"; +} + +enumeration(MemoryControlRequestType, desc="...", default="MemoryControlRequestType_NULL") { + Default, desc="Replace this with access_types passed to the DMA Ruby object"; +} + enumeration(GenericMachineType, desc="...", default="GenericMachineType_NULL") { L1Cache, desc="L1 Cache Mach"; L2Cache, desc="L2 Cache Mach"; diff --git a/src/mem/protocol/RubySlicc_Types.sm b/src/mem/protocol/RubySlicc_Types.sm index 3b90dab20..436b39273 100644 --- a/src/mem/protocol/RubySlicc_Types.sm +++ b/src/mem/protocol/RubySlicc_Types.sm @@ -108,6 +108,7 @@ structure (Sequencer, external = "yes") { void checkCoherence(Address); void profileNack(Address, int, int, uint64); void evictionCallback(Address); + void recordRequestType(SequencerRequestType); } structure(RubyRequest, desc="...", interface="Message", external="yes") { @@ -130,6 +131,7 @@ structure (DirectoryMemory, external = "yes") { AbstractEntry lookup(Address); bool isPresent(Address); void invalidateBlock(Address); + void recordRequestType(DirectoryRequestType); } structure(AbstractCacheEntry, primitive="yes", external = "yes") { @@ -151,6 +153,7 @@ structure (CacheMemory, external = "yes") { PrefetchBit); void setMRU(Address); + void recordRequestType(CacheRequestType); } structure (WireBuffer, inport="yes", outport="yes", external = "yes") { @@ -158,12 +161,13 @@ structure (WireBuffer, inport="yes", outport="yes", external = "yes") { } structure (MemoryControl, inport="yes", outport="yes", external = "yes") { - + void recordRequestType(CacheRequestType); } structure (DMASequencer, external = "yes") { void ackCallback(); void dataCallback(DataBlock); + void recordRequestType(CacheRequestType); } structure (TimerTable, inport="yes", external = "yes") { -- cgit v1.2.3