Update cpus to use the getPort function to use a connector object to connect the...
authorRon Dreslinski <rdreslin@umich.edu>
Fri, 7 Jul 2006 19:15:11 +0000 (15:15 -0400)
committerRon Dreslinski <rdreslin@umich.edu>
Fri, 7 Jul 2006 19:15:11 +0000 (15:15 -0400)
configs/test/test.py:
    Update to use new cpu getPort functionality
src/cpu/base.cc:
    Make cpu's a memObject to expose getPort interface
src/cpu/base.hh:
    Make cpu's a memObject to export getPort interface
src/cpu/simple/atomic.cc:
src/cpu/simple/atomic.hh:
src/cpu/simple/timing.cc:
src/cpu/simple/timing.hh:
    Now use the connector via getPort interface
src/mem/cache/base_cache.cc:
    Make sure the cache recognizes all port names

--HG--
extra : convert_revision : dbfefa978ec755bc8aa6f962ae158acf32dafe61

configs/test/test.py
src/cpu/base.cc
src/cpu/base.hh
src/cpu/simple/atomic.cc
src/cpu/simple/atomic.hh
src/cpu/simple/timing.cc
src/cpu/simple/timing.hh
src/mem/cache/base_cache.cc

index 625304a08a85af01116a79422c487a00784a2b9e..e7b0971ef3fe9a572834d3257e3454c26623fb14 100644 (file)
@@ -75,6 +75,8 @@ else:
     cpu = AtomicSimpleCPU()
 cpu.workload = process
 cpu.mem = magicbus
+cpu.icache_port=magicbus.port
+cpu.dcache_port=magicbus.port
 
 system = System(physmem = mem, cpu = cpu)
 mem.port = magicbus.port
index 0b9c80591bc673eaa7029553f16cca779b0cc63c..548f012dfcd0f075f2fedbb67f8f49fcdadc634f 100644 (file)
@@ -63,7 +63,7 @@ BaseCPU::BaseCPU(Params *p)
       params(p), number_of_threads(p->numberOfThreads), system(p->system)
 #else
 BaseCPU::BaseCPU(Params *p)
-    : SimObject(p->name), clock(p->clock), params(p),
+    : MemObject(p->name), clock(p->clock), params(p),
       number_of_threads(p->numberOfThreads), system(p->system)
 #endif
 {
index 5256a411f4486b1a7cd4daefa050462003e04171..2be6e4e81bc479c851601b6b5ce84d6303c2b9ae 100644 (file)
 #include "base/statistics.hh"
 #include "config/full_system.hh"
 #include "sim/eventq.hh"
-#include "sim/sim_object.hh"
+#include "mem/mem_object.hh"
 #include "arch/isa_traits.hh"
 
 class BranchPred;
 class CheckerCPU;
 class ThreadContext;
 class System;
+class Port;
 
-class BaseCPU : public SimObject
+class BaseCPU : public MemObject
 {
   protected:
     // CPU's clock period in terms of the number of ticks of curTime.
index b7202cbbb7391e38f77e6f62c249d688b8874a7d..12bfdeb9bfef1b2944724e75807b04b5b171e841 100644 (file)
@@ -55,18 +55,28 @@ AtomicSimpleCPU::TickEvent::description()
     return "AtomicSimpleCPU tick event";
 }
 
+Port *
+AtomicSimpleCPU::getPort(const std::string &if_name, int idx)
+{
+    if (if_name == "dcache_port")
+        return &dcachePort;
+    else if (if_name == "icache_port")
+        return &icachePort;
+    else
+        panic("No Such Port\n");
+}
 
 void
 AtomicSimpleCPU::init()
 {
     //Create Memory Ports (conect them up)
-    Port *mem_dport = mem->getPort("");
-    dcachePort.setPeer(mem_dport);
-    mem_dport->setPeer(&dcachePort);
+//    Port *mem_dport = mem->getPort("");
+//    dcachePort.setPeer(mem_dport);
+//    mem_dport->setPeer(&dcachePort);
 
-    Port *mem_iport = mem->getPort("");
-    icachePort.setPeer(mem_iport);
-    mem_iport->setPeer(&icachePort);
+//    Port *mem_iport = mem->getPort("");
+//    icachePort.setPeer(mem_iport);
+//    mem_iport->setPeer(&icachePort);
 
     BaseCPU::init();
 #if FULL_SYSTEM
index 951a8da063c1237666e29d091f8539f9f64738ce..179b4a7211d169665af44e42a3f2b3e717ac8a08 100644 (file)
@@ -122,6 +122,8 @@ class AtomicSimpleCPU : public BaseSimpleCPU
 
   public:
 
+    virtual Port *getPort(const std::string &if_name, int idx = -1);
+
     virtual void serialize(std::ostream &os);
     virtual void unserialize(Checkpoint *cp, const std::string &section);
 
index 036037ba9a0339f6bfa347b0cb63d8a496ba8684..170c78d3a225044203b5e390283a2a71d52b2503 100644 (file)
 using namespace std;
 using namespace TheISA;
 
+Port *
+TimingSimpleCPU::getPort(const std::string &if_name, int idx)
+{
+    if (if_name == "dcache_port")
+        return &dcachePort;
+    else if (if_name == "icache_port")
+        return &icachePort;
+    else
+        panic("No Such Port\n");
+}
 
 void
 TimingSimpleCPU::init()
 {
-    //Create Memory Ports (conect them up)
-    Port *mem_dport = mem->getPort("");
-    dcachePort.setPeer(mem_dport);
-    mem_dport->setPeer(&dcachePort);
-
-    Port *mem_iport = mem->getPort("");
-    icachePort.setPeer(mem_iport);
-    mem_iport->setPeer(&icachePort);
-
     BaseCPU::init();
 #if FULL_SYSTEM
     for (int i = 0; i < threadContexts.size(); ++i) {
index c360e553e46a85ec7ae22e7f9d56f4b0a55be6a5..d5b5d6648d8dd0c9a5d8d41222ffd4e49c607fea 100644 (file)
@@ -130,6 +130,8 @@ class TimingSimpleCPU : public BaseSimpleCPU
 
   public:
 
+    virtual Port *getPort(const std::string &if_name, int idx = -1);
+
     virtual void serialize(std::ostream &os);
     virtual void unserialize(Checkpoint *cp, const std::string &section);
 
index 4fbda4074514094c3c7a2283752a3707fcbafadb..b2caca765ce2f37fb0998ff87d027fbad263af2c 100644 (file)
@@ -144,7 +144,13 @@ BaseCache::getPort(const std::string &if_name, int idx)
             cpuSidePort = new CachePort(name() + "-cpu_side_port", this, true);
         return cpuSidePort;
     }
-    if (if_name == "functional")
+    else if (if_name == "functional")
+    {
+        if(cpuSidePort == NULL)
+            cpuSidePort = new CachePort(name() + "-cpu_side_port", this, true);
+        return cpuSidePort;
+    }
+    else if (if_name == "cpu_side")
     {
         if(cpuSidePort == NULL)
             cpuSidePort = new CachePort(name() + "-cpu_side_port", this, true);