add system.mem_mode = ['timing', 'atomic']
authorAli Saidi <saidi@eecs.umich.edu>
Thu, 13 Jul 2006 19:48:17 +0000 (15:48 -0400)
committerAli Saidi <saidi@eecs.umich.edu>
Thu, 13 Jul 2006 19:48:17 +0000 (15:48 -0400)
update scripts acordingly

configs/test/SysPaths.py:
    new syspaths from nate, this one allows you to set script, binary, and disk paths like
    system.dir = 'aouaou' in your script
configs/test/fs.py:
    update for system mem_mode
    Put small checkpoint example
    Make clock 1THz
configs/test/test.py:
src/arch/alpha/freebsd/system.cc:
src/arch/alpha/linux/system.cc:
src/arch/alpha/system.cc:
src/arch/alpha/tru64/system.cc:
src/arch/sparc/system.cc:
src/python/m5/objects/System.py:
src/sim/system.cc:
src/sim/system.hh:
    update for system mem_mode
src/dev/io_device.cc:
    Use time returned from sendAtomic to delay

--HG--
extra : convert_revision : 67eedb3c84ab2584613faf88a534e793926fc92f

12 files changed:
configs/test/SysPaths.py
configs/test/fs.py
configs/test/test.py
src/arch/alpha/freebsd/system.cc
src/arch/alpha/linux/system.cc
src/arch/alpha/system.cc
src/arch/alpha/tru64/system.cc
src/arch/sparc/system.cc
src/dev/io_device.cc
src/python/m5/objects/System.py
src/sim/system.cc
src/sim/system.hh

index e458d522538f3a0d3429a4b291f0dcd1a6d6f09d..3f96a546f8e90e5bd692068f0e65fadaf3a6898b 100644 (file)
@@ -2,41 +2,39 @@ import os, sys
 from os.path import isdir, join as joinpath
 from os import environ as env
 
-systemdir = None
-bindir = None
-diskdir = None
-scriptdir = None
+def disk(file):
+    system()
+    return joinpath(disk.dir, file)
+
+def binary(file):
+    system()
+    return joinpath(binary.dir, file)
 
-def load_defaults():
-    global systemdir, bindir, diskdir, scriptdir
-    if not systemdir:
+def script(file):
+    system()
+    return joinpath(script.dir, file)
+
+def system():
+    if not system.dir:
         try:
                 path = env['M5_PATH'].split(':')
         except KeyError:
                 path = [ '/dist/m5/system', '/n/poolfs/z/dist/m5/system' ]
 
-        for systemdir in path:
-            if os.path.isdir(systemdir):
+        for system.dir in path:
+            if os.path.isdir(system.dir):
                 break
         else:
             raise ImportError, "Can't find a path to system files."
 
-    if not bindir:
-        bindir = joinpath(systemdir, 'binaries')
-    if not diskdir:
-        diskdir = joinpath(systemdir, 'disks')
-    if not scriptdir:
-        scriptdir = joinpath(systemdir, 'boot')
-
-def disk(file):
-    load_defaults()
-    return joinpath(diskdir, file)
-
-def binary(file):
-    load_defaults()
-    return joinpath(bindir, file)
-
-def script(file):
-    load_defaults()
-    return joinpath(scriptdir, file)
-
+    if not binary.dir:
+        binary.dir = joinpath(system.dir, 'binaries')
+    if not disk.dir:
+        disk.dir = joinpath(system.dir, 'disks')
+    if not script.dir:
+        script.dir = joinpath(system.dir, 'boot')
+
+system.dir = None
+binary.dir = None
+disk.dir = None
+script.dir = None
index d191f70558c738fe427eaf6f9bcc07c7d78f5339..41c3f8cc0a45ffe674191d9ff8376c02c583752f 100644 (file)
@@ -17,6 +17,8 @@ if args:
 # Base for tests is directory containing this file.
 test_base = os.path.dirname(__file__)
 
+script.dir =  '/z/saidi/work/m5.newmem/configs/boot'
+
 linux_image = env.get('LINUX_IMAGE', disk('linux-latest.img'))
 
 class IdeControllerPciData(PciConfigData):
@@ -187,6 +189,7 @@ class MyLinuxAlphaSystem(LinuxAlphaSystem):
     intrctrl = IntrControl()
     if options.timing:
         cpu = TimingSimpleCPU()
+        mem_mode = 'timing'
     else:
         cpu = AtomicSimpleCPU()
     cpu.mem = magicbus2
@@ -194,6 +197,7 @@ class MyLinuxAlphaSystem(LinuxAlphaSystem):
     cpu.dcache_port = magicbus2.port
     cpu.itb = AlphaITB()
     cpu.dtb = AlphaDTB()
