PhysicalMemory: Add parameter for variance in memory delay.
authorAli Saidi <saidi@eecs.umich.edu>
Thu, 10 Apr 2008 18:44:52 +0000 (14:44 -0400)
committerAli Saidi <saidi@eecs.umich.edu>
Thu, 10 Apr 2008 18:44:52 +0000 (14:44 -0400)
--HG--
extra : convert_revision : b931472e81dedb650b7accb9061cb426f1c32e66

src/mem/PhysicalMemory.py
src/mem/physical.cc
src/mem/physical.hh

index 99bd27f2b85c563e9581e6757008034cdf8d5328..4e8a830def66cee1a89349fffadfb1d862430475 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2005-2007 The Regents of The University of Michigan
+# Copyright (c) 2005-2008 The Regents of The University of Michigan
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -36,6 +36,7 @@ class PhysicalMemory(MemObject):
     range = Param.AddrRange(AddrRange('128MB'), "Device Address")
     file = Param.String('', "memory mapped file")
     latency = Param.Latency('1t', "latency of an access")
+    latency_var = Param.Latency('0ns', "access variablity")
     zero = Param.Bool(False, "zero initialize memory")
 
 class DRAMMemory(PhysicalMemory):
index 3560fc670070daea38eabcbd27ddd45bece56f15..c06dd3170afa70ed181757129a9b46219512a0ad 100644 (file)
@@ -41,6 +41,7 @@
 
 #include "arch/isa_traits.hh"
 #include "base/misc.hh"
+#include "base/random.hh"
 #include "config/full_system.hh"
 #include "mem/packet_access.hh"
 #include "mem/physical.hh"
@@ -51,7 +52,8 @@ using namespace std;
 using namespace TheISA;
 
 PhysicalMemory::PhysicalMemory(const Params *p)
-    : MemObject(p), pmemAddr(NULL), lat(p->latency)
+    : MemObject(p), pmemAddr(NULL), lat(p->latency),
+      lat_var(p->latency_var)
 {
     if (params()->range.size() % TheISA::PageBytes != 0)
         panic("Memory Size not divisible by page size\n");
@@ -116,7 +118,10 @@ PhysicalMemory::deviceBlockSize()
 Tick
 PhysicalMemory::calculateLatency(PacketPtr pkt)
 {
-    return lat;
+    Tick latency = lat;
+    if (lat_var != 0)
+        latency += random_mt.random<Tick>(0, lat_var);
+    return latency;
 }
 
 
index c3749bd5bc6481e50a744c7d0498ea0b43914d6e..ceb36b5c084321c488db119d25fd11b114a5e274 100644 (file)
@@ -146,6 +146,7 @@ class PhysicalMemory : public MemObject
     uint8_t *pmemAddr;
     int pagePtr;
     Tick lat;
+    Tick lat_var;
     std::vector<MemoryPort*> ports;
     typedef std::vector<MemoryPort*>::iterator PortIterator;