+    cpu.clock = '2GHz'
     sim_console = SimConsole(listener=ConsoleListener(port=3456))
     kernel = binary('vmlinux')
     pal = binary('ts_osfpal')
@@ -216,7 +220,7 @@ def DualRoot(clientSystem, serverSystem):
     self.etherlink = EtherLink(int1 = Parent.client.tsunami.etherint[0],
                                int2 = Parent.server.tsunami.etherint[0],
                                dump = Parent.etherdump)
-    self.clock = '5GHz'
+    self.clock = '1THz'
     return self
 
 root = DualRoot(
@@ -225,6 +229,14 @@ root = DualRoot(
 
 m5.instantiate(root)
 
+#exit_event = m5.simulate(2600000000000)
+#if exit_event.getCause() != "user interrupt received":
+#    m5.checkpoint(root, 'cpt')
+#    exit_event = m5.simulate(300000000000)
+#    if exit_event.getCause() != "user interrupt received":
+#        m5.checkpoint(root, 'cptA')
+
+
 exit_event = m5.simulate()
 
 print 'Exiting @ cycle', m5.curTick(), 'because', exit_event.getCause()
index a2c9f8bb0425a04d52ef779af5af11778bd38950..feb44e2d1f4aa494f0166736cc318c7e00ff7eeb 100644 (file)
@@ -79,6 +79,11 @@ cpu.icache_port=magicbus.port
 cpu.dcache_port=magicbus.port
 
 system = System(physmem = mem, cpu = cpu)
+
+if options.timing or options.detailed:
+    system.mem_mode = 'timing'
+
+
 mem.port = magicbus.port
 root = Root(system = system)
 
index 7cf68e0db350be8dc8b7d21dee0eb0689522e428..8d50e16122b4b05d0cd235c9fce8cd3cfb9476e3 100644 (file)
@@ -97,6 +97,7 @@ BEGIN_DECLARE_SIM_OBJECT_PARAMS(FreebsdAlphaSystem)
 
     Param<Tick> boot_cpu_frequency;
     SimObjectParam<PhysicalMemory *> physmem;
+    SimpleEnumParam<System::MemoryMode> mem_mode;
 
     Param<string> kernel;
     Param<string> console;
@@ -115,6 +116,8 @@ BEGIN_INIT_SIM_OBJECT_PARAMS(FreebsdAlphaSystem)
 
     INIT_PARAM(boot_cpu_frequency, "Frequency of the boot CPU"),
     INIT_PARAM(physmem, "phsyical memory"),
+    INIT_ENUM_PARAM(mem_mode, "Memory Mode, (1=atomic, 2=timing)",
+            System::MemoryModeStrings),
     INIT_PARAM(kernel, "file that contains the kernel code"),
     INIT_PARAM(console, "file that contains the console code"),
     INIT_PARAM(pal, "file that contains palcode"),
@@ -133,6 +136,7 @@ CREATE_SIM_OBJECT(FreebsdAlphaSystem)
     p->name = getInstanceName();
     p->boot_cpu_frequency = boot_cpu_frequency;
     p->physmem = physmem;
+    p->mem_mode = mem_mode;
     p->kernel_path = kernel;
     p->console_path = console;
     p->palcode = pal;
index 9fe63c390d3508b12757b45c864e39ac34c961e0..ef4e18cb557278fef928f1ace27b31c02a63456d 100644 (file)
@@ -191,6 +191,7 @@ BEGIN_DECLARE_SIM_OBJECT_PARAMS(LinuxAlphaSystem)
 
     Param<Tick> boot_cpu_frequency;
     SimObjectParam<PhysicalMemory *> physmem;
+    SimpleEnumParam<System::MemoryMode> mem_mode;
 
     Param<string> kernel;
     Param<string> console;
@@ -209,6 +210,8 @@ BEGIN_INIT_SIM_OBJECT_PARAMS(LinuxAlphaSystem)
 
     INIT_PARAM(boot_cpu_frequency, "Frequency of the boot CPU"),
     INIT_PARAM(physmem, "phsyical memory"),
+    INIT_ENUM_PARAM(mem_mode, "Memory Mode, (1=atomic, 2=timing)",
+            System::MemoryModeStrings),
     INIT_PARAM(kernel, "file that contains the kernel code"),
     INIT_PARAM(console, "file that contains the console code"),
     INIT_PARAM(pal, "file that contains palcode"),
@@ -227,6 +230,7 @@ CREATE_SIM_OBJECT(LinuxAlphaSystem)
     p->name = getInstanceName();
     p->boot_cpu_frequency = boot_cpu_frequency;
     p->physmem = physmem;
+    p->mem_mode = mem_mode;
     p->kernel_path = kernel;
     p->console_path = console;
     p->palcode = pal;
index dce7365aa00c832180146a282c0e42624cc9dd7e..a7e615531342d78fb87cd138f680a1d8006d06a7 100644 (file)
@@ -221,6 +221,7 @@ BEGIN_DECLARE_SIM_OBJECT_PARAMS(AlphaSystem)
 
     Param<Tick> boot_cpu_frequency;
     SimObjectParam<PhysicalMemory *> physmem;
+    SimpleEnumParam<System::MemoryMode> mem_mode;
 
     Param<std::string> kernel;
     Param<std::string> console;
@@ -239,6 +240,8 @@ BEGIN_INIT_SIM_OBJECT_PARAMS(AlphaSystem)
 
     INIT_PARAM(boot_cpu_frequency, "Frequency of the boot CPU"),
     INIT_PARAM(physmem, "phsyical memory"),
+    INIT_ENUM_PARAM(mem_mode, "Memory Mode, (1=atomic, 2=timing)",
+            System::MemoryModeStrings),
     INIT_PARAM(kernel, "file that contains the kernel code"),
     INIT_PARAM(console, "file that contains the console code"),
     INIT_PARAM(pal, "file that contains palcode"),
@@ -257,6 +260,7 @@ CREATE_SIM_OBJECT(AlphaSystem)
     p->name = getInstanceName();
     p->boot_cpu_frequency = boot_cpu_frequency;
     p->physmem = physmem;
+    p->mem_mode = mem_mode;
     p->kernel_path = kernel;
     p->console_path = console;
     p->palcode = pal;
index 6c0edc1eecf0d18dfe5541daa2b9010ba3e449dd..3ef1e4d3cc7baab50630ca3972bbf335f6806ea6 100644 (file)
@@ -95,6 +95,7 @@ BEGIN_DECLARE_SIM_OBJECT_PARAMS(Tru64AlphaSystem)
 
     Param<Tick> boot_cpu_frequency;
     SimObjectParam<PhysicalMemory *> physmem;
+    SimpleEnumParam<System::MemoryMode> mem_mode;
 
     Param<string> kernel;
     Param<string> console;
@@ -113,6 +114,8 @@ BEGIN_INIT_SIM_OBJECT_PARAMS(Tru64AlphaSystem)
 
     INIT_PARAM(boot_cpu_frequency, "frequency of the boot cpu"),
     INIT_PARAM(physmem, "phsyical memory"),
+    INIT_ENUM_PARAM(mem_mode, "Memory Mode, (1=atomic, 2=timing)",
+            System::MemoryModeStrings),
     INIT_PARAM(kernel, "file that contains the kernel code"),
     INIT_PARAM(console, "file that contains the console code"),
     INIT_PARAM(pal, "file that contains palcode"),
@@ -131,6 +134,7 @@ CREATE_SIM_OBJECT(Tru64AlphaSystem)
     p->name = getInstanceName();
     p->boot_cpu_frequency = boot_cpu_frequency;
     p->physmem = physmem;
+    p->mem_mode = mem_mode;
     p->kernel_path = kernel;
     p->console_path = console;
     p->palcode = pal;
index e197e7918bedff116039ad0397e07579d40918e0..63cbbe057e5f2d67bd34ba7f0d8fe114066f8863 100644 (file)
@@ -141,6 +141,7 @@ SparcSystem::unserialize(Checkpoint *cp, const std::string &section)
 BEGIN_DECLARE_SIM_OBJECT_PARAMS(SparcSystem)
 
     SimObjectParam<PhysicalMemory *> physmem;
+    SimpleEnumParam<System::MemoryMode> mem_mode;
 
     Param<std::string> kernel;
     Param<std::string> reset_bin;
@@ -161,6 +162,8 @@ BEGIN_INIT_SIM_OBJECT_PARAMS(SparcSystem)
 
     INIT_PARAM(boot_cpu_frequency, "Frequency of the boot CPU"),
     INIT_PARAM(physmem, "phsyical memory"),
+    INIT_ENUM_PARAM(mem_mode, "Memory Mode, (1=atomic, 2=timing)",
+            System::MemoryModeStrings),
     INIT_PARAM(kernel, "file that contains the kernel code"),
     INIT_PARAM(reset_bin, "file that contains the reset code"),
     INIT_PARAM(hypervisor_bin, "file that contains the hypervisor code"),
@@ -183,6 +186,7 @@ CREATE_SIM_OBJECT(SparcSystem)
     p->name = getInstanceName();
     p->boot_cpu_frequency = boot_cpu_frequency;
     p->physmem = physmem;
+    p->mem_mode = mem_mode;
     p->kernel_path = kernel;
     p->reset_bin = reset_bin;
     p->hypervisor_bin = hypervisor_bin;
index ed2862065bbc99231e574fe87674ceb5c30e13ac..660efabfde71cf13e205c9624548a213c58d9f52 100644 (file)
@@ -287,6 +287,7 @@ DmaPort::sendDma(Packet *pkt, bool front)
     // some kind of selction between access methods
     // more work is going to have to be done to make
     // switching actually work
+
     System::MemoryMode state = sys->getMemoryMode();
     if (state == System::Timing) {
         DPRINTF(DMA, "Attempting to send Packet %#x with addr: %#x\n",
@@ -301,15 +302,15 @@ DmaPort::sendDma(Packet *pkt, bool front)
             DPRINTF(DMA, "-- Done\n");
         }
     } else if (state == System::Atomic) {
-        sendAtomic(pkt);
+        Tick lat;
+        lat = sendAtomic(pkt);
         assert(pkt->senderState);
         DmaReqState *state = dynamic_cast<DmaReqState*>(pkt->senderState);
         assert(state);
 
         state->numBytes += pkt->req->getSize();
         if (state->totBytes == state->numBytes) {
-            state->completionEvent->schedule(curTick +
-                    (pkt->time - pkt->req->getTime()) +1);
+            state->completionEvent->schedule(curTick + lat);
             delete state;
             delete pkt->req;
         }
index 9a1e1d690b2c497bf3f7ccea31c2080f494d23e2..386f39277a26585556a040d6bb9f182da91666ef 100644 (file)
@@ -1,9 +1,12 @@
 from m5 import build_env
 from m5.config import *
 
+class MemoryMode(Enum): vals = ['invalid', 'atomic', 'timing']
+
 class System(SimObject):
     type = 'System'
     physmem = Param.PhysicalMemory(Parent.any, "phsyical memory")
+    mem_mode = Param.MemoryMode('atomic', "The mode the memory system is in")
     if build_env['FULL_SYSTEM']:
         boot_cpu_frequency = Param.Frequency(Self.cpu[0].clock.frequency,
                                              "boot processor frequency")
index 2780d0fdaca0caabcc2657fc6806852b7bc2dbbf..ad70b9b035f1113ab76555a090fcfcc5dbe20d4d 100644 (file)
@@ -63,7 +63,7 @@ System::System(Params *p)
 #else
       page_ptr(0),
 #endif
-      _params(p)
+      memoryMode(p->mem_mode), _params(p)
 {
     // add self to global system list
     systemList.push_back(this);
@@ -257,6 +257,9 @@ printSystems()
     System::printSystems();
 }
 
+const char *System::MemoryModeStrings[3] = {"invalid", "atomic",
+    "timing"};
+
 #if FULL_SYSTEM
 
 // In full system mode, only derived classes (e.g. AlphaLinuxSystem)
@@ -269,12 +272,15 @@ DEFINE_SIM_OBJECT_CLASS_NAME("System", System)
 BEGIN_DECLARE_SIM_OBJECT_PARAMS(System)
 
     SimObjectParam<PhysicalMemory *> physmem;
+    SimpleEnumParam<System::MemoryMode> mem_mode;
 
 END_DECLARE_SIM_OBJECT_PARAMS(System)
 
 BEGIN_INIT_SIM_OBJECT_PARAMS(System)
 
-    INIT_PARAM(physmem, "physical memory")
+    INIT_PARAM(physmem, "physical memory"),
+    INIT_ENUM_PARAM(mem_mode, "Memory Mode, (1=atomic, 2=timing)",
+            System::MemoryModeStrings)
 
 END_INIT_SIM_OBJECT_PARAMS(System)
 
@@ -283,6 +289,7 @@ CREATE_SIM_OBJECT(System)
     System::Params *p = new System::Params;
     p->name = getInstanceName();
     p->physmem = physmem;
+    p->mem_mode = mem_mode;
     return new System(p);
 }
 
index 77777aed4088df45cea3099eb35681320a5a0c3b..a1b53c2eb04c40b5f323cd35c6537fdbada17488 100644 (file)
@@ -67,6 +67,8 @@ class System : public SimObject
         Timing
     };
 
+    static const char *MemoryModeStrings[3];
+
 
     MemoryMode getMemoryMode() { assert(memoryMode); return memoryMode; }
 
@@ -170,6 +172,7 @@ class System : public SimObject
     {
         std::string name;
         PhysicalMemory *physmem;
+        MemoryMode mem_mode;
 
 #if FULL_SYSTEM
         Tick boot_cpu_frequency;