ruby: drop Orion network power model
authorNilay Vaish <nilay@cs.wisc.edu>
Sat, 11 Oct 2014 20:02:23 +0000 (15:02 -0500)
committerNilay Vaish <nilay@cs.wisc.edu>
Sat, 11 Oct 2014 20:02:23 +0000 (15:02 -0500)
Orion is being dropped from ruby.  It would be replaced with DSENT
which has better models.  Note that the power / energy numbers reported
after this patch has been applied are not for use.

65 files changed:
src/mem/ruby/network/garnet/fixed-pipeline/InputUnit_d.hh
src/mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.hh
src/mem/ruby/network/garnet/fixed-pipeline/OutputUnit_d.hh
src/mem/ruby/network/garnet/fixed-pipeline/Router_d.hh
src/mem/ruby/network/orion/Allocator/Arbiter.cc [deleted file]
src/mem/ruby/network/orion/Allocator/Arbiter.hh [deleted file]
src/mem/ruby/network/orion/Allocator/MatrixArbiter.cc [deleted file]
src/mem/ruby/network/orion/Allocator/MatrixArbiter.hh [deleted file]
src/mem/ruby/network/orion/Allocator/RRArbiter.cc [deleted file]
src/mem/ruby/network/orion/Allocator/RRArbiter.hh [deleted file]
src/mem/ruby/network/orion/Allocator/SConscript [deleted file]
src/mem/ruby/network/orion/Allocator/SWAllocator.cc [deleted file]
src/mem/ruby/network/orion/Allocator/SWAllocator.hh [deleted file]
src/mem/ruby/network/orion/Allocator/VCAllocator.cc [deleted file]
src/mem/ruby/network/orion/Allocator/VCAllocator.hh [deleted file]
src/mem/ruby/network/orion/Buffer/AmpUnit.cc [deleted file]
src/mem/ruby/network/orion/Buffer/AmpUnit.hh [deleted file]
src/mem/ruby/network/orion/Buffer/BitlineUnit.cc [deleted file]
src/mem/ruby/network/orion/Buffer/BitlineUnit.hh [deleted file]
src/mem/ruby/network/orion/Buffer/Buffer.cc [deleted file]
src/mem/ruby/network/orion/Buffer/Buffer.hh [deleted file]
src/mem/ruby/network/orion/Buffer/DecoderUnit.cc [deleted file]
src/mem/ruby/network/orion/Buffer/DecoderUnit.hh [deleted file]
src/mem/ruby/network/orion/Buffer/MemUnit.cc [deleted file]
src/mem/ruby/network/orion/Buffer/MemUnit.hh [deleted file]
src/mem/ruby/network/orion/Buffer/OutdrvUnit.cc [deleted file]
src/mem/ruby/network/orion/Buffer/OutdrvUnit.hh [deleted file]
src/mem/ruby/network/orion/Buffer/PrechargeUnit.cc [deleted file]
src/mem/ruby/network/orion/Buffer/PrechargeUnit.hh [deleted file]
src/mem/ruby/network/orion/Buffer/Register.cc [deleted file]
src/mem/ruby/network/orion/Buffer/Register.hh [deleted file]
src/mem/ruby/network/orion/Buffer/SConscript [deleted file]
src/mem/ruby/network/orion/Buffer/SRAM.cc [deleted file]
src/mem/ruby/network/orion/Buffer/SRAM.hh [deleted file]
src/mem/ruby/network/orion/Buffer/WordlineUnit.cc [deleted file]
src/mem/ruby/network/orion/Buffer/WordlineUnit.hh [deleted file]
src/mem/ruby/network/orion/Clock.cc [deleted file]
src/mem/ruby/network/orion/Clock.hh [deleted file]
src/mem/ruby/network/orion/ConfigFile.cc [deleted file]
src/mem/ruby/network/orion/ConfigFile.hh [deleted file]
src/mem/ruby/network/orion/Crossbar/Crossbar.cc [deleted file]
src/mem/ruby/network/orion/Crossbar/Crossbar.hh [deleted file]
src/mem/ruby/network/orion/Crossbar/MatrixCrossbar.cc [deleted file]
src/mem/ruby/network/orion/Crossbar/MatrixCrossbar.hh [deleted file]
src/mem/ruby/network/orion/Crossbar/MultreeCrossbar.cc [deleted file]
src/mem/ruby/network/orion/Crossbar/MultreeCrossbar.hh [deleted file]
src/mem/ruby/network/orion/Crossbar/SConscript [deleted file]
src/mem/ruby/network/orion/FlipFlop.cc [deleted file]
src/mem/ruby/network/orion/FlipFlop.hh [deleted file]
src/mem/ruby/network/orion/NetworkPower.cc [deleted file]
src/mem/ruby/network/orion/NetworkPower.hh [deleted file]
src/mem/ruby/network/orion/OrionConfig.cc [deleted file]
src/mem/ruby/network/orion/OrionConfig.hh [deleted file]
src/mem/ruby/network/orion/OrionLink.cc [deleted file]
src/mem/ruby/network/orion/OrionLink.hh [deleted file]
src/mem/ruby/network/orion/OrionRouter.cc [deleted file]
src/mem/ruby/network/orion/OrionRouter.hh [deleted file]
src/mem/ruby/network/orion/SConscript [deleted file]
src/mem/ruby/network/orion/TechParameter.cc [deleted file]
src/mem/ruby/network/orion/TechParameter.hh [deleted file]
src/mem/ruby/network/orion/Type.hh [deleted file]
src/mem/ruby/network/orion/Wire.cc [deleted file]
src/mem/ruby/network/orion/Wire.hh [deleted file]
src/mem/ruby/network/orion/orion.hh [deleted file]
src/mem/ruby/network/orion/router.cfg [deleted file]

index 836613d02895cb0b84e795f163310941b8084dfa..c3dc5e69dfcc7d8adb49b33fc6f9f8ce89c87525 100644 (file)
 #include "mem/ruby/common/Consumer.hh"
 #include "mem/ruby/network/garnet/fixed-pipeline/CreditLink_d.hh"
 #include "mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.hh"
+#include "mem/ruby/network/garnet/fixed-pipeline/Router_d.hh"
 #include "mem/ruby/network/garnet/fixed-pipeline/VirtualChannel_d.hh"
 #include "mem/ruby/network/garnet/fixed-pipeline/flitBuffer_d.hh"
 #include "mem/ruby/network/garnet/NetworkHeader.hh"
 
-class Router_d;
-
 class InputUnit_d : public Consumer
 {
   public:
index 6d1396023c95ed3335a798a0d2d25a2a32178b64..868937fe79e9967d4e6d2050a3a0eb545645c56d 100644 (file)
@@ -37,7 +37,6 @@
 #include "mem/ruby/common/Consumer.hh"
 #include "mem/ruby/network/garnet/fixed-pipeline/flitBuffer_d.hh"
 #include "mem/ruby/network/garnet/NetworkHeader.hh"
-#include "mem/ruby/network/orion/NetworkPower.hh"
 #include "params/NetworkLink_d.hh"
 #include "sim/clocked_object.hh"
 
@@ -56,7 +55,7 @@ class NetworkLink_d : public ClockedObject, public Consumer
     int get_id(){return m_id;}
     void wakeup();
 
-    void calculate_power(double);
+    void calculate_power(double) {}
     double get_dynamic_power() const { return m_power_dyn; }
     double get_static_power()const { return m_power_sta; }
 
index 48bf361a584df947e08c1bc85491a04afefa2d31..f0b0fc64f415e6dc08a92d7dfa085f461100bfe4 100644 (file)
 #include "mem/ruby/network/garnet/fixed-pipeline/CreditLink_d.hh"
 #include "mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.hh"
 #include "mem/ruby/network/garnet/fixed-pipeline/OutVcState_d.hh"
+#include "mem/ruby/network/garnet/fixed-pipeline/Router_d.hh"
 #include "mem/ruby/network/garnet/fixed-pipeline/flitBuffer_d.hh"
 #include "mem/ruby/network/garnet/NetworkHeader.hh"
 
-class Router_d;
-
 class OutputUnit_d : public Consumer
 {
   public:
index 17ba54fa5466b2334087966122f6d3f1e1ec40db..7dae0bb52ba4b30e3ae43d4f4b1afa2782cba889 100644 (file)
 #include <vector>
 
 #include "mem/ruby/common/NetDest.hh"
-#include "mem/ruby/network/BasicRouter.hh"
+#include "mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.hh"
 #include "mem/ruby/network/garnet/fixed-pipeline/flit_d.hh"
 #include "mem/ruby/network/garnet/NetworkHeader.hh"
-#include "mem/ruby/network/orion/NetworkPower.hh"
+#include "mem/ruby/network/BasicRouter.hh"
 #include "params/GarnetRouter_d.hh"
 
-class GarnetNetwork_d;
 class NetworkLink_d;
 class CreditLink_d;
 class InputUnit_d;
@@ -89,7 +88,7 @@ class Router_d : public BasicRouter
     void printFaultVector(std::ostream& out);
     void printAggregateFaultProbability(std::ostream& out);
 
-    void calculate_power();
+    void calculate_power() {}
     void calculate_performance_numbers();
     double get_dynamic_power() const { return m_power_dyn; }
     double get_static_power() const { return m_power_sta; }
diff --git a/src/mem/ruby/network/orion/Allocator/Arbiter.cc b/src/mem/ruby/network/orion/Allocator/Arbiter.cc
deleted file mode 100644 (file)
index d6124eb..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#include <cassert>
-#include <iostream>
-
-#include "mem/ruby/network/orion/Allocator/Arbiter.hh"
-#include "mem/ruby/network/orion/Allocator/MatrixArbiter.hh"
-#include "mem/ruby/network/orion/Allocator/RRArbiter.hh"
-#include "mem/ruby/network/orion/TechParameter.hh"
-
-using namespace std;
-
-Arbiter::Arbiter(const ArbiterModel arb_model_,
-                 const uint32_t req_width_,
-                 const double len_in_wire_,
-                 const TechParameter* tech_param_ptr_)
-{
-    assert(req_width_ == req_width_);
-    assert(len_in_wire_ == len_in_wire_);
-
-    m_arb_model = arb_model_;
-    m_req_width = req_width_;
-    m_len_in_wire = len_in_wire_;
-    m_tech_param_ptr = tech_param_ptr_;
-}
-
-Arbiter::~Arbiter()
-{}
-
-double 
-Arbiter::get_static_power() const
-{
-    double vdd = m_tech_param_ptr->get_vdd();
-    double SCALE_S = m_tech_param_ptr->get_SCALE_S();
-
-    return m_i_static*vdd*SCALE_S;
-}
-
-Arbiter* 
-Arbiter::create_arbiter(const string& arb_model_str_, 
-                        const string& ff_model_str_,
-                        uint32_t req_width_, 
-                        double len_in_wire_, 
-                        const TechParameter* tech_param_ptr_)
-{
-    if (arb_model_str_ == string("RR_ARBITER")) {
-
-        return new RRArbiter(ff_model_str_, req_width_, 
-                             len_in_wire_, tech_param_ptr_);
-
-    } else if (arb_model_str_ == string("MATRIX_ARBITER")) {
-
-        return new MatrixArbiter(ff_model_str_, req_width_, 
-                                 len_in_wire_, tech_param_ptr_);
-
-    } else {
-        cerr << "WARNING: No Arbiter model" << endl;
-        return (Arbiter*)NULL;
-    }
-}
diff --git a/src/mem/ruby/network/orion/Allocator/Arbiter.hh b/src/mem/ruby/network/orion/Allocator/Arbiter.hh
deleted file mode 100644 (file)
index e9849a9..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#ifndef __ARBITER_H__
-#define __ARBITER_H__
-
-#include "mem/ruby/network/orion/Type.hh"
-
-class TechParameter;
-class FlipFlop;
-
-class Arbiter
-{
-  public:
-    enum ArbiterModel
-    {
-      NO_MODEL = 0,
-      RR_ARBITER,
-      MATRIX_ARBITER
-    };
-
-  public:
-    Arbiter(const ArbiterModel arb_model_,
-            const uint32_t req_width_,
-            const double len_in_wire_,
-            const TechParameter* tech_param_ptr_);
-    virtual ~Arbiter() = 0;
-
-  public:
-    virtual double calc_dynamic_energy(double num_req_, bool is_max_) const = 0;
-    double get_static_power() const;
-
-  protected:
-    ArbiterModel m_arb_model;
-    uint32_t m_req_width;
-    double m_len_in_wire;
-    const TechParameter* m_tech_param_ptr;
-
-    FlipFlop* m_ff_ptr;
-
-    double m_e_chg_req;
-    double m_e_chg_grant;
-
-    double m_i_static;
-
-  public:
-    static Arbiter* create_arbiter(const string& arb_model_str_,
-                                   const string& ff_model_str_,
-                                   uint32_t req_width_,
-                                   double len_in_wire_,
-                                   const TechParameter* tech_param_ptr_);
-};
-
-#endif
-
diff --git a/src/mem/ruby/network/orion/Allocator/MatrixArbiter.cc b/src/mem/ruby/network/orion/Allocator/MatrixArbiter.cc
deleted file mode 100644 (file)
index 2f7ffcb..0000000
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#include <cassert>
-#include <cmath>
-#include <iostream>
-
-#include "mem/ruby/network/orion/Allocator/MatrixArbiter.hh"
-#include "mem/ruby/network/orion/FlipFlop.hh"
-#include "mem/ruby/network/orion/TechParameter.hh"
-
-using namespace std;
-
-MatrixArbiter::MatrixArbiter(const string& ff_model_str_,
-                             uint32_t req_width_,
-                             double len_in_wire_,
-                             const TechParameter* tech_param_ptr_)
-    : Arbiter(RR_ARBITER, req_width_, len_in_wire_, tech_param_ptr_)
-{
-    init(ff_model_str_);
-}
-
-MatrixArbiter::~MatrixArbiter()
-{
-    delete m_ff_ptr;
-}
-
-double 
-MatrixArbiter::calc_dynamic_energy(double num_req_, bool is_max_) const
-{
-    assert(num_req_ < m_req_width);
-
-    double num_grant;
-    if (num_req_ >= 1) num_grant = 1;
-    else if (num_req_) num_grant = 1.0 / ceil(1.0 / num_req_);
-    else num_grant = 0;
-
-    uint32_t total_pri = m_req_width * (m_req_width - 1) / 2;
-    double num_chg_pri = (m_req_width - 1) * (is_max_? 1 : 0.5);
-
-    double e_atomic;
-    double e_arb = 0;
-
-    //FIXME: we may overestimate request switch
-    e_atomic = m_e_chg_req * num_req_;
-    e_arb += e_atomic;
-
-    e_atomic = m_e_chg_grant * num_grant;
-    e_arb += e_atomic;
-
-    // priority register
-    e_atomic = m_ff_ptr->get_e_switch() * num_chg_pri * num_grant;
-    e_arb += e_atomic;
-
-    // assume 1 and 0 are uniformly distributed
-    if ((m_ff_ptr->get_e_keep_0() >= m_ff_ptr->get_e_keep_1()) || (!is_max_))
-    {
-        e_atomic = m_ff_ptr->get_e_keep_0();
-        e_atomic *= (total_pri - num_chg_pri * num_grant) * (is_max_? 1 : 0.5);
-        e_arb += e_atomic;
-    }
-    if ((m_ff_ptr->get_e_keep_0() < m_ff_ptr->get_e_keep_1()) || (!is_max_))
-    {
-        e_atomic = m_ff_ptr->get_e_keep_1();
-        e_atomic *= (total_pri - num_chg_pri * num_grant) * (is_max_? 1 : 0.5);
-        e_arb += e_atomic;
-    }
-
-    e_atomic = m_ff_ptr->get_e_clock()*total_pri;
-    e_arb += e_atomic;
-
-    // based on above assumptions
-    if (is_max_)
-    {
-        e_atomic = m_e_chg_int;
-        e_atomic *= (min(num_req_, m_req_width * 0.5) + 2) * (m_req_width - 1);
-    }
-    else
-    {
-        e_atomic = m_e_chg_int * (num_req_ + 1) * (m_req_width - 1) * 0.5;
-    }
-    e_arb += e_atomic;
-
-    return e_arb;
-}
-
-void MatrixArbiter::init(const string& ff_model_str_)
-{
-    double e_factor = m_tech_param_ptr->get_EnergyFactor();
-
-    m_e_chg_req = calc_req_cap() / 2 * e_factor;
-    // two grant signals switch together, so no 1/2
-    m_e_chg_grant = calc_grant_cap() * e_factor;
-    m_e_chg_int = calc_int_cap() / 2 * e_factor;
-
-    double ff_load = calc_pri_cap();
-    m_ff_ptr = new FlipFlop(ff_model_str_, ff_load, m_tech_param_ptr);
-
-    m_i_static = calc_i_static();
-    return;
-}
-
-// the "huge" NOR gate in matrix arbiter model is an approximation
-// switch cap of request signal
-double MatrixArbiter::calc_req_cap()
-{
-    double total_cap = 0;
-
-    // part 1: gate cap of NOR gates
-    // FIXME: need actual size
-    double WdecNORn = m_tech_param_ptr->get_WdecNORn();
-    double WdecNORp = m_tech_param_ptr->get_WdecNORp();
-    double gatecap = m_tech_param_ptr->calc_gatecap(WdecNORn+WdecNORp, 0);
-    total_cap += (m_req_width - 1) * gatecap;
-
-    // part 2: inverter
-    // FIXME: need actual size
-    double Wdecinvn = m_tech_param_ptr->get_Wdecinvn();
-    double Wdecinvp = m_tech_param_ptr->get_Wdecinvp();
-    total_cap += m_tech_param_ptr->calc_draincap(Wdecinvn, 
-                                                 TechParameter::NCH, 1)
-        + m_tech_param_ptr->calc_draincap(Wdecinvp, TechParameter::PCH, 1)
-        + m_tech_param_ptr->calc_gatecap(Wdecinvn+Wdecinvp, 0);
-
-    // part 3: gate cap of the "huge" NOR gate
-    // FIXME: need actual size
-    total_cap += m_tech_param_ptr->calc_gatecap(WdecNORn + WdecNORp, 0);
-
-    // part 4: wire cap
-    double Cmetal = m_tech_param_ptr->get_Cmetal();
-    total_cap += m_len_in_wire * Cmetal;
-
-    return total_cap;
-}
-
-// switch cap of priority signal
-double MatrixArbiter::calc_pri_cap()
-{
-    double total_cap = 0;
-
-    // part 1: gate cap of NOR gate
-    // FIXME: need actual size
-    double WdecNORn = m_tech_param_ptr->get_WdecNORn();
-    double WdecNORp = m_tech_param_ptr->get_WdecNORp();
-    total_cap += 2 * m_tech_param_ptr->calc_gatecap(WdecNORn+WdecNORp, 0);
-
-    return total_cap;
-}
-
-// switch cap of grant signa
-double MatrixArbiter::calc_grant_cap()
-{
-    double total_cap = 0;
-
-    // part 1: drain cap of NOR gate
-    // FIXME: need actual size
-    double WdecNORn = m_tech_param_ptr->get_WdecNORn();
-    double WdecNORp = m_tech_param_ptr->get_WdecNORp();
-    double draincap1 = m_tech_param_ptr->calc_draincap(WdecNORn, 
-                                                       TechParameter::NCH, 1);
-
-    double draincap2 = m_tech_param_ptr->calc_draincap(WdecNORp, 
-                                                       TechParameter::PCH, 
-                                                       m_req_width);
-
-    total_cap += m_req_width * (draincap1 + draincap2);
-
-    return total_cap;
-}
-
-// switch cap of internal node
-double MatrixArbiter::calc_int_cap()
-{
-    double total_cap = 0;
-
-    double WdecNORn = m_tech_param_ptr->get_WdecNORn();
-    double WdecNORp = m_tech_param_ptr->get_WdecNORp();
-    // part 1: drain cap of NOR gate (this bloc)
-    // FIXME: need actual size
-    total_cap += 2 * m_tech_param_ptr->calc_draincap(WdecNORn, 
-                                                     TechParameter::NCH, 1)
-        + m_tech_param_ptr->calc_draincap(WdecNORp, TechParameter::PCH, 2);
-
-    // part 2: gate cap of NOR gate (next block)
-    // FIXME: need actual size
-    total_cap += m_tech_param_ptr->calc_gatecap(WdecNORn + WdecNORp, 0);
-
-    return total_cap;
-}
-
-double MatrixArbiter::calc_i_static()
-{
-    double i_static = 0;
-
-    double WdecNORn = m_tech_param_ptr->get_WdecNORn();
-    double WdecNORp = m_tech_param_ptr->get_WdecNORp();
-    double Wdecinvn = m_tech_param_ptr->get_Wdecinvn();
-    double Wdecinvp = m_tech_param_ptr->get_Wdecinvp();
-    double Wdff = m_tech_param_ptr->get_Wdff();
-    double NOR2_TAB_0 = m_tech_param_ptr->get_NOR2_TAB(0);
-    double NOR2_TAB_1 = m_tech_param_ptr->get_NOR2_TAB(1);
-    double NOR2_TAB_2 = m_tech_param_ptr->get_NOR2_TAB(2);
-    double NOR2_TAB_3 = m_tech_param_ptr->get_NOR2_TAB(3);
-    double NMOS_TAB_0 = m_tech_param_ptr->get_NMOS_TAB(0);
-    double PMOS_TAB_0 = m_tech_param_ptr->get_PMOS_TAB(0);
-    double DFF_TAB_0 = m_tech_param_ptr->get_DFF_TAB(0);
-
-    // NOR
-    i_static += ((2 * m_req_width - 1) * m_req_width * 
-                 ((WdecNORp * NOR2_TAB_0 + WdecNORn * 
-                   (NOR2_TAB_1 + NOR2_TAB_2 + NOR2_TAB_3)) / 4));
-    // inverter
-    i_static += m_req_width * 
-        ((Wdecinvn * NMOS_TAB_0 + Wdecinvp * PMOS_TAB_0) / 2);
-    // dff
-    i_static += (m_req_width * (m_req_width - 1) / 2) * Wdff * DFF_TAB_0;
-
-    return i_static;
-}
diff --git a/src/mem/ruby/network/orion/Allocator/MatrixArbiter.hh b/src/mem/ruby/network/orion/Allocator/MatrixArbiter.hh
deleted file mode 100644 (file)
index a252a96..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#ifndef __MATRIXARBITER_H__
-#define __MATRIXARBITER_H__
-
-#include "mem/ruby/network/orion/Allocator/Arbiter.hh"
-#include "mem/ruby/network/orion/Type.hh"
-
-class TechParameter;
-
-class MatrixArbiter : public Arbiter
-{
-  public:
-    MatrixArbiter(
-      const string& ff_model_str_,
-      uint32_t req_width_,
-      double len_in_wire_,
-      const TechParameter* tech_param_ptr_
-    );
-    ~MatrixArbiter();
-
-  public:
-    double calc_dynamic_energy(double num_req_, bool is_max_) const;
-
-  private:
-    void init(const string& ff_model_str_);
-    double calc_req_cap();
-    double calc_pri_cap();
-    double calc_grant_cap();
-    double calc_int_cap();
-    double calc_i_static();
-
-  private:
-    double m_e_chg_int;
-};
-
-#endif
diff --git a/src/mem/ruby/network/orion/Allocator/RRArbiter.cc b/src/mem/ruby/network/orion/Allocator/RRArbiter.cc
deleted file mode 100644 (file)
index 47963c9..0000000
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#include <cmath>
-#include <iostream>
-
-#include "mem/ruby/network/orion/Allocator/RRArbiter.hh"
-#include "mem/ruby/network/orion/FlipFlop.hh"
-#include "mem/ruby/network/orion/TechParameter.hh"
-
-using namespace std;
-
-RRArbiter::RRArbiter(
-        const string& ff_model_str_,
-        uint32_t req_width_,
-        double len_in_wire_,
-        const TechParameter* tech_param_ptr_
-        ) : Arbiter(RR_ARBITER, req_width_, len_in_wire_, tech_param_ptr_)
-{
-    init(ff_model_str_);
-}
-
-RRArbiter::~RRArbiter()
-{
-    delete m_ff_ptr;
-}
-
-double RRArbiter::calc_dynamic_energy(double num_req_, bool is_max_) const
-{
-    if (num_req_ > m_req_width)
-    {
-        cerr << "WARNING: (num_req_ > m_req_width). Set num_req_ = m_req_width" << endl;
-        num_req_ = m_req_width;
-    }
-
-    double num_grant;
-    if (num_req_ >= 1) num_grant = 1;
-    else if (num_req_) num_grant = 1.0 / ceil(1.0/num_req_);
-    else num_grant = 0;
-
-    double e_atomic;
-    double e_arb = 0;
-
-    e_atomic = m_e_chg_req*num_req_;
-    e_arb += e_atomic;
-
-    e_atomic = m_e_chg_grant*num_grant;
-    e_arb += e_atomic;
-
-    // assume carry signal propagates half length in average case */
-    // carry does not propagate in maximum case, i.e. all carrys go down */
-    e_atomic = m_e_chg_carry*m_req_width*(is_max_? 1:0.5)*num_grant;
-    e_arb += e_atomic;
-
-    e_atomic = m_e_chg_carry_in*(m_req_width*(is_max_? 1:0.5)-1)*num_grant;
-    e_arb += e_atomic;
-
-    // priority register
-    e_atomic = m_ff_ptr->get_e_switch()*2*num_grant;
-    e_arb += e_atomic;
-
-    e_atomic = m_ff_ptr->get_e_keep_0()*(m_req_width-2*num_grant);
-    e_arb += e_atomic;
-
-    e_atomic = m_ff_ptr->get_e_clock()*m_req_width;
-    e_arb += e_atomic;
-
-    return e_arb;
-}
-
-void RRArbiter::init(const string& ff_model_str_)
-{
-    double e_factor = m_tech_param_ptr->get_EnergyFactor();
-
-    m_e_chg_req = calc_req_cap()/2*e_factor;
-    // two grant signals switch together, so no 1/2
-    m_e_chg_grant = calc_grant_cap()*e_factor;
-    m_e_chg_carry = calc_carry_cap()/2*e_factor;
-    m_e_chg_carry_in = calc_carry_in_cap()/2*e_factor;
-
-    double ff_load = calc_pri_cap();
-    m_ff_ptr = new FlipFlop(ff_model_str_, ff_load, m_tech_param_ptr);
-
-    m_i_static = calc_i_static();
-    return;
-}
-
-// switch cap of request signal (round robin arbiter)
-double RRArbiter::calc_req_cap()
-{
-    double total_cap = 0;
-
-    // part 1: gate cap of 2 NOR gates
-    // FIXME: need actual size
-    double WdecNORn = m_tech_param_ptr->get_WdecNORn();
-    double WdecNORp = m_tech_param_ptr->get_WdecNORp();
-    total_cap += 2*m_tech_param_ptr->calc_gatecap(WdecNORn+WdecNORp, 0);
-
-    // part 2: inverter
-    // FIXME: need actual size
-    double Wdecinvn = m_tech_param_ptr->get_Wdecinvn();
-    double Wdecinvp = m_tech_param_ptr->get_Wdecinvp();
-    total_cap += m_tech_param_ptr->calc_draincap(Wdecinvn, TechParameter::NCH, 1)
-        + m_tech_param_ptr->calc_draincap(Wdecinvp, TechParameter::PCH, 1)
-        + m_tech_param_ptr->calc_gatecap(Wdecinvn+Wdecinvp, 0);
-
-    // part 3: wire cap
-    double Cmetal = m_tech_param_ptr->get_Cmetal();
-    total_cap += m_len_in_wire*Cmetal;
-
-    return total_cap;
-}
-
-// switch cap of priority signal
-double RRArbiter::calc_pri_cap()
-{
-    double total_cap = 0;
-
-    // part 1: gate cap of NOR gate
-    // FIXME: need actual size
-    double WdecNORn = m_tech_param_ptr->get_WdecNORn();
-    double WdecNORp = m_tech_param_ptr->get_WdecNORp();
-    total_cap += m_tech_param_ptr->calc_gatecap(WdecNORn+WdecNORp, 0);
-
-    return total_cap;
-}
-
-// switch cap of grant signa
-double RRArbiter::calc_grant_cap()
-{
-    double total_cap = 0;
-
-    // part 1: drain cap of NOR gate
-    // FIXME: need actual size
-    double WdecNORn = m_tech_param_ptr->get_WdecNORn();
-    double WdecNORp = m_tech_param_ptr->get_WdecNORp();
-    total_cap += 2*m_tech_param_ptr->calc_draincap(WdecNORn, TechParameter::NCH, 1)
-        + m_tech_param_ptr->calc_draincap(WdecNORp, TechParameter::PCH, 2);
-
-    return total_cap;
-}
-
-// switch cap of carry signal
-double RRArbiter::calc_carry_cap()
-{
-    double total_cap = 0;
-
-    double WdecNORn = m_tech_param_ptr->get_WdecNORn();
-    double WdecNORp = m_tech_param_ptr->get_WdecNORp();
-    // part 1: drain cap of NOR gate (this bloc)
-    // FIXME: need actual size
-    total_cap += 2*m_tech_param_ptr->calc_draincap(WdecNORn, TechParameter::NCH, 1)
-        + m_tech_param_ptr->calc_draincap(WdecNORp, TechParameter::PCH, 2);
-
-    // part 2: gate cap of NOR gate (next block)
-    // FIXME: need actual size
-    total_cap += m_tech_param_ptr->calc_gatecap(WdecNORn+WdecNORp, 0);
-
-    return total_cap;
-}
-
-// switch cap of internal carry node
-double RRArbiter::calc_carry_in_cap()
-{
-    double total_cap = 0;
-
-    double WdecNORn = m_tech_param_ptr->get_WdecNORn();
-    double WdecNORp = m_tech_param_ptr->get_WdecNORp();
-    // part 1: gate cap of 2 NOR gate
-    // FIXME: need actual size
-    total_cap += 2*m_tech_param_ptr->calc_gatecap(WdecNORn+WdecNORp, 0);
-
-    // part 2: drain cap of NOR gate (this bloc)
-    // FIXME: need actual size
-    total_cap += 2*m_tech_param_ptr->calc_draincap(WdecNORn, TechParameter::NCH, 1)
-        + m_tech_param_ptr->calc_draincap(WdecNORp, TechParameter::PCH, 2);
-
-    return total_cap;
-}
-
-double RRArbiter::calc_i_static()
-{
-    double i_static = 0;
-
-    double WdecNORn = m_tech_param_ptr->get_WdecNORn();
-    double WdecNORp = m_tech_param_ptr->get_WdecNORp();
-    double Wdecinvn = m_tech_param_ptr->get_Wdecinvn();
-    double Wdecinvp = m_tech_param_ptr->get_Wdecinvp();
-    double Wdff = m_tech_param_ptr->get_Wdff();
-    double NOR2_TAB_0 = m_tech_param_ptr->get_NOR2_TAB(0);
-    double NOR2_TAB_1 = m_tech_param_ptr->get_NOR2_TAB(1);
-    double NOR2_TAB_2 = m_tech_param_ptr->get_NOR2_TAB(2);
-    double NOR2_TAB_3 = m_tech_param_ptr->get_NOR2_TAB(3);
-    double NMOS_TAB_0 = m_tech_param_ptr->get_NMOS_TAB(0);
-    double PMOS_TAB_0 = m_tech_param_ptr->get_PMOS_TAB(0);
-    double DFF_TAB_0 = m_tech_param_ptr->get_DFF_TAB(0);
-
-    // NOR
-    i_static += (6*m_req_width*((WdecNORp*NOR2_TAB_0+WdecNORn*(NOR2_TAB_1+NOR2_TAB_2+NOR2_TAB_3))/4));
-    // inverter
-    i_static += 2*m_req_width*((Wdecinvn*NMOS_TAB_0+Wdecinvp*PMOS_TAB_0)/2);
-    // dff
-    i_static += m_req_width*Wdff*DFF_TAB_0;
-
-    return i_static;
-}
diff --git a/src/mem/ruby/network/orion/Allocator/RRArbiter.hh b/src/mem/ruby/network/orion/Allocator/RRArbiter.hh
deleted file mode 100644 (file)
index 259803a..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#ifndef __RRARBITER_H__
-#define __RRARBITER_H__
-
-#include "mem/ruby/network/orion/Allocator/Arbiter.hh"
-#include "mem/ruby/network/orion/Type.hh"
-
-class TechParameter;
-
-class RRArbiter : public Arbiter
-{
-  public:
-    RRArbiter(
-      const string& ff_model_str_,
-      uint32_t req_width_,
-      double len_in_wire_,
-      const TechParameter* tech_param_ptr_
-    );
-    ~RRArbiter();
-
-  public:
-    double calc_dynamic_energy(double num_req_, bool is_max_) const;
-
-  private:
-    void init(const string& ff_model_str_);
-    double calc_req_cap();
-    double calc_pri_cap();
-    double calc_grant_cap();
-    double calc_carry_cap();
-    double calc_carry_in_cap();
-    double calc_i_static();
-
-  private:
-    double m_e_chg_carry;
-    double m_e_chg_carry_in;
-};
-
-#endif
diff --git a/src/mem/ruby/network/orion/Allocator/SConscript b/src/mem/ruby/network/orion/Allocator/SConscript
deleted file mode 100644 (file)
index e85844b..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright (c) 2010 Massachusetts Institute of Technology
-# 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.
-#
-# Authors: Tushar Krishna
-
-Import('*')
-
-if env['PROTOCOL'] == 'None':
-    Return()
-
-Source('Arbiter.cc')
-Source('MatrixArbiter.cc')
-Source('RRArbiter.cc')
-Source('SWAllocator.cc')
-Source('VCAllocator.cc')
diff --git a/src/mem/ruby/network/orion/Allocator/SWAllocator.cc b/src/mem/ruby/network/orion/Allocator/SWAllocator.cc
deleted file mode 100644 (file)
index f1b5f87..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#include <cassert>
-#include <iostream>
-
-#include "mem/ruby/network/orion/Allocator/Arbiter.hh"
-#include "mem/ruby/network/orion/Allocator/SWAllocator.hh"
-#include "mem/ruby/network/orion/Crossbar/Crossbar.hh"
-#include "mem/ruby/network/orion/OrionConfig.hh"
-
-using namespace std;
-
-SWAllocator::SWAllocator(
-        uint32_t num_in_port_, 
-        uint32_t num_out_port_, 
-        uint32_t num_vclass_, 
-        uint32_t num_vchannel_, 
-        double len_in_wire_,
-        const string& local_arb_model_str_,
-        const string& local_arb_ff_model_str_,
-        const string& global_arb_model_str_,
-        const string& global_arb_ff_model_str_,
-        const TechParameter* tech_param_ptr_
-        )
-{
-    assert(num_in_port_ == num_in_port_);
-    assert(num_out_port_ == num_out_port_);
-    assert(num_vclass_ == num_vclass_);
-    assert(num_vchannel_ == num_vchannel_);
-    assert(len_in_wire_ == len_in_wire_);
-
-    m_num_in_port = num_in_port_;
-    m_num_out_port = num_out_port_;
-    m_num_vclass = num_vclass_;
-    m_num_vchannel = num_vchannel_;
-
-    if ((m_num_vclass*m_num_vchannel) > 1)
-    {
-        m_local_arb_ptr = Arbiter::create_arbiter(
-                local_arb_model_str_, local_arb_ff_model_str_,
-                m_num_vclass*m_num_vchannel, 0, tech_param_ptr_);
-    }
-    else
-    {
-        m_local_arb_ptr = NULL;
-    }
-
-    if (m_num_in_port > 2)
-    {
-        m_global_arb_ptr = Arbiter::create_arbiter(
-                global_arb_model_str_, global_arb_ff_model_str_,
-                m_num_in_port-1, len_in_wire_, tech_param_ptr_);
-    }
-    else
-    {
-        m_global_arb_ptr = NULL;
-    }
-}
-
-SWAllocator::~SWAllocator()
-{}
-
-double SWAllocator::get_dynamic_energy_local_sw_arb(double num_req_, bool is_max_) const
-{
-    double e_local_arb = 0;
-
-    if (m_local_arb_ptr)
-    {
-        e_local_arb = m_local_arb_ptr->calc_dynamic_energy(num_req_, is_max_);
-    }
-    return e_local_arb;
-}
-
-double SWAllocator::get_dynamic_energy_global_sw_arb(double num_req_, bool is_max_) const
-{
-    double e_global_arb = 0;
-
-    if (m_global_arb_ptr)
-    {
-        e_global_arb = m_global_arb_ptr->calc_dynamic_energy(num_req_, is_max_);
-    }
-    return e_global_arb;
-}
-
-double SWAllocator::get_static_power() const
-{
-    double p_va = 0;
-
-    if (m_local_arb_ptr)
-    {
-        // FIXME: might not be m_num_in_port;
-        p_va += m_local_arb_ptr->get_static_power()*m_num_in_port;
-    }
-    if (m_global_arb_ptr)
-    {
-        p_va += m_global_arb_ptr->get_static_power()*m_num_out_port;
-    }
-    return p_va;
-}
-
-void SWAllocator::print_all() const
-{
-    cout << "SWAllocator:" << endl;
-    if (m_local_arb_ptr)
-    {
-        for (uint32_t i = 0; i < m_num_vclass*m_num_vchannel; i++)
-        {
-            cout << "\t" << "Local arb (" << i << ") = " << get_dynamic_energy_local_sw_arb(i, false) << endl;
-        }
-    }
-
-    if (m_global_arb_ptr)
-    {
-        for (uint32_t i = 0; i < m_num_in_port-1; i++)
-        {
-            cout << "\t" << "Global arb (" << i << ") = " << get_dynamic_energy_global_sw_arb(i, false) << endl;
-        }
-    }
-
-    cout << "\t" << "Static power = " << get_static_power() << endl;
-    return;
-}
-
-SWAllocator* SWAllocator::create_swallocator(
-        uint32_t num_in_port_, 
-        uint32_t num_out_port_, 
-        uint32_t num_vclass_, 
-        uint32_t num_vchannel_, 
-        const Crossbar* xbar_ptr_,
-        const OrionConfig* orion_cfg_ptr_
-        )
-{
-    double len_in_wire = xbar_ptr_->get_len_req_wire();
-    const string& local_arb_model_str = orion_cfg_ptr_->get<string>("SA_IN_ARB_MODEL");
-    const string& local_arb_ff_model_str = orion_cfg_ptr_->get<string>("SA_IN_ARB_FF_MODEL");
-    const string& global_arb_model_str = orion_cfg_ptr_->get<string>("SA_OUT_ARB_MODEL");
-    const string& global_arb_ff_model_str = orion_cfg_ptr_->get<string>("SA_OUT_ARB_FF_MODEL");
-    const TechParameter* tech_param_ptr = orion_cfg_ptr_->get_tech_param_ptr();
-    return new SWAllocator(num_in_port_, num_out_port_, num_vclass_, num_vchannel_, 
-            len_in_wire, local_arb_model_str, local_arb_ff_model_str, 
-            global_arb_model_str, global_arb_ff_model_str,tech_param_ptr);
-}
diff --git a/src/mem/ruby/network/orion/Allocator/SWAllocator.hh b/src/mem/ruby/network/orion/Allocator/SWAllocator.hh
deleted file mode 100644 (file)
index fa47df0..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#ifndef __SWALLOCATOR_H__
-#define __SWALLOCATOR_H__
-
-#include "mem/ruby/network/orion/Type.hh"
-
-class TechParameter;
-class OrionConfig;
-class Arbiter;
-class Crossbar;
-
-class SWAllocator
-{
-  protected:
-    SWAllocator(
-      uint32_t num_in_port_,
-      uint32_t num_out_port_,
-      uint32_t num_vclass_,
-      uint32_t num_vchannel_,
-      double len_in_wire_,
-      const string& local_arb_model_str_,
-      const string& local_arb_ff_model_str_,
-      const string& global_arb_model_str_,
-      const string& global_arb_ff_model_str_,
-      const TechParameter* tech_param_ptr_
-    );
-
-  public:
-    ~SWAllocator();
-
-  public:
-    double get_dynamic_energy_local_sw_arb(double num_req_, bool is_max_) const;
-    double get_dynamic_energy_global_sw_arb(double num_req_, bool is_max_) const;
-    double get_static_power() const;
-
-    void print_all() const;
-
-  protected:
-    void init();
-
-  protected:
-    uint32_t m_num_in_port;
-    uint32_t m_num_out_port;
-    uint32_t m_num_vclass;
-    uint32_t m_num_vchannel;
-
-    Arbiter* m_local_arb_ptr;
-    Arbiter* m_global_arb_ptr;
-
-  public:
-    static SWAllocator* create_swallocator(
-      uint32_t num_in_port_,
-      uint32_t num_out_port_,
-      uint32_t num_vclass_,
-      uint32_t num_vchannel_,
-      const Crossbar* xbar_ptr_,
-      const OrionConfig* orion_cfg_ptr_
-    );
-};
-
-#endif
diff --git a/src/mem/ruby/network/orion/Allocator/VCAllocator.cc b/src/mem/ruby/network/orion/Allocator/VCAllocator.cc
deleted file mode 100644 (file)
index 9bc8332..0000000
+++ /dev/null
@@ -1,302 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#include <cassert>
-#include <cmath>
-#include <cstdlib>
-#include <iostream>
-
-#include "mem/ruby/network/orion/Allocator/Arbiter.hh"
-#include "mem/ruby/network/orion/Allocator/VCAllocator.hh"
-#include "mem/ruby/network/orion/Buffer/Buffer.hh"
-#include "mem/ruby/network/orion/OrionConfig.hh"
-
-using namespace std;
-
-VCAllocator::VCAllocator(
-        uint32_t num_in_port_,
-        uint32_t num_out_port_,
-        uint32_t num_vclass_,
-        uint32_t num_vchannel_,
-        const string& arb_model_str_,
-        const string& arb_ff_model_str_,
-        const TechParameter* tech_param_ptr_
-        )
-{
-    assert(num_in_port_ == num_in_port_);
-    assert(num_out_port_ == num_out_port_);
-    assert(num_vclass_ == num_vclass_);
-    assert(num_vchannel_ == num_vchannel_);
-
-    m_va_model = ONE_STAGE_ARB;
-    m_num_in_port = num_in_port_;
-    m_num_out_port = num_out_port_;
-    m_num_vclass = num_vclass_;
-    m_num_vchannel = num_vchannel_;
-
-    m_local_arb_ptr = NULL;
-
-    m_global_arb_ptr = Arbiter::create_arbiter(
-            arb_model_str_, arb_ff_model_str_,
-            (m_num_in_port-1)*m_num_vchannel, 0, tech_param_ptr_);
-
-    m_vc_select_ptr = NULL;
-}
-
-VCAllocator::VCAllocator(
-        uint32_t num_in_port_,
-        uint32_t num_out_port_,
-        uint32_t num_vclass_,
-        uint32_t num_vchannel_,
-        const string& local_arb_model_str_,
-        const string& local_arb_ff_model_str_,
-        const string& global_arb_model_str_,
-        const string& global_arb_ff_model_str_,
-        const TechParameter* tech_param_ptr_
-        )
-{
-    assert(num_in_port_ == num_in_port_);
-    assert(num_out_port_ == num_out_port_);
-    assert(num_vclass_ == num_vclass_);
-    assert(num_vchannel_ == num_vchannel_);
-
-    m_va_model = TWO_STAGE_ARB;
-    m_num_in_port = num_in_port_;
-    m_num_out_port = num_out_port_;
-    m_num_vclass = num_vclass_;
-    m_num_vchannel = num_vchannel_;
-
-    // first stage
-    m_local_arb_ptr = Arbiter::create_arbiter(
-            local_arb_model_str_, local_arb_ff_model_str_,
-            m_num_vchannel, 0, tech_param_ptr_);
-
-    // second stage
-    m_global_arb_ptr = Arbiter::create_arbiter(
-            global_arb_model_str_, global_arb_ff_model_str_,
-            (m_num_in_port-1)*m_num_vchannel, 0, tech_param_ptr_);
-
-    m_vc_select_ptr = NULL;
-}
-
-VCAllocator::VCAllocator(
-        uint32_t num_in_port_,
-        uint32_t num_out_port_,
-        uint32_t num_vclass_,
-        uint32_t num_vchannel_,
-        const string& vc_select_buf_model_str_,
-        const OrionConfig* orion_cfg_ptr_  
-        )
-{
-    assert(num_in_port_ == num_in_port_);
-    assert(num_out_port_ == num_out_port_);
-    assert(num_vclass_ == num_vclass_);
-    assert(num_vchannel_ == num_vchannel_);
-
-    m_va_model = VC_SELECT;
-    m_num_in_port = num_in_port_;
-    m_num_out_port = num_out_port_;
-    m_num_vclass = num_vclass_;
-    m_num_vchannel = num_vchannel_;
-
-    m_local_arb_ptr = NULL;
-    m_global_arb_ptr = NULL;
-
-    uint32_t vc_select_buf_num_set = m_num_vchannel;
-    uint32_t vc_select_buf_line_width = (uint32_t)ceil(log2(m_num_vchannel));
-    m_vc_select_ptr = new Buffer(vc_select_buf_model_str_, true, false, 
-            vc_select_buf_num_set, vc_select_buf_line_width, 1, 1, orion_cfg_ptr_);
-}
-
-VCAllocator::~VCAllocator()
-{
-    delete m_local_arb_ptr;
-    delete m_global_arb_ptr;
-    delete m_vc_select_ptr;
-}
-
-double VCAllocator::get_dynamic_energy_local_vc_arb(double num_req_, bool is_max_) const
-{
-    double e_local_arb = 0;
-    switch(m_va_model)
-    {
-        case TWO_STAGE_ARB:
-            e_local_arb = m_local_arb_ptr->calc_dynamic_energy(num_req_, is_max_);
-            break;
-        case ONE_STAGE_ARB:
-        case VC_SELECT:
-        default:
-            e_local_arb = 0;
-    }
-    return e_local_arb;
-}
-
-double VCAllocator::get_dynamic_energy_global_vc_arb(double num_req_, bool is_max_) const
-{
-    double e_global_arb = 0;
-    switch(m_va_model)
-    {
-        case ONE_STAGE_ARB:
-        case TWO_STAGE_ARB:
-            e_global_arb = m_global_arb_ptr->calc_dynamic_energy(num_req_, is_max_);
-            break;
-        case VC_SELECT:
-        default:
-            e_global_arb = 0;
-    }
-    return e_global_arb;
-}
-
-double VCAllocator::get_dynamic_energy_vc_select(bool is_read_, bool is_max_) const
-{
-    double e_vc_select = 0;
-    switch(m_va_model)
-    {
-        case VC_SELECT:
-            e_vc_select = m_vc_select_ptr->get_dynamic_energy(is_read_, is_max_);
-            break;
-        case ONE_STAGE_ARB:
-        case TWO_STAGE_ARB:
-        default:
-            e_vc_select = 0;
-    }
-    return e_vc_select;
-}
-
-double VCAllocator::get_static_power() const
-{
-    double p_va = 0;
-    switch(m_va_model)
-    {
-        case ONE_STAGE_ARB:
-            p_va = m_global_arb_ptr->get_static_power()*m_num_out_port*m_num_vclass*m_num_vchannel;
-            break;
-        case TWO_STAGE_ARB:
-            p_va += m_local_arb_ptr->get_static_power()*m_num_in_port*m_num_vclass*m_num_vchannel;
-            p_va += m_global_arb_ptr->get_static_power()*m_num_out_port*m_num_vclass*m_num_vchannel;
-            break;   
-        case VC_SELECT:
-            p_va = m_vc_select_ptr->get_static_power()*m_num_out_port*m_num_vclass;
-            break;
-        default:
-            cerr << "ERROR: Invalid VA model" << endl;
-            exit(1);
-    }
-    return p_va;
-}
-
-void VCAllocator::print_all() const
-{
-    switch(m_va_model)
-    {
-        case ONE_STAGE_ARB:
-            cout << "VCAllocator: ONE_STAGE_ARB" << endl;
-            for (uint32_t i = 0; i <  (m_num_in_port-1)*m_num_vchannel; i++)
-            {
-                cout << "\t" << "Global arb (" << i << ") = " << get_dynamic_energy_global_vc_arb(i, false) << endl;
-            }
-            break;
-        case TWO_STAGE_ARB:
-            cout << "VCAllocator: TWO_STAGE_ARB" << endl;
-            for (uint32_t i = 0; i < m_num_vchannel; i++)
-            {
-                cout << "\t" << "Local arb (" << i << ") = " << get_dynamic_energy_local_vc_arb(i, false) << endl;
-            }
-            for (uint32_t i = 0; i <  (m_num_in_port-1)*m_num_vchannel; i++)
-            {
-                cout << "\t" << "Global arb (" << i << ") = " << get_dynamic_energy_global_vc_arb(i, false) << endl;
-            }
-            break;
-        case VC_SELECT:
-            cout << "VCAllocator: VC_SELECT" << endl;
-            cout << "\t" << "Read = " << get_dynamic_energy_vc_select(true, false) << endl;
-            cout << "\t" << "Write = " << get_dynamic_energy_vc_select(false, false) << endl;
-            break;
-        default:
-            ;
-    }
-    cout << "\t" << "Static power = " << get_static_power() << endl;
-    return;
-}
-
-VCAllocator* VCAllocator::create_vcallocator(
-        const string& vcalloc_model_str_,
-        uint32_t num_in_port_,
-        uint32_t num_out_port_,
-        uint32_t num_vclass_,
-        uint32_t num_vchannel_,
-        const OrionConfig* orion_cfg_ptr_
-        )
-{
-    if (num_vchannel_ > 1)
-    {
-        if (vcalloc_model_str_ == string("ONE_STAGE_ARB"))
-        {
-            const string& arb_model_str = orion_cfg_ptr_->get<string>("VA_OUT_ARB_MODEL");
-            const string& arb_ff_model_str = orion_cfg_ptr_->get<string>("VA_OUT_ARB_FF_MODEL");
-            const TechParameter* tech_param_ptr = orion_cfg_ptr_->get_tech_param_ptr();
-            return new VCAllocator(num_in_port_, num_out_port_, num_vclass_, num_vchannel_, 
-                    arb_model_str, arb_ff_model_str, tech_param_ptr);
-        }
-        else if (vcalloc_model_str_ == string("TWO_STAGE_ARB"))
-        {
-            const string& local_arb_model_str = orion_cfg_ptr_->get<string>("VA_IN_ARB_MODEL");
-            const string& local_arb_ff_model_str = orion_cfg_ptr_->get<string>("VA_IN_ARB_FF_MODEL");
-            const string& global_arb_model_str = orion_cfg_ptr_->get<string>("VA_OUT_ARB_MODEL");
-            const string& global_arb_ff_model_str = orion_cfg_ptr_->get<string>("VA_OUT_ARB_FF_MODEL");
-            const TechParameter* tech_param_ptr = orion_cfg_ptr_->get_tech_param_ptr();
-            return new VCAllocator(num_in_port_, num_out_port_, num_vclass_, num_vchannel_, 
-                    local_arb_model_str, local_arb_ff_model_str, 
-                    global_arb_model_str, global_arb_ff_model_str,tech_param_ptr);
-        }
-        else if (vcalloc_model_str_ == string("VC_SELECT"))
-        {
-            const string& vc_select_buf_model_str = orion_cfg_ptr_->get<string>("VA_BUF_MODEL");
-            return new VCAllocator(num_in_port_, num_out_port_, num_vclass_, num_vchannel_,
-                    vc_select_buf_model_str, orion_cfg_ptr_);
-        }
-        else
-        {
-            cerr << "WARNING: No VC allocator model" << endl;
-            return (VCAllocator*)NULL;
-        }
-    }
-    else
-    {
-        // reduce to a register
-        return new VCAllocator(num_in_port_, num_out_port_, num_vclass_, 1,
-                "REGISTER", orion_cfg_ptr_);
-    }
-}
diff --git a/src/mem/ruby/network/orion/Allocator/VCAllocator.hh b/src/mem/ruby/network/orion/Allocator/VCAllocator.hh
deleted file mode 100644 (file)
index 81ab6b8..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#ifndef __VCALLOCATOR_H__
-#define __VCALLOCATOR_H__
-
-#include "mem/ruby/network/orion/Type.hh"
-
-class TechParameter;
-class OrionConfig;
-class Arbiter;
-class Buffer;
-
-class VCAllocator
-{
-  public:
-    enum VAModel
-    {
-      NO_MODEL = 0,
-      ONE_STAGE_ARB,
-      TWO_STAGE_ARB,
-      VC_SELECT
-    };
-
-  public:
-    ~VCAllocator();
-
-  protected:
-    // for ONE_STAGE_ARB
-    VCAllocator(
-      uint32_t num_in_port_,
-      uint32_t num_out_port_,
-      uint32_t num_vclass_,
-      uint32_t num_vchannel_,
-      const string& arb_model_str_,
-      const string& arb_ff_model_str_,
-      const TechParameter* tech_param_ptr_
-    );
-    // for TWO_STAGE_ARB
-    VCAllocator(
-      uint32_t num_in_port_,
-      uint32_t num_out_port_,
-      uint32_t num_vclass_,
-      uint32_t num_vchannel_,
-      const string& local_arb_model_str_,
-      const string& local_arb_ff_model_str_,
-      const string& global_arb_model_str_,
-      const string& global_arb_ff_model_str_,
-      const TechParameter* tech_param_ptr_
-    );
-    // for VC_SELECT
-    VCAllocator(
-      uint32_t num_in_port_,
-      uint32_t num_out_port_,
-      uint32_t num_vclass_,
-      uint32_t num_vchannel_,
-      const string& vc_select_buf_model_str_,
-      const OrionConfig* orion_cfg_ptr_  
-    );
-
-  public:
-    double get_dynamic_energy_local_vc_arb(double num_req_, bool is_max_) const;
-    double get_dynamic_energy_global_vc_arb(double num_req_, bool is_max_) const;
-    double get_dynamic_energy_vc_select(bool is_read_, bool is_max_) const;
-    double get_static_power() const;
-
-    void print_all() const;
-
-  protected:
-    VAModel m_va_model;
-    uint32_t m_num_in_port;
-    uint32_t m_num_out_port;
-    uint32_t m_num_vclass;
-    uint32_t m_num_vchannel;
-
-    Arbiter* m_local_arb_ptr;
-    Arbiter* m_global_arb_ptr;
-    Buffer* m_vc_select_ptr;
-
-  public:
-    static VCAllocator* create_vcallocator(
-      const string& vcalloc_model_str_,
-      uint32_t num_in_port_,
-      uint32_t num_out_port_,
-      uint32_t num_vclass_,
-      uint32_t num_vchannel_,
-      const OrionConfig* orion_cfg_ptr_
-    );
-};
-
-#endif
diff --git a/src/mem/ruby/network/orion/Buffer/AmpUnit.cc b/src/mem/ruby/network/orion/Buffer/AmpUnit.cc
deleted file mode 100644 (file)
index cdc3645..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:   Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#include "mem/ruby/network/orion/Buffer/AmpUnit.hh"
-#include "mem/ruby/network/orion/TechParameter.hh"
-
-AmpUnit::AmpUnit(
-        const string& amp_model_str_,
-        const TechParameter* tech_param_ptr_
-        )
-{
-    if (amp_model_str_.compare("GENERIC_AMP") == 0)
-    {
-        m_amp_model = GENERIC_AMP;
-    }
-    else
-    {
-        m_amp_model = NO_MODEL;
-    }
-
-    if (m_amp_model != NO_MODEL)
-    {
-        m_tech_param_ptr = tech_param_ptr_;
-
-        init();
-    }
-}
-
-AmpUnit::~AmpUnit()
-{}
-
-void AmpUnit::init()
-{
-    double vdd = m_tech_param_ptr->get_vdd();
-    double period = m_tech_param_ptr->get_period();
-    double amp_Idsat = m_tech_param_ptr->get_amp_idsat();
-
-    m_e_access = (vdd / 8.0 * period * amp_Idsat);
-    return;
-}
diff --git a/src/mem/ruby/network/orion/Buffer/AmpUnit.hh b/src/mem/ruby/network/orion/Buffer/AmpUnit.hh
deleted file mode 100644 (file)
index 78e8746..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:   Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#ifndef __AMPUNIT_H__
-#define __AMPUNIT_H__
-
-#include "mem/ruby/network/orion/Type.hh"
-
-class TechParameter;
-
-class AmpUnit
-{
-  public:
-    enum AmpModel
-    {
-      NO_MODEL = 0,
-      GENERIC_AMP
-    };
-
-  public:
-    AmpUnit(
-      const string& amp_model_str_,
-      const TechParameter* tech_param_ptr_
-    );
-    ~AmpUnit();
-
-  public:
-    double get_e_access() const { return m_e_access; }
-
-  private:
-    void init();
-
-  private:
-    AmpModel m_amp_model;
-    const TechParameter* m_tech_param_ptr;
-
-    double m_e_access;
-};
-
-#endif
-
diff --git a/src/mem/ruby/network/orion/Buffer/BitlineUnit.cc b/src/mem/ruby/network/orion/Buffer/BitlineUnit.cc
deleted file mode 100644 (file)
index 90153d7..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:   Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#include "base/misc.hh"
-#include "mem/ruby/network/orion/Buffer/BitlineUnit.hh"
-#include "mem/ruby/network/orion/Buffer/SRAM.hh"
-#include "mem/ruby/network/orion/TechParameter.hh"
-
-BitlineUnit::BitlineUnit(
-        const string bl_model_str_,
-        const SRAM* sram_ptr_,
-        const TechParameter* tech_param_ptr_
-        )
-{
-    if (bl_model_str_ == "RW_BITLINE")
-    {
-        m_bl_model = RW_BITLINE;
-    }
-    else if (bl_model_str_ == "WO_BITLINE")
-    {
-        m_bl_model = WO_BITLINE;
-    }
-    else 
-    {
-        m_bl_model = NO_MODEL;
-    }
-
-    if (m_bl_model != NO_MODEL)
-    {
-        m_sram_ptr = sram_ptr_;
-        m_tech_param_ptr = tech_param_ptr_;
-
-        init();
-    }
-}
-
-BitlineUnit::~BitlineUnit()
-{}
-
-void BitlineUnit::init()
-{
-    uint32_t num_port = m_sram_ptr->get_num_port();
-    uint32_t num_data_end = m_sram_ptr->get_num_data_end();
-    double bl_cmetal;
-    if ((num_port > 1) || (num_data_end == 2))
-    {
-        bl_cmetal = m_tech_param_ptr->get_CC3M2metal();
-    }
-    else
-    {
-        bl_cmetal = m_tech_param_ptr->get_CM2metal();
-    }
-    uint32_t num_row = m_sram_ptr->get_num_row();
-    double RegCellHeight = m_tech_param_ptr->get_RegCellHeight();
-    double WordlineSpacing = m_tech_param_ptr->get_WordlineSpacing();
-    m_bl_len = num_row*(RegCellHeight + num_port*WordlineSpacing);
-    m_bl_wire_cap = m_bl_len * bl_cmetal;
-
-    double e_factor = m_tech_param_ptr->get_EnergyFactor();
-    double sense_e_factor = m_tech_param_ptr->get_SenseEnergyFactor();
-    switch(m_bl_model)
-    {
-        case RW_BITLINE:
-            if (num_data_end == 2)
-            {
-                m_e_col_sel = calc_col_select_cap() * e_factor;
-                m_e_col_read = calc_col_read_cap() * sense_e_factor;
-            }
-            else
-            {
-                m_e_col_sel = 0;
-                m_e_col_read = calc_col_read_cap() * e_factor;
-            }
-            m_e_col_write = calc_col_write_cap() * e_factor;
-
-            m_i_static = calc_i_static();
-            break;
-        case WO_BITLINE:
-            m_e_col_sel = m_e_col_read = 0;
-            m_e_col_write = calc_col_write_cap() * e_factor;
-            //FIXME - no static power?
-            break;
-        default:
-            fatal("Error in BITLINE model.\n");
-    }
-    return;
-}
-
-double BitlineUnit::calc_col_select_cap()
-{
-    double Wbitmuxn = m_tech_param_ptr->get_Wbitmuxn();
-    return m_tech_param_ptr->calc_gatecap(Wbitmuxn, 1);
-}
-
-double BitlineUnit::calc_col_read_cap()
-{
-    double total_cap = 0;
-
-    // part 1: drain cap of precharge tx's
-    //total_cap = m_num_bl_pre * Util::calc_draincap(m_pre_size, Util::PCH, 1);
-
-    // part 2: drain cap of pass tx's
-    double Wmemcellr = m_tech_param_ptr->get_Wmemcellr();
-    uint32_t num_row = m_sram_ptr->get_num_row();
-    total_cap = num_row * m_tech_param_ptr->calc_draincap(Wmemcellr, TechParameter::NCH, 1);
-
-    // part 3: metal cap
-    total_cap += m_bl_wire_cap;
-    m_pre_unit_load = total_cap;
-
-    // part 4: bitline inverter
-    uint32_t num_data_end = m_sram_ptr->get_num_data_end();
-    if (num_data_end == 1)
-    {
-        // FIXME: magic numbers
-        double MSCALE = m_tech_param_ptr->get_MSCALE();
-        total_cap += m_tech_param_ptr->calc_gatecap(MSCALE * (29.9 + 7.8), 0) + m_tech_param_ptr->calc_gatecap(MSCALE * (47.0 + 12.0), 0);
-    }
-
-    // part 5: gate cap of sense amplifier or output driver
-    bool is_outdrv = m_sram_ptr->get_is_outdrv();
-    if (num_data_end == 2)
-    { // sense amplifier
-        double WsenseQ1to4 = m_tech_param_ptr->get_WsenseQ1to4();
-        total_cap += 2 * m_tech_param_ptr->calc_gatecap(WsenseQ1to4, 10);
-    }
-    else if (is_outdrv)
-    {
-        double Woutdrvnandn = m_tech_param_ptr->get_Woutdrvnandn();
-        double Woutdrvnandp = m_tech_param_ptr->get_Woutdrvnandp();
-        double Woutdrvnorn = m_tech_param_ptr->get_Woutdrvnorn();
-        double Woutdrvnorp = m_tech_param_ptr->get_Woutdrvnorp();
-
-        total_cap += m_tech_param_ptr->calc_gatecap(Woutdrvnandn, 1) + m_tech_param_ptr->calc_gatecap(Woutdrvnandp, 1) + m_tech_param_ptr->calc_gatecap(Woutdrvnorn, 1) + m_tech_param_ptr->calc_gatecap(Woutdrvnorp, 1);
-    }
-
-    return total_cap;
-}
-
-double BitlineUnit::calc_col_write_cap()
-{
-    double total_cap, psize, nsize;
-
-    // part 1: line cap, including drain cap of pass tx's and metal cap
-    uint32_t num_row = m_sram_ptr->get_num_row();
-    double Wmemcellw = m_tech_param_ptr->get_Wmemcellw();
-    total_cap = num_row * m_tech_param_ptr->calc_draincap(Wmemcellw, TechParameter::NCH, 1) + m_bl_wire_cap;
-
-    // part 2: write driver
-    double period = m_tech_param_ptr->get_period();
-    psize = m_tech_param_ptr->calc_driver_psize(total_cap, period / 8.0);
-    double Wdecinvn = m_tech_param_ptr->get_Wdecinvn();
-    double Wdecinvp = m_tech_param_ptr->get_Wdecinvp();
-    nsize = psize * Wdecinvn / Wdecinvp;
-    total_cap += m_tech_param_ptr->calc_draincap(psize, TechParameter::PCH, 1) + m_tech_param_ptr->calc_draincap(nsize, TechParameter::NCH, 1) + m_tech_param_ptr->calc_gatecap(psize + nsize, 1);
-
-    return total_cap;
-}
-
-double BitlineUnit::calc_i_static()
-{
-    double Wdecinvn = m_tech_param_ptr->get_Wdecinvn();
-    double Wdecinvp = m_tech_param_ptr->get_Wdecinvp();
-    double NMOS_TAB_0 = m_tech_param_ptr->get_NMOS_TAB(0);
-    double PMOS_TAB_0 = m_tech_param_ptr->get_PMOS_TAB(0);
-
-    return (2*(Wdecinvn*NMOS_TAB_0+Wdecinvp*PMOS_TAB_0));
-}
diff --git a/src/mem/ruby/network/orion/Buffer/BitlineUnit.hh b/src/mem/ruby/network/orion/Buffer/BitlineUnit.hh
deleted file mode 100644 (file)
index fc37c42..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:   Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#ifndef __BITLINEUNIT_H__
-#define __BITLINEUNIT_H__
-
-#include "mem/ruby/network/orion/Type.hh"
-
-class SRAM;
-class TechParameter;
-
-class BitlineUnit
-{
-  public:
-    enum BitlineModel
-    {
-      NO_MODEL = 0,
-      RW_BITLINE,
-      WO_BITLINE
-    };
-
-  public:
-    BitlineUnit(
-      const string bl_model_str_,
-      const SRAM* sram_ptr_,
-      const TechParameter* tech_param_ptr_
-    );
-    ~BitlineUnit();
-
-  public:
-    double get_pre_unit_load() const { return m_pre_unit_load; }
-
-    double get_e_col_read() const { return m_e_col_read; }
-    double get_e_col_wrtie() const { return m_e_col_write; }
-    double get_i_static() const { return m_i_static; }
-
-  private:
-    void init();
-    double calc_col_select_cap();
-    double calc_col_read_cap();
-    double calc_col_write_cap();
-    double calc_i_static();
-
-  private:
-    BitlineModel m_bl_model;
-    const SRAM* m_sram_ptr;
-    const TechParameter* m_tech_param_ptr;
-
-    double m_bl_len;
-    double m_bl_wire_cap;
-    double m_pre_unit_load;
-
-    double m_e_col_sel;
-    double m_e_col_read;
-    double m_e_col_write;
-
-    double m_i_static;
-};
-
-#endif
-
diff --git a/src/mem/ruby/network/orion/Buffer/Buffer.cc b/src/mem/ruby/network/orion/Buffer/Buffer.cc
deleted file mode 100644 (file)
index 45b8367..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#include <cassert>
-#include <iostream>
-
-#include "mem/ruby/network/orion/Buffer/Buffer.hh"
-#include "mem/ruby/network/orion/Buffer/Register.hh"
-#include "mem/ruby/network/orion/Buffer/SRAM.hh"
-#include "mem/ruby/network/orion/OrionConfig.hh"
-#include "mem/ruby/network/orion/TechParameter.hh"
-
-using namespace std;
-
-Buffer::Buffer(
-        const string& buffer_model_str_,
-        bool is_fifo_,
-        bool is_outdrv_,
-        uint32_t num_entry_,
-        uint32_t line_width_,
-        uint32_t num_read_port_,
-        uint32_t num_write_port_,
-        const OrionConfig* orion_cfg_ptr_
-        )
-{
-    if (buffer_model_str_ == string("SRAM"))
-    {
-        m_buffer_model = BUF_SRAM;
-    }
-    else if(buffer_model_str_ == string("REGISTER"))
-    {
-        m_buffer_model = BUF_REG;
-    }
-    else
-    {
-        m_buffer_model = NO_MODEL;
-    }
-
-    if (m_buffer_model != NO_MODEL)
-    {
-        assert(num_entry_ == num_entry_);
-        assert(line_width_ == line_width_);
-        assert(num_read_port_ == num_read_port_);
-        assert(num_write_port_ == num_write_port_);
-
-        m_num_entry = num_entry_;
-        m_line_width = line_width_;
-        m_is_fifo = is_fifo_;
-        m_is_outdrv = is_outdrv_;
-        m_num_read_port = num_read_port_;
-        m_num_write_port = num_write_port_;
-
-        m_orion_cfg_ptr = orion_cfg_ptr_;
-        m_tech_param_ptr = m_orion_cfg_ptr->get_tech_param_ptr();
-
-        init();
-    }
-}
-
-Buffer::~Buffer()
-{
-    delete m_sram_ptr;
-}
-
-double Buffer::get_dynamic_energy(
-        bool is_read_,
-        bool is_max_
-        ) const
-{
-    if (m_buffer_model == BUF_SRAM)
-    {
-        if (is_read_)
-        {
-            return m_sram_ptr->calc_e_read(is_max_);
-        }
-        else
-        {
-            return m_sram_ptr->calc_e_write(is_max_);
-        }
-    }
-    else if (m_buffer_model == BUF_REG)
-    {
-        if (is_read_)
-        {
-            return m_reg_ptr->calc_e_read();
-        }
-        else
-        {
-            return m_reg_ptr->calc_e_write();
-        }
-    }
-    else
-    {
-        return 0;
-    }
-}
-
-double Buffer::get_static_power() const
-{
-    double vdd = m_tech_param_ptr->get_vdd();
-    double SCALE_S = m_tech_param_ptr->get_SCALE_S();
-    if (m_buffer_model == BUF_SRAM)
-    {
-        return m_sram_ptr->calc_i_static()*vdd*SCALE_S;
-    }
-    else if (m_buffer_model == BUF_REG)
-    {
-        return m_reg_ptr->calc_i_static()*vdd*SCALE_S;
-    }
-    else
-    {
-        return 0;
-    }
-}
-
-void Buffer::print_all() const
-{
-    cout << "Buffer" << endl;
-    cout << "\t" << "Read = " << get_dynamic_energy(true, false) << endl;
-    cout << "\t" << "Write = " << get_dynamic_energy(false, false) << endl;
-    cout << "\t" << "Static power = " << get_static_power() << endl;
-    return;
-}
-
-void Buffer::init()
-{
-    if(m_buffer_model == BUF_SRAM)
-    {
-        uint32_t num_data_end = m_orion_cfg_ptr->get<uint32_t>("SRAM_NUM_DATA_END");
-        const string& rowdec_model_str = m_orion_cfg_ptr->get<string>("SRAM_ROWDEC_MODEL");
-        const string& wl_model_str = m_orion_cfg_ptr->get<string>("SRAM_WORDLINE_MODEL");
-        const string& bl_pre_model_str = m_orion_cfg_ptr->get<string>("SRAM_BITLINE_PRE_MODEL");
-        const string& mem_model_str = "NORMAL_MEM";
-        const string& bl_model_str = m_orion_cfg_ptr->get<string>("SRAM_BITLINE_MODEL");
-        const string& amp_model_str = m_orion_cfg_ptr->get<string>("SRAM_AMP_MODEL");
-        const string& outdrv_model_str = m_orion_cfg_ptr->get<string>("SRAM_OUTDRV_MODEL");
-        m_sram_ptr = new SRAM(
-                m_num_entry, m_line_width, m_is_fifo, m_is_outdrv, 
-                m_num_read_port, m_num_write_port, num_data_end, 
-                rowdec_model_str, wl_model_str, bl_pre_model_str, mem_model_str, 
-                bl_model_str, amp_model_str, outdrv_model_str, m_tech_param_ptr);
-    }
-    else if (m_buffer_model == BUF_REG)
-    {
-        m_sram_ptr = NULL;
-        m_reg_ptr = new Register(m_num_entry, m_line_width, m_tech_param_ptr);
-    }
-    else
-    {
-        m_sram_ptr = NULL;
-        m_reg_ptr = NULL;
-    }
-    return;
-}
-
diff --git a/src/mem/ruby/network/orion/Buffer/Buffer.hh b/src/mem/ruby/network/orion/Buffer/Buffer.hh
deleted file mode 100644 (file)
index 912151b..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#ifndef __BUFFER_H__
-#define __BUFFER_H__
-
-#include "mem/ruby/network/orion/Type.hh"
-
-class OrionConfig;
-class TechParameter;
-
-class SRAM;
-class Register;
-
-class Buffer
-{
-  public:
-    enum BufferModel
-    {
-      NO_MODEL = 0,
-      BUF_SRAM,
-      BUF_REG
-    };
-
-  public:
-    Buffer(
-      const string& buffer_model_str_,
-      bool is_fifo_,
-      bool is_outdrv_,
-      uint32_t num_entry_,
-      uint32_t line_width_,
-      uint32_t num_read_port_,
-      uint32_t num_write_port_,
-      const OrionConfig* orion_cfg_ptr_
-    );
-    ~Buffer();
-
-  public:
-    double get_dynamic_energy(bool is_read_, bool is_max_) const;
-    double get_static_power() const;
-
-    void print_all() const;
-
-  private:
-    void init();
-
-  private:
-    BufferModel m_buffer_model;
-    uint32_t m_num_entry;
-    uint32_t m_line_width;
-
-    bool m_is_fifo;
-    bool m_is_outdrv;
-    uint32_t m_num_read_port;
-    uint32_t m_num_write_port;
-    const OrionConfig* m_orion_cfg_ptr;
-    const TechParameter* m_tech_param_ptr;
-
-    SRAM* m_sram_ptr;
-    Register* m_reg_ptr;
-};
-
-#endif
-
diff --git a/src/mem/ruby/network/orion/Buffer/DecoderUnit.cc b/src/mem/ruby/network/orion/Buffer/DecoderUnit.cc
deleted file mode 100644 (file)
index e431432..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#include <cmath>
-
-#include "mem/ruby/network/orion/Buffer/DecoderUnit.hh"
-#include "mem/ruby/network/orion/TechParameter.hh"
-
-using namespace std;
-
-DecoderUnit::DecoderUnit(
-        const string& dec_model_str_,
-        uint32_t dec_width_,
-        const TechParameter* tech_param_ptr_
-        )
-{
-    if (dec_model_str_.compare("GENERIC_DEC") == 0)
-    {
-        m_dec_model = GENERIC_DEC;
-    }
-    else
-    {
-        m_dec_model = NO_MODEL;
-    }
-
-    if (m_dec_model != NO_MODEL)
-    {
-        m_dec_width = dec_width_;
-        m_tech_param_ptr = tech_param_ptr_;
-
-        init();
-    }
-}
-
-DecoderUnit::~DecoderUnit()
-{
-}
-
-void DecoderUnit::init()
-{
-    if (m_dec_width >= 4)
-    { // 2-level decoder
-        m_num_in_1st = (m_dec_width == 4)? 2:3;
-        m_num_out_0th = 1 << (m_num_in_1st - 1);
-        m_num_in_2nd = (uint32_t)ceil((double)m_dec_width/(double)m_num_in_1st);
-        m_num_out_1st = 1 << (m_dec_width - m_num_in_1st);
-    }
-    else if (m_dec_width >= 2)
-    { // 1-level decoder
-        m_num_in_1st = m_dec_width;
-        m_num_out_0th = 1 << (m_num_in_1st - 1);
-        m_num_in_2nd = m_num_out_1st = 0;
-    }
-    else
-    {
-        m_num_in_1st = m_num_out_0th = m_num_in_2nd = m_num_out_1st = 0;
-    }
-
-    // compute energy constants
-    double e_factor = m_tech_param_ptr->get_vdd() * m_tech_param_ptr->get_vdd();
-    if (m_dec_width >= 4)
-    {
-        m_e_chg_l1 = calc_chgl1_cap() * e_factor;
-        m_e_chg_output = calc_select_cap() * e_factor;
-    }
-    else if (m_dec_width >= 2)
-    {
-        m_e_chg_l1 = calc_chgl1_cap() * e_factor;
-        m_e_chg_output = 0;
-    }
-    else
-    {
-        m_e_chg_l1 = m_e_chg_output = 0;
-    }
-    m_e_chg_addr = calc_chgaddr_cap() * e_factor;
-
-    return;
-}
-
-double DecoderUnit::calc_chgl1_cap()
-{
-    double total_cap;
-
-    // part 1: drain cap of level-1 decoder
-    double Wdec3to8p = m_tech_param_ptr->get_Wdec3to8p();
-    double Wdec3to8n = m_tech_param_ptr->get_Wdec3to8n();
-    total_cap = m_num_in_1st * m_tech_param_ptr->calc_draincap(Wdec3to8p, TechParameter::PCH, 1) + m_tech_param_ptr->calc_draincap(Wdec3to8n, TechParameter::NCH, m_num_in_1st);
-
-    /* part 2: gate cap of level-2 decoder */
-    /* WHS: 40 and 20 should go to PARM */
-    double WdecNORn = m_tech_param_ptr->get_WdecNORn();
-    double WdecNORp = m_tech_param_ptr->get_WdecNORp();
-    total_cap += m_num_out_0th*m_tech_param_ptr->calc_gatecap((WdecNORn+WdecNORp), m_num_in_2nd*40 + 20);
-
-    return total_cap;
-}
-
-double DecoderUnit::calc_select_cap()
-{
-    double total_cap;
-
-    // part 1: drain cap of last level decoders 
-    double WdecNORp = m_tech_param_ptr->get_WdecNORp();
-    double WdecNORn = m_tech_param_ptr->get_WdecNORn();
-    total_cap = m_num_in_2nd * m_tech_param_ptr->calc_draincap(WdecNORn, TechParameter::NCH, 1) + m_tech_param_ptr->calc_draincap(WdecNORp, TechParameter::PCH, m_num_in_2nd);
-
-    // part 2: output inverter
-    // WHS: 20 should go to PARM
-    double Wdecinvp = m_tech_param_ptr->get_Wdecinvp();
-    double Wdecinvn = m_tech_param_ptr->get_Wdecinvn();
-    total_cap += m_tech_param_ptr->calc_draincap(Wdecinvn, TechParameter::NCH, 1) + m_tech_param_ptr->calc_draincap(Wdecinvp, TechParameter::PCH, 1) + m_tech_param_ptr->calc_gatecap(Wdecinvn + Wdecinvp, 20);
-
-    return total_cap;
-}
-
-double DecoderUnit::calc_chgaddr_cap()
-{
-    double total_cap;
-
-    // stage 1: input driver
-    double Wdecdrivep = m_tech_param_ptr->get_Wdecdrivep();
-    double Wdecdriven = m_tech_param_ptr->get_Wdecdriven();
-    total_cap = m_tech_param_ptr->calc_draincap(Wdecdrivep, TechParameter::PCH, 1) + m_tech_param_ptr->calc_draincap(Wdecdriven, TechParameter::NCH, 1) + m_tech_param_ptr->calc_gatecap(Wdecdriven, 1);
-
-    /* inverter to produce complement addr, this needs 1/2 */
-    /* WHS: assume Wdecinv(np) for this inverter */
-    double Wdecinvp = m_tech_param_ptr->get_Wdecinvp();
-    double Wdecinvn = m_tech_param_ptr->get_Wdecinvn();
-    total_cap += (m_tech_param_ptr->calc_draincap(Wdecinvp, TechParameter::PCH, 1) + m_tech_param_ptr->calc_draincap(Wdecinvn, TechParameter::NCH, 1) + m_tech_param_ptr->calc_gatecap(Wdecinvp, 1) + m_tech_param_ptr->calc_gatecap(Wdecinvn, 1)) / 2;
-
-    /* stage 2: gate cap of level-1 decoder */
-    /* WHS: 10 should go to PARM */
-    double Wdec3to8p = m_tech_param_ptr->get_Wdec3to8p();
-    double Wdec3to8n = m_tech_param_ptr->get_Wdec3to8n();
-    total_cap += m_num_out_0th*m_tech_param_ptr->calc_gatecap( Wdec3to8n + Wdec3to8p, 10 );
-
-    return total_cap;
-}
-
diff --git a/src/mem/ruby/network/orion/Buffer/DecoderUnit.hh b/src/mem/ruby/network/orion/Buffer/DecoderUnit.hh
deleted file mode 100644 (file)
index c8d66d4..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#ifndef __DECODERUNIT_H__
-#define __DECODERUNIT_H__
-
-#include "mem/ruby/network/orion/TechParameter.hh"
-#include "mem/ruby/network/orion/Type.hh"
-
-class DecoderUnit
-{
-  public:
-    enum DecModel
-    {
-      NO_MODEL = 0,
-      GENERIC_DEC
-    };
-
-  public:
-    DecoderUnit(
-      const string& dec_model_str_, 
-      uint32_t dec_width_, 
-      const TechParameter* tech_param_ptr_
-    );
-    ~DecoderUnit();
-
-  public:
-    uint32_t get_dec_width() const { return m_dec_width; }
-    uint32_t get_num_in_2nd() const { return m_num_in_2nd; }
-    double get_e_chg_addr() const { return m_e_chg_addr; }
-    double get_e_chg_output() const { return m_e_chg_output; }
-    double get_e_chg_l1() const { return m_e_chg_l1; }
-
-  private:
-    void init();
-    double calc_chgl1_cap();
-    double calc_select_cap();
-    double calc_chgaddr_cap();
-
-  private:
-    DecModel m_dec_model;
-    uint32_t m_dec_width;
-    const TechParameter* m_tech_param_ptr;
-
-    uint32_t m_num_in_1st;
-    uint32_t m_num_in_2nd;
-    uint32_t m_num_out_0th;
-    uint32_t m_num_out_1st;
-
-    double m_e_chg_l1;
-    double m_e_chg_output;
-    double m_e_chg_addr;
-};
-
-#endif
-
diff --git a/src/mem/ruby/network/orion/Buffer/MemUnit.cc b/src/mem/ruby/network/orion/Buffer/MemUnit.cc
deleted file mode 100644 (file)
index cc75ebf..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#include <iostream>
-
-#include "mem/ruby/network/orion/Buffer/MemUnit.hh"
-#include "mem/ruby/network/orion/Buffer/SRAM.hh"
-#include "mem/ruby/network/orion/TechParameter.hh"
-
-using namespace std;
-
-MemUnit::MemUnit(
-        const string& mem_model_str_,
-        const SRAM* sram_ptr_,
-        const TechParameter* tech_param_ptr_
-        )
-{
-    if (mem_model_str_.compare("NORMAL_MEM") == 0)
-    {
-        m_mem_model = NORMAL_MEM;
-    }
-    else 
-    {
-        m_mem_model = NO_MODEL;
-    }
-
-    if (m_mem_model != NO_MODEL)
-    {
-        m_sram_ptr = sram_ptr_;
-        m_tech_param_ptr = tech_param_ptr_;
-
-        init();
-    }
-}
-
-MemUnit::~MemUnit()
-{}
-
-void MemUnit::init()
-{
-    double e_factor = m_tech_param_ptr->get_EnergyFactor();
-
-    m_e_switch = calc_mem_cap() * e_factor;
-
-    m_i_static = calc_i_static();
-}
-
-double MemUnit::calc_mem_cap()
-{
-    double Wmemcella = m_tech_param_ptr->get_Wmemcella();
-    double Wmemcellbscale = m_tech_param_ptr->get_Wmemcellbscale();
-    double Wmemcellr = m_tech_param_ptr->get_Wmemcellr();
-    double Wmemcellw = m_tech_param_ptr->get_Wmemcellw();
-    uint32_t num_data_end = m_sram_ptr->get_num_data_end();
-    uint32_t num_read_port = m_sram_ptr->get_num_read_port();
-    uint32_t num_write_port = m_sram_ptr->get_num_write_port();
-
-    const TechParameter* tp = m_tech_param_ptr;
-
-    double total_cap = 0;
-    // part 1: drain capacitance of pass transistors
-    total_cap += tp->calc_draincap(Wmemcellr, TechParameter::NCH, 1)*num_read_port*num_data_end/2.0;
-    total_cap += tp->calc_draincap(Wmemcellw, TechParameter::NCH, 1)*num_write_port;
-
-    // has coefficient (1/2 * 2)
-    // part 2: drain capacitance of memory cell
-    total_cap += tp->calc_draincap(Wmemcella, TechParameter::NCH, 1) + tp->calc_draincap(Wmemcella*Wmemcellbscale, TechParameter::PCH, 1
-            );
-
-    // has coefficient (1/2 * 2)
-    // part 3: gate capacitance of memory cell
-    total_cap += tp->calc_gatecap(Wmemcella, 1) + tp->calc_gatecap(Wmemcella*Wmemcellbscale, 1);
-
-    return total_cap;
-}
-
-double MemUnit::calc_i_static()
-{
-    double Wmemcella = m_tech_param_ptr->get_Wmemcella();
-    double Wmemcellbscale = m_tech_param_ptr->get_Wmemcellbscale();
-    double Wmemcellr = m_tech_param_ptr->get_Wmemcellr();
-    double Wmemcellw = m_tech_param_ptr->get_Wmemcellw();
-    uint32_t num_data_end = m_sram_ptr->get_num_data_end();
-    uint32_t num_read_port = m_sram_ptr->get_num_read_port();
-    uint32_t num_write_port = m_sram_ptr->get_num_write_port();
-
-    const TechParameter* tp = m_tech_param_ptr;
-
-    double ret = 0;
-    // memory cell
-    //FIXME - why
-    ret += (Wmemcella*tp->get_NMOS_TAB(0) + Wmemcella*Wmemcellbscale*tp->get_PMOS_TAB(0))*2;
-    // read port pass tx
-    ret += (Wmemcellr*tp->get_NMOS_TAB(0)*num_data_end*num_read_port);
-    // write port pass tx
-    ret += (Wmemcellw*tp->get_NMOS_TAB(0)*2*num_write_port);
-
-    return ret;
-}
-
diff --git a/src/mem/ruby/network/orion/Buffer/MemUnit.hh b/src/mem/ruby/network/orion/Buffer/MemUnit.hh
deleted file mode 100644 (file)
index 5393f38..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#ifndef __MEMUNIT_H__
-#define __MEMUNIT_H__
-
-#include "mem/ruby/network/orion/Type.hh"
-
-class SRAM;
-class TechParameter;
-
-class MemUnit
-{
-  public:
-    enum MemModel
-    {
-      NO_MODEL = 0,
-      NORMAL_MEM
-    };
-
-  public:
-    MemUnit(
-      const string& mem_model_str_,
-      const SRAM* sram_ptr_,
-      const TechParameter* tech_param_ptr_
-    );
-    ~MemUnit();
-
-  public:
-    double get_e_switch() const { return m_e_switch; }
-    double get_i_static() const { return m_i_static; }
-
-  private:
-    void init();
-    double calc_mem_cap();
-    double calc_i_static();
-
-  private:
-    MemModel m_mem_model;
-    const SRAM* m_sram_ptr;
-    const TechParameter* m_tech_param_ptr;
-
-    double m_e_switch;
-    double m_i_static;
-};
-
-#endif
-
diff --git a/src/mem/ruby/network/orion/Buffer/OutdrvUnit.cc b/src/mem/ruby/network/orion/Buffer/OutdrvUnit.cc
deleted file mode 100644 (file)
index b467965..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#include "base/misc.hh"
-#include "mem/ruby/network/orion/Buffer/OutdrvUnit.hh"
-#include "mem/ruby/network/orion/Buffer/SRAM.hh"
-#include "mem/ruby/network/orion/TechParameter.hh"
-
-OutdrvUnit::OutdrvUnit(
-        const string& outdrv_model_str_,
-        const SRAM* sram_ptr_,
-        const TechParameter* tech_param_ptr_
-        )
-{
-    if (outdrv_model_str_ == string("CACHE_OUTDRV"))
-    {
-        m_outdrv_model = CACHE_OUTDRV;
-    }
-    else if (outdrv_model_str_ == string("REG_OUTDRV"))
-    {
-        m_outdrv_model = REG_OUTDRV;
-    }
-    else
-    {
-        m_outdrv_model = NO_MODEL;
-    }
-
-    if (m_outdrv_model != NO_MODEL)
-    {
-        m_sram_ptr = sram_ptr_;
-        m_tech_param_ptr = tech_param_ptr_;
-        init();
-    }
-    else
-    {
-        m_e_select = 0;
-        m_e_out_1 = 0;
-        m_e_out_0 = 0;
-        m_e_chg_data = 0;
-    }
-}
-
-OutdrvUnit::~OutdrvUnit()
-{}
-
-void OutdrvUnit::init()
-{
-    double e_factor = m_tech_param_ptr->get_EnergyFactor();
-
-    m_e_select = calc_select_cap() * e_factor;
-    m_e_out_1 = calc_outdata_cap(1) * e_factor;
-    m_e_out_0 = calc_outdata_cap(0) * e_factor;
-
-    switch(m_outdrv_model)
-    {
-        case CACHE_OUTDRV:
-            m_e_chg_data = calc_chgdata_cap() * e_factor;
-            break;
-        case REG_OUTDRV:
-            m_e_chg_data = 0;
-            break;
-        default:
-            fatal("Incorrect OUTDRIVE model.\n");
-    }
-
-    m_i_static = calc_i_static();
-    return;
-}
-
-double OutdrvUnit::calc_select_cap()
-{
-    double total_cap;
-
-    // stage 1: inverter
-    double Woutdrvseln = m_tech_param_ptr->get_Woutdrvseln();
-    double Woutdrvselp = m_tech_param_ptr->get_Woutdrvselp();
-    total_cap = m_tech_param_ptr->calc_gatecap(Woutdrvseln, 1) + m_tech_param_ptr->calc_gatecap(Woutdrvselp, 1) + m_tech_param_ptr->calc_draincap(Woutdrvseln, TechParameter::NCH, 1) + m_tech_param_ptr->calc_draincap(Woutdrvselp, TechParameter::PCH, 1);
-
-    // stage 2: gate cap of nand gate and nor gate
-    // only consider 1 gate cap because another and drain cap switch depends on data value
-    uint32_t line_width = m_sram_ptr->get_line_width();
-    double Woutdrvnandn = m_tech_param_ptr->get_Woutdrvnandn();
-    double Woutdrvnandp = m_tech_param_ptr->get_Woutdrvnandp();
-    double Woutdrvnorn = m_tech_param_ptr->get_Woutdrvnorn();
-    double Woutdrvnorp = m_tech_param_ptr->get_Woutdrvnorp();
-    total_cap += line_width * (m_tech_param_ptr->calc_gatecap(Woutdrvnandn, 1) + m_tech_param_ptr->calc_gatecap(Woutdrvnandp, 1) + m_tech_param_ptr->calc_gatecap(Woutdrvnorn, 1) + m_tech_param_ptr->calc_gatecap(Woutdrvnorp, 1));
-    return total_cap;
-}
-
-double OutdrvUnit::calc_chgdata_cap()
-{
-    double total_cap;
-    double Woutdrvnandn = m_tech_param_ptr->get_Woutdrvnandn();
-    double Woutdrvnandp = m_tech_param_ptr->get_Woutdrvnandp();
-    double Woutdrvnorn = m_tech_param_ptr->get_Woutdrvnorn();
-    double Woutdrvnorp = m_tech_param_ptr->get_Woutdrvnorp();
-
-    total_cap = (m_tech_param_ptr->calc_gatecap(Woutdrvnandn, 1) + m_tech_param_ptr->calc_gatecap(Woutdrvnandp, 1) + m_tech_param_ptr->calc_gatecap(Woutdrvnorn, 1) + m_tech_param_ptr->calc_gatecap(Woutdrvnorp, 1)) / 2.0;
-    return total_cap;
-}
-
-double OutdrvUnit::calc_outdata_cap(bool value_)
-{
-    double total_cap = 0;
-
-    // stage 1: drain cap of nand gate or nor gate
-    if (value_)
-    {
-        //drain cap of nand gate
-        double Woutdrvnandn = m_tech_param_ptr->get_Woutdrvnandn();
-        double Woutdrvnandp = m_tech_param_ptr->get_Woutdrvnandp();
-        total_cap = m_tech_param_ptr->calc_draincap(Woutdrvnandn, TechParameter::NCH, 2) + 2 * m_tech_param_ptr->calc_draincap(Woutdrvnandp, TechParameter::PCH, 1);
-    }
-    else
-    {
-        //drain cap of nor gate
-        double Woutdrvnorn = m_tech_param_ptr->get_Woutdrvnorn();
-        double Woutdrvnorp = m_tech_param_ptr->get_Woutdrvnorp();
-        total_cap = 2 * m_tech_param_ptr->calc_draincap(Woutdrvnorn, TechParameter::NCH, 1) + m_tech_param_ptr->calc_draincap(Woutdrvnorp, TechParameter::PCH, 2);
-    }
-
-    // stage 2: gate cap of output inverter
-    if (value_)
-    {
-        double Woutdriverp = m_tech_param_ptr->get_Woutdriverp();
-        total_cap += m_tech_param_ptr->calc_gatecap(Woutdriverp, 1);
-    }
-    else
-    {
-        double Woutdrivern = m_tech_param_ptr->get_Woutdrivern();
-        total_cap += m_tech_param_ptr->calc_gatecap(Woutdrivern, 1);
-    }
-
-    //drian cap of output inverter should be included into bus cap
-    //TODO
-    return total_cap;
-}
-
-double OutdrvUnit::calc_i_static()
-{
-    //FIXME - add static power
-    return 0;
-}
-
diff --git a/src/mem/ruby/network/orion/Buffer/OutdrvUnit.hh b/src/mem/ruby/network/orion/Buffer/OutdrvUnit.hh
deleted file mode 100644 (file)
index 017b3c7..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#ifndef __OUTDRVUNIT_H__
-#define __OUTDRVUNIT_H__
-
-#include "mem/ruby/network/orion/Type.hh"
-
-class SRAM;
-class TechParameter;
-
-class OutdrvUnit
-{
-  public:
-    enum OutdrvModel
-    {
-      NO_MODEL = 0,
-      CACHE_OUTDRV,
-      REG_OUTDRV
-    };
-
-  public:
-    OutdrvUnit(
-      const string& outdrv_model_str_,
-      const SRAM* sram_ptr_,
-      const TechParameter* tech_param_ptr_
-    );
-    ~OutdrvUnit();
-
-  public:
-    double get_e_select() const { return m_e_select; }
-    double get_e_chg_data() const { return m_e_chg_data; }
-    double get_e_out_0() const { return m_e_out_0; }
-    double get_e_out_1() const { return m_e_out_1; }
-
-  private:
-    void init();
-    double calc_select_cap();
-    double calc_chgdata_cap();
-    double calc_outdata_cap(bool value_);
-    double calc_i_static();
-
-  private:
-    OutdrvModel m_outdrv_model;
-    const SRAM* m_sram_ptr;
-    const TechParameter* m_tech_param_ptr;
-
-    double m_e_select;
-    double m_e_out_1;
-    double m_e_out_0;
-    double m_e_chg_data;
-
-    double m_i_static;
-};
-
-#endif
-
diff --git a/src/mem/ruby/network/orion/Buffer/PrechargeUnit.cc b/src/mem/ruby/network/orion/Buffer/PrechargeUnit.cc
deleted file mode 100644 (file)
index 76d257e..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#include "base/misc.hh"
-#include "mem/ruby/network/orion/Buffer/PrechargeUnit.hh"
-#include "mem/ruby/network/orion/Buffer/SRAM.hh"
-#include "mem/ruby/network/orion/TechParameter.hh"
-
-PrechargeUnit::PrechargeUnit(
-        const string& pre_model_str_,
-        double pre_load_,
-        const SRAM* sram_ptr_,
-        const TechParameter* tech_param_ptr_
-        )
-{
-    if (pre_model_str_ == "SINGLE_BITLINE")
-    {
-        m_pre_model = SINGLE_BITLINE;
-    }
-    else if (pre_model_str_ == "EQU_BITLINE")
-    {
-        m_pre_model = EQU_BITLINE;
-    }
-    else if (pre_model_str_ == "SINGLE_OTHER")
-    {
-        m_pre_model = SINGLE_OTHER;
-    }
-    else
-    {
-        m_pre_model = NO_MODEL;
-    }
-
-    if (m_pre_model != NO_MODEL)
-    {
-        m_pre_load = pre_load_;
-        m_sram_ptr = sram_ptr_;
-        m_tech_param_ptr = tech_param_ptr_;
-
-        init();
-    }
-}
-
-PrechargeUnit::~PrechargeUnit()
-{
-}
-
-void PrechargeUnit::init()
-{
-    double period = m_tech_param_ptr->get_period();
-    m_pre_size = m_tech_param_ptr->calc_driver_psize(m_pre_load, period/8.0);
-    //FIXME - shouldn't be added
-    double Wdecinvn = m_tech_param_ptr->get_Wdecinvn();
-    double Wdecinvp = m_tech_param_ptr->get_Wdecinvp();
-    m_pre_size += m_pre_size*Wdecinvn/Wdecinvp;
-
-    uint32_t num_gate = calc_num_pre_gate();
-
-    // WHS: 10 should go to PARM 
-    double e_factor = m_tech_param_ptr->get_EnergyFactor();
-    m_e_charge_gate = calc_pre_cap(m_pre_size, 10) * num_gate * e_factor;
-
-    uint32_t num_data_end = m_sram_ptr->get_num_data_end();
-    if (num_data_end == 2)
-    {
-        e_factor = m_tech_param_ptr->get_SenseEnergyFactor();
-    }
-    else
-    {
-        e_factor = m_tech_param_ptr->get_EnergyFactor();
-    }
-    uint32_t num_drain = calc_num_pre_drain();
-    m_e_charge_drain = m_tech_param_ptr->calc_draincap(m_pre_size, TechParameter::PCH, 1)*num_drain*e_factor;
-
-    // static power
-    double PMOS_TAB_0 = m_tech_param_ptr->get_PMOS_TAB(0);
-    m_i_static = num_gate*m_pre_size*PMOS_TAB_0;
-}
-
-uint32_t PrechargeUnit::calc_num_pre_gate()
-{
-    switch(m_pre_model)
-    {
-        case SINGLE_BITLINE: return 2;
-        case EQU_BITLINE:    return 3;
-        case SINGLE_OTHER:   return 1;
-        default: fatal("Incorrect Precharge Unit model.\n");
-    }
-}
-
-uint32_t PrechargeUnit::calc_num_pre_drain()
-{
-    switch(m_pre_model)
-    {
-        case SINGLE_BITLINE: return 1;
-        case EQU_BITLINE:    return 2;
-        case SINGLE_OTHER:   return 1;
-        default: fatal("Incorrect Precharge Unit model.\n");
-    }
-}
-
-double PrechargeUnit::calc_pre_cap(double width_, double length_)
-{
-    return m_tech_param_ptr->calc_gatecap(width_, length_);
-}
-
diff --git a/src/mem/ruby/network/orion/Buffer/PrechargeUnit.hh b/src/mem/ruby/network/orion/Buffer/PrechargeUnit.hh
deleted file mode 100644 (file)
index 533e61a..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#ifndef __PRECHARGEUNIT_H__
-#define __PRECHARGEUNIT_H__
-
-#include "mem/ruby/network/orion/Type.hh"
-
-class SRAM;
-class TechParameter;
-
-class PrechargeUnit
-{
-  public:
-    enum PrechargeModel
-    {
-      NO_MODEL = 0,
-      SINGLE_BITLINE,
-      EQU_BITLINE,
-      SINGLE_OTHER
-    };
-
-  public:
-    PrechargeUnit(
-      const string& pre_model_str_,
-      double pre_load_,
-      const SRAM* sram_ptr_,
-      const TechParameter* tech_param_ptr_
-    );
-    ~PrechargeUnit();
-
-  public:
-    double get_e_charge_gate() const { return m_e_charge_gate; }
-    double get_e_charge_drain() const { return m_e_charge_drain; }
-    double get_i_static() const { return m_i_static; }
-
-  private:
-    void init();
-    uint32_t calc_num_pre_gate();
-    uint32_t calc_num_pre_drain();
-    double calc_pre_cap(double width_, double length_);
-
-  private:
-    PrechargeModel m_pre_model;
-    double m_pre_load;
-    const SRAM* m_sram_ptr;
-    const TechParameter* m_tech_param_ptr;
-
-    double m_pre_size;
-
-    double m_e_charge_gate;
-    double m_e_charge_drain;
-
-    double m_i_static;
-};
-
-#endif
-
diff --git a/src/mem/ruby/network/orion/Buffer/Register.cc b/src/mem/ruby/network/orion/Buffer/Register.cc
deleted file mode 100644 (file)
index 5593dbb..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#include <cassert>
-#include <iostream>
-
-#include "mem/ruby/network/orion/Buffer/Register.hh"
-#include "mem/ruby/network/orion/FlipFlop.hh"
-#include "mem/ruby/network/orion/TechParameter.hh"
-
-using namespace std;
-
-Register::Register(
-        uint32_t num_entry_, 
-        uint32_t line_width_, 
-        const TechParameter *tech_param_ptr_
-        )
-{
-    assert(num_entry_ == num_entry_);
-    assert(line_width_ == line_width_);
-
-    m_num_entry = num_entry_;
-    m_line_width = line_width_;
-    m_tech_param_ptr = tech_param_ptr_;
-
-    init();
-}
-
-Register::~Register()
-{
-    delete m_ff_ptr;
-}
-
-double Register::calc_e_read() const
-{
-    // average read energy for one buffer entry
-    double e_read = 0;
-
-
-    // for each read operation, the energy consists of one read operation and n write
-    // operateion. n means there is n flits in the buffer before read operation.
-    // assume n is info->n_entry * 0.25.
-    // 
-    if (m_num_entry > 1)
-    {
-        e_read = (m_avg_read + m_num_entry*0.25*m_avg_write);
-    }
-    else
-    {
-        e_read = m_avg_read;
-    }
-    return e_read;
-}
-
-double Register::calc_e_write() const
-{
-    // average write energy for one buffer entry
-    double e_write = 0;
-
-    e_write = m_avg_write;
-    return e_write;
-}
-
-double Register::calc_i_static() const
-{
-    double i_static = m_ff_ptr->get_i_static()*m_line_width*m_num_entry;
-
-    return i_static;
-}
-
-void Register::init()
-{
-    m_ff_ptr = new FlipFlop("NEG_DFF", 0, m_tech_param_ptr);
-
-    uint32_t num_clock = m_line_width;
-    m_avg_read = m_ff_ptr->get_e_clock()*((double)num_clock)/2.0;
-
-    double num_switch = m_line_width/2.0;
-    m_avg_write = m_ff_ptr->get_e_switch()*num_switch+m_ff_ptr->get_e_clock()*num_clock;
-    return;
-}
diff --git a/src/mem/ruby/network/orion/Buffer/Register.hh b/src/mem/ruby/network/orion/Buffer/Register.hh
deleted file mode 100644 (file)
index d68dd51..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#ifndef __REGISTER_H__
-#define __REGISTER_H__
-
-#include "mem/ruby/network/orion/Type.hh"
-
-class TechParameter;
-class FlipFlop;
-
-class Register
-{
-  public:
-    Register(
-      uint32_t num_entry_,
-      uint32_t line_width_,
-      const TechParameter* tech_param_ptr_
-    );
-    ~Register();
-
-  public:
-    double calc_e_read() const;
-    double calc_e_write() const;
-    double calc_i_static() const;
-
-  private:
-    void init();
-
-  private:
-    uint32_t m_num_entry;
-    uint32_t m_line_width;
-    const TechParameter* m_tech_param_ptr;
-
-    FlipFlop* m_ff_ptr;
-
-    double m_avg_read;
-    double m_avg_write;
-};
-
-#endif
diff --git a/src/mem/ruby/network/orion/Buffer/SConscript b/src/mem/ruby/network/orion/Buffer/SConscript
deleted file mode 100644 (file)
index 20e528c..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-# Copyright (c) 2010 Massachusetts Institute of Technology
-# 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.
-#
-# Authors: Tushar Krishna
-
-Import('*')
-
-if env['PROTOCOL'] == 'None':
-    Return()
-
-Source('AmpUnit.cc')
-Source('BitlineUnit.cc')
-Source('Buffer.cc')
-Source('DecoderUnit.cc')
-Source('MemUnit.cc')
-Source('OutdrvUnit.cc')
-Source('PrechargeUnit.cc')
-Source('Register.cc')
-Source('SRAM.cc')
-Source('WordlineUnit.cc')
diff --git a/src/mem/ruby/network/orion/Buffer/SRAM.cc b/src/mem/ruby/network/orion/Buffer/SRAM.cc
deleted file mode 100644 (file)
index f2e580f..0000000
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#include <cassert>
-#include <cmath>
-#include <iostream>
-
-#include "mem/ruby/network/orion/Buffer/AmpUnit.hh"
-#include "mem/ruby/network/orion/Buffer/BitlineUnit.hh"
-#include "mem/ruby/network/orion/Buffer/DecoderUnit.hh"
-#include "mem/ruby/network/orion/Buffer/MemUnit.hh"
-#include "mem/ruby/network/orion/Buffer/OutdrvUnit.hh"
-#include "mem/ruby/network/orion/Buffer/PrechargeUnit.hh"
-#include "mem/ruby/network/orion/Buffer/SRAM.hh"
-#include "mem/ruby/network/orion/Buffer/WordlineUnit.hh"
-
-using namespace std;
-
-SRAM::SRAM(
-        uint32_t num_entry_,
-        uint32_t line_width_,
-        bool is_fifo_,
-        bool is_outdrv_,
-        uint32_t num_read_port_,
-        uint32_t num_write_port_,
-        uint32_t num_data_end_,
-        const string& rowdec_model_str_,
-        const string& wl_model_str_,
-        const string& bl_pre_model_str_,
-        const string& mem_model_str_,
-        const string& bl_model_str_,
-        const string& amp_model_str_,
-        const string& outdrv_model_str_,
-        const TechParameter* tech_param_ptr_
-        )
-{
-    assert(num_entry_ == num_entry_);
-    assert(line_width_ == line_width_);
-    assert(num_read_port_ == num_read_port_);
-    assert(num_write_port_ == num_write_port_);
-    assert(num_data_end_ == num_data_end_);
-
-    m_num_entry = num_entry_;
-    m_line_width = line_width_;
-    m_is_fifo = is_fifo_;
-    m_is_outdrv = is_outdrv_;
-
-    m_num_read_port = num_read_port_;
-    m_num_write_port = num_write_port_;
-    m_num_data_end = num_data_end_;
-
-    m_rowdec_model_str =  rowdec_model_str_;
-    m_wl_model_str = wl_model_str_;
-    m_bl_pre_model_str = bl_pre_model_str_;
-    m_mem_model_str = mem_model_str_;
-    m_bl_model_str = bl_model_str_;
-    m_amp_model_str = amp_model_str_;
-    m_outdrv_model_str = outdrv_model_str_;
-    m_tech_param_ptr = tech_param_ptr_;
-
-    init();
-}
-
-SRAM::~SRAM()
-{
-    delete m_outdrv_unit_ptr;
-    delete m_amp_unit_ptr;
-    delete m_bl_unit_ptr;
-    delete m_mem_unit_ptr;
-    delete m_bl_pre_unit_ptr;
-    delete m_wl_unit_ptr;
-    delete m_rowdec_unit_ptr;
-}
-
-double SRAM::calc_e_read(
-        bool is_max_
-        ) const
-{
-    double e_atomic;
-    double e_read = 0;
-
-    // decoder
-    if (m_rowdec_unit_ptr != NULL)
-    {
-        e_atomic = m_rowdec_unit_ptr->get_e_chg_addr()*m_rowdec_unit_ptr->get_dec_width()*(is_max_? 1:0.5);
-        e_atomic += m_rowdec_unit_ptr->get_e_chg_output();
-        // assume all 1st-level decoders change output
-        e_atomic += m_rowdec_unit_ptr->get_e_chg_l1()*m_rowdec_unit_ptr->get_num_in_2nd();
-        e_read += e_atomic;
-    }
-
-    //wordline
-    e_atomic = m_wl_unit_ptr->get_e_read();
-    e_read += e_atomic;
-
-    //bitline pre
-    e_atomic = m_bl_pre_unit_ptr->get_e_charge_gate()*m_line_width;
-    if (m_num_data_end == 2)
-    {
-        e_atomic += m_bl_pre_unit_ptr->get_e_charge_drain()*m_line_width;
-    }
-    else
-    {
-        e_atomic += m_bl_pre_unit_ptr->get_e_charge_drain()*m_line_width*(is_max_? 1:0.5);
-    }
-    e_read += e_atomic;
-
-    //bitline
-    if (m_num_data_end == 2)
-    {
-        e_atomic = m_bl_unit_ptr->get_e_col_read()*m_line_width;
-    }
-    else
-    {
-        e_atomic = m_bl_unit_ptr->get_e_col_read()*m_line_width*(is_max_? 1:0.5);
-    }
-    e_read += e_atomic;
-
-    if (m_num_data_end == 2)
-    {
-        e_atomic = m_amp_unit_ptr->get_e_access()*m_line_width;
-        e_read += e_atomic;
-    }
-
-    if (m_outdrv_unit_ptr != NULL)
-    {
-        e_atomic = m_outdrv_unit_ptr->get_e_select();
-
-        e_atomic += m_outdrv_unit_ptr->get_e_chg_data()*m_line_width*(is_max_? 1:0.5);
-
-        //assume 1 and 0 are uniformly distributed
-        if ((m_outdrv_unit_ptr->get_e_out_1() >= m_outdrv_unit_ptr->get_e_out_0()) || (!is_max_))
-        {
-            e_atomic += m_outdrv_unit_ptr->get_e_out_1()*m_line_width*(is_max_? 1:0.5);
-        }
-        if ((m_outdrv_unit_ptr->get_e_out_1() < m_outdrv_unit_ptr->get_e_out_0()) || (!is_max_))
-        {
-            e_atomic += m_outdrv_unit_ptr->get_e_out_0()*m_line_width*(is_max_? 1:0.5);
-        }
-
-        e_read += e_atomic;
-    }
-
-    return e_read;
-}
-
-double SRAM::calc_e_write(
-        bool is_max_
-        ) const
-{
-    double e_atomic;
-    double e_write = 0;
-
-    // decoder
-    if (m_rowdec_unit_ptr != NULL)
-    {
-        e_atomic = m_rowdec_unit_ptr->get_e_chg_addr()*m_rowdec_unit_ptr->get_dec_width()*(is_max_? 1:0.5);
-        e_atomic += m_rowdec_unit_ptr->get_e_chg_output();
-        // assume all 1st-level decoders change output
-        e_atomic += m_rowdec_unit_ptr->get_e_chg_l1()*m_rowdec_unit_ptr->get_num_in_2nd();
-        e_write += e_atomic;
-    }
-
-    //wordline
-    e_atomic = m_wl_unit_ptr->get_e_write();
-    e_write += e_atomic;
-
-    //bitline
-    e_atomic = m_bl_unit_ptr->get_e_col_wrtie()*m_line_width*(is_max_? 1:0.5);
-    e_write += e_atomic;
-
-    //mem cell
-    e_atomic = m_mem_unit_ptr->get_e_switch()*m_line_width*(is_max_? 1:0.5);
-    e_write += e_atomic;
-
-    return e_write;
-}
-
-double SRAM::calc_i_static() const
-{
-    double i_static = 0;
-
-    i_static += m_bl_unit_ptr->get_i_static()*m_line_width*m_num_write_port;
-    i_static += m_mem_unit_ptr->get_i_static()*m_num_entry*m_line_width;
-    i_static += m_bl_pre_unit_ptr->get_i_static()*m_line_width*m_num_read_port;
-    i_static += m_wl_unit_ptr->get_i_static()*m_num_entry*(m_num_read_port+m_num_write_port);
-
-    return i_static;
-}
-
-void SRAM::init()
-{
-    // output driver unit
-    if (m_is_outdrv)
-    {
-        m_outdrv_unit_ptr = new OutdrvUnit(m_outdrv_model_str, this, m_tech_param_ptr);
-    }
-    else
-    {
-        m_outdrv_unit_ptr = NULL;
-    }
-
-    // sense amplifier unit
-    if (m_num_data_end == 2)
-    {
-        m_amp_unit_ptr = new AmpUnit(m_amp_model_str, m_tech_param_ptr);
-    }
-    else
-    {
-        m_amp_unit_ptr = NULL;
-    }
-
-    // bitline unit
-    m_bl_unit_ptr = new BitlineUnit(m_bl_model_str, this, m_tech_param_ptr);
-
-    // mem unit
-    m_mem_unit_ptr = new MemUnit(m_mem_model_str, this, m_tech_param_ptr);
-
-    // precharge unit
-    double bl_pre_unit_load = m_bl_unit_ptr->get_pre_unit_load();
-    m_bl_pre_unit_ptr = new PrechargeUnit(m_bl_pre_model_str, bl_pre_unit_load, this, m_tech_param_ptr);
-
-    // wordline unit
-    m_wl_unit_ptr = new WordlineUnit(m_wl_model_str, this, m_tech_param_ptr);
-
-    // decode unit
-    if (!m_is_fifo)
-    {
-        m_rowdec_width = (uint32_t)log2((double)m_num_entry);
-        m_rowdec_unit_ptr = new DecoderUnit(m_rowdec_model_str, m_rowdec_width, m_tech_param_ptr);
-    }
-    else
-    {
-        m_rowdec_unit_ptr = NULL;
-    }
-    return;
-}
-
-
diff --git a/src/mem/ruby/network/orion/Buffer/SRAM.hh b/src/mem/ruby/network/orion/Buffer/SRAM.hh
deleted file mode 100644 (file)
index ad6b1fd..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#ifndef __SRAM_H__
-#define __SRAM_H__
-
-#include "mem/ruby/network/orion/OrionConfig.hh"
-#include "mem/ruby/network/orion/TechParameter.hh"
-#include "mem/ruby/network/orion/Type.hh"
-
-class OutdrvUnit;
-class AmpUnit;
-class BitlineUnit;
-class MemUnit;
-class PrechargeUnit;
-class WordlineUnit;
-class DecoderUnit;
-
-class SRAM
-{
-  public:
-    SRAM(
-      uint32_t num_entry_,
-      uint32_t line_width_,
-      bool is_fifo_,
-      bool is_outdrv_,
-      uint32_t num_read_port_,
-      uint32_t num_write_port_,
-      uint32_t num_data_end_,
-      const string& rowdec_model_str_,
-      const string& wl_model_str_,
-      const string& bl_pre_model_str_,
-      const string& mem_model_str_,
-      const string& bl_model_str_,
-      const string& amp_model_str_,
-      const string& outdrv_model_str_,
-      const TechParameter* tech_param_ptr_
-    );
-    ~SRAM();
-
-  public:
-    uint32_t get_line_width() const { return m_line_width; }
-    uint32_t get_num_data_end() const { return m_num_data_end; }
-    uint32_t get_num_read_port() const { return m_num_read_port; }
-    uint32_t get_num_write_port() const { return m_num_write_port; }
-    uint32_t get_num_port() const { return (m_num_read_port+m_num_write_port); }
-    bool get_is_outdrv() const { return m_is_outdrv; }
-    uint32_t get_num_row() const { return m_num_entry; }
-    uint32_t get_num_col() const { return m_line_width; }
-
-    double calc_e_read(bool is_max_) const;
-    double calc_e_write(bool is_max_) const;
-    double calc_i_static() const;
-
-  private:
-    void init();
-
-  private:
-    uint32_t m_num_entry;
-    uint32_t m_line_width;
-    bool m_is_fifo;
-    bool m_is_outdrv;
-    string m_rowdec_model_str;
-    string m_wl_model_str;
-    string m_bl_pre_model_str;
-    string m_mem_model_str;
-    string m_bl_model_str;
-    string m_amp_model_str;
-    string m_outdrv_model_str;
-    const TechParameter* m_tech_param_ptr;
-
-    OutdrvUnit* m_outdrv_unit_ptr;
-    AmpUnit* m_amp_unit_ptr;
-    BitlineUnit* m_bl_unit_ptr;
-    MemUnit* m_mem_unit_ptr;
-    PrechargeUnit* m_bl_pre_unit_ptr;
-    WordlineUnit* m_wl_unit_ptr;
-    DecoderUnit* m_rowdec_unit_ptr;
-
-    uint32_t m_num_read_port;
-    uint32_t m_num_write_port;
-    uint32_t m_num_data_end;
-
-    uint32_t m_rowdec_width;
-};
-
-#endif
-
diff --git a/src/mem/ruby/network/orion/Buffer/WordlineUnit.cc b/src/mem/ruby/network/orion/Buffer/WordlineUnit.cc
deleted file mode 100644 (file)
index 8875d16..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#include "base/misc.hh"
-#include "mem/ruby/network/orion/Buffer/SRAM.hh"
-#include "mem/ruby/network/orion/Buffer/WordlineUnit.hh"
-#include "mem/ruby/network/orion/TechParameter.hh"
-
-WordlineUnit::WordlineUnit(
-        const string& wl_model_str_,
-        const SRAM* sram_ptr_,
-        const TechParameter* tech_param_ptr_
-        )
-{
-    if (wl_model_str_ == string("RW_WORDLINE"))
-    {
-        m_wl_model = RW_WORDLINE;
-    }
-    else if (wl_model_str_ == string("WO_WORDLINE"))
-    {
-        m_wl_model = WO_WORDLINE;
-    }
-    else 
-    {
-        m_wl_model = NO_MODEL;
-    }
-
-    if (m_wl_model != NO_MODEL)
-    {
-        m_sram_ptr = sram_ptr_;
-        m_tech_param_ptr = tech_param_ptr_;
-
-        init();
-    }
-}
-
-WordlineUnit::~WordlineUnit()
-{}
-
-void WordlineUnit::init()
-{
-    uint32_t num_port = m_sram_ptr->get_num_port();
-    uint32_t num_read_port = m_sram_ptr->get_num_read_port();
-    uint32_t num_col = m_sram_ptr->get_num_col();
-    uint32_t num_data_end = m_sram_ptr->get_num_data_end();
-    double RegCellWidth = m_tech_param_ptr->get_RegCellWidth();
-    double BitlineSpacing = m_tech_param_ptr->get_BitlineSpacing();
-
-    if (num_data_end == 2)
-    {
-        m_wl_len = num_col*(RegCellWidth + 2*num_port*BitlineSpacing);
-    }
-    else
-    {
-        m_wl_len = num_col*(RegCellWidth + (2*num_port-num_read_port)*BitlineSpacing);
-    }
-
-    double wl_cmetal;
-    if (num_port > 1)
-    {
-        wl_cmetal = m_tech_param_ptr->get_CC3M3metal();
-    }
-    else
-    {
-        wl_cmetal = m_tech_param_ptr->get_CM3metal();
-    }
-
-    m_wl_wire_cap = m_wl_len*wl_cmetal;
-
-    double e_factor = m_tech_param_ptr->get_EnergyFactor();
-    double Wmemcellr = m_tech_param_ptr->get_Wmemcellr();
-    double Wmemcellw = m_tech_param_ptr->get_Wmemcellw();
-    double Woutdrivern = m_tech_param_ptr->get_Woutdrivern();
-    double Woutdriverp = m_tech_param_ptr->get_Woutdriverp();
-    double NMOS_TAB_0 = m_tech_param_ptr->get_NMOS_TAB(0);
-    double PMOS_TAB_0 = m_tech_param_ptr->get_PMOS_TAB(0);
-    switch(m_wl_model)
-    {
-        case RW_WORDLINE:
-            m_e_read = calc_wordline_cap(num_col*num_data_end, Wmemcellr) * e_factor;
-            m_e_write = calc_wordline_cap(num_col*2, Wmemcellw) * e_factor;
-            m_i_static = (Woutdrivern*NMOS_TAB_0 + Woutdriverp*PMOS_TAB_0);
-            break;
-        case WO_WORDLINE:
-            m_e_read = 0;
-            m_e_write = calc_wordline_cap(num_col*2, Wmemcellw)*e_factor;
-            m_i_static = 0;
-            break;
-        default:
-            fatal("Incorrect Wordline model.\n");
-    }
-    return;
-}
-
-double WordlineUnit::calc_wordline_cap(
-        uint32_t num_mos_,
-        double mos_width_
-        ) const
-{
-    double total_cap;
-
-    // part 1: line cap, including gate cap of pass tx's and metal cap
-    double BitWidth = m_tech_param_ptr->get_BitWidth();
-    total_cap = m_tech_param_ptr->calc_gatecappass(mos_width_, BitWidth/2.0-mos_width_)*num_mos_ + m_wl_wire_cap;
-
-    // part 2: input driver
-    double period = m_tech_param_ptr->get_period();
-    double psize, nsize;
-    psize = m_tech_param_ptr->calc_driver_psize(total_cap, period/16.0);
-    double Wdecinvn = m_tech_param_ptr->get_Wdecinvn();
-    double Wdecinvp = m_tech_param_ptr->get_Wdecinvp();
-    nsize = psize*Wdecinvn/Wdecinvp;
-
-    // WHS: 20 should go to PARM
-    total_cap += m_tech_param_ptr->calc_draincap(nsize, TechParameter::NCH, 1) + m_tech_param_ptr->calc_draincap(psize, TechParameter::PCH, 1) + m_tech_param_ptr->calc_gatecap(psize+nsize, 20);
-
-    return total_cap;
-}
-
diff --git a/src/mem/ruby/network/orion/Buffer/WordlineUnit.hh b/src/mem/ruby/network/orion/Buffer/WordlineUnit.hh
deleted file mode 100644 (file)
index df62295..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#ifndef __WORDLINEUNIT_H__
-#define __WORDLINEUNIT_H__
-
-#include "mem/ruby/network/orion/Type.hh"
-
-class SRAM;
-class TechParameter;
-
-class WordlineUnit
-{
-  public:
-    enum WordlineModel
-    {
-      NO_MODEL = 0,
-      RW_WORDLINE,
-      WO_WORDLINE
-    };
-
-  public:
-    WordlineUnit(
-      const string& wl_model_str_,
-      const SRAM* sram_ptr_,
-      const TechParameter* tech_param_ptr_
-    );
-    ~WordlineUnit();
-
-  public:
-    double get_e_read() const { return m_e_read; }
-    double get_e_write() const { return m_e_write; }
-    double get_i_static() const { return m_i_static; }
-
-  private:
-    void init();
-    double calc_wordline_cap(uint32_t num_mos_, double mos_width_) const;
-    double calc_i_static();
-
-  private:
-    WordlineModel m_wl_model;
-    const SRAM* m_sram_ptr;
-    const TechParameter* m_tech_param_ptr;
-
-    double m_wl_len;
-    double m_wl_wire_cap;
-
-    double m_e_read;
-    double m_e_write;
-
-    double m_i_static;
-};
-
-#endif
-
diff --git a/src/mem/ruby/network/orion/Clock.cc b/src/mem/ruby/network/orion/Clock.cc
deleted file mode 100644 (file)
index fda18cd..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#include "mem/ruby/network/orion/Clock.hh"
-#include "mem/ruby/network/orion/OrionConfig.hh"
-#include "mem/ruby/network/orion/TechParameter.hh"
-#include "mem/ruby/network/orion/Wire.hh"
-
-Clock::Clock(
-        bool is_in_buf_,
-        bool is_in_shared_switch_,
-        bool is_out_buf_,
-        bool is_out_shared_switch_,
-        const OrionConfig* orion_cfg_ptr_
-        )
-{
-    m_is_in_buf = is_in_buf_;
-    m_is_in_shared_switch = is_in_shared_switch_;
-    m_is_out_buf = is_out_buf_;
-    m_is_out_shared_switch = is_out_shared_switch_;
-    m_orion_cfg_ptr = orion_cfg_ptr_;
-
-    init();
-}
-
-Clock::~Clock()
-{}
-
-double Clock::get_dynamic_energy() const
-{
-    return (m_e_pipe_reg + m_e_htree);
-}
-
-double Clock::get_static_power() const
-{
-    double vdd = m_tech_param_ptr->get_vdd();
-    return (m_i_static*vdd);
-}
-
-void Clock::init()
-{
-    m_tech_param_ptr = m_orion_cfg_ptr->get_tech_param_ptr();
-
-    double e_factor = m_tech_param_ptr->get_EnergyFactor();
-
-    // Pipeline registers capacitive load on clock network
-    uint32_t num_in_port = m_orion_cfg_ptr->get_num_in_port();
-    uint32_t num_out_port = m_orion_cfg_ptr->get_num_out_port();
-    uint32_t num_vclass = m_orion_cfg_ptr->get_num_vclass();
-    uint32_t num_vchannel = m_orion_cfg_ptr->get_num_vchannel();
-    uint32_t flit_width = m_orion_cfg_ptr->get_flit_width();
-
-    uint32_t num_pipe_reg = 0;
-
-    // pipeline registers after the link traversal stage
-    num_pipe_reg += num_in_port*flit_width;
-
-    // pipeline registers for input buffer
-    if (m_is_in_buf)
-    {
-        if (m_is_in_shared_switch)
-        {
-            num_pipe_reg += num_in_port*flit_width;
-        }
-        else
-        {
-            num_pipe_reg += num_in_port*num_vclass*num_vchannel*flit_width;
-        }
-    }
-
-    // pipeline registers for crossbar
-    if (m_is_out_shared_switch)
-    {
-        num_pipe_reg += num_out_port*flit_width;
-    }
-    else
-    {
-        num_pipe_reg += num_out_port*num_vclass*num_vchannel*flit_width;
-    }
-
-    // pipeline registers for output buffer
-    if (m_is_out_buf) // assume output buffers share links
-    {
-        num_pipe_reg += num_out_port*flit_width;
-    }
-
-    double cap_clock = m_tech_param_ptr->get_ClockCap();
-    m_e_pipe_reg = num_pipe_reg*cap_clock*e_factor;
-
-    //========================H_tree wiring load ========================*/
-    // The 1e-6 factor is to convert the "router_diagonal" back to meters.
-    // To be consistent we use micro-meters unit for our inputs, but 
-    // the functions, internally, use meters. */
-
-    double i_static_nmos = 0;
-    double i_static_pmos = 0;
-
-    bool is_htree = m_orion_cfg_ptr->get<bool>("IS_HTREE_CLOCK");
-    if(is_htree)
-    {
-        const string& width_spacing_model_str = m_orion_cfg_ptr->get<string>("WIRE_WIDTH_SPACING");
-        const string& buf_scheme_str = m_orion_cfg_ptr->get<string>("WIRE_BUFFERING_MODEL");
-        bool is_shielding = m_orion_cfg_ptr->get<bool>("WIRE_IS_SHIELDING");
-        Wire wire(width_spacing_model_str, buf_scheme_str, is_shielding, m_tech_param_ptr);
-
-        double router_diagonal = m_orion_cfg_ptr->get<double>("ROUTER_DIAGONAL");
-        double Clockwire = m_tech_param_ptr->get_ClockCap();
-
-        double htree_clockcap;
-        int k;
-        double h;
-
-        double BufferNMOSOffCurrent = m_tech_param_ptr->get_BufferNMOSOffCurrent();
-        double BufferPMOSOffCurrent = m_tech_param_ptr->get_BufferPMOSOffCurrent();
-
-        if (m_tech_param_ptr->is_trans_type_hvt() || m_tech_param_ptr->is_trans_type_nvt())
-        {
-            htree_clockcap = (4+4+2+2)*(router_diagonal*1e-6)*Clockwire;
-
-            wire.calc_opt_buffering(&k, &h, ((4+4+2+2)*router_diagonal*1e-6));
-            i_static_nmos = BufferNMOSOffCurrent*h*k*15;
-            i_static_pmos = BufferPMOSOffCurrent*h*k*15;
-        }
-        else
-        {
-            htree_clockcap = (8+4+4+4+4)*(router_diagonal*1e-6)*Clockwire;
-
-            wire.calc_opt_buffering(&k, &h, ((4+4+2+2)*router_diagonal*1e-6));  
-            i_static_nmos = BufferNMOSOffCurrent*h*k*29;
-            i_static_pmos = BufferPMOSOffCurrent*h*k*15;
-        }
-
-        m_e_htree = (htree_clockcap+cap_clock)*e_factor;
-    }
-    else
-    {
-        m_e_htree = 0;
-    }
-
-    double SCALE_S = m_tech_param_ptr->get_SCALE_S();
-    double DFF_TAB_0 = m_tech_param_ptr->get_DFF_TAB(0);
-    double Wdff = m_tech_param_ptr->get_Wdff();
-    m_i_static = (((i_static_nmos+i_static_pmos)/2)/SCALE_S + (num_pipe_reg*DFF_TAB_0*Wdff));
-}
diff --git a/src/mem/ruby/network/orion/Clock.hh b/src/mem/ruby/network/orion/Clock.hh
deleted file mode 100644 (file)
index bf39ecf..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#ifndef __CLOCK_H__
-#define __CLOCK_H__
-
-#include "mem/ruby/network/orion/Type.hh"
-
-class TechParameter;
-class OrionConfig;
-
-class Clock
-{
-  public:
-    Clock(
-      bool is_in_buf_,
-      bool is_in_shared_switch_,
-      bool is_out_buf_,
-      bool is_out_shared_switch_,
-      const OrionConfig* orion_cfg_ptr_
-    );
-    ~Clock();
-
-  public:
-    double get_dynamic_energy() const;
-    double get_static_power() const;
-
-  private:
-    void init();
-    double calc_cap_pipe_reg();
-
-  private:
-    bool m_is_in_buf;
-    bool m_is_in_shared_switch;
-    bool m_is_out_buf;
-    bool m_is_out_shared_switch;
-    const OrionConfig* m_orion_cfg_ptr;
-    const TechParameter* m_tech_param_ptr;
-
-    double m_e_pipe_reg;
-    double m_e_htree;
-    double m_i_static;
-};
-
-#endif
diff --git a/src/mem/ruby/network/orion/ConfigFile.cc b/src/mem/ruby/network/orion/ConfigFile.cc
deleted file mode 100644 (file)
index 33566ac..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * Copyright (c) 2010 Massachusetts Institute of Technology
- * 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.
- *
- * Authors: Chia-Hsin Owen Chen
- */
-
-#include "mem/ruby/network/orion/ConfigFile.hh"
-
-using std::string;
-
-ConfigFile::ConfigFile( string filename, string delimiter,
-                        string comment, string sentry )
-       : myDelimiter(delimiter), myComment(comment), mySentry(sentry)
-{
-    // Construct a ConfigFile, getting keys and values from given file
-
-    std::ifstream in( filename.c_str() );
-
-    if( !in ) throw file_not_found( filename ); 
-
-    in >> (*this);
-}
-
-
-ConfigFile::ConfigFile()
-    : myDelimiter( string(1,'=') ), myComment( string(1,'#') )
-{
-    // Construct a ConfigFile without a file; empty
-}
-
-
-void ConfigFile::remove( const string& key )
-{
-    // Remove key and its value
-    myContents.erase( myContents.find( key ) );
-    return;
-}
-
-
-bool ConfigFile::keyExists( const string& key ) const
-{
-    // Indicate whether key is found
-    mapci p = myContents.find( key );
-    return ( p != myContents.end() );
-}
-
-
-/* static */
-void ConfigFile::trim( string& s )
-{
-    // Remove leading and trailing whitespace
-    static const char whitespace[] = " \n\t\v\r\f";
-    s.erase( 0, s.find_first_not_of(whitespace) );
-    s.erase( s.find_last_not_of(whitespace) + 1U );
-}
-
-
-std::ostream& operator<<( std::ostream& os, const ConfigFile& cf )
-{
-    // Save a ConfigFile to os
-    for( ConfigFile::mapci p = cf.myContents.begin();
-            p != cf.myContents.end();
-            ++p )
-    {
-        os << p->first << " " << cf.myDelimiter << " ";
-        os << p->second << std::endl;
-    }
-    return os;
-}
-
-
-std::istream& operator>>( std::istream& is, ConfigFile& cf )
-{
-    // Load a ConfigFile from is
-    // Read in keys and values, keeping internal whitespace
-    typedef string::size_type pos;
-    const string& delim  = cf.myDelimiter;  // separator
-    const string& comm   = cf.myComment;    // comment
-    const string& sentry = cf.mySentry;     // end of file sentry
-    const pos skip = delim.length();        // length of separator
-
-    string nextline = "";  // might need to read ahead to see where value ends
-
-    while( is || nextline.length() > 0 )
-    {
-        // Read an entire line at a time
-        string line;
-        if( nextline.length() > 0 )
-        {
-            line = nextline;  // we read ahead; use it now
-            nextline = "";
-        }
-        else
-        {
-            std::getline( is, line );
-        }
-
-        // Ignore comments
-        line = line.substr( 0, line.find(comm) );
-
-        // Check for end of file sentry
-        if( sentry != "" && line.find(sentry) != string::npos ) return is;
-
-        // Parse the line if it contains a delimiter
-        pos delimPos = line.find( delim );
-        if( delimPos < string::npos )
-        {
-            // Extract the key
-            string key = line.substr( 0, delimPos );
-            line.replace( 0, delimPos+skip, "" );
-
-            // See if value continues on the next line
-            // Stop at blank line, next line with a key, end of stream,
-            // or end of file sentry
-            bool terminate = false;
-            while( !terminate && is )
-            {
-                std::getline( is, nextline );
-                terminate = true;
-
-                string nlcopy = nextline;
-                ConfigFile::trim(nlcopy);
-                if( nlcopy == "" ) continue;
-
-                nextline = nextline.substr( 0, nextline.find(comm) );
-                if( nextline.find(delim) != string::npos )
-                    continue;
-                if( sentry != "" && nextline.find(sentry) != string::npos )
-                    continue;
-
-                nlcopy = nextline;
-                ConfigFile::trim(nlcopy);
-                if( nlcopy != "" ) line += "\n";
-                line += nextline;
-                terminate = false;
-            }
-
-            // Store key and value
-            ConfigFile::trim(key);
-            ConfigFile::trim(line);
-            cf.myContents[key] = line;  // overwrites if key is repeated
-        }
-    }
-
-    return is;
-}
diff --git a/src/mem/ruby/network/orion/ConfigFile.hh b/src/mem/ruby/network/orion/ConfigFile.hh
deleted file mode 100644 (file)
index b159bba..0000000
+++ /dev/null
@@ -1,252 +0,0 @@
-// Class for reading named values from configuration files
-// Richard J. Wagner  v2.1  24 May 2004  wagnerr@umich.edu
-
-// Copyright (c) 2004 Richard J. Wagner
-// 
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to
-// deal in the Software without restriction, including without limitation the
-// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-// sell copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-// 
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-// IN THE SOFTWARE.
-
-// Typical usage
-// -------------
-// 
-// Given a configuration file "settings.inp":
-//   atoms  = 25
-//   length = 8.0  # nanometers
-//   name = Reece Surcher
-// 
-// Named values are read in various ways, with or without default values:
-//   ConfigFile config( "settings.inp" );
-//   int atoms = config.read<int>( "atoms" );
-//   double length = config.read( "length", 10.0 );
-//   string author, title;
-//   config.readInto( author, "name" );
-//   config.readInto( title, "title", string("Untitled") );
-// 
-// See file example.cpp for more examples.
-
-#ifndef CONFIGFILE_H
-#define CONFIGFILE_H
-
-#include <fstream>
-#include <iostream>
-#include <map>
-#include <sstream>
-#include <string>
-
-using std::string;
-
-class ConfigFile {
-  // Data
-  protected:
-       string myDelimiter;  // separator between key and value
-       string myComment;    // separator between value and comments
-       string mySentry;     // optional string to signal end of file
-       std::map<string,string> myContents;  // extracted keys and values
-       
-       typedef std::map<string,string>::iterator mapi;
-       typedef std::map<string,string>::const_iterator mapci;
-
-  // Methods
-  public:
-       ConfigFile( string filename,
-                   string delimiter = "=",
-                   string comment = "#",
-                               string sentry = "EndConfigFile" );
-       ConfigFile();
-       
-       // Search for key and read value or optional default value
-       template<class T> T read( const string& key ) const;  // call as read<T>
-       template<class T> T read( const string& key, const T& value ) const;
-       template<class T> bool readInto( T& var, const string& key ) const;
-       template<class T>
-       bool readInto( T& var, const string& key, const T& value ) const;
-       
-       // Modify keys and values
-       template<class T> void add( string key, const T& value );
-       void remove( const string& key );
-       
-       // Check whether key exists in configuration
-       bool keyExists( const string& key ) const;
-       
-       // Check or change configuration syntax
-       string getDelimiter() const { return myDelimiter; }
-       string getComment() const { return myComment; }
-       string getSentry() const { return mySentry; }
-       string setDelimiter( const string& s )
-               { string old = myDelimiter;  myDelimiter = s;  return old; }  
-       string setComment( const string& s )
-               { string old = myComment;  myComment = s;  return old; }
-       
-       // Write or read configuration
-       friend std::ostream& operator<<( std::ostream& os, const ConfigFile& cf );
-       friend std::istream& operator>>( std::istream& is, ConfigFile& cf );
-       
-  protected:
-       template<class T> static string T_as_string( const T& t );
-       template<class T> static T string_as_T( const string& s );
-       static void trim( string& s );
-
-
-  // Exception types
-  public:
-       struct file_not_found {
-               string filename;
-               file_not_found( const string& filename_ = string() )
-                       : filename(filename_) {} };
-       struct key_not_found {  // thrown only by T read(key) variant of read()
-               string key;
-               key_not_found( const string& key_ = string() )
-                       : key(key_) {} };
-};
-
-
-/* static */
-template<class T>
-string ConfigFile::T_as_string( const T& t )
-{
-       // Convert from a T to a string
-       // Type T must support << operator
-       std::ostringstream ost;
-       ost << t;
-       return ost.str();
-}
-
-
-/* static */
-template<class T>
-T ConfigFile::string_as_T( const string& s )
-{
-       // Convert from a string to a T
-       // Type T must support >> operator
-       T t;
-       std::istringstream ist(s);
-       ist >> t;
-       return t;
-}
-
-
-/* static */
-template<>
-inline string ConfigFile::string_as_T<string>( const string& s )
-{
-       // Convert from a string to a string
-       // In other words, do nothing
-       return s;
-}
-
-
-/* static */
-template<>
-inline bool ConfigFile::string_as_T<bool>( const string& s )
-{
-       // Convert from a string to a bool
-       // Interpret "false", "F", "no", "n", "0" as false
-       // Interpret "true", "T", "yes", "y", "1", "-1", or anything else as true
-       bool b = true;
-       string sup = s;
-       for( string::iterator p = sup.begin(); p != sup.end(); ++p )
-               *p = toupper(*p);  // make string all caps
-       if( sup==string("FALSE") || sup==string("F") ||
-           sup==string("NO") || sup==string("N") ||
-           sup==string("0") || sup==string("NONE") )
-               b = false;
-       return b;
-}
-
-
-template<class T>
-T ConfigFile::read( const string& key ) const
-{
-       // Read the value corresponding to key
-       mapci p = myContents.find(key);
-       if( p == myContents.end() ) throw key_not_found(key);
-       return string_as_T<T>( p->second );
-}
-
-
-template<class T>
-T ConfigFile::read( const string& key, const T& value ) const
-{
-       // Return the value corresponding to key or given default value
-       // if key is not found
-       mapci p = myContents.find(key);
-       if( p == myContents.end() ) return value;
-       return string_as_T<T>( p->second );
-}
-
-
-template<class T>
-bool ConfigFile::readInto( T& var, const string& key ) const
-{
-       // Get the value corresponding to key and store in var
-       // Return true if key is found
-       // Otherwise leave var untouched
-       mapci p = myContents.find(key);
-       bool found = ( p != myContents.end() );
-       if( found ) var = string_as_T<T>( p->second );
-       return found;
-}
-
-
-template<class T>
-bool ConfigFile::readInto( T& var, const string& key, const T& value ) const
-{
-       // Get the value corresponding to key and store in var
-       // Return true if key is found
-       // Otherwise set var to given default
-       mapci p = myContents.find(key);
-       bool found = ( p != myContents.end() );
-       if( found )
-               var = string_as_T<T>( p->second );
-       else
-               var = value;
-       return found;
-}
-
-
-template<class T>
-void ConfigFile::add( string key, const T& value )
-{
-       // Add a key with given value
-       string v = T_as_string( value );
-       trim(key);
-       trim(v);
-       myContents[key] = v;
-       return;
-}
-
-#endif  // CONFIGFILE_H
-
-// Release notes:
-// v1.0  21 May 1999
-//   + First release
-//   + Template read() access only through non-member readConfigFile()
-//   + ConfigurationFileBool is only built-in helper class
-// 
-// v2.0  3 May 2002
-//   + Shortened name from ConfigurationFile to ConfigFile
-//   + Implemented template member functions
-//   + Changed default comment separator from % to #
-//   + Enabled reading of multiple-line values
-// 
-// v2.1  24 May 2004
-//   + Made template specializations inline to avoid compiler-dependent linkage
-//   + Allowed comments within multiple-line values
-//   + Enabled blank line termination for multiple-line values
-//   + Added optional sentry to detect end of configuration file
-//   + Rewrote messy trimWhitespace() function as elegant trim()
diff --git a/src/mem/ruby/network/orion/Crossbar/Crossbar.cc b/src/mem/ruby/network/orion/Crossbar/Crossbar.cc
deleted file mode 100644 (file)
index 5f0f220..0000000
+++ /dev/null
@@ -1,393 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#include <cassert>
-#include <iostream>
-
-#include "mem/ruby/network/orion/Crossbar/Crossbar.hh"
-#include "mem/ruby/network/orion/Crossbar/MatrixCrossbar.hh"
-#include "mem/ruby/network/orion/Crossbar/MultreeCrossbar.hh"
-#include "mem/ruby/network/orion/OrionConfig.hh"
-#include "mem/ruby/network/orion/TechParameter.hh"
-
-using namespace std;
-
-Crossbar::Crossbar(
-        CrossbarModel xbar_model_,
-        const string& conn_type_str_,
-        const string& trans_type_str_,
-        uint32_t num_in_,
-        uint32_t num_out_,
-        uint32_t data_width_,
-        uint32_t num_in_seg_,
-        uint32_t num_out_seg_,
-        uint32_t degree_,
-        const TechParameter* tech_param_ptr_
-        )
-{
-    m_xbar_model = xbar_model_;
-    if (m_xbar_model != NO_MODEL)
-    {
-        assert((num_in_ == num_in_) && (num_in_ != 0));
-        assert((num_out_ == num_out_) && (num_out_ != 0));
-        assert((data_width_ == data_width_) && (data_width_ != 0));
-        assert(num_in_seg_ == num_in_seg_);
-        assert(num_out_seg_ == num_out_seg_);
-
-        set_conn_type(conn_type_str_);
-        set_trans_type(trans_type_str_);
-        m_num_in = num_in_;
-        m_num_out = num_out_;
-        m_num_in_seg = num_in_seg_;
-        m_num_out_seg = num_out_seg_;
-        m_data_width = data_width_;
-        m_degree = degree_;
-        m_tech_param_ptr = tech_param_ptr_;
-    }
-    else
-    {
-        cerr << "ERROR at " << __FILE__ << " " << __LINE__ << endl;
-    }
-}
-
-Crossbar::~Crossbar()
-{}
-
-double Crossbar::get_static_power() const
-{
-    double vdd = m_tech_param_ptr->get_vdd();
-    double SCALE_S = m_tech_param_ptr->get_SCALE_S();
-    return (m_i_static*vdd*SCALE_S);
-}
-
-void Crossbar::print_all() const
-{
-    cout << "Crossbar" << endl;
-    cout << "\t" << "Traversal = " << get_dynamic_energy(false) << endl;
-    cout << "\t" << "Static power = " << get_static_power() << endl;
-    return;
-}
-
-void Crossbar::set_conn_type(const string& conn_type_str_)
-{
-    if (conn_type_str_ == string("TRANS_GATE"))
-    {
-        m_conn_type = TRANS_GATE;
-    }
-    else if (conn_type_str_ == string("TRISTATE_GATE"))
-    {
-        m_conn_type = TRISTATE_GATE;
-    }
-    else
-    {
-        cerr << "Invalid connect type: '" << conn_type_str_ << "'. Use TRANS_GATE as default." << endl;
-        m_conn_type = TRANS_GATE;
-    }
-    return;
-}
-
-void Crossbar::set_trans_type(const string& trans_type_str_)
-{
-    if (trans_type_str_ == string("NP_GATE"))
-    {
-        m_trans_type = NP_GATE;
-    }
-    else if (trans_type_str_ == string("N_GATE"))
-    {
-        m_trans_type = N_GATE;
-    }
-    else
-    {
-        cerr << "Invalid trans type: '" << trans_type_str_ << "'. Use N_GATE as default." << endl;
-        m_trans_type = N_GATE;
-    }
-}
-
-double Crossbar::calc_in_cap()
-{
-    double total_cap = 0;
-
-    // part 1: wire cap
-    total_cap += m_cap_in_wire;
-
-    double trans_cap = 0;
-    // part 2: drain cap of transmission gate or gate cap of tri-state gate
-    if (m_conn_type == TRANS_GATE)
-    {
-        //FIXME: resizing strategy
-        double Wmemcellr = m_tech_param_ptr->get_Wmemcellr();
-        double nsize = Wmemcellr;
-        double Wdecinvn = m_tech_param_ptr->get_Wdecinvn();
-        double Wdecinvp = m_tech_param_ptr->get_Wdecinvp();
-        double psize = nsize*Wdecinvp/Wdecinvn;
-        trans_cap = m_tech_param_ptr->calc_draincap(nsize, TechParameter::NCH, 1);
-        if (m_trans_type == NP_GATE)
-        {
-            trans_cap += m_tech_param_ptr->calc_draincap(psize, TechParameter::PCH, 1);
-        }
-    }
-    else if (m_conn_type == TRISTATE_GATE)
-    {
-        double Woutdrvnandn = m_tech_param_ptr->get_Woutdrvnandn();
-        double Woutdrvnandp = m_tech_param_ptr->get_Woutdrvnandp();
-        double Woutdrvnorn = m_tech_param_ptr->get_Woutdrvnorn();
-        double Woutdrvnorp = m_tech_param_ptr->get_Woutdrvnorp();
-        trans_cap = m_tech_param_ptr->calc_gatecap(Woutdrvnandn+Woutdrvnandp, 0)
-            + m_tech_param_ptr->calc_gatecap(Woutdrvnorn+Woutdrvnorp, 0);
-    }
-    total_cap += trans_cap*m_num_out;
-
-    // segmented crossbar
-    if (m_num_in_seg > 1)
-    {
-        total_cap *= (m_num_in_seg+1)/(m_num_in_seg*2);
-        // input capacitance of tri-state buffer
-        double Woutdrvnandn = m_tech_param_ptr->get_Woutdrvnandn();
-        double Woutdrvnandp = m_tech_param_ptr->get_Woutdrvnandp();
-        double Woutdrvnorn = m_tech_param_ptr->get_Woutdrvnorn();
-        double Woutdrvnorp = m_tech_param_ptr->get_Woutdrvnorp();
-        total_cap += (m_num_in_seg+2)*(m_num_in_seg-1)/(m_num_in_seg*2)*(m_tech_param_ptr->calc_gatecap(Woutdrvnandn+Woutdrvnandp, 0)+m_tech_param_ptr->calc_gatecap(Woutdrvnorn+Woutdrvnorp, 0));
-        // output capacitance of tri-state buffer
-        double Woutdrivern = m_tech_param_ptr->get_Woutdrivern();
-        double Woutdriverp = m_tech_param_ptr->get_Woutdriverp();
-        total_cap += (m_num_in_seg-1)/2*(m_tech_param_ptr->calc_draincap(Woutdrivern, TechParameter::NCH, 1)+m_tech_param_ptr->calc_draincap(Woutdriverp, TechParameter::PCH, 1));
-    }
-
-    // part 3: input driver
-    //FIXME: how to specify timing
-    double period = m_tech_param_ptr->get_period();
-    double psize = m_tech_param_ptr->calc_driver_psize(total_cap, period/3.0);
-    double Wdecinvn = m_tech_param_ptr->get_Wdecinvn();
-    double Wdecinvp = m_tech_param_ptr->get_Wdecinvp();
-    double nsize = psize*Wdecinvn/Wdecinvp;
-    total_cap += m_tech_param_ptr->calc_draincap(nsize, TechParameter::NCH, 1)+m_tech_param_ptr->calc_draincap(psize, TechParameter::PCH, 1)+m_tech_param_ptr->calc_gatecap(nsize+psize, 0);
-
-    return total_cap/2.0;
-}
-
-double Crossbar::calc_out_cap(uint32_t num_in_)
-{
-    double total_cap = 0;
-
-    // part 1: wire cap
-    total_cap += m_cap_out_wire;
-
-    double trans_cap = 0;
-    // part 2: drain cap of transmission gate or tri-state gate
-    if (m_conn_type == TRANS_GATE)
-    {
-        // FIXME: resizing strategy
-        double Wmemcellr = m_tech_param_ptr->get_Wmemcellr();
-        double nsize = Wmemcellr;
-        double Wdecinvn = m_tech_param_ptr->get_Wdecinvn();
-        double Wdecinvp = m_tech_param_ptr->get_Wdecinvp();
-        double psize = nsize*Wdecinvp/Wdecinvn;
-
-        trans_cap = m_tech_param_ptr->calc_draincap(nsize, TechParameter::NCH, 1);
-        if (m_trans_type == NP_GATE)
-        {
-            trans_cap += m_tech_param_ptr->calc_draincap(psize, TechParameter::PCH, 1);
-        }
-    }
-    else if (m_conn_type == TRISTATE_GATE)
-    {
-        double Woutdrivern = m_tech_param_ptr->get_Woutdrivern();
-        double Woutdriverp = m_tech_param_ptr->get_Woutdriverp();
-        trans_cap = m_tech_param_ptr->calc_draincap(Woutdrivern, TechParameter::NCH, 1)+m_tech_param_ptr->calc_draincap(Woutdriverp, TechParameter::PCH, 1);
-    }
-    total_cap += trans_cap*num_in_;
-
-    // segmented crossbar
-    if (m_num_out_seg > 1)
-    {
-        total_cap *= (m_num_out_seg+1)/(m_num_out_seg*2);
-        // input capacitance of tri-state buffer
-        double Woutdrvnandn = m_tech_param_ptr->get_Woutdrvnandn();
-        double Woutdrvnandp = m_tech_param_ptr->get_Woutdrvnandp();
-        double Woutdrvnorn = m_tech_param_ptr->get_Woutdrvnorn();
-        double Woutdrvnorp = m_tech_param_ptr->get_Woutdrvnorp();
-        total_cap += (m_num_out_seg+2)*(m_num_out_seg-1)/(m_num_out_seg*2)*(m_tech_param_ptr->calc_gatecap(Woutdrvnandn+Woutdrvnandp, 0)+m_tech_param_ptr->calc_gatecap(Woutdrvnorn+Woutdrvnorp, 0));
-        // output capacitance of tri-state buffer
-        double Woutdrivern = m_tech_param_ptr->get_Woutdrivern();
-        double Woutdriverp = m_tech_param_ptr->get_Woutdriverp();
-        total_cap += (m_num_out_seg-1)/2*(m_tech_param_ptr->calc_draincap(Woutdrivern, TechParameter::NCH, 1)+m_tech_param_ptr->calc_draincap(Woutdriverp, TechParameter::PCH, 1));
-    }
-
-    // part 3: output driver
-    double Woutdrivern = m_tech_param_ptr->get_Woutdrivern();
-    double Woutdriverp = m_tech_param_ptr->get_Woutdriverp();
-    total_cap += m_tech_param_ptr->calc_draincap(Woutdrivern, TechParameter::NCH, 1)+m_tech_param_ptr->calc_draincap(Woutdriverp, TechParameter::PCH, 1)+m_tech_param_ptr->calc_gatecap(Woutdrivern+Woutdriverp, 0);
-
-    return total_cap/2.0;
-}
-
-double Crossbar::calc_int_cap()
-{
-    double total_cap = 0;
-
-    if (m_conn_type == TRANS_GATE)
-    {
-        // part 1: drain cap of transmission gate
-        //FIXME: Wmemcellr and resize
-        double Wmemcellr = m_tech_param_ptr->get_Wmemcellr();
-        double nsize = Wmemcellr;
-        double trans_cap = m_tech_param_ptr->calc_draincap(nsize, TechParameter::NCH, 1);
-        if (m_trans_type == NP_GATE)
-        {
-            double Wdecinvn = m_tech_param_ptr->get_Wdecinvn();
-            double Wdecinvp = m_tech_param_ptr->get_Wdecinvp();
-            double psize = nsize*Wdecinvp/Wdecinvn;
-            trans_cap += m_tech_param_ptr->calc_draincap(psize, TechParameter::PCH, 1);
-        }
-        total_cap += trans_cap*(m_degree+1);
-    }
-    else if (m_conn_type == TRISTATE_GATE)
-    {
-        // part 1: drain cap of tri-state gate
-        double Woutdrivern = m_tech_param_ptr->get_Woutdrivern();
-        double Woutdriverp = m_tech_param_ptr->get_Woutdriverp();
-
-        double trans_cap = (m_tech_param_ptr->calc_draincap(Woutdrivern, TechParameter::NCH, 1)+m_tech_param_ptr->calc_draincap(Woutdriverp, TechParameter::PCH, 1))*m_degree;
-        // part 2: gate cap of tri-state gate
-        double Woutdrvnandn = m_tech_param_ptr->get_Woutdrvnandn();
-        double Woutdrvnandp = m_tech_param_ptr->get_Woutdrvnandp();
-        double Woutdrvnorn = m_tech_param_ptr->get_Woutdrvnorn();
-        double Woutdrvnorp = m_tech_param_ptr->get_Woutdrvnorp();
-        trans_cap += m_tech_param_ptr->calc_gatecap(Woutdrvnandn+Woutdrvnandp, 0)+m_tech_param_ptr->calc_gatecap(Woutdrvnorn+Woutdrvnorp, 0);
-        total_cap += trans_cap;
-    }
-
-    return total_cap/2.0;
-}
-
-double Crossbar::calc_ctr_cap(double cap_wire_, bool prev_ctr_, bool next_ctr_)
-{
-    double total_cap = 0;
-
-    // part 1: wire cap
-    total_cap += cap_wire_;
-
-    double trans_cap = 0;
-    // part 2: gate cap of transmission gate or tri-state gate
-    if (m_conn_type == TRANS_GATE)
-    {
-        //FIXME Wmemcellr and resize
-        double Wmemcellr = m_tech_param_ptr->get_Wmemcellr();
-        double nsize = Wmemcellr;
-        trans_cap = m_tech_param_ptr->calc_gatecap(nsize, 0);
-        if (m_trans_type == NP_GATE)
-        {
-            double Wdecinvn = m_tech_param_ptr->get_Wdecinvn();
-            double Wdecinvp = m_tech_param_ptr->get_Wdecinvp();
-            double psize = nsize*Wdecinvp/Wdecinvn;
-            trans_cap += m_tech_param_ptr->calc_gatecap(psize, 0);
-        }
-    }
-    else if (m_conn_type == TRISTATE_GATE)
-    {
-        double Woutdrvnandn = m_tech_param_ptr->get_Woutdrvnandn();
-        double Woutdrvnandp = m_tech_param_ptr->get_Woutdrvnandp();
-        double Woutdrvnorn = m_tech_param_ptr->get_Woutdrvnorn();
-        double Woutdrvnorp = m_tech_param_ptr->get_Woutdrvnorp();
-        trans_cap = m_tech_param_ptr->calc_gatecap(Woutdrvnandn+Woutdrvnandp, 0)
-            + m_tech_param_ptr->calc_gatecap(Woutdrvnorn+Woutdrvnorp, 0);
-    }
-    total_cap += trans_cap*m_data_width;
-
-    // part 3: inverter
-    if (!((m_conn_type == TRANS_GATE) && (m_trans_type == N_GATE) && (!prev_ctr_)))
-    {
-        double Wdecinvn = m_tech_param_ptr->get_Wdecinvn();
-        double Wdecinvp = m_tech_param_ptr->get_Wdecinvp();
-        total_cap += m_tech_param_ptr->calc_draincap(Wdecinvn, TechParameter::NCH, 1)+m_tech_param_ptr->calc_draincap(Wdecinvp, TechParameter::PCH, 1)
-            + m_tech_param_ptr->calc_gatecap(Wdecinvn+Wdecinvp, 0);
-    }
-
-    double WdecNORn = m_tech_param_ptr->get_WdecNORn();
-    double WdecNORp = m_tech_param_ptr->get_WdecNORp();
-    // part 4: drain cap of previous level control signal
-    if (prev_ctr_)
-    {
-        // FIXME: need actual size, use decoder data for now
-        total_cap += m_degree*m_tech_param_ptr->calc_draincap(WdecNORn, TechParameter::NCH, 1)
-            +m_tech_param_ptr->calc_draincap(WdecNORp, TechParameter::PCH, m_degree);
-    }
-
-    // part 5: gate cap of next level control signal
-    if (next_ctr_)
-    {
-        // FIXME: need actual size, use decoder data for now
-        total_cap += m_tech_param_ptr->calc_gatecap(WdecNORn+WdecNORp, m_degree*40+20);
-    }
-
-    return total_cap;
-}
-
-Crossbar* Crossbar::create_crossbar(
-        const string& xbar_model_str_,
-        uint32_t num_in_,
-        uint32_t num_out_,
-        uint32_t data_width_,
-        const OrionConfig* orion_cfg_ptr_
-        )
-{
-    if (xbar_model_str_ == string("MATRIX_CROSSBAR"))
-    {
-        const string& conn_type_str = orion_cfg_ptr_->get<string>("CROSSBAR_CONNECT_TYPE");
-        const string& trans_type_str = orion_cfg_ptr_->get<string>("CROSSBAR_TRANS_GATE_TYPE");
-        uint32_t num_in_seg = orion_cfg_ptr_->get<uint32_t>("CROSSBAR_NUM_IN_SEG");
-        uint32_t num_out_seg = orion_cfg_ptr_->get<uint32_t>("CROSSBAR_NUM_OUT_SEG");
-        double len_in_wire = orion_cfg_ptr_->get<double>("CROSSBAR_LEN_IN_WIRE");
-        double len_out_wire = orion_cfg_ptr_->get<double>("CROSSBAR_LEN_OUT_WIRE");
-        const TechParameter* tech_param_ptr = orion_cfg_ptr_->get_tech_param_ptr();
-        return new MatrixCrossbar(conn_type_str, trans_type_str, 
-                num_in_, num_out_, data_width_, num_in_seg, num_out_seg,
-                len_in_wire, len_out_wire, tech_param_ptr);
-    }
-    else if (xbar_model_str_ == string("MULTREE_CROSSBAR"))
-    {
-        const string& conn_type_str = orion_cfg_ptr_->get<string>("CROSSBAR_CONNECT_TYPE");
-        const string& trans_type_str = orion_cfg_ptr_->get<string>("CROSSBAR_TRANS_GATE_TYPE");
-        uint32_t degree = orion_cfg_ptr_->get<uint32_t>("CROSSBAR_MUX_DEGREE");
-        const TechParameter* tech_param_ptr = orion_cfg_ptr_->get_tech_param_ptr();
-        return new MultreeCrossbar(conn_type_str, trans_type_str, 
-                num_in_, num_out_, data_width_, degree, tech_param_ptr);
-    }
-    else
-    {
-        cerr << "WARNING: No Crossbar model" << endl;
-        return (Crossbar*)NULL;
-    }
-}
diff --git a/src/mem/ruby/network/orion/Crossbar/Crossbar.hh b/src/mem/ruby/network/orion/Crossbar/Crossbar.hh
deleted file mode 100644 (file)
index 977387b..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#ifndef __CROSSBAR_H__
-#define __CROSSBAR_H__
-
-#include "mem/ruby/network/orion/Type.hh"
-
-class TechParameter;
-class OrionConfig;
-
-class Crossbar
-{
-  public:
-    enum CrossbarModel
-    {
-      NO_MODEL = 0,
-      MATRIX_CROSSBAR,
-      MULTREE_CROSSBAR
-    };
-    enum ConnectType
-    {
-      TRANS_GATE,
-      TRISTATE_GATE
-    };
-    enum TransType
-    {
-      N_GATE,
-      NP_GATE
-    };
-
-  public:
-    Crossbar(
-      CrossbarModel xbar_model_,
-      const string& conn_type_str_,
-      const string& trans_type_str_,
-      uint32_t num_in_,
-      uint32_t num_out_,
-      uint32_t data_width_,
-      uint32_t num_in_seg_,
-      uint32_t num_out_seg_,
-      uint32_t degree_,
-      const TechParameter* tech_param_ptr_
-    );
-    virtual ~Crossbar() = 0;
-
-  public:
-    double get_len_req_wire() const { return m_len_req_wire; }
-
-    virtual double get_dynamic_energy(bool is_max_) const = 0;
-    double get_static_power() const;
-
-    void print_all() const;
-
-  protected:
-    void set_conn_type(const string& conn_type_str_);
-    void set_trans_type(const string& trans_type_str_);
-    double calc_in_cap();
-    double calc_out_cap(uint32_t num_in_);
-    double calc_int_cap();
-    double calc_ctr_cap(double cap_wire_, bool prev_ctr_, bool next_ctr_);
-    virtual double calc_i_static() = 0;
-
-  protected:
-    CrossbarModel m_xbar_model;
-    ConnectType m_conn_type;
-    TransType m_trans_type;
-    uint32_t m_num_in;
-    uint32_t m_num_out;
-    uint32_t m_data_width;
-    uint32_t m_num_in_seg;
-    uint32_t m_num_out_seg;
-    uint32_t m_degree;
-    const TechParameter* m_tech_param_ptr;
-
-    double m_cap_in_wire;
-    double m_cap_out_wire;
-    double m_cap_ctr_wire;
-    double m_len_req_wire;
-
-    double m_e_chg_in;
-    double m_e_chg_out;
-    double m_e_chg_ctr;
-    double m_e_chg_int;
-
-    double m_i_static;
-
-  public:
-    static Crossbar* create_crossbar(
-      const string& xbar_model_str_,
-      uint32_t num_in_,
-      uint32_t num_out_,
-      uint32_t data_width_,
-      const OrionConfig* orion_cfg_ptr_
-    );
-};
-
-#endif
diff --git a/src/mem/ruby/network/orion/Crossbar/MatrixCrossbar.cc b/src/mem/ruby/network/orion/Crossbar/MatrixCrossbar.cc
deleted file mode 100644 (file)
index e398d9a..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#include <cassert>
-#include <iostream>
-
-#include "mem/ruby/network/orion/Crossbar/MatrixCrossbar.hh"
-#include "mem/ruby/network/orion/TechParameter.hh"
-
-using namespace std;
-
-MatrixCrossbar::MatrixCrossbar(
-        const string& conn_type_str_, 
-        const string& trans_type_str_, 
-        uint32_t num_in_,
-        uint32_t num_out_,
-        uint32_t data_width_,
-        uint32_t num_in_seg_,
-        uint32_t num_out_seg_,
-        double len_in_wire_,
-        double len_out_wire_,
-        const TechParameter* tech_param_ptr_
-        ) : Crossbar(
-            MATRIX_CROSSBAR, conn_type_str_, trans_type_str_, 
-            num_in_, num_out_, data_width_, num_in_seg_, num_out_seg_, 
-            0, tech_param_ptr_)
-{
-    assert(len_in_wire_ == len_in_wire_);
-    assert(len_out_wire_ == len_out_wire_);
-
-    m_len_in_wire = len_in_wire_;
-    m_len_out_wire = len_out_wire_;
-    init();
-}
-
-MatrixCrossbar::~MatrixCrossbar()
-{}
-
-double MatrixCrossbar::get_dynamic_energy(bool is_max_) const
-{
-    double e_atomic;
-    double e_access = 0;
-
-    e_atomic = m_e_chg_in*m_data_width*(is_max_? 1:0.5);
-    e_access += e_atomic;
-
-    e_atomic = m_e_chg_out*m_data_width*(is_max_? 1:0.5);
-    e_access += e_atomic;
-
-    e_atomic = m_e_chg_ctr;
-    e_access += e_atomic;
-
-    return e_access;
-}
-
-void MatrixCrossbar::init()
-{
-    // FIXME: need accurate spacing
-    double CrsbarCellWidth = m_tech_param_ptr->get_CrsbarCellWidth();
-    double CrsbarCellHeight = m_tech_param_ptr->get_CrsbarCellHeight();
-    double len_in = m_num_out*m_data_width*CrsbarCellWidth;
-    double len_out = m_num_in*m_data_width*CrsbarCellHeight;
-    if(len_in > m_len_in_wire) m_len_in_wire = len_in;
-    if(len_out > m_len_out_wire) m_len_out_wire = len_out;
-    double CC3metal = m_tech_param_ptr->get_CC3metal();
-    m_cap_in_wire = CC3metal*m_len_in_wire;
-    m_cap_out_wire = CC3metal*m_len_out_wire;
-    double Cmetal = m_tech_param_ptr->get_Cmetal();
-    m_cap_ctr_wire = Cmetal*m_len_in_wire/2.0;
-    m_len_req_wire = m_len_in_wire;
-
-    double e_factor = m_tech_param_ptr->get_EnergyFactor();
-    m_e_chg_in = calc_in_cap()*e_factor;
-    m_e_chg_out = calc_out_cap(m_num_out)*e_factor;
-    //FIXME: wire length estimation, really reset?
-    //control signal should reset after transmission is done, so no 1/2
-    m_e_chg_ctr = calc_ctr_cap(m_cap_ctr_wire, 0, 0)*e_factor;
-    m_e_chg_int = 0;
-
-    m_i_static = calc_i_static();
-    return;
-}
-
-double MatrixCrossbar::calc_i_static()
-{
-    double Woutdrvnandn = m_tech_param_ptr->get_Woutdrvnandn();
-    double Woutdrvnandp = m_tech_param_ptr->get_Woutdrvnandp();
-    double Woutdrvnorn = m_tech_param_ptr->get_Woutdrvnorn();
-    double Woutdrvnorp = m_tech_param_ptr->get_Woutdrvnorp();
-    double Wdecinvn = m_tech_param_ptr->get_Wdecinvn();
-    double Wdecinvp = m_tech_param_ptr->get_Wdecinvp();
-    double Woutdrivern = m_tech_param_ptr->get_Woutdrivern();
-    double Woutdriverp = m_tech_param_ptr->get_Woutdriverp();
-    double NAND2_TAB_0 = m_tech_param_ptr->get_NAND2_TAB(0);
-    double NAND2_TAB_1 = m_tech_param_ptr->get_NAND2_TAB(1);
-    double NAND2_TAB_2 = m_tech_param_ptr->get_NAND2_TAB(2);
-    double NAND2_TAB_3 = m_tech_param_ptr->get_NAND2_TAB(3);
-    double NOR2_TAB_0 = m_tech_param_ptr->get_NOR2_TAB(0);
-    double NOR2_TAB_1 = m_tech_param_ptr->get_NOR2_TAB(1);
-    double NOR2_TAB_2 = m_tech_param_ptr->get_NOR2_TAB(2);
-    double NOR2_TAB_3 = m_tech_param_ptr->get_NOR2_TAB(3);
-    double NMOS_TAB_0 = m_tech_param_ptr->get_NMOS_TAB(0);
-    double PMOS_TAB_0 = m_tech_param_ptr->get_PMOS_TAB(0);
-
-    double i_static = 0;
-    // tri-state buffers
-    i_static += ((Woutdrvnandp*(NAND2_TAB_0+NAND2_TAB_1+NAND2_TAB_2)+Woutdrvnandn*NAND2_TAB_3)/4
-            + (Woutdrvnorp*NOR2_TAB_0+Woutdrvnorn*(NOR2_TAB_1+NOR2_TAB_2+NOR2_TAB_3))/4
-            + Woutdrivern*NMOS_TAB_0+Woutdriverp*PMOS_TAB_0)*m_num_in*m_num_out*m_data_width;
-
-    // input driver
-    i_static += (Wdecinvn*NMOS_TAB_0+Wdecinvp*PMOS_TAB_0)*m_num_in*m_data_width;
-
-    // output driver
-    i_static += (Woutdrivern*NMOS_TAB_0+Woutdriverp*PMOS_TAB_0)*m_num_out*m_data_width;
-
-    // control siganl inverter
-    i_static += (Wdecinvn*NMOS_TAB_0+Wdecinvp*PMOS_TAB_0)*m_num_in*m_num_out;
-    return i_static;
-}
diff --git a/src/mem/ruby/network/orion/Crossbar/MatrixCrossbar.hh b/src/mem/ruby/network/orion/Crossbar/MatrixCrossbar.hh
deleted file mode 100644 (file)
index 0a99209..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#ifndef __MATRIXCROSSBAR_H__
-#define __MATRIXCROSSBAR_H__
-
-#include "mem/ruby/network/orion/Crossbar/Crossbar.hh"
-#include "mem/ruby/network/orion/Type.hh"
-
-class TechParameter;
-
-class MatrixCrossbar : public Crossbar
-{
-  public:
-    MatrixCrossbar(
-      const string& conn_type_str_,
-      const string& trans_type_str_,
-      uint32_t num_in_,
-      uint32_t num_out_,
-      uint32_t data_width_,
-      uint32_t num_in_seg_,
-      uint32_t num_out_seg_,
-      double len_in_wire_,
-      double len_out_wire_,
-      const TechParameter* tech_param_ptr_
-    );
-    ~MatrixCrossbar();
-
-  public:
-    double get_dynamic_energy(bool is_max_) const;
-
-  private:
-    void init();
-    double calc_i_static();
-
-  private:
-    double m_len_in_wire;
-    double m_len_out_wire;
-};
-
-#endif
diff --git a/src/mem/ruby/network/orion/Crossbar/MultreeCrossbar.cc b/src/mem/ruby/network/orion/Crossbar/MultreeCrossbar.cc
deleted file mode 100644 (file)
index 00a3f09..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#include <cmath>
-#include <iostream>
-
-#include "mem/ruby/network/orion/Crossbar/MultreeCrossbar.hh"
-#include "mem/ruby/network/orion/TechParameter.hh"
-
-using namespace std;
-
-MultreeCrossbar::MultreeCrossbar(
-        const string& conn_type_str_, 
-        const string& trans_type_str_, 
-        uint32_t num_in_, 
-        uint32_t num_out_, 
-        uint32_t data_width_, 
-        uint32_t degree_,
-        const TechParameter *tech_param_ptr_
-        ) : Crossbar(
-            MULTREE_CROSSBAR, conn_type_str_, trans_type_str_,
-            num_in_, num_out_, data_width_, 0, 0, degree_, tech_param_ptr_)
-{
-    m_len_req_wire = 0;
-    init();
-}
-
-MultreeCrossbar::~MultreeCrossbar()
-{}
-
-double MultreeCrossbar::get_dynamic_energy(bool is_max_) const
-{
-    double e_atomic;
-    double e_access = 0;
-
-    e_atomic = m_e_chg_in*m_data_width*(is_max_? 1:0.5);
-    e_access += e_atomic;
-
-    e_atomic = m_e_chg_out*m_data_width*(is_max_? 1:0.5);
-    e_access += e_atomic;
-
-    e_atomic = m_e_chg_ctr;
-    e_access += e_atomic;
-
-    if (m_depth > 1)
-    {
-        e_atomic = m_e_chg_int*m_data_width*(m_depth-1)*(is_max_? 1:0.5);
-        e_access += e_atomic;
-    }
-
-    return e_access;
-}
-
-void MultreeCrossbar::init()
-{
-    double CrsbarCellWidth = m_tech_param_ptr->get_CrsbarCellWidth();
-    double CCmetal = m_tech_param_ptr->get_CCmetal();
-    double Lamda = m_tech_param_ptr->get_Lamda();
-    double CC3metal = m_tech_param_ptr->get_CC3metal();
-
-    double len_in_wire;
-    // input wire horizontal segment length
-    len_in_wire = m_num_in*m_data_width*CrsbarCellWidth*(m_num_out/2);
-    m_cap_in_wire = len_in_wire*CCmetal;
-    // input wire vertical segment length
-    len_in_wire = m_num_in*m_data_width*(5*Lamda)*(m_num_out/2);
-    m_cap_in_wire += len_in_wire*CC3metal;
-    m_cap_out_wire = 0;
-
-    double Cmetal = m_tech_param_ptr->get_Cmetal();
-    double len_ctr_wire = m_num_in*m_data_width*CrsbarCellWidth*(m_num_out/2)/2;
-    m_cap_ctr_wire = Cmetal*len_ctr_wire;
-
-    double e_factor = m_tech_param_ptr->get_EnergyFactor();
-    m_e_chg_in = calc_in_cap()*e_factor;
-    m_e_chg_out = calc_out_cap(m_degree)*e_factor;
-    m_e_chg_int = calc_int_cap()*e_factor;
-
-    m_depth = (uint32_t)ceil(log((double)m_num_in)/log((double)m_degree));
-
-    // control signal should reset after transmission is done
-    if (m_depth == 1)
-    {
-        // only one level of control sigal
-        m_e_chg_ctr = calc_ctr_cap(m_cap_ctr_wire, 0, 0)*e_factor;
-    }
-    else
-    {
-        // first level and last level control signals
-        m_e_chg_ctr = calc_ctr_cap(m_cap_ctr_wire, 0, 1)*e_factor + calc_ctr_cap(0, 1, 0)*e_factor;
-        // intermediate control signals
-        if (m_depth > 2)
-        {
-            m_e_chg_ctr += (m_depth-2)*calc_ctr_cap(0, 1, 1)*e_factor;
-        }
-    }
-
-    m_i_static = calc_i_static();
-}
-
-double MultreeCrossbar::calc_i_static()
-{
-    double Wdecinvn = m_tech_param_ptr->get_Wdecinvn();
-    double Wdecinvp = m_tech_param_ptr->get_Wdecinvp();
-    double Woutdrivern = m_tech_param_ptr->get_Woutdrivern();
-    double Woutdriverp = m_tech_param_ptr->get_Woutdriverp();
-    double WdecNORn = m_tech_param_ptr->get_WdecNORn();
-    double WdecNORp = m_tech_param_ptr->get_WdecNORp();
-    double NOR2_TAB_0 = m_tech_param_ptr->get_NOR2_TAB(0);
-    double NOR2_TAB_1 = m_tech_param_ptr->get_NOR2_TAB(1);
-    double NOR2_TAB_2 = m_tech_param_ptr->get_NOR2_TAB(2);
-    double NOR2_TAB_3 = m_tech_param_ptr->get_NOR2_TAB(3);
-    double NMOS_TAB_0 = m_tech_param_ptr->get_NMOS_TAB(0);
-    double PMOS_TAB_0 = m_tech_param_ptr->get_PMOS_TAB(0);
-
-    double i_static = 0;
-
-    // input driver
-    i_static += (Wdecinvn*NMOS_TAB_0+Wdecinvp*PMOS_TAB_0)*m_num_in*m_data_width;
-
-    // output driver
-    i_static += (Woutdrivern*NMOS_TAB_0+Woutdriverp*PMOS_TAB_0)*m_num_out*m_data_width;
-
-    // mux
-    i_static += (WdecNORp*NOR2_TAB_0+WdecNORn*(NOR2_TAB_1+NOR2_TAB_2+NOR2_TAB_3))/4*(2*m_num_in-1)*m_num_out*m_data_width;
-
-    // control signal inverter
-    i_static += (Wdecinvn*NMOS_TAB_0+Wdecinvp*PMOS_TAB_0)*m_num_in*m_num_out;
-    return i_static;
-}
diff --git a/src/mem/ruby/network/orion/Crossbar/MultreeCrossbar.hh b/src/mem/ruby/network/orion/Crossbar/MultreeCrossbar.hh
deleted file mode 100644 (file)
index dddb2fd..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#ifndef __MULTREECROSSBAR_H__
-#define __MULTREECROSSBAR_H__
-
-#include "mem/ruby/network/orion/Crossbar/Crossbar.hh"
-#include "mem/ruby/network/orion/Type.hh"
-
-class TechParameter;
-
-class MultreeCrossbar : public Crossbar
-{
-  public:
-    MultreeCrossbar(
-      const string& conn_type_str_,
-      const string& trans_type_str_,
-      uint32_t num_in_,
-      uint32_t num_out_,
-      uint32_t data_width_,
-      uint32_t degree_,
-      const TechParameter* tech_param_ptr_
-    );
-    ~MultreeCrossbar();
-
-  public:
-    double get_dynamic_energy(bool is_max_) const;
-
-  private:
-    void init();
-    double calc_i_static();
-
-  private:
-    uint32_t m_depth;
-};
-
-#endif
diff --git a/src/mem/ruby/network/orion/Crossbar/SConscript b/src/mem/ruby/network/orion/Crossbar/SConscript
deleted file mode 100644 (file)
index 7100469..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright (c) 2010 Massachusetts Institute of Technology
-# 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.
-#
-# Authors: Tushar Krishna
-
-Import('*')
-
-if env['PROTOCOL'] == 'None':
-    Return()
-
-Source('Crossbar.cc')
-Source('MatrixCrossbar.cc')
-Source('MultreeCrossbar.cc')
diff --git a/src/mem/ruby/network/orion/FlipFlop.cc b/src/mem/ruby/network/orion/FlipFlop.cc
deleted file mode 100644 (file)
index c46b9cc..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#include <cassert>
-#include <iostream>
-
-#include "mem/ruby/network/orion/FlipFlop.hh"
-#include "mem/ruby/network/orion/TechParameter.hh"
-
-using namespace std;
-
-FlipFlop::FlipFlop(
-  const string& ff_model_str_,
-  double load_,
-  const TechParameter* tech_param_ptr_
-)
-{
-    if (ff_model_str_ == string("NEG_DFF"))
-    {
-        m_ff_model = NEG_DFF;
-    }
-    else
-    {
-        m_ff_model = NO_MODEL;
-    }
-
-    if (m_ff_model != NO_MODEL)
-    {
-        assert(load_ == load_);
-
-        m_load = load_;
-        m_tech_param_ptr = tech_param_ptr_;
-
-        init();
-    }
-}
-
-FlipFlop::~FlipFlop()
-{}
-
-void FlipFlop::init()
-{
-    double c1, c2, c3, c4, c5, c6;
-
-    double e_factor = m_tech_param_ptr->get_EnergyFactor();
-    switch(m_ff_model)
-    {
-        case NEG_DFF:
-            c1 = c5 = c6 = calc_node_cap(2, 1);
-            c2 = calc_node_cap(2, 3);
-            c3 = calc_node_cap(3, 2);
-            c4 = calc_node_cap(2, 3);
-
-            m_e_switch = (c1+c2+c3+c4+c5+c6+m_load)*e_factor/2.0;
-            // no 1/2 for e_keep and e_clock because clock signal switches twice in one cycle
-            m_e_keep_1 = c3*e_factor;
-            m_e_keep_0 = c2*e_factor;
-            m_e_clock = calc_clock_cap()*e_factor;
-
-            m_i_static = calc_i_static();
-            break;
-        default:
-            cerr << "error" << endl;
-    }
-    return;
-}
-
-
-//this model is based on the gate-level design given by Randy H. Katz "Contemporary Logic Design"
-//Figure 6.24, node numbers (1-6) are assigned to all gate outputs, left to right, top to bottom
-//
-//We should have pure cap functions and leave the decision of whether or not to have coefficient
-//1/2 in init function.
-double FlipFlop::calc_node_cap(uint32_t num_fanin_, uint32_t num_fanout_)
-{
-    double total_cap = 0;
-
-    //FIXME: all need actual size
-    //part 1: drain cap of NOR gate
-    double WdecNORn = m_tech_param_ptr->get_WdecNORn();
-    double WdecNORp = m_tech_param_ptr->get_WdecNORp();
-    total_cap += num_fanin_*m_tech_param_ptr->calc_draincap(WdecNORn, TechParameter::NCH, 1) + m_tech_param_ptr->calc_draincap(WdecNORp, TechParameter::PCH, num_fanin_);
-
-    //part 2: gate cap of NOR gate
-    total_cap += num_fanout_*m_tech_param_ptr->calc_gatecap(WdecNORn+WdecNORp, 0);
-    return total_cap;
-}
-
-double FlipFlop::calc_clock_cap()
-{
-    double WdecNORn = m_tech_param_ptr->get_WdecNORn();
-    double WdecNORp = m_tech_param_ptr->get_WdecNORp();
-    return (2*m_tech_param_ptr->calc_gatecap(WdecNORn+WdecNORp, 0));
-}
-
-double FlipFlop::calc_i_static()
-{
-    double WdecNORn = m_tech_param_ptr->get_WdecNORn();
-    double WdecNORp = m_tech_param_ptr->get_WdecNORp();
-    double NOR2_TAB_0 = m_tech_param_ptr->get_NOR2_TAB(0);
-    double NOR2_TAB_1 = m_tech_param_ptr->get_NOR2_TAB(1);
-    double NOR2_TAB_2 = m_tech_param_ptr->get_NOR2_TAB(2);
-    double NOR2_TAB_3 = m_tech_param_ptr->get_NOR2_TAB(3);
-
-    return (WdecNORp*NOR2_TAB_0 + WdecNORn*(NOR2_TAB_1+NOR2_TAB_2+NOR2_TAB_3))/4*6;
-}
diff --git a/src/mem/ruby/network/orion/FlipFlop.hh b/src/mem/ruby/network/orion/FlipFlop.hh
deleted file mode 100644 (file)
index 2596df5..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#ifndef __FLIPFLOP_H__
-#define __FLIPFLOP_H__
-
-#include "mem/ruby/network/orion/Type.hh"
-
-class TechParameter;
-
-class FlipFlop
-{
-  public:
-    enum FFModel
-    {
-      NO_MODEL = 0,
-      NEG_DFF
-    };
-
-  public:
-    FlipFlop(
-      const string& ff_model_str_,
-      double load_,
-      const TechParameter* tech_param_ptr_
-    );
-    ~FlipFlop();
-
-  public:
-    double get_e_switch() const { return m_e_switch; }
-    double get_e_keep_1() const { return m_e_keep_1; }
-    double get_e_keep_0() const { return m_e_keep_0; }
-    double get_e_clock() const { return m_e_clock; }
-    double get_i_static() const { return m_i_static; }
-
-  private:
-    void init();
-    double calc_node_cap(uint32_t num_fanin_, uint32_t num_fanout_);
-    double calc_clock_cap();
-    double calc_i_static();
-
-  private:
-    FFModel m_ff_model;
-    const TechParameter* m_tech_param_ptr;
-
-    double m_load;
-
-    double m_e_switch;
-    double m_e_keep_1;
-    double m_e_keep_0;
-    double m_e_clock;
-
-    double m_i_static;
-};
-
-#endif
diff --git a/src/mem/ruby/network/orion/NetworkPower.cc b/src/mem/ruby/network/orion/NetworkPower.cc
deleted file mode 100644 (file)
index 2eb1b0e..0000000
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * Copyright (c) 2010 Massachusetts Institute of Technology
- * 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.
- *
- * Authors: Chia-Hsin Owen Chen
- *          Tushar Krishna
- */
-
-#include "mem/ruby/common/Global.hh"
-#include "mem/ruby/network/orion/NetworkPower.hh"
-#include "mem/ruby/network/orion/OrionConfig.hh"
-#include "mem/ruby/network/orion/OrionLink.hh"
-#include "mem/ruby/network/orion/OrionRouter.hh"
-
-void
-Router_d::calculate_power()
-{
-    //Network Activities from garnet
-    calculate_performance_numbers();
-    double sim_cycles = curCycle() - g_ruby_start;
-
-    // Number of virtual networks/message classes declared in Ruby
-    // maybe greater than active virtual networks.
-    // Estimate active virtual networks for correct power estimates
-    int num_active_vclass = 0;
-    std::vector<bool > active_vclass_ary;
-    active_vclass_ary.resize(m_virtual_networks);
-
-    std::vector<double > vc_local_arbit_count_active;
-    std::vector<double > vc_global_arbit_count_active;
-    std::vector<double > buf_read_count_active;
-    std::vector<double > buf_write_count_active;
-
-    for (int i =0; i < m_virtual_networks; i++) {
-
-        active_vclass_ary[i] = (get_net_ptr())->validVirtualNetwork(i);
-        if (active_vclass_ary[i]) {
-            num_active_vclass++;
-            vc_local_arbit_count_active.push_back(vc_local_arbit_count[i]);
-            vc_global_arbit_count_active.push_back(vc_global_arbit_count[i]);
-            buf_read_count_active.push_back(buf_read_count[i]);
-            buf_write_count_active.push_back(buf_write_count[i]);
-        }
-        else {
-            // Inactive vclass
-            assert(vc_global_arbit_count[i] == 0);
-            assert(vc_local_arbit_count[i] == 0);
-        }
-    }
-
-    // Orion Initialization
-    OrionConfig* orion_cfg_ptr;
-    OrionRouter* orion_rtr_ptr;
-    static double freq_Hz;
-
-    const string cfg_fn = "src/mem/ruby/network/orion/router.cfg";
-    orion_cfg_ptr = new OrionConfig(cfg_fn);
-    freq_Hz = orion_cfg_ptr->get<double>("FREQUENCY");
-
-    uint32_t num_in_port = m_input_unit.size();
-    uint32_t num_out_port = m_output_unit.size();
-    uint32_t num_vclass = num_active_vclass;
-    std::vector<uint32_t > vclass_type_ary;
-
-    for (int i = 0; i < m_virtual_networks; i++) {
-        if (active_vclass_ary[i]) {
-            int temp_vc = i*m_vc_per_vnet;
-            vclass_type_ary.push_back((uint32_t) 
-                m_network_ptr->get_vnet_type(temp_vc));
-        }
-    }
-    assert(vclass_type_ary.size() == num_active_vclass);
-
-    uint32_t num_vc_per_vclass = m_vc_per_vnet;
-    uint32_t in_buf_per_data_vc = m_network_ptr->getBuffersPerDataVC();
-    uint32_t in_buf_per_ctrl_vc = m_network_ptr->getBuffersPerCtrlVC();
-    //flit width in bits
-    uint32_t flit_width_bits = m_network_ptr->getNiFlitSize() * 8;
-
-    orion_rtr_ptr = new OrionRouter(
-        num_in_port,
-        num_out_port,
-        num_vclass,
-        vclass_type_ary,
-        num_vc_per_vclass,
-        in_buf_per_data_vc,
-        in_buf_per_ctrl_vc,
-        flit_width_bits,
-        orion_cfg_ptr
-    );
-
-
-    //Power Calculation
-    double Pbuf_wr_dyn = 0.0;
-    double Pbuf_rd_dyn = 0.0;
-    double Pvc_arb_local_dyn = 0.0;
-    double Pvc_arb_global_dyn = 0.0;
-    double Psw_arb_local_dyn = 0.0;
-    double Psw_arb_global_dyn = 0.0;
-    double Pxbar_dyn = 0.0;
-
-    double Pbuf_sta = 0.0;
-    double Pvc_arb_sta = 0.0;
-    double Psw_arb_sta = 0.0;
-    double Pxbar_sta = 0.0;
-
-    //Dynamic Power
-
-    // Note: For each active arbiter in vc_arb or sw_arb of size T:1,
-    // assuming half the requests (T/2) are high on average.
-    // TODO: estimate expected value of requests from simulation.
-
-    for (int i = 0; i < num_vclass; i++) {
-        // Buffer Write
-        Pbuf_wr_dyn +=
-            orion_rtr_ptr->calc_dynamic_energy_buf(i, WRITE_MODE, false)*
-                (buf_write_count_active[i]/sim_cycles)*freq_Hz;
-
-        // Buffer Read
-        Pbuf_rd_dyn +=
-            orion_rtr_ptr->calc_dynamic_energy_buf(i, READ_MODE, false)*
-                (buf_read_count_active[i]/sim_cycles)*freq_Hz;
-
-        // VC arbitration local
-        // Each input VC arbitrates for one output VC (in its vclass)
-        // at its output port.
-        // Arbiter size: num_vc_per_vclass:1
-        Pvc_arb_local_dyn +=
-            orion_rtr_ptr->calc_dynamic_energy_local_vc_arb(i,
-                num_vc_per_vclass/2, false)*
-                    (vc_local_arbit_count_active[i]/sim_cycles)*
-                    freq_Hz;
-
-        // VC arbitration global
-        // Each output VC chooses one input VC out of all possible requesting
-        // VCs (within vclass) at all input ports
-        // Arbiter size: num_in_port*num_vc_per_vclass:1
-        // Round-robin at each input VC for outvcs in the local stage will
-        // try to keep outvc conflicts to the minimum.
-        // Assuming conflicts due to request for same outvc from
-        // num_in_port/2 requests.
-        // TODO: use garnet to estimate this
-        Pvc_arb_global_dyn +=
-            orion_rtr_ptr->calc_dynamic_energy_global_vc_arb(i,
-                num_in_port/2, false)*
-                    (vc_global_arbit_count_active[i]/sim_cycles)*
-                    freq_Hz;
-    }
-
-    // Switch Allocation Local
-    // Each input port chooses one input VC as requestor
-    // Arbiter size: num_vclass*num_vc_per_vclass:1
-    Psw_arb_local_dyn =
-        orion_rtr_ptr->calc_dynamic_energy_local_sw_arb(
-            num_vclass*num_vc_per_vclass/2, false)*
-            (sw_local_arbit_count/sim_cycles)*
-            freq_Hz;
-
-    // Switch Allocation Global
-    // Each output port chooses one input port as winner
-    // Arbiter size: num_in_port:1
-    Psw_arb_global_dyn =
-        orion_rtr_ptr->calc_dynamic_energy_global_sw_arb(
-            num_in_port/2, false)*
-                (sw_global_arbit_count/sim_cycles)*
-                freq_Hz;
-
-    // Crossbar
-    Pxbar_dyn =
-        orion_rtr_ptr->calc_dynamic_energy_xbar(false)*
-            (crossbar_count/sim_cycles)*freq_Hz;
-
-    // Total
-    m_power_dyn = Pbuf_wr_dyn + Pbuf_rd_dyn +
-                  Pvc_arb_local_dyn + Pvc_arb_global_dyn +
-                  Psw_arb_local_dyn + Psw_arb_global_dyn +
-                  Pxbar_dyn;
-
-    // Clock Power
-    m_clk_power = orion_rtr_ptr->calc_dynamic_energy_clock()*freq_Hz;
-
-    // Static Power
-    Pbuf_sta = orion_rtr_ptr->get_static_power_buf();
-    Pvc_arb_sta = orion_rtr_ptr->get_static_power_va();
-    Psw_arb_sta = orion_rtr_ptr->get_static_power_sa();
-    Pxbar_sta = orion_rtr_ptr->get_static_power_xbar();
-
-    m_power_sta =  Pbuf_sta + Pvc_arb_sta + Psw_arb_sta + Pxbar_sta;
-}
-
-void
-NetworkLink_d::calculate_power(double sim_cycles)
-{
-    OrionConfig* orion_cfg_ptr;
-    OrionLink* orion_link_ptr;
-    static double freq_Hz;
-    double link_length;
-
-    // Initialization
-    const string cfg_fn = "src/mem/ruby/network/orion/router.cfg";
-    orion_cfg_ptr = new OrionConfig(cfg_fn);
-    freq_Hz = orion_cfg_ptr->get<double>("FREQUENCY");
-
-    link_length = orion_cfg_ptr->get<double>("LINK_LENGTH");
-
-    int channel_width_bits = channel_width*8;
-
-    orion_link_ptr = new OrionLink(
-        link_length,
-        channel_width_bits,
-        orion_cfg_ptr);
-
-    // Dynamic Power
-    // Assume half the bits flipped on every link activity
-    double link_dynamic_energy =
-        orion_link_ptr->calc_dynamic_energy(channel_width_bits/2);
-    m_power_dyn = link_dynamic_energy * (m_link_utilized  / sim_cycles) *
-                  freq_Hz;
-
-
-    // Static Power
-    // Calculates number of repeaters needed in link, and their static power
-    // For short links, like 1mm, no repeaters are needed so static power is 0
-    m_power_sta = orion_link_ptr->get_static_power();
-
-    delete orion_link_ptr;
-    delete orion_cfg_ptr;
-}
diff --git a/src/mem/ruby/network/orion/NetworkPower.hh b/src/mem/ruby/network/orion/NetworkPower.hh
deleted file mode 100644 (file)
index eee7d03..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2010 Massachusetts Institute of Technology
- * 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.
- *
- * Authors: Chia-Hsin Owen Chen
- *          Tushar Krishna
- */
-
-#ifndef POWER_TRACE_H
-#define POWER_TRACE_H
-
-#include <cassert>
-#include <cstdio>
-#include <cstdlib>
-
-#include "mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.hh"
-#include "mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.hh"
-#include "mem/ruby/network/garnet/fixed-pipeline/Router_d.hh"
-
-//int RW :
-#define READ_MODE 0
-#define WRITE_MODE 1
-
-#endif
diff --git a/src/mem/ruby/network/orion/OrionConfig.cc b/src/mem/ruby/network/orion/OrionConfig.cc
deleted file mode 100644 (file)
index ca30bca..0000000
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * Copyright (c) 2010 Massachusetts Institute of Technology
- * 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.
- *
- * Authors: Chia-Hsin Owen Chen
- */
-
-#include <iostream>
-#include <string>
-
-#include "mem/ruby/network/orion/ConfigFile.hh"
-#include "mem/ruby/network/orion/OrionConfig.hh"
-#include "mem/ruby/network/orion/TechParameter.hh"
-
-using namespace std;
-
-string OrionConfig::ms_param_name[] = {
-    "TECH_NODE",
-    "TRANSISTOR_TYPE",
-    "VDD",
-    "FREQUENCY",
-    "NUM_INPUT_PORT",
-    "NUM_OUTPUT_PORT",
-    "FLIT_WIDTH",
-    "NUM_VIRTUAL_CLASS",
-    "NUM_VIRTUAL_CHANNEL",
-    "IS_IN_SHARED_BUFFER",
-    "IS_OUT_SHARED_BUFFER",
-    "IS_IN_SHARED_SWITCH",
-    "IS_OUT_SHARED_SWITCH",
-    "IS_INPUT_BUFFER",
-    "IN_BUF_MODEL",
-    "IN_BUF_NUM_SET",
-    "IN_BUF_NUM_READ_PORT",
-    "IS_OUTPUT_BUFFER",
-    "OUT_BUF_MODEL",
-    "OUT_BUF_NUM_SET",
-    "OUT_BUF_NUM_WRITE_PORT",
-    "SRAM_NUM_DATA_END",
-    "SRAM_ROWDEC_MODEL",
-    "SRAM_ROWDEC_PRE_MODEL",
-    "SRAM_WORDLINE_MODEL",
-    "SRAM_BITLINE_PRE_MODEL",
-    "SRAM_BITLINE_MODEL",
-    "SRAM_AMP_MODEL",
-    "SRAM_OUTDRV_MODEL",
-    "CROSSBAR_MODEL",
-    "CROSSBAR_CONNECT_TYPE",
-    "CROSSBAR_TRANS_GATE_TYPE",
-    "CROSSBAR_MUX_DEGREE",
-    "CROSSBAR_NUM_IN_SEG",
-    "CROSSBAR_NUM_OUT_SEG",
-    "CROSSBAR_LEN_IN_WIRE",
-    "CROSSBAR_LEN_OUT_WIRE",
-    "VA_MODEL",
-    "VA_IN_ARB_MODEL",
-    "VA_IN_ARB_FF_MODEL",
-    "VA_OUT_ARB_MODEL",
-    "VA_OUT_ARB_FF_MODEL",
-    "VA_BUF_MODEL",
-    "SA_IN_ARB_MODEL",
-    "SA_IN_ARB_FF_MODEL",
-    "SA_OUT_ARB_MODEL",
-    "SA_OUT_ARB_FF_MODEL",
-    "LINK_LENGTH",
-    "WIRE_LAYER_TYPE",
-    "WIRE_WIDTH_SPACING",
-    "WIRE_BUFFERING_MODEL",
-    "WIRE_IS_SHIELDING",
-    "IS_HTREE_CLOCK",
-    "ROUTER_DIAGONAL"
-};
-
-OrionConfig::OrionConfig(const string& cfg_fn_)
-{
-    uint32_t num_param = sizeof(ms_param_name)/sizeof(string);
-
-    for(uint32_t i = 0; i < num_param; i++)
-    {
-        m_params_map[ms_param_name[i]] = "NOT_SET";
-    }
-
-    read_file(cfg_fn_);
-    m_tech_param_ptr = new TechParameter(this);
-}
-
-OrionConfig::OrionConfig(const OrionConfig& orion_cfg_)
-{
-    m_params_map = orion_cfg_.m_params_map;
-    m_num_in_port = orion_cfg_.m_num_in_port;
-    m_num_out_port = orion_cfg_.m_num_out_port;
-    m_num_vclass = orion_cfg_.m_num_vclass;
-    m_num_vchannel = orion_cfg_.m_num_vchannel;
-    m_in_buf_num_set = orion_cfg_.m_in_buf_num_set;
-    m_flit_width = orion_cfg_.m_flit_width;
-
-    m_tech_param_ptr = new TechParameter(this);
-}
-
-OrionConfig::~OrionConfig()
-{
-    delete m_tech_param_ptr;
-}
-
-void OrionConfig::set_num_in_port(uint32_t num_in_port_)
-{
-    m_params_map[string("NUM_INPUT_PORT")] = T_as_string<uint32_t>(num_in_port_);
-    m_num_in_port = num_in_port_;
-    return;
-}
-
-void OrionConfig::set_num_out_port(uint32_t num_out_port_)
-{
-    m_params_map[string("NUM_OUTPUT_PORT")] = T_as_string<uint32_t>(num_out_port_);
-    m_num_out_port = num_out_port_;
-    return;
-}
-
-void OrionConfig::set_num_vclass(uint32_t num_vclass_)
-{
-    m_params_map[string("NUM_VIRTUAL_CLASS")] = T_as_string<uint32_t>(num_vclass_);
-    m_num_vclass = num_vclass_;
-    return;
-}
-
-void OrionConfig::set_num_vchannel(uint32_t num_vchannel_)
-{
-    m_params_map[string("NUM_VIRTUAL_CHANNEL")] = T_as_string<uint32_t>(num_vchannel_);
-    m_num_vchannel = num_vchannel_;
-    return;
-}
-
-void OrionConfig::set_in_buf_num_set(uint32_t in_buf_num_set_)
-{
-    m_params_map[string("IN_BUF_NUM_SET")] = T_as_string<uint32_t>(in_buf_num_set_);
-    m_in_buf_num_set = in_buf_num_set_;
-    return;
-}
-
-void OrionConfig::set_flit_width(uint32_t flit_width_)
-{
-    m_params_map[string("FLIT_WIDTH")] = T_as_string<uint32_t>(flit_width_);
-    m_flit_width = flit_width_;
-    return;
-}
-
-void OrionConfig::read_file(
-        const string& filename_
-        )
-{
-    ConfigFile cfg_file(filename_);
-
-    uint32_t num_param = sizeof(ms_param_name)/sizeof(string);
-    for(uint32_t i = 0; i < num_param; i++)
-    {
-        cfg_file.readInto(m_params_map[ms_param_name[i]], ms_param_name[i]);
-    }
-
-    m_num_in_port = get<uint32_t>("NUM_INPUT_PORT");
-    m_num_out_port = get<uint32_t>("NUM_OUTPUT_PORT");
-    m_num_vclass = get<uint32_t>("NUM_VIRTUAL_CLASS");
-    m_num_vchannel = get<uint32_t>("NUM_VIRTUAL_CHANNEL");
-    m_in_buf_num_set = get<uint32_t>("IN_BUF_NUM_SET");
-    m_flit_width = get<uint32_t>("FLIT_WIDTH");
-    return;
-}
-
-void OrionConfig::print_config(ostream& out_)
-{
-    uint32_t num_param = sizeof(ms_param_name)/sizeof(string);
-
-    for(uint32_t i = 0; i < num_param; i++)
-    {
-        out_ << ms_param_name[i] << " = " << m_params_map[ms_param_name[i]] << endl;
-    }
-    return;
-}
-
diff --git a/src/mem/ruby/network/orion/OrionConfig.hh b/src/mem/ruby/network/orion/OrionConfig.hh
deleted file mode 100644 (file)
index d9b0e08..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright (c) 2010 Massachusetts Institute of Technology
- * 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.
- *
- * Authors: Chia-Hsin Owen Chen
- */
-
-#ifndef __ORIONCONFIG_H__
-#define __ORIONCONFIG_H__
-
-#include <iostream>
-#include <map>
-#include <sstream>
-
-#include "mem/ruby/network/orion/Type.hh"
-
-class TechParameter;
-
-class OrionConfig
-{
-  public:
-    OrionConfig(const string& cfg_fn_);
-    OrionConfig(const OrionConfig& orion_cfg_);
-    ~OrionConfig();
-
-  public:
-    void set_num_in_port(uint32_t num_in_port_);
-    void set_num_out_port(uint32_t num_out_port_);
-    void set_num_vclass(uint32_t num_vclass_);
-    void set_num_vchannel(uint32_t num_vchannel_);
-    void set_in_buf_num_set(uint32_t in_buf_num_set_);
-    void set_flit_width(uint32_t flit_width_);
-
-    void read_file(const std::string& filename_);
-    void print_config(std::ostream& out_);
-
-  public:
-    template<class T>
-    T get(const std::string& key_) const;
-    const TechParameter* get_tech_param_ptr() const { return m_tech_param_ptr; }
-    uint32_t get_num_in_port() const { return m_num_in_port; }
-    uint32_t get_num_out_port() const { return m_num_out_port; }
-    uint32_t get_num_vclass() const { return m_num_vclass; }
-    uint32_t get_num_vchannel() const { return m_num_vchannel; }
-    uint32_t get_in_buf_num_set() const { return m_in_buf_num_set; }
-    uint32_t get_flit_width() const { return m_flit_width; }
-
-  private:
-    std::map<std::string, std::string> m_params_map;
-
-    TechParameter* m_tech_param_ptr;
-    uint32_t m_num_in_port;
-    uint32_t m_num_out_port;
-    uint32_t m_num_vclass;
-    uint32_t m_num_vchannel;
-    uint32_t m_in_buf_num_set;
-    uint32_t m_flit_width;
-
-  protected:
-    struct key_not_found
-    {
-      std::string m_key;
-      key_not_found(const std::string& key_ = string()) : m_key(key_)
-      {}
-    };
-    template<class T>
-    static T string_as_T(const std::string& str_);
-    template<class T>
-    static std::string T_as_string(const T& t_);
-
-  private:
-    static std::string ms_param_name[];
-};
-
-template<class T>
-T OrionConfig::get(const string& key_) const
-{
-    std::map<std::string, std::string>::const_iterator it;
-
-    it = m_params_map.find(key_);
-    if (it == m_params_map.end()) 
-    {
-        std::cerr << key_ << " NOT FOUND!" << std::endl;
-        throw key_not_found(key_);
-    }
-    return string_as_T<T>(it->second);
-}
-
-    template<class T>
-T OrionConfig::string_as_T(const string& str_)
-{
-    T ret;
-    std::istringstream ist(str_);
-    ist >> ret;
-    return ret;
-}
-
-template<>
-inline string OrionConfig::string_as_T<string>(const string& str_)
-{
-    return str_;
-}
-
-template<>
-inline bool OrionConfig::string_as_T<bool>(const string& str_)
-{
-    bool ret;
-    if (str_ == string("TRUE"))
-    {
-        ret = true;
-    }
-    else if (str_ == string("FALSE"))
-    {
-        ret = false;
-    }
-    else
-    {
-        std::cerr << "Invalid bool value: '" << str_ <<
-          "'. Treated as FALSE." << std::endl;
-        ret = false;
-    }
-    return ret;
-}
-
-template<class T>
-string OrionConfig::T_as_string(const T& t)
-{
-    std::ostringstream ost;
-    ost << t;
-    return ost.str();
-}
-
-#endif
-
diff --git a/src/mem/ruby/network/orion/OrionLink.cc b/src/mem/ruby/network/orion/OrionLink.cc
deleted file mode 100644 (file)
index 77cb2e9..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#include <cassert>
-#include <iostream>
-
-#include "mem/ruby/network/orion/OrionConfig.hh"
-#include "mem/ruby/network/orion/OrionLink.hh"
-#include "mem/ruby/network/orion/Wire.hh"
-
-using namespace std;
-
-OrionLink::OrionLink(
-  double len_,
-  uint32_t line_width_,
-  const OrionConfig* orion_cfg_ptr_
-)
-{
-    assert(len_ == len_);
-    assert(line_width_ == line_width_);
-
-    m_len = len_;
-    m_line_width = line_width_;
-    m_orion_cfg_ptr = orion_cfg_ptr_;
-
-    init();
-}
-
-OrionLink::~OrionLink()
-{}
-
-double OrionLink::calc_dynamic_energy(uint32_t num_bit_flip_) const
-{
-    assert(num_bit_flip_ <= m_line_width);
-    return (num_bit_flip_*(m_dynamic_energy_per_bit/2));
-}
-
-double OrionLink::get_static_power() const
-{
-    return (m_line_width*m_static_power_per_bit);
-}
-
-void OrionLink::init()
-{
-    const TechParameter* tech_param_ptr = m_orion_cfg_ptr->get_tech_param_ptr();
-
-    const string& width_spacing_model_str = m_orion_cfg_ptr->get<string>("WIRE_WIDTH_SPACING");
-    const string& buf_scheme_str = m_orion_cfg_ptr->get<string>("WIRE_BUFFERING_MODEL");
-    bool is_shielding = m_orion_cfg_ptr->get<bool>("WIRE_IS_SHIELDING");
-    Wire wire(width_spacing_model_str, buf_scheme_str, is_shielding, tech_param_ptr);
-
-    m_dynamic_energy_per_bit = wire.calc_dynamic_energy(m_len);
-    m_static_power_per_bit = wire.calc_static_power(m_len);
-    return;
-}
-
-void OrionLink::print() const
-{
-    cout << "Link - Dynamic Energy" << endl;
-    cout << "\t" << "One Bit = " << calc_dynamic_energy(1) << endl;
-    cout << endl;
-    cout << "Link - Static Power" << endl;
-    cout << "\t" << "One Bit = " << get_static_power() << endl;
-    cout << endl;
-    return;
-}
diff --git a/src/mem/ruby/network/orion/OrionLink.hh b/src/mem/ruby/network/orion/OrionLink.hh
deleted file mode 100644 (file)
index 8921317..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#ifndef __ORIONLINK_H__
-#define __ORIONLINK_H__
-
-#include "mem/ruby/network/orion/Type.hh"
-
-class TechParameter;
-class OrionConfig;
-
-class OrionLink
-{
-  public:
-    OrionLink(
-      double len_,
-      uint32_t line_width_,
-      const OrionConfig* orion_cfg_ptr_
-    );
-    ~OrionLink();
-
-  public:
-    double calc_dynamic_energy(uint32_t num_bit_flip_) const;
-    double get_static_power() const;
-
-    void print() const;
-
-  private:
-    void init();
-
-  private:
-    double m_len;
-    uint32_t m_line_width;
-    const OrionConfig* m_orion_cfg_ptr;
-
-    double m_dynamic_energy_per_bit;
-    double m_static_power_per_bit;
-};
-
-#endif
diff --git a/src/mem/ruby/network/orion/OrionRouter.cc b/src/mem/ruby/network/orion/OrionRouter.cc
deleted file mode 100644 (file)
index bcf7c39..0000000
+++ /dev/null
@@ -1,497 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#include <cassert>
-
-#include "mem/ruby/network/orion/Allocator/SWAllocator.hh"
-#include "mem/ruby/network/orion/Allocator/VCAllocator.hh"
-#include "mem/ruby/network/orion/Buffer/Buffer.hh"
-#include "mem/ruby/network/orion/Crossbar/Crossbar.hh"
-#include "mem/ruby/network/orion/Clock.hh"
-#include "mem/ruby/network/orion/OrionConfig.hh"
-#include "OrionRouter.hh"
-
-using namespace std;
-
-OrionRouter::OrionRouter(
-    uint32_t num_in_port_,
-    uint32_t num_out_port_,
-    uint32_t num_vclass_,
-    std::vector<uint32_t > vclass_type_ary_,
-    uint32_t num_vc_per_vclass_,
-    uint32_t in_buf_per_data_vc_,
-    uint32_t in_buf_per_ctrl_vc_,
-    uint32_t flit_width_,
-    OrionConfig* orion_cfg_ptr_
-)
-{
-    assert((num_in_port_ == num_in_port_) && (num_in_port_ != 0));
-    assert((num_out_port_ == num_out_port_) && (num_out_port_ != 0));
-    assert((num_vclass_ == num_vclass_) && (num_vclass_ != 0));
-    assert((num_vc_per_vclass_ == num_vc_per_vclass_) && (num_vc_per_vclass_ != 0));
-    assert(in_buf_per_data_vc_ != 0);
-    assert(in_buf_per_ctrl_vc_ != 0);
-    assert((flit_width_ == flit_width_) && (flit_width_ != 0));
-
-    orion_cfg_ptr_->set_num_in_port(num_in_port_);
-    orion_cfg_ptr_->set_num_out_port(num_out_port_);
-    orion_cfg_ptr_->set_num_vclass(num_vclass_);
-    orion_cfg_ptr_->set_flit_width(flit_width_);
-    m_orion_cfg_ptr = orion_cfg_ptr_;
-
-    m_num_in_port = m_orion_cfg_ptr->get<uint32_t>("NUM_INPUT_PORT");
-    m_num_out_port = m_orion_cfg_ptr->get<uint32_t>("NUM_OUTPUT_PORT");
-    m_flit_width = m_orion_cfg_ptr->get<uint32_t>("FLIT_WIDTH");
-    m_num_vclass = m_orion_cfg_ptr->get<uint32_t>("NUM_VIRTUAL_CLASS");
-
-    m_num_vc_per_vclass_ary = new uint32_t [m_num_vclass];
-    m_in_buf_num_set_ary = new uint32_t [m_num_vclass];
-    for (int i = 0; i < m_num_vclass; i++)
-    {
-        // can also suppport different vcs per vclass
-        m_num_vc_per_vclass_ary[i] = num_vc_per_vclass_;
-
-        if (vclass_type_ary_[i] == 0) // ctrl
-            m_in_buf_num_set_ary[i] = in_buf_per_ctrl_vc_;
-        else if (vclass_type_ary_[i] == 1) // data
-            m_in_buf_num_set_ary[i] = in_buf_per_data_vc_;
-        else
-            assert(0);
-    }
-
-    init();
-}
-
-OrionRouter::~OrionRouter()
-{
-    delete[] m_num_vc_per_vclass_ary;
-    delete[] m_in_buf_num_set_ary;
-
-    if (m_in_buf_ary_ptr)
-    {
-        for (uint32_t i = 0; i < m_num_vclass; i++)
-        {
-            delete m_in_buf_ary_ptr[i];
-        }
-        delete[] m_in_buf_ary_ptr;
-    }
-
-    if (m_va_ary_ptr)
-    {
-        for (uint32_t i = 0; i < m_num_vclass; i++)
-        {
-            delete m_va_ary_ptr[i];
-        }
-        delete[] m_va_ary_ptr;
-    }
-
-    delete m_xbar_ptr;
-    delete m_sa_ptr;
-    delete m_clk_ptr;
-}
-
-double OrionRouter::calc_dynamic_energy_buf(uint32_t vclass_id_, bool is_read_, bool is_max_) const
-{
-    assert(vclass_id_ < m_num_vclass);
-    if (m_in_buf_ary_ptr)
-    {
-        if (m_in_buf_ary_ptr[vclass_id_])
-        {
-            return m_in_buf_ary_ptr[vclass_id_]->get_dynamic_energy(is_read_, is_max_);
-        }
-        else
-        {
-            return 0;
-        }
-    }
-    else
-    {
-        return 0;
-    }
-}
-
-double OrionRouter::calc_dynamic_energy_xbar(bool is_max_) const
-{
-    if (m_xbar_ptr)
-    {
-        return m_xbar_ptr->get_dynamic_energy(is_max_);
-    }
-    else
-    {
-        return 0;
-    }
-}
-
-double OrionRouter::calc_dynamic_energy_local_vc_arb(uint32_t vclass_id_, double num_req_, bool is_max_) const
-{
-    assert(vclass_id_ < m_num_vclass);
-
-    if (m_va_ary_ptr)
-    {
-        if (m_va_ary_ptr[vclass_id_])
-        {
-            return m_va_ary_ptr[vclass_id_]->get_dynamic_energy_local_vc_arb(num_req_, is_max_);
-        }
-        else
-        {
-            return 0;
-        }
-    }
-    else
-    {
-        return 0;
-    }
-}
-
-double OrionRouter::calc_dynamic_energy_global_vc_arb(uint32_t vclass_id_, double num_req_, bool is_max_) const
-{
-    assert(vclass_id_ < m_num_vclass);
-
-    if (m_va_ary_ptr)
-    {
-        if (m_va_ary_ptr[vclass_id_])
-        {
-            return m_va_ary_ptr[vclass_id_]->get_dynamic_energy_global_vc_arb(num_req_, is_max_);
-        }
-        else
-        {
-            return 0;
-        }
-    }
-    else
-    {
-        return 0;
-    }
-}
-
-//double OrionRouter::calc_dynamic_energy_vc_select(bool is_read_, bool is_max_) const
-//{
-//  if (m_vc_select_ptr)
-//  {
-//    return m_vc_select_ptr->get_dynamic_energy_vc_select(is_read_, is_max_);
-//  }
-//  else
-//  {
-//    return 0;
-//  }
-//}
-
-double OrionRouter::calc_dynamic_energy_local_sw_arb(double num_req_, bool is_max_) const
-{
-    if (m_sa_ptr)
-    {
-        return m_sa_ptr->get_dynamic_energy_local_sw_arb(num_req_, is_max_);
-    }
-    else
-    {
-        return 0;
-    }
-}
-
-double OrionRouter::calc_dynamic_energy_global_sw_arb(double num_req_, bool is_max_) const
-{
-    if (m_sa_ptr)
-    {
-        return m_sa_ptr->get_dynamic_energy_global_sw_arb(num_req_, is_max_);
-    }
-    else
-    {
-        return 0;
-    }
-}
-
-double OrionRouter::calc_dynamic_energy_clock() const
-{
-    if (m_clk_ptr)
-    {
-        return m_clk_ptr->get_dynamic_energy();
-    }
-    else
-    {
-        return 0;
-    }
-}
-
-double OrionRouter::get_static_power_buf() const
-{
-    if (m_in_buf_ary_ptr)
-    {
-        double total_static_power = 0;
-
-        for (uint32_t i = 0; i < m_num_vclass; i++)
-        {
-            uint32_t num_in_buf;
-            if (m_is_in_shared_buf)
-            {
-                num_in_buf = m_num_in_port;
-            }
-            else
-            {
-                num_in_buf = m_num_vc_per_vclass_ary[i]*m_num_in_port;
-            }
-            total_static_power += m_in_buf_ary_ptr[i]->get_static_power()*(double)num_in_buf;
-        }
-        return total_static_power;
-    }
-    else
-    {
-        return 0;
-    }
-}
-
-double OrionRouter::get_static_power_xbar() const
-{
-    if (m_xbar_ptr)
-    {
-        return m_xbar_ptr->get_static_power();
-    }
-    else
-    {
-        return 0;
-    }
-}
-
-double OrionRouter::get_static_power_va() const
-{
-    if (m_va_ary_ptr)
-    {
-        double total_static_power = 0;
-
-        for (uint32_t i = 0; i < m_num_vclass; i++)
-        {
-            total_static_power += m_va_ary_ptr[i]->get_static_power();
-        }
-        return total_static_power;
-    }
-    else
-    {
-        return 0;
-    }
-}
-
-//double OrionRouter::get_static_power_vc_select() const
-//{
-//  if (m_vc_select_ptr)
-//  {
-//    return m_vc_select_ptr->get_static_power();
-//  }
-//  else
-//  {
-//    return 0;
-//  }
-//}
-
-double OrionRouter::get_static_power_sa() const
-{
-    if (m_sa_ptr)
-    {
-        return m_sa_ptr->get_static_power();
-    }
-    else
-    {
-        return 0;
-    }
-}
-
-double OrionRouter::get_static_power_clock() const
-{
-    if (m_clk_ptr)
-    {
-        return m_clk_ptr->get_static_power();
-    }
-    else
-    {
-        return 0;
-    }
-}
-
-void OrionRouter::init()
-{
-    m_total_num_vc = 0;
-    for (uint32_t i = 0; i < m_num_vclass; i++)
-    {
-        m_total_num_vc += m_num_vc_per_vclass_ary[i];
-    }
-
-    if (m_total_num_vc > 1)
-    {
-        m_is_in_shared_buf = m_orion_cfg_ptr->get<bool>("IS_IN_SHARED_BUFFER");
-        m_is_out_shared_buf = m_orion_cfg_ptr->get<bool>("IS_OUT_SHARED_BUFFER");
-        m_is_in_shared_switch = m_orion_cfg_ptr->get<bool>("IS_IN_SHARED_SWITCH");
-        m_is_out_shared_switch = m_orion_cfg_ptr->get<bool>("IS_OUT_SHARED_SWITCH");
-    }
-    else
-    {
-        m_is_in_shared_buf = false;
-        m_is_out_shared_buf = false;
-        m_is_in_shared_switch = false;
-        m_is_out_shared_switch = false;
-    }
-
-    //input buffer
-    bool is_in_buf = m_orion_cfg_ptr->get<bool>("IS_INPUT_BUFFER");
-    if (is_in_buf)
-    {
-        bool is_fifo = true;
-        bool is_outdrv = (!m_is_in_shared_buf) && (m_is_in_shared_switch);
-        const string& in_buf_model_str = m_orion_cfg_ptr->get<string>("IN_BUF_MODEL");
-        m_in_buf_ary_ptr = new Buffer* [m_num_vclass];
-        for (uint32_t i = 0; i < m_num_vclass; i++)
-        {
-            uint32_t in_buf_num_read_port = m_orion_cfg_ptr->get<uint32_t>("IN_BUF_NUM_READ_PORT");
-            uint32_t in_buf_num_set = m_in_buf_num_set_ary[i];
-            m_in_buf_ary_ptr[i] = new Buffer(in_buf_model_str, is_fifo, is_outdrv, 
-                    in_buf_num_set, m_flit_width, in_buf_num_read_port, 1, m_orion_cfg_ptr);
-        }
-    }
-    else
-    {
-        m_in_buf_ary_ptr = NULL;
-    }
-
-    bool is_out_buf = m_orion_cfg_ptr->get<bool>("IS_OUTPUT_BUFFER");
-
-    //crossbar
-    uint32_t num_switch_in;
-    if (is_in_buf)
-    {
-        if (m_is_in_shared_buf)
-        {
-            uint32_t in_buf_num_read_port = m_orion_cfg_ptr->get<uint32_t>("IN_BUF_NUM_READ_PORT");
-            num_switch_in = in_buf_num_read_port*m_num_in_port;
-        }
-        else if (m_is_in_shared_switch)
-        {
-            num_switch_in = 1*m_num_in_port;
-        }
-        else
-        {
-            num_switch_in = m_total_num_vc*m_num_in_port;
-        }
-    }
-    else
-    {
-        num_switch_in = 1*m_num_in_port;
-    }
-    uint32_t num_switch_out;
-    if (is_out_buf)
-    {
-        if (m_is_out_shared_buf)
-        {
-            uint32_t out_buf_num_write_port = m_orion_cfg_ptr->get<uint32_t>("OUT_BUF_NUM_WRITE_PORT");
-            num_switch_out = out_buf_num_write_port*m_num_out_port;
-        }
-        else if (m_is_out_shared_switch)
-        {
-            num_switch_out = 1*m_num_out_port;
-        }
-        else
-        {
-            num_switch_out = m_total_num_vc*m_num_out_port;
-        }
-    }
-    else
-    {
-        num_switch_out = 1*m_num_out_port;
-    }
-    const string& xbar_model_str = m_orion_cfg_ptr->get<string>("CROSSBAR_MODEL");
-    m_xbar_ptr = Crossbar::create_crossbar(xbar_model_str, 
-            num_switch_in, num_switch_out, m_flit_width, m_orion_cfg_ptr);
-
-    //vc allocator
-    const string& va_model_str = m_orion_cfg_ptr->get<string>("VA_MODEL");
-    m_va_ary_ptr = new VCAllocator* [m_num_vclass];
-    //m_vc_select_ary_ptr = new VCAllocator* [m_num_vclass];
-    for (uint32_t i = 0; i < m_num_vclass; i++)
-    {
-        m_va_ary_ptr[i] = VCAllocator::create_vcallocator(va_model_str,
-                m_num_in_port, m_num_out_port, 1, m_num_vc_per_vclass_ary[i],
-                m_orion_cfg_ptr);
-        //m_vc_select_ary_ptr[i] = VCAllocator::create_vcallocator("VC_SELECT",
-        //  m_num_in_port, m_num_out_port, 1, m_num_vc_per_vclass_ary[i], m_orion_cfg_ptr);
-    }
-
-    //sw allocator
-    m_sa_ptr = SWAllocator::create_swallocator(
-            m_num_in_port, m_num_out_port, 1, m_total_num_vc, 
-            m_xbar_ptr, m_orion_cfg_ptr);
-
-    //cloc
-    m_clk_ptr = new Clock(is_in_buf, m_is_in_shared_switch, is_out_buf, m_is_out_shared_switch, m_orion_cfg_ptr);
-
-    return;
-}
-
-void OrionRouter::print() const
-{
-    if (m_in_buf_ary_ptr)
-    {
-        for (uint32_t i = 0; i < m_num_vclass; i++)
-        {
-            cout << "VClass " << i << endl;
-            if (m_in_buf_ary_ptr[i]) m_in_buf_ary_ptr[i]->print_all();
-        }
-    }
-    m_xbar_ptr->print_all();
-    for (uint32_t i = 0; i < m_num_vclass; i++)
-    {
-        cout << "VClass " << i << endl;
-        m_va_ary_ptr[i]->print_all();
-        //m_vc_select_ary_ptr[i]->print_all();
-    }
-    m_sa_ptr->print_all();
-
-    //cout << "Router - Dynamic Energy" << endl;
-    //cout << "\t" << "Buffer Read = " << calc_dynamic_energy_buf(true) << endl;
-    //cout << "\t" << "Buffer Write = " << calc_dynamic_energy_buf(false) << endl;
-    //cout << "\t" << "Crossbar = " << calc_dynamic_energy_xbar() << endl;
-    //cout << "\t" << "Local VC Allocator(1) = " << calc_dynamic_energy_local_vc_arb(1) << endl;
-    //cout << "\t" << "Global VC Allocator(1) = " << calc_dynamic_energy_global_vc_arb(1) << endl;
-    //cout << "\t" << "VC Select Read = " << calc_dynamic_energy_vc_select(true) << endl;
-    //cout << "\t" << "VC Select Write = " << calc_dynamic_energy_vc_select(false) << endl;
-    //cout << "\t" << "Local SW Allocator(2) = " << calc_dynamic_energy_local_sw_arb(1) << endl;
-    //cout << "\t" << "Global SW Allocator(2) = " << calc_dynamic_energy_global_sw_arb(1) << endl;
-    //cout << "\t" << "Clock = " << calc_dynamic_energy_clock() << endl;
-    //cout << endl;
-    //cout << "Router - Static Power" << endl;
-    //cout << "\t" << "Buffer = " << get_static_power_buf() << endl;
-    //cout << "\t" << "Crossbar = " << get_static_power_xbar() << endl;
-    //cout << "\t" << "VC Allocator = " << get_static_power_va() << endl;
-    //cout << "\t" << "SW Allocator = " << get_static_power_sa() << endl;
-    //cout << "\t" << "Clock = " << get_static_power_clock() << endl;
-    //cout << endl;
-    return;
-}
-
diff --git a/src/mem/ruby/network/orion/OrionRouter.hh b/src/mem/ruby/network/orion/OrionRouter.hh
deleted file mode 100644 (file)
index ac3d2e9..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#ifndef __ORIONROUTER_H__
-#define __ORIONROUTER_H__
-
-#include <vector>
-
-#include "mem/ruby/network/orion/Type.hh"
-
-class OrionConfig;
-class Buffer;
-class Crossbar;
-class VCAllocator;
-class SWAllocator;
-class Clock;
-
-class OrionRouter
-{
-  public:
-    OrionRouter(
-        const OrionConfig* orion_cfg_ptr_
-    );
-
-    //values in cfg file will be modified
-    OrionRouter(
-      uint32_t num_in_port_,
-      uint32_t num_out_port_,
-      uint32_t num_vclass_,
-      std::vector<uint32_t > vclass_type_,
-      uint32_t num_vc_per_vclass_,
-      uint32_t in_buf_per_data_vc_,
-      uint32_t in_buf_per_ctrl_vc_,
-      uint32_t flit_width_,
-      OrionConfig* orion_cfg_ptr_
-    );
-    ~OrionRouter();
-
-  public:
-    //double calc_dynamic_energy(double e_fin_, bool is_max_ = false) const;
-    //double calc_dynamic_energy_in_buf(bool is_read_, bool is_max_ = false) const;
-    //double calc_dynamic_energy_out_buf(bool is_read_, bool is_max_ = false) const;
-    double calc_dynamic_energy_buf(uint32_t vclass_id_, bool is_read_, bool is_max_ = false) const;
-    double calc_dynamic_energy_xbar(bool is_max_ = false) const;
-    double calc_dynamic_energy_local_vc_arb(uint32_t vclass_id_, double num_req_, bool is_max_ = false) const;
-    double calc_dynamic_energy_global_vc_arb(uint32_t vclass_id_, double num_req_, bool is_max_ = false) const;
-    //double calc_dynamic_energy_vc_select(uint32_t vclass_id_, bool is_read_, bool is_max_ = false) const;
-    double calc_dynamic_energy_local_sw_arb(double num_req_, bool is_max_ = false) const;
-    double calc_dynamic_energy_global_sw_arb(double num_req_, bool is_max_ = false) const;
-    double calc_dynamic_energy_clock() const;
-
-    double get_static_power_buf() const;
-    double get_static_power_xbar() const;
-    double get_static_power_va() const;
-    double get_static_power_sa() const;
-    double get_static_power_clock() const;
-
-    void print() const;
-
-    void init();
-
-  private:
-    const OrionConfig* m_orion_cfg_ptr;
-
-    uint32_t m_num_in_port;
-    uint32_t m_num_out_port;
-    uint32_t m_flit_width;
-    uint32_t m_num_vclass;
-    uint32_t num_vc_per_vclass;
-    uint32_t m_total_num_vc;
-    uint32_t* m_num_vc_per_vclass_ary;
-    uint32_t* m_in_buf_num_set_ary;
-    bool m_is_in_shared_buf;
-    bool m_is_out_shared_buf;
-    bool m_is_in_shared_switch;
-    bool m_is_out_shared_switch;
-
-    Buffer** m_in_buf_ary_ptr;
-    Crossbar* m_xbar_ptr;
-    VCAllocator** m_va_ary_ptr;
-    //VCAllocator** m_vc_select_ary_ptr;
-    SWAllocator* m_sa_ptr;
-    Clock* m_clk_ptr;
-};
-
-#endif
-
diff --git a/src/mem/ruby/network/orion/SConscript b/src/mem/ruby/network/orion/SConscript
deleted file mode 100644 (file)
index 4a0e8fa..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-# 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.
-#
-# Authors: Tushar Krishna
-
-Import('*')
-
-if env['PROTOCOL'] == 'None':
-    Return()
-
-Source('NetworkPower.cc')
-Source('Clock.cc')
-Source('ConfigFile.cc')
-Source('FlipFlop.cc')
-Source('OrionConfig.cc')
-Source('OrionLink.cc')
-Source('OrionRouter.cc')
-Source('TechParameter.cc')
-Source('Wire.cc')
diff --git a/src/mem/ruby/network/orion/TechParameter.cc b/src/mem/ruby/network/orion/TechParameter.cc
deleted file mode 100644 (file)
index d6c467c..0000000
+++ /dev/null
@@ -1,1476 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#include <cmath>
-#include <cstdlib>
-#include <iostream>
-#include <string>
-
-#include "mem/ruby/network/orion/OrionConfig.hh"
-#include "mem/ruby/network/orion/TechParameter.hh"
-
-using namespace std;
-
-TechParameter::TechParameter(
-  const OrionConfig* orion_cfg_ptr_
-)
-{
-    m_orion_cfg_ptr = orion_cfg_ptr_;
-    uint32_t tech_node = m_orion_cfg_ptr->get<uint32_t>("TECH_NODE");
-    switch(tech_node)
-    {
-        case 800:
-        case 400:
-        case 350:
-        case 250:
-        case 180:
-        case 110:
-        case 90:
-        case 65:
-        case 45:
-        case 32:
-            m_tech_node = tech_node;
-            break;
-        default:
-            cerr << "Invalid technology node (" << tech_node << ")" << endl;
-            exit(1);
-    }
-
-    const string& transistor_type_str = m_orion_cfg_ptr->get<string>("TRANSISTOR_TYPE");
-    if(transistor_type_str == "LVT")
-    {
-        m_transistor_type = LVT;
-    }
-    else if(transistor_type_str == "NVT")
-    {
-        m_transistor_type = NVT;
-    }
-    else if(transistor_type_str == "HVT")
-    {
-        m_transistor_type = HVT;
-    }
-    else
-    {
-        cerr << "Invalid transistor type (" << transistor_type_str << ")" << endl;
-        exit(1);
-    }
-
-    m_vdd = m_orion_cfg_ptr->get<double>("VDD");
-    m_freq = m_orion_cfg_ptr->get<double>("FREQUENCY");
-    m_period = 1 / m_freq;
-
-    const string& wire_layer_type_str = m_orion_cfg_ptr->get<string>("WIRE_LAYER_TYPE");
-    if (wire_layer_type_str == "LOCAL")
-    {
-        m_wire_layer_type = LOCAL;
-    }
-    else if (wire_layer_type_str == "INTERMEDIATE")
-    {
-        m_wire_layer_type = INTERMEDIATE;
-    }
-    else if (wire_layer_type_str == "GLOBAL")
-    {
-        m_wire_layer_type = GLOBAL;
-    }
-    else
-    {
-        cerr << "Invalid wire layer type (" << wire_layer_type_str << ")" << endl;
-        exit(1);
-    }
-
-    init();
-}
-
-TechParameter::~TechParameter()
-{}
-
-void TechParameter::init()
-{
-    m_af = 5.000000e-01;
-    m_max_n = 8;
-    m_max_subarrays = 8;
-    m_max_spd = 8;
-    m_vth_outdr_nor = 4.310000e-01;
-    m_vth_comp_inv = 4.370000e-01;
-    m_bit_out = 64;
-    m_ruu_issue_width = 4;
-    m_amp_idsat = 5.000000e-04;
-    m_vs_inv = 4.560000e-01;
-    m_gen_power_factor = 1.310000e+00;
-    m_vth_nand_60x90 = 5.610000e-01;
-    m_fudge_factor = 1.000000e+00;
-    m_vth_outdrive = 4.250000e-01;
-    m_vth_muxdrv1 = 4.370000e-01;
-    m_vth_muxdrv2 = 4.860000e-01;
-    m_normalize_scale = 6.488730e-10;
-    m_vth_muxdrv3 = 4.370000e-01;
-    m_address_bits = 64;
-    m_ruu_size = 16;
-    m_vth_nor_12x4x1 = 5.030000e-01;
-    m_vth_nor_12x4x2 = 4.520000e-01;
-    m_vth_outdr_inv = 4.370000e-01;
-    m_vth_nor_12x4x3 = 4.170000e-01;
-    m_vth_eval_inv = 2.670000e-01;
-    m_vth_nor_12x4x4 = 3.900000e-01;
-    m_res_ialu = 4;
-    m_vth_outdr_nand = 4.410000e-01;
-    m_vth_inv_100x60 = 4.380000e-01;
-
-    if((m_tech_node >= 110))
-    {
-        init_tech_110_800();
-    }
-    else
-    {
-        init_tech_32_90();
-    }
-    return;
-}
-
-void TechParameter::init_tech_110_800()
-{
-    m_Cgatepass = 1.450000e-15;
-    m_Cpdiffarea = 6.060000e-16; 
-    m_Cpdiffside = 2.400000e-16; 
-    m_Cndiffside = 2.400000e-16;
-    m_Cndiffarea = 6.600000e-16; 
-    m_Cnoverlap = 1.320000e-16;
-    m_Cpoverlap = 1.210000e-16;
-    m_Cgate = 9.040000e-15;
-    m_Cpdiffovlp = 1.380000e-16;
-    m_Cndiffovlp = 1.380000e-16;
-    m_Cnoxideovlp = 2.230000e-16;
-    m_Cpoxideovlp = 3.380000e-16;
-
-    //TODO -- data not imported
-    return;
-}
-
-void TechParameter::init_tech_32_90()
-{
-    switch(m_transistor_type)
-    {
-        case LVT:
-            m_Cgatepass = 1.5225000e-14;
-            m_Cpdiffarea = 6.05520000e-15;
-            m_Cpdiffside = 2.38380000e-15;
-            m_Cndiffside = 2.8500000e-16; 
-            m_Cndiffarea = 5.7420000e-15;
-            m_Cnoverlap = 1.320000e-16;
-            m_Cpoverlap = 1.210000e-16;
-            m_Cgate = 7.8648000e-14;
-            m_Cpdiffovlp = 1.420000e-16;
-            m_Cndiffovlp = 1.420000e-16;
-            m_Cnoxideovlp = 2.580000e-16;
-            m_Cpoxideovlp = 3.460000e-16;
-            break;
-        case NVT:
-            m_Cgatepass = 8.32500e-15;
-            m_Cpdiffarea = 3.330600e-15;
-            m_Cpdiffside = 1.29940000e-15;
-            m_Cndiffside = 2.5500000e-16;
-            m_Cndiffarea = 2.9535000e-15;
-            m_Cnoverlap = 1.270000e-16;
-            m_Cpoverlap = 1.210000e-16;
-            m_Cgate = 3.9664000e-14;
-            m_Cpdiffovlp = 1.31000e-16;
-            m_Cndiffovlp = 1.310000e-16;
-            m_Cnoxideovlp = 2.410000e-16;  
-            m_Cpoxideovlp = 3.170000e-16;
-            break;
-        case HVT:
-            m_Cgatepass = 1.45000e-15;
-            m_Cpdiffarea = 6.06000e-16;
-            m_Cpdiffside = 2.150000e-16;
-            m_Cndiffside = 2.25000e-16;  
-            m_Cndiffarea = 1.650000e-16;
-            m_Cnoverlap = 1.220000e-16;
-            m_Cpoverlap = 1.210000e-16;
-            m_Cgate = 6.8000e-16;
-            m_Cpdiffovlp = 1.20000e-16;
-            m_Cndiffovlp = 1.20000e-16;
-            m_Cnoxideovlp = 2.230000e-16;
-            m_Cpoxideovlp = 2.880000e-16;
-            break;
-        default:
-            cerr << "Invalid transistor type (" << m_transistor_type << ")" << endl;
-            exit(1);
-    }
-
-    m_Vbitpre = m_vdd;
-    m_Vbitsense = 0.08;
-    m_EnergyFactor = m_vdd*m_vdd;
-    m_SenseEnergyFactor = m_vdd*m_vdd/2;
-    m_SenseEnergyFactor2 = (m_Vbitpre-m_Vbitsense)*(m_Vbitpre-m_Vbitsense);
-    m_SenseEnergyFactor3 = m_Vbitsense*m_Vbitsense;
-
-    if((m_tech_node == 90) || (m_tech_node == 65))
-    {
-        m_SCALE_T = 1;
-        m_SCALE_M = 1;
-        m_SCALE_S = 1;
-        m_SCALE_W = 1;
-        m_SCALE_H = 1;
-        m_SCALE_BW = 1;
-        m_SCALE_Crs = 1;
-    }
-    else if(m_tech_node == 45)
-    {
-        switch(m_transistor_type)
-        {
-            case LVT:
-                m_SCALE_T = 0.9123404;
-                m_SCALE_M = 0.6442105;
-                m_SCALE_S = 2.3352694;
-                m_SCALE_W = 0.51;
-                m_SCALE_H = 0.88;
-                m_SCALE_BW = 0.73;
-                m_SCALE_Crs = 0.7;
-                break;
-            case NVT:
-                m_SCALE_T = 0.8233582;
-                m_SCALE_M = 0.6442105;
-                m_SCALE_S = 2.1860558;
-                m_SCALE_W = 0.51;
-                m_SCALE_H = 0.88;
-                m_SCALE_BW = 0.73;
-                m_SCALE_Crs = 0.7;
-                break;
-            case HVT:
-                m_SCALE_T = 0.73437604;
-                m_SCALE_M = 0.6442105;
-                m_SCALE_S = 2.036842;
-                m_SCALE_W = 0.51;
-                m_SCALE_H = 0.88;
-                m_SCALE_BW = 0.73;
-                m_SCALE_Crs = 0.7;
-                break;
-            default:
-                cerr << "Invalid transistor type (" << m_transistor_type << ")" << endl;
-                exit(1);
-        }
-    }
-    else if(m_tech_node == 32)
-    {
-        switch(m_transistor_type)
-        {
-            case LVT:
-                m_SCALE_T = 0.7542128;
-                m_SCALE_M = 0.4863158;
-                m_SCALE_S = 2.9692334;
-                m_SCALE_W = 0.26;
-                m_SCALE_H = 0.77;
-                m_SCALE_BW = 0.53;
-                m_SCALE_Crs = 0.49;
-                break;
-            case NVT:
-                m_SCALE_T = 0.6352095;
-                m_SCALE_M = 0.4863158;
-                m_SCALE_S = 3.1319851;
-                m_SCALE_W = 0.26;
-                m_SCALE_H = 0.77;
-                m_SCALE_BW = 0.53;
-                m_SCALE_Crs = 0.49;
-                break;
-            case HVT:
-                m_SCALE_T = 0.5162063;
-                m_SCALE_M = 0.4863158;
-                m_SCALE_S = 3.294737;
-                m_SCALE_W = 0.26;
-                m_SCALE_H = 0.77;
-                m_SCALE_BW = 0.53;
-                m_SCALE_Crs = 0.49;
-                break;
-            default:
-                cerr << "Invalid transistor type (" << m_transistor_type << ")" << endl;
-                exit(1);
-        }
-    }
-    else
-    {
-        cerr << "Invalid technology node (" << m_tech_node << ")" << endl;
-        exit(1);
-    }
-
-    if(m_tech_node == 90)
-    {
-        m_LSCALE = 0.125;
-        m_MSCALE = (m_LSCALE * .624 / .2250);
-
-        /* bit width of RAM cell in um */
-        m_BitWidth = 2.0;
-
-        /* bit height of RAM cell in um */
-        m_BitHeight = 2.0;
-
-        m_Cout = 6.25e-14;
-
-        m_BitlineSpacing = 1.1;
-        m_WordlineSpacing = 1.1;
-
-        m_RegCellHeight = 2.8;
-        m_RegCellWidth = 1.9;
-
-        m_Cwordmetal = 1.936e-15;
-        m_Cbitmetal = 3.872e-15;
-
-        m_Cmetal = m_Cbitmetal/16;
-        m_CM2metal = m_Cbitmetal/16;
-        m_CM3metal = m_Cbitmetal/16;
-
-        /* minimal spacing metal cap per unit length */
-        m_CCmetal = 0.18608e-15;
-        m_CCM2metal = 0.18608e-15;
-        m_CCM3metal = 0.18608e-15;
-        /* 2x minimal spacing metal cap per unit length */
-        m_CC2metal = 0.12529e-15;
-        m_CC2M2metal = 0.12529e-15;
-        m_CC2M3metal = 0.12529e-15;
-        /* 3x minimal spacing metal cap per unit length */
-        m_CC3metal = 0.11059e-15;
-        m_CC3M2metal = 0.11059e-15;
-        m_CC3M3metal = 0.11059e-15;
-
-        /* corresponds to clock network*/
-        m_Clockwire = 404.8e-12;
-        m_Reswire = 36.66e3;
-        m_invCap = 3.816e-14;
-        m_Resout = 213.6;
-
-        /* um */
-        m_Leff = 0.1;
-        /* length unit in um */
-        m_Lamda = m_Leff * 0.5;
-
-        /* fF/um */
-        m_Cpolywire = 2.6317875e-15;
-
-        /* ohms*um of channel width */
-        m_Rnchannelstatic = 3225;
-
-        /* ohms*um of channel width */
-        m_Rpchannelstatic = 7650;
-
-        //derived from Cacti 5.3
-        switch(m_transistor_type)
-        {
-            case LVT:
-                m_Rnchannelon = 1716;
-                m_Rpchannelon = 4202;
-                break;
-            case NVT:
-                m_Rnchannelon = 4120;
-                m_Rpchannelon = 10464;
-                break;
-            case HVT:
-                m_Rnchannelon = 4956;
-                m_Rpchannelon = 12092;
-                break;
-            default:
-                cerr << "Invalid transistor type (" << m_transistor_type << ")" << endl;
-                exit(1);
-        }
-
-
-        m_Rbitmetal = 1.38048;
-        m_Rwordmetal = 0.945536;
-
-        switch(m_transistor_type)
-        {
-            case LVT:
-                m_Vt = 0.237;
-                break;
-            case NVT:
-                m_Vt = 0.307;
-                break;
-            case HVT:
-                m_Vt = 0.482;
-                break;
-            default:
-                cerr << "Invalid transistor type (" << m_transistor_type << ")" << endl;
-                exit(1);
-        }
-
-        /* transistor widths in um = as described in Cacti 1.0 tech report, appendix 1;*/
-        switch(m_transistor_type)
-        {
-            case LVT:
-                m_Wdecdrivep = 12.50;
-                m_Wdecdriven = 6.25;
-                m_Wdec3to8n = 11.25;
-                m_Wdec3to8p = 7.5;
-                m_WdecNORn = 0.30;
-                m_WdecNORp = 1.5;
-                m_Wdecinvn = 0.63;
-                m_Wdecinvp = 1.25;
-                m_Wdff = 12.29;
-
-                m_Wworddrivemax = 12.50;
-                m_Wmemcella = 0.35;
-                m_Wmemcellr = 0.50;
-                m_Wmemcellw = 0.26;
-                m_Wmemcellbscale = 2;
-                m_Wbitpreequ = 1.25;
-
-                m_Wbitmuxn = 1.25;
-                m_WsenseQ1to4 = 0.55;
-                m_Wcompinvp1 = 1.25;
-                m_Wcompinvn1 = 0.75;
-                m_Wcompinvp2 = 2.50;
-                m_Wcompinvn2 = 1.50;
-                m_Wcompinvp3 = 5.15;
-                m_Wcompinvn3 = 3.25;
-                m_Wevalinvp = 2.50;
-                m_Wevalinvn = 9.45;
-
-                m_Wcompn = 1.25;
-                m_Wcompp = 3.75;
-                m_Wcomppreequ = 5.15;
-                m_Wmuxdrv12n = 3.75;
-                m_Wmuxdrv12p = 6.25;
-                m_WmuxdrvNANDn = 2.50;
-                m_WmuxdrvNANDp = 10.33;
-                m_WmuxdrvNORn = 7.33;
-                m_WmuxdrvNORp = 10.66;
-                m_Wmuxdrv3n = 24.85;
-                m_Wmuxdrv3p = 60.25;
-                m_Woutdrvseln = 1.55;
-                m_Woutdrvselp = 2.33;
-                m_Woutdrvnandn = 3.27;
-                m_Woutdrvnandp = 1.25;
-                m_Woutdrvnorn = 0.75;
-                m_Woutdrvnorp = 5.33;
-                m_Woutdrivern = 6.16;
-                m_Woutdriverp = 9.77;
-                m_Wbusdrvn = 6.16;
-                m_Wbusdrvp = 10.57;
-
-                m_Wcompcellpd2 = 0.33;
-                m_Wcompdrivern = 50.95;
-                m_Wcompdriverp = 102.67;
-                m_Wcomparen2 = 5.13;
-                m_Wcomparen1 = 2.5;
-                m_Wmatchpchg = 1.25;
-                m_Wmatchinvn = 1.33;
-                m_Wmatchinvp = 2.77;
-                m_Wmatchnandn = 2.33;
-                m_Wmatchnandp = 1.76;
-                m_Wmatchnorn = 2.66;
-                m_Wmatchnorp = 1.15;
-
-                m_WSelORn = 1.25;
-                m_WSelORprequ = 5.15;
-                m_WSelPn = 1.86;
-                m_WSelPp = 1.86;
-                m_WSelEnn = 0.63;
-                m_WSelEnp = 1.25;
-
-                m_Wsenseextdrv1p = 5.15;
-                m_Wsenseextdrv1n = 3.05;
-                m_Wsenseextdrv2p = 25.20;
-                m_Wsenseextdrv2n = 15.65;
-                break;
-            case NVT:
-                m_Wdecdrivep = 11.57;
-                m_Wdecdriven = 5.74;
-                m_Wdec3to8n = 10.31;
-                m_Wdec3to8p = 6.87;
-                m_WdecNORn = 0.28;
-                m_WdecNORp = 1.38;
-                m_Wdecinvn = 0.58;
-                m_Wdecinvp = 1.15;
-                m_Wdff = 6.57;
-
-                m_Wworddrivemax = 11.57;
-                m_Wmemcella = 0.33;
-                m_Wmemcellr = 0.46;
-                m_Wmemcellw = 0.24;
-                m_Wmemcellbscale = 2;
-                m_Wbitpreequ = 1.15;
-
-                m_Wbitmuxn = 1.15;
-                m_WsenseQ1to4 = 0.49;
-                m_Wcompinvp1 = 1.17;
-                m_Wcompinvn1 = 0.69;
-                m_Wcompinvp2 = 2.29;
-                m_Wcompinvn2 = 1.38;
-                m_Wcompinvp3 = 4.66;
-                m_Wcompinvn3 = 2.88;
-                m_Wevalinvp = 2.29;
-                m_Wevalinvn = 8.89;
-
-                m_Wcompn = 1.15;
-                m_Wcompp = 3.44;
-                m_Wcomppreequ = 4.66;
-                m_Wmuxdrv12n = 3.44;
-                m_Wmuxdrv12p = 5.74;
-                m_WmuxdrvNANDn = 2.29;
-                m_WmuxdrvNANDp = 9.33;
-                m_WmuxdrvNORn = 6.79;
-                m_WmuxdrvNORp = 9.49;
-                m_Wmuxdrv3n = 22.83;
-                m_Wmuxdrv3p = 55.09;
-                m_Woutdrvseln = 1.40;
-                m_Woutdrvselp = 2.21;
-                m_Woutdrvnandn = 2.89;
-                m_Woutdrvnandp = 1.15;
-                m_Woutdrvnorn = 0.69;
-                m_Woutdrvnorp = 4.75;
-                m_Woutdrivern = 5.58;
-                m_Woutdriverp = 9.05;
-                m_Wbusdrvn = 5.58;
-                m_Wbusdrvp = 9.45;
-
-                m_Wcompcellpd2 = 0.29;
-                m_Wcompdrivern = 46.28;
-                m_Wcompdriverp = 92.94;
-                m_Wcomparen2 = 4.65;
-                m_Wcomparen1 = 2.29;
-                m_Wmatchpchg = 1.15;
-                m_Wmatchinvn = 1.19;
-                m_Wmatchinvp = 2.43;
-                m_Wmatchnandn = 2.21;
-                m_Wmatchnandp = 1.42;
-                m_Wmatchnorn = 2.37;
-                m_Wmatchnorp = 1.10;
-
-                m_WSelORn = 1.15;
-                m_WSelORprequ = 4.66;
-                m_WSelPn = 1.45;
-                m_WSelPp = 1.71;
-                m_WSelEnn = 0.58;
-                m_WSelEnp = 1.15;
-
-                m_Wsenseextdrv1p = 4.66;
-                m_Wsenseextdrv1n = 2.78;
-                m_Wsenseextdrv2p = 23.02;
-                m_Wsenseextdrv2n = 14.07;
-                break;
-            case HVT:
-                m_Wdecdrivep = 10.64;
-                m_Wdecdriven = 5.23;
-                m_Wdec3to8n = 9.36;
-                m_Wdec3to8p = 6.24;
-                m_WdecNORn = 0.25;
-                m_WdecNORp = 1.25;
-                m_Wdecinvn = 0.52;
-                m_Wdecinvp = 1.04;
-                m_Wdff = 5.43;
-
-                m_Wworddrivemax = 10.64;
-                m_Wmemcella = 0.25;
-                m_Wmemcellr = 0.42;
-                m_Wmemcellw = 0.22;
-                m_Wmemcellbscale = 2;
-                m_Wbitpreequ = 1.04;
-
-                m_Wbitmuxn = 1.04;
-                m_WsenseQ1to4 = 0.42;
-                m_Wcompinvp1 = 1.08;
-                m_Wcompinvn1 = 0.62;
-                m_Wcompinvp2 = 2.08;
-                m_Wcompinvn2 = 1.25;
-                m_Wcompinvp3 = 4.16;
-                m_Wcompinvn3 = 2.50;
-                m_Wevalinvp = 2.08;
-                m_Wevalinvn = 8.32;
-
-                m_Wcompn = 1.04;
-                m_Wcompp = 3.12;
-                m_Wcomppreequ = 4.16;
-                m_Wmuxdrv12n = 3.12;
-                m_Wmuxdrv12p = 5.23;
-                m_WmuxdrvNANDn = 2.08;
-                m_WmuxdrvNANDp = 8.32;
-                m_WmuxdrvNORn = 6.24;
-                m_WmuxdrvNORp = 8.32;
-                m_Wmuxdrv3n = 20.80;
-                m_Wmuxdrv3p = 49.92;
-                m_Woutdrvseln = 1.25;
-                m_Woutdrvselp = 2.08;
-                m_Woutdrvnandn = 2.50;
-                m_Woutdrvnandp = 1.04;
-                m_Woutdrvnorn = 0.62;
-                m_Woutdrvnorp = 4.16;
-                m_Woutdrivern = 4.99;
-                m_Woutdriverp = 8.32;
-                m_Wbusdrvn = 4.99;
-                m_Wbusdrvp = 8.32;
-
-                m_Wcompcellpd2 = 0.25;
-                m_Wcompdrivern = 41.60;
-                m_Wcompdriverp = 83.20;
-                m_Wcomparen2 = 4.16;
-                m_Wcomparen1 = 2.08;
-                m_Wmatchpchg = 1.04;
-                m_Wmatchinvn = 1.04;
-                m_Wmatchinvp = 2.08;
-                m_Wmatchnandn = 2.08;
-                m_Wmatchnandp = 1.08;
-                m_Wmatchnorn = 2.08;
-                m_Wmatchnorp = 1.04;
-
-                m_WSelORn = 1.04;
-                m_WSelORprequ = 4.16;
-                m_WSelPn = 1.04;
-                m_WSelPp = 1.56;
-                m_WSelEnn = 0.52;
-                m_WSelEnp = 1.04;
-
-                m_Wsenseextdrv1p = 4.16;
-                m_Wsenseextdrv1n = 2.50;
-                m_Wsenseextdrv2p = 20.83;
-                m_Wsenseextdrv2n = 12.48;
-                break;
-            default:
-                cerr << "Invalid transistor type (" << m_transistor_type << ")" << endl;
-                exit(1);
-        }
-
-        m_CamCellHeight = 4.095;/*derived from Cacti 5.3 */ 
-        m_CamCellWidth = 3.51;/*derived from Cacti 5.3 */ 
-
-        m_MatchlineSpacing = 0.75;
-        m_TaglineSpacing = 0.75;
-
-        m_CrsbarCellHeight = 2.94;
-        m_CrsbarCellWidth = 2.94;
-
-        m_krise = 0.5e-10;
-        m_tsensedata = 0.725e-10;
-        m_tsensetag = 0.325e-10;
-        m_tfalldata = 0.875e-10;
-        m_tfalltag = 0.875e-10;
-        /*=============Above are the parameters for 90nm ========================*/
-    }
-    else if(m_tech_node <= 65)
-    {
-        /*=============Below are the parameters for 65nm ========================*/
-
-        m_LSCALE = 0.087;
-        m_MSCALE = m_LSCALE * .624 / .2250;
-
-        /* bit width of RAM cell in um */
-        m_BitWidth = 1.4;
-
-        /* bit height of RAM cell in um */
-        m_BitHeight = 1.4;
-
-        m_Cout = 4.35e-14;
-
-        /* Sizing of cells and spacings */
-        m_BitlineSpacing = 0.8 * m_SCALE_BW;
-        m_WordlineSpacing = 0.8 * m_SCALE_BW;
-
-        m_RegCellHeight = 2.1 * m_SCALE_H;
-        m_RegCellWidth = 1.4 * m_SCALE_W;
-
-        m_Cwordmetal = 1.63e-15 * m_SCALE_M;
-        m_Cbitmetal = 3.27e-15 * m_SCALE_M;
-
-        m_Cmetal = m_Cbitmetal/16;
-        m_CM2metal = m_Cbitmetal/16;
-        m_CM3metal = m_Cbitmetal/16;
-
-        // minimum spacing
-        m_CCmetal = 0.146206e-15;
-        m_CCM2metal = 0.146206e-15;
-        m_CCM3metal = 0.146206e-15;
-        // 2x minimum spacing
-        m_CC2metal = 0.09844e-15;
-        m_CC2M2metal = 0.09844e-15;
-        m_CC2M3metal = 0.09844e-15;
-        // 3x minimum spacing
-        m_CC3metal = 0.08689e-15;
-        m_CC3M2metal = 0.08689e-15;
-        m_CC3M3metal = 0.08689e-15;
-
-
-        /* corresponds to clock network*/
-        m_Clockwire = 323.4e-12 * m_SCALE_M;
-        m_Reswire = 61.11e3 * 1.0/m_SCALE_M;
-        m_invCap = 3.12e-14;
-        m_Resout = 361.00;
-
-        /* um */
-        m_Leff = 0.0696;
-        /* length unit in um */
-        m_Lamda = m_Leff * 0.5;
-
-        /* fF/um */
-        m_Cpolywire = 1.832e-15;
-        /* ohms*um of channel width */
-        m_Rnchannelstatic = 2244.6;
-
-        /* ohms*um of channel width */
-        m_Rpchannelstatic = 5324.4;
-
-        switch(m_transistor_type)
-        {
-            case LVT:
-                m_Rnchannelon = 1370;
-                m_Rpchannelon = 3301;
-                break;
-            case NVT:
-                m_Rnchannelon = 2540;
-                m_Rpchannelon = 5791;
-                break;
-            case HVT:
-                m_Rnchannelon = 4530;
-                m_Rpchannelon = 10101;
-                break;
-            default:
-                cerr << "Invalid transistor type (" << m_transistor_type << ")" << endl;
-                exit(1);
-        }
-
-        m_Rbitmetal = 1.92644;/* derived from Cacti 5.3 */  
-        m_Rwordmetal = 1.31948;/* derived from Cacti 5.3 */
-
-        switch(m_transistor_type)
-        {
-            case LVT:
-                m_Vt = 0.195;
-                break;
-            case NVT:
-                m_Vt = 0.285;
-                break;
-            case HVT:
-                m_Vt = 0.524;
-                break;
-            default:
-                cerr << "Invalid transistor type (" << m_transistor_type << ")" << endl;
-                exit(1);
-        }
-
-        /* transistor widths in um for 65nm. = as described in Cacti 1.0 tech report, appendix 1;*/
-        switch(m_transistor_type)
-        {
-            case LVT:
-                m_Wdecdrivep = 8.27;
-                m_Wdecdriven = 6.70;
-                m_Wdec3to8n = 2.33;
-                m_Wdec3to8p = 2.33;
-                m_WdecNORn = 1.50;
-                m_WdecNORp = 3.82;
-                m_Wdecinvn = 8.46;
-                m_Wdecinvp = 10.93;
-                m_Wdff = 8.6;
-
-                m_Wworddrivemax = 9.27;
-                m_Wmemcella = 0.2225;
-                m_Wmemcellr = 0.3708;
-                m_Wmemcellw = 0.1947;
-                m_Wmemcellbscale = 1.87;
-                m_Wbitpreequ = 0.927;
-
-                m_Wbitmuxn = 0.927;
-                m_WsenseQ1to4 = 0.371;
-                m_Wcompinvp1 = 0.927;
-                m_Wcompinvn1 = 0.5562;
-                m_Wcompinvp2 = 1.854;
-                m_Wcompinvn2 = 1.1124;
-                m_Wcompinvp3 = 3.708;
-                m_Wcompinvn3 = 2.2248;
-                m_Wevalinvp = 1.854;
-                m_Wevalinvn = 7.416;
-
-
-                m_Wcompn = 1.854;
-                m_Wcompp = 2.781;
-                m_Wcomppreequ = 3.712;
-                m_Wmuxdrv12n = 2.785;
-                m_Wmuxdrv12p = 4.635;
-                m_WmuxdrvNANDn = 1.860;
-                m_WmuxdrvNANDp = 7.416;
-                m_WmuxdrvNORn = 5.562;
-                m_WmuxdrvNORp = 7.416;
-                m_Wmuxdrv3n = 18.54;
-                m_Wmuxdrv3p = 44.496;
-                m_Woutdrvseln = 1.112;
-                m_Woutdrvselp = 1.854;
-                m_Woutdrvnandn = 2.225;
-                m_Woutdrvnandp = 0.927;
-                m_Woutdrvnorn = 0.5562;
-                m_Woutdrvnorp = 3.708;
-                m_Woutdrivern = 4.450;
-                m_Woutdriverp = 7.416;
-                m_Wbusdrvn = 4.450;
-                m_Wbusdrvp = 7.416;
-
-                m_Wcompcellpd2 = 0.222;
-                m_Wcompdrivern = 37.08;
-                m_Wcompdriverp = 74.20;
-                m_Wcomparen2 = 3.708;
-                m_Wcomparen1 = 1.854;
-                m_Wmatchpchg = 0.927;
-                m_Wmatchinvn = 0.930;
-                m_Wmatchinvp = 1.854;
-                m_Wmatchnandn = 1.854;
-                m_Wmatchnandp = 0.927;
-                m_Wmatchnorn = 1.860;
-                m_Wmatchnorp = 0.930;
-
-                m_WSelORn = 0.930;
-                m_WSelORprequ = 3.708;
-                m_WSelPn = 0.927;
-                m_WSelPp = 1.391;
-                m_WSelEnn = 0.434;
-                m_WSelEnp = 0.930;
-
-                m_Wsenseextdrv1p = 3.708;
-                m_Wsenseextdrv1n = 2.225;
-                m_Wsenseextdrv2p = 18.54;
-                m_Wsenseextdrv2n = 11.124;
-                break;
-            case NVT:
-                m_Wdecdrivep = 6.7;
-                m_Wdecdriven = 4.7;
-                m_Wdec3to8n = 1.33;
-                m_Wdec3to8p = 1.33;
-                m_WdecNORn = 1.20;
-                m_WdecNORp = 2.62;
-                m_Wdecinvn = 1.46;
-                m_Wdecinvp = 3.93;
-                m_Wdff = 4.6;
-
-                m_Wworddrivemax = 9.225;
-                m_Wmemcella = 0.221;
-                m_Wmemcellr = 0.369;
-                m_Wmemcellw = 0.194;
-                m_Wmemcellbscale = 1.87;
-                m_Wbitpreequ = 0.923;
-
-                m_Wbitmuxn = 0.923;
-                m_WsenseQ1to4 = 0.369;
-                m_Wcompinvp1 = 0.924;
-                m_Wcompinvn1 = 0.554;
-                m_Wcompinvp2 = 1.845;
-                m_Wcompinvn2 = 1.107;
-                m_Wcompinvp3 = 3.69;
-                m_Wcompinvn3 = 2.214;
-                m_Wevalinvp = 1.842;
-                m_Wevalinvn = 7.368;
-
-                m_Wcompn = 1.845;
-                m_Wcompp = 2.768;
-                m_Wcomppreequ = 3.692;
-                m_Wmuxdrv12n = 2.773;
-                m_Wmuxdrv12p = 4.618;
-                m_WmuxdrvNANDn = 1.848;
-                m_WmuxdrvNANDp = 7.38;
-                m_WmuxdrvNORn = 5.535;
-                m_WmuxdrvNORp = 7.380;
-                m_Wmuxdrv3n = 18.45;
-                m_Wmuxdrv3p = 44.28;
-                m_Woutdrvseln = 1.105;
-                m_Woutdrvselp = 1.842;
-                m_Woutdrvnandn = 2.214;
-                m_Woutdrvnandp = 0.923;
-                m_Woutdrvnorn = 0.554;
-                m_Woutdrvnorp = 3.69;
-                m_Woutdrivern = 4.428;
-                m_Woutdriverp = 7.380;
-                m_Wbusdrvn = 4.421;
-                m_Wbusdrvp = 7.368;
-
-                m_Wcompcellpd2 = 0.221;
-                m_Wcompdrivern = 36.84;
-                m_Wcompdriverp = 73.77;
-                m_Wcomparen2 = 3.684;
-                m_Wcomparen1 = 1.842;
-                m_Wmatchpchg = 0.921;
-                m_Wmatchinvn = 0.923;
-                m_Wmatchinvp = 1.852;
-                m_Wmatchnandn = 1.852;
-                m_Wmatchnandp = 0.921;
-                m_Wmatchnorn = 1.845;
-                m_Wmatchnorp = 0.923;
-
-                m_WSelORn = 0.923;
-                m_WSelORprequ = 3.684;
-                m_WSelPn = 0.921;
-                m_WSelPp = 1.382;
-                m_WSelEnn = 0.446;
-                m_WSelEnp = 0.923;
-
-                m_Wsenseextdrv1p = 3.684;
-                m_Wsenseextdrv1n = 2.211;
-                m_Wsenseextdrv2p = 18.42;
-                m_Wsenseextdrv2n = 11.052;
-                break;
-            case HVT:
-                m_Wdecdrivep = 3.11;
-                m_Wdecdriven = 1.90;
-                m_Wdec3to8n = 1.33;
-                m_Wdec3to8p = 1.33;
-                m_WdecNORn = 0.90;
-                m_WdecNORp = 1.82;
-                m_Wdecinvn = 0.46;
-                m_Wdecinvp = 0.93;
-                m_Wdff = 3.8;
-
-                m_Wworddrivemax = 9.18;
-                m_Wmemcella = 0.220;
-                m_Wmemcellr = 0.367;
-                m_Wmemcellw = 0.193;
-                m_Wmemcellbscale = 1.87;
-                m_Wbitpreequ = 0.918;
-
-                m_Wbitmuxn = 0.918;
-                m_WsenseQ1to4 = 0.366;
-                m_Wcompinvp1 = 0.920;
-                m_Wcompinvn1 = 0.551;
-                m_Wcompinvp2 = 1.836;
-                m_Wcompinvn2 = 1.102;
-                m_Wcompinvp3 = 3.672;
-                m_Wcompinvn3 = 2.203;
-                m_Wevalinvp = 1.83;
-                m_Wevalinvn = 7.32;
-
-                m_Wcompn = 1.836;
-                m_Wcompp = 2.754;
-                m_Wcomppreequ = 3.672;
-                m_Wmuxdrv12n = 2.760;
-                m_Wmuxdrv12p = 4.60;
-                m_WmuxdrvNANDn = 1.836;
-                m_WmuxdrvNANDp = 7.344;
-                m_WmuxdrvNORn = 5.508;
-                m_WmuxdrvNORp = 7.344;
-                m_Wmuxdrv3n = 18.36;
-                m_Wmuxdrv3p = 44.064;
-                m_Woutdrvseln = 1.098;
-                m_Woutdrvselp = 1.83;
-                m_Woutdrvnandn = 2.203;
-                m_Woutdrvnandp = 0.918;
-                m_Woutdrvnorn = 0.551;
-                m_Woutdrvnorp = 3.672;
-                m_Woutdrivern = 4.406;
-                m_Woutdriverp = 7.344;
-                m_Wbusdrvn = 4.392;
-                m_Wbusdrvp = 7.32;
-
-                m_Wcompcellpd2 = 0.220;
-                m_Wcompdrivern = 36.6;
-                m_Wcompdriverp = 73.33;
-                m_Wcomparen2 = 3.66;
-                m_Wcomparen1 = 1.83;
-                m_Wmatchpchg = 0.915;
-                m_Wmatchinvn = 0.915;
-                m_Wmatchinvp = 1.85;
-                m_Wmatchnandn = 1.85;
-                m_Wmatchnandp = 0.915;
-                m_Wmatchnorn = 1.83;
-                m_Wmatchnorp = 0.915;
-
-                m_WSelORn = 0.915;
-                m_WSelORprequ = 3.66;
-                m_WSelPn = 0.915;
-                m_WSelPp = 1.373;
-                m_WSelEnn = 0.458;
-                m_WSelEnp = 0.915;
-
-                m_Wsenseextdrv1p = 3.66;
-                m_Wsenseextdrv1n = 2.196;
-                m_Wsenseextdrv2p = 18.3;
-                m_Wsenseextdrv2n = 10.98;
-                break;
-            default:
-                cerr << "Invalid transistor type (" << m_transistor_type << ")" << endl;
-                exit(1);
-        }
-
-        m_CamCellHeight = 2.9575;/* derived from Cacti 5.3 */ 
-        m_CamCellWidth = 2.535;/* derived from Cacti 5.3 */
-
-        m_MatchlineSpacing = 0.522;
-        m_TaglineSpacing = 0.522;
-
-        m_CrsbarCellHeight = 2.06 * m_SCALE_Crs;
-        m_CrsbarCellWidth = 2.06 * m_SCALE_Crs;
-
-        m_krise = 0.348e-10;
-        m_tsensedata = 0.5046e-10;
-        m_tsensetag = 0.2262e-10;
-        m_tfalldata = 0.609e-10;
-        m_tfalltag = 0.6609e-10;
-    }
-
-    /*=======================PARAMETERS for Link===========================*/
-
-    if(m_tech_node == 90)
-    {
-        if(m_wire_layer_type == LOCAL)
-        {
-            m_WireMinWidth            = 214e-9;
-            m_WireMinSpacing          = 214e-9;
-            m_WireMetalThickness      = 363.8e-9;
-            m_WireBarrierThickness    = 10e-9;
-            m_WireDielectricThickness = 363.8e-9;
-            m_WireDielectricConstant  = 3.3;
-        }
-        else if(m_wire_layer_type == INTERMEDIATE)
-        {
-            m_WireMinWidth            = 275e-9;
-            m_WireMinSpacing          = 275e-9;
-            m_WireMetalThickness      = 467.5e-9;
-            m_WireBarrierThickness    = 10e-9;
-            m_WireDielectricThickness = 412.5e-9;
-            m_WireDielectricConstant  = 3.3;
-        }
-        else if(m_wire_layer_type == GLOBAL)
-        {
-            m_WireMinWidth            = 410e-9;
-            m_WireMinSpacing          = 410e-9;
-            m_WireMetalThickness      = 861e-9;
-            m_WireBarrierThickness    = 10e-9;
-            m_WireDielectricThickness = 779e-9;
-            m_WireDielectricConstant  = 3.3;
-        }
-    }
-    else if(m_tech_node == 65)
-    {
-        if(m_wire_layer_type == LOCAL)
-        {
-            m_WireMinWidth                     = 136e-9;
-            m_WireMinSpacing                 = 136e-9;
-            m_WireMetalThickness           = 231.2e-9;
-            m_WireBarrierThickness       = 4.8e-9;
-            m_WireDielectricThickness  = 231.2e-9;
-            m_WireDielectricConstant   = 2.85;
-        }
-        else if(m_wire_layer_type == INTERMEDIATE)
-        {
-            m_WireMinWidth            = 140e-9;
-            m_WireMinSpacing          = 140e-9;
-            m_WireMetalThickness      = 252e-9;
-            m_WireBarrierThickness    = 5.2e-9;
-            m_WireDielectricThickness = 224e-9;
-            m_WireDielectricConstant  = 2.85;
-        }
-        else if(m_wire_layer_type == GLOBAL)
-        {
-            m_WireMinWidth            = 400e-9;
-            m_WireMinSpacing          = 400e-9;
-            m_WireMetalThickness      = 400e-9;
-            m_WireBarrierThickness    = 5.2e-9;
-            m_WireDielectricThickness = 790e-9;
-            m_WireDielectricConstant  = 2.9;
-        }
-    }
-    else if(m_tech_node == 45)
-    {
-        if(m_wire_layer_type == LOCAL)
-        {
-            m_WireMinWidth            = 45e-9;
-            m_WireMinSpacing          = 45e-9;
-            m_WireMetalThickness      = 129.6e-9;
-            m_WireBarrierThickness    = 3.3e-9;
-            m_WireDielectricThickness = 162e-9;
-            m_WireDielectricConstant  = 2.0;
-        }
-        else if(m_wire_layer_type == INTERMEDIATE)
-        {
-            m_WireMinWidth            = 45e-9;
-            m_WireMinSpacing          = 45e-9;
-            m_WireMetalThickness      = 129.6e-9;
-            m_WireBarrierThickness    = 3.3e-9;
-            m_WireDielectricThickness = 72e-9;
-            m_WireDielectricConstant  = 2.0;
-        }
-        else if(m_wire_layer_type == GLOBAL)
-        {
-            m_WireMinWidth            = 67.5e-9;
-            m_WireMinSpacing          = 67.5e-9;
-            m_WireMetalThickness      = 155.25e-9;
-            m_WireBarrierThickness    = 3.3e-9;
-            m_WireDielectricThickness = 141.75e-9;
-            m_WireDielectricConstant  = 2.0;
-        }
-    }
-    else if(m_tech_node == 32)
-    {
-        if(m_wire_layer_type == LOCAL)
-        {
-            m_WireMinWidth            = 32e-9;
-            m_WireMinSpacing          = 32e-9;
-            m_WireMetalThickness      = 60.8e-9;
-            m_WireBarrierThickness    = 2.4e-9;
-            m_WireDielectricThickness = 60.8e-9;
-            m_WireDielectricConstant  = 1.9;
-        }
-        else if(m_wire_layer_type == INTERMEDIATE)
-        {
-            m_WireMinWidth            = 32e-9;
-            m_WireMinSpacing          = 32e-9;
-            m_WireMetalThickness      = 60.8e-9;
-            m_WireBarrierThickness    = 2.4e-9;
-            m_WireDielectricThickness = 54.4e-9;
-            m_WireDielectricConstant  = 1.9;
-        }
-        else if(m_wire_layer_type == GLOBAL)
-        {
-            m_WireMinWidth            = 48e-9;
-            m_WireMinSpacing          = 48e-9;
-            m_WireMetalThickness      = 120e-9;
-            m_WireBarrierThickness    = 2.4e-9;
-            m_WireDielectricThickness = 110.4e-9;
-            m_WireDielectricConstant  = 1.9;
-        }
-    }
-
-    /*===================================================================*/
-    /*parameters for insertion buffer for links at 90nm*/
-    if(m_tech_node == 90)
-    {
-        m_BufferDriveResistance     =  5.12594e+03;
-        m_BufferIntrinsicDelay      =  4.13985e-11;
-        if(m_transistor_type == LVT)
-        {
-            m_BufferInputCapacitance    =  1.59e-15;
-            m_BufferPMOSOffCurrent      =  116.2e-09;
-            m_BufferNMOSOffCurrent      =  52.1e-09;
-            m_ClockCap                               = 2.7e-14;
-        }
-        else if(m_transistor_type == NVT)
-        {
-            m_BufferInputCapacitance    =  4.7e-15;
-            m_BufferPMOSOffCurrent      =  67.6e-09;
-            m_BufferNMOSOffCurrent      =  31.1e-09;
-            m_ClockCap                  =  1.0e-14;
-        }
-        else if(m_transistor_type == HVT)
-        {
-            m_BufferInputCapacitance    =  15.0e-15;//9.5e-15
-            m_BufferPMOSOffCurrent      =  19.2e-09;
-            m_BufferNMOSOffCurrent      =  10.1e-09; 
-            m_ClockCap                  =  0.3e-15;
-        }
-    }
-    /*parameters for insertion buffer for links at 65nm*/
-    else if(m_tech_node == 65)
-    {
-        m_BufferDriveResistance     = 6.77182e+03;
-        m_BufferIntrinsicDelay     = 3.31822e-11;
-        if(m_transistor_type == LVT)
-        {
-            m_BufferPMOSOffCurrent         = 317.2e-09;
-            m_BufferNMOSOffCurrent         = 109.7e-09;
-            m_BufferInputCapacitance    = 1.3e-15;
-            m_ClockCap                  = 2.6e-14;
-        }
-        else if(m_transistor_type == NVT)
-        {
-            m_BufferPMOSOffCurrent      = 113.1e-09;
-            m_BufferNMOSOffCurrent      = 67.3e-09;
-            m_BufferInputCapacitance    = 2.6e-15;
-            m_ClockCap                  = 1.56e-14;
-        }
-        else if(m_transistor_type == HVT)
-        {
-            m_BufferPMOSOffCurrent      = 35.2e-09;
-            m_BufferNMOSOffCurrent      = 18.4e-09;
-            m_BufferInputCapacitance    = 7.8e-15;
-            m_ClockCap                  = 0.9e-15;
-        }
-    }
-    /*parameters for insertion buffer for links at 45nm*/
-    else if(m_tech_node == 45)
-    {
-        m_BufferDriveResistance      = 7.3228e+03;
-        m_BufferIntrinsicDelay       = 4.6e-11;
-        if(m_transistor_type == LVT)
-        {
-            m_BufferInputCapacitance     = 1.25e-15;
-            m_BufferPMOSOffCurrent       = 1086.75e-09;
-            m_BufferNMOSOffCurrent       = 375.84e-09;
-            m_ClockCap                   = 2.5e-14;
-        }
-        else if(m_transistor_type == NVT)
-        {
-            m_BufferInputCapacitance     = 2.5e-15;    
-            m_BufferPMOSOffCurrent       = 382.3e-09;
-            m_BufferNMOSOffCurrent       = 195.5e-09;
-            m_ClockCap                   = 1.5e-14;
-        }
-        else if(m_transistor_type == HVT)
-        {
-            m_BufferInputCapacitance     = 7.5e-15;
-            m_BufferPMOSOffCurrent       = 76.4e-09;
-            m_BufferNMOSOffCurrent       = 39.1e-09;
-            m_ClockCap                   = 0.84e-15;
-        }
-    }
-    /*parameters for insertion buffer for links at 32nm*/
-    else if(m_tech_node == 32)
-    {
-        m_BufferDriveResistance      = 10.4611e+03;
-        m_BufferIntrinsicDelay       = 4.0e-11;
-        if(m_transistor_type == LVT)
-        {
-            m_BufferPMOSOffCurrent       = 1630.08e-09;
-            m_BufferNMOSOffCurrent       = 563.74e-09;
-            m_BufferInputCapacitance     = 1.2e-15;
-            m_ClockCap                   = 2.2e-14;
-        }
-        else if(m_transistor_type == NVT)
-        {
-            m_BufferPMOSOffCurrent       = 792.4e-09;
-            m_BufferNMOSOffCurrent       = 405.1e-09;
-            m_BufferInputCapacitance     = 2.4e-15;
-            m_ClockCap                   = 1.44e-14;
-        }
-        else if(m_transistor_type == HVT)
-        {
-            m_BufferPMOSOffCurrent       = 129.9e-09;
-            m_BufferNMOSOffCurrent       = 66.4e-09;
-            m_BufferInputCapacitance     = 7.2e-15;
-            m_ClockCap                   = 0.53e-15;
-        }
-    }
-
-    /*======================Parameters for Area===========================*/
-    if(m_tech_node == 90)
-    {
-        m_AreaNOR = 4.23;
-        m_AreaINV = 2.82;
-        m_AreaAND = 4.23;
-        m_AreaDFF = 16.23;
-        m_AreaMUX2 = 7.06;
-        m_AreaMUX3 = 11.29;
-        m_AreaMUX4 = 16.93;
-    }
-    else if(m_tech_node <= 65)
-    {
-        m_AreaNOR = 2.52 * m_SCALE_T;
-        m_AreaINV = 1.44 * m_SCALE_T;
-        m_AreaDFF = 8.28 * m_SCALE_T;
-        m_AreaAND = 2.52 * m_SCALE_T;
-        m_AreaMUX2 = 6.12 * m_SCALE_T;
-        m_AreaMUX3 = 9.36 * m_SCALE_T;
-        m_AreaMUX4 = 12.6 * m_SCALE_T;
-    }
-
-    if (m_tech_node == 90)
-    {
-        if (m_transistor_type == LVT)
-        {
-            m_NMOS_TAB[0] = 19.9e-9;
-            m_PMOS_TAB[0] = 16.6e-9;
-            m_NAND2_TAB[0] = 7.8e-9;
-            m_NAND2_TAB[1] = 24.6e-9;
-            m_NAND2_TAB[2] = 14.1e-9;
-            m_NAND2_TAB[3] = 34.3e-9;
-            m_NOR2_TAB[0] = 51.2e-9;
-            m_NOR2_TAB[1] = 23.9e-9;
-            m_NOR2_TAB[2] = 19.5e-9;
-            m_NOR2_TAB[3] = 8.4e-9;
-            m_DFF_TAB[0] = 219.7e-9;
-        }
-        else if (m_transistor_type == NVT)
-        {
-            m_NMOS_TAB[0] = 15.6e-9;
-            m_PMOS_TAB[0] = 11.3e-9;
-            m_NAND2_TAB[0] = 2.8e-9;
-            m_NAND2_TAB[1] = 19.6e-9;
-            m_NAND2_TAB[2] = 10.4e-9;
-            m_NAND2_TAB[3] = 29.3e-9;
-            m_NOR2_TAB[0] = 41.5e-9;
-            m_NOR2_TAB[1] = 13.1e-9;
-            m_NOR2_TAB[2] = 14.5e-9;
-            m_NOR2_TAB[3] = 1.4e-9;
-            m_DFF_TAB[0] = 194.7e-9;
-        }
-        else
-        {
-            m_NMOS_TAB[0] = 12.2e-9;
-            m_PMOS_TAB[0] = 9.3e-9;
-            m_NAND2_TAB[0] = 1.8e-9;
-            m_NAND2_TAB[1] = 12.4e-9;
-            m_NAND2_TAB[2] = 8.9e-9;
-            m_NAND2_TAB[3] = 19.3e-9;
-            m_NOR2_TAB[0] = 29.5e-9;
-            m_NOR2_TAB[1] = 8.3e-9;
-            m_NOR2_TAB[2] = 11.1e-9;
-            m_NOR2_TAB[3] = 0.9e-9;
-            m_DFF_TAB[0] = 194.7e-9; //FIXME-the same as NVT?
-        }
-    }
-    else if (m_tech_node <= 65)
-    {
-        if (m_transistor_type == LVT)
-        {
-            m_NMOS_TAB[0] = 311.7e-9;
-            m_PMOS_TAB[0] = 674.3e-9;
-            m_NAND2_TAB[0] = 303.0e-9;
-            m_NAND2_TAB[1] = 423.0e-9;
-            m_NAND2_TAB[2] = 498.3e-9;
-            m_NAND2_TAB[3] = 626.3e-9;
-            m_NOR2_TAB[0] = 556.0e-9;
-            m_NOR2_TAB[1] = 393.7e-9;
-            m_NOR2_TAB[2] = 506.7e-9;
-            m_NOR2_TAB[3] = 369.7e-9;
-            m_DFF_TAB[0] = 970.4e-9;
-        }
-        else if (m_transistor_type == NVT)
-        {
-            m_NMOS_TAB[0] = 115.1e-9;
-            m_PMOS_TAB[0] = 304.8e-9;
-            m_NAND2_TAB[0] = 111.4e-9;
-            m_NAND2_TAB[1] = 187.2e-9;
-            m_NAND2_TAB[2] = 230.7e-9;
-            m_NAND2_TAB[3] = 306.9e-9;
-            m_NOR2_TAB[0] = 289.7e-9;
-            m_NOR2_TAB[1] = 165.7e-9;
-            m_NOR2_TAB[2] = 236.9e-9;
-            m_NOR2_TAB[3] = 141.4e-9;
-            m_DFF_TAB[0] = 400.3e-9;
-        }
-        else
-        {
-            m_NMOS_TAB[0] = 18.4e-9;
-            m_PMOS_TAB[0] = 35.2e-9;
-            m_NAND2_TAB[0] = 19.7e-9;
-            m_NAND2_TAB[1] = 51.3e-9;
-            m_NAND2_TAB[2] = 63.0e-9;
-            m_NAND2_TAB[3] = 87.6e-9;
-            m_NOR2_TAB[0] = 23.4e-9;
-            m_NOR2_TAB[1] = 37.6e-9;
-            m_NOR2_TAB[2] = 67.9e-9;
-            m_NOR2_TAB[3] = 12.3e-9;
-            m_DFF_TAB[0] = 231.3e-9;
-        }
-    }
-    return;
-}
-
-//
-// width - gate width in um (length is Leff)   
-// wirelength - poly wire length going to gate in lambda
-// return gate capacitance in Farads 
-double TechParameter::calc_gatecap(
-        double width_, 
-        double wirelength_
-        ) const
-{
-    return ((width_*m_Leff*m_Cgate + wirelength_*m_Cpolywire*m_Leff)*m_SCALE_T);
-}
-
-double TechParameter::calc_gatecappass(
-        double width_,
-        double wirelength_
-        ) const
-{
-    return calc_gatecap(width_, wirelength_);
-}
-
-// Routine for calculating drain capacitances.  The draincap routine
-// folds transistors larger than 10um */
-//
-// width - um   
-// nchannel - whether n or p-channel (boolean)
-// stack - number of transistors in series that are on
-//
-// return drain cap in Farads 
-double TechParameter::calc_draincap(
-        double width_,
-        ChannelType ch_,
-        uint32_t num_stack_
-        ) const
-{
-    double Cdiffside, Cdiffarea, Coverlap, total_cap;
-
-    if (ch_ == NCH)
-    {
-        Cdiffside = m_Cndiffside;
-        Cdiffarea = m_Cndiffarea;
-        Coverlap = m_Cnoverlap;
-    }
-    else
-    {
-        Cdiffside = m_Cpdiffside;
-        Cdiffarea = m_Cpdiffarea;
-        Coverlap = m_Cpoverlap;
-    }
-
-    if (width_ >= 10)
-    {
-        total_cap = (3.0*m_Leff*width_/2.0)*Cdiffarea + 6.0*m_Leff*Cdiffside + width_*Coverlap;
-        total_cap += (double)(num_stack_ - 1)*(m_Leff*width_*Cdiffarea + 4.0*m_Leff*Cdiffside + 2.0*width_*Coverlap);
-    }
-    else
-    {
-        total_cap = (3.0*m_Leff*width_)*Cdiffarea + (6.0*m_Leff + width_)*Cdiffside + width_*Coverlap;
-        total_cap += (double)(num_stack_ - 1)*(m_Leff*width_*Cdiffarea + 2.0*m_Leff*Cdiffside + 2.0*width_*Coverlap);
-    }
-
-    return (total_cap*m_SCALE_T);
-}
-
-double TechParameter::calc_restowidth(
-        double res_, 
-        ChannelType ch_
-        ) const
-{
-    double restrans;
-
-    restrans = (ch_ == NCH)? m_Rnchannelon : m_Rpchannelon;
-
-    return (restrans / res_);
-}
-
-double TechParameter::calc_driver_psize(
-        double cap_, 
-        double rise_time_
-        ) const
-{
-    double psize;
-    double Rpdrive;
-
-    Rpdrive = rise_time_ / (cap_ * log(m_vs_inv) * (-1.0));
-    psize = calc_restowidth(Rpdrive, PCH);
-
-    if (psize > m_Wworddrivemax)
-    {
-        psize = m_Wworddrivemax;
-    }
-    if (psize < 4.0 * m_LSCALE)
-    {
-        psize = 4.0 * m_LSCALE;
-    }
-
-    return psize;
-}
-
diff --git a/src/mem/ruby/network/orion/TechParameter.hh b/src/mem/ruby/network/orion/TechParameter.hh
deleted file mode 100644 (file)
index c894a51..0000000
+++ /dev/null
@@ -1,412 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#ifndef __TECHPARAMETER_H__
-#define __TECHPARAMETER_H__
-
-#include <string>
-
-#include "mem/ruby/network/orion/Type.hh"
-
-class OrionConfig;
-
-class TechParameter
-{
-  public:
-    enum TransistorType
-    {
-      LVT = 0,
-      NVT,
-      HVT,
-      NUM_TRANSISTOR_TYPE
-    };
-    enum WireLayerType
-    {
-      LOCAL = 0,
-      INTERMEDIATE,
-      GLOBAL,
-      NUM_WIRE_LAYER_TYPE
-    };
-    enum ChannelType
-    {
-      NCH,
-      PCH
-    };
-
-  public:
-    TechParameter(const OrionConfig* orion_cfg_ptr_);
-    ~TechParameter();
-
-  public:
-    double calc_gatecap(double width_, double wirelength_) const;
-    double calc_gatecappass(double width_, double wirelength_) const;
-    double calc_draincap(double width_, ChannelType ch_, uint32_t num_stack_) const;
-    double calc_restowidth(double res_, ChannelType ch_) const;
-    double calc_driver_psize(double cap_, double rise_time_) const;
-
-  public:
-    bool is_trans_type_hvt() const { return (m_transistor_type == HVT); }
-    bool is_trans_type_nvt() const { return (m_transistor_type == NVT); }
-    bool is_trans_type_lvt() const { return (m_transistor_type == LVT); }
-    double get_tech_node() const { return m_tech_node; }
-    double get_vdd() const { return m_vdd; }
-    double get_freq() const { return m_freq; }
-    double get_period() const { return m_period; }
-    double get_amp_idsat() const { return m_amp_idsat; }
-
-    double get_SCALE_S() const { return m_SCALE_S; }
-    double get_MSCALE() const { return m_MSCALE; }
-
-    double get_Lamda() const { return m_Lamda; }
-
-    double get_Cmetal() const { return m_Cmetal; }
-    double get_CM2metal() const { return m_CM2metal; }
-    double get_CM3metal() const { return m_CM3metal; }
-    double get_CCmetal() const { return m_CCmetal; }
-    double get_CCM2metal() const { return m_CCM2metal; }
-    double get_CCM3metal() const { return m_CCM3metal; }
-    double get_CC2metal() const { return m_CC2metal; }
-    double get_CC2M2metal() const { return m_CC2M2metal; }
-    double get_CC2M3metal() const { return m_CC2M3metal; }
-    double get_CC3metal() const { return m_CC3metal; }
-    double get_CC3M2metal() const { return m_CC3M2metal; }
-    double get_CC3M3metal() const { return m_CC3M3metal; }
-
-    double get_EnergyFactor() const { return m_EnergyFactor; }
-    double get_SenseEnergyFactor() const { return m_SenseEnergyFactor; }
-
-    double get_Woutdrvseln() const { return m_Woutdrvseln; }
-    double get_Woutdrvselp() const { return m_Woutdrvselp; }
-    double get_Woutdrvnandn() const { return m_Woutdrvnandn; }
-    double get_Woutdrvnandp() const { return m_Woutdrvnandp; }
-    double get_Woutdrvnorn() const { return m_Woutdrvnorn; }
-    double get_Woutdrvnorp() const { return m_Woutdrvnorp; }
-    double get_Woutdrivern() const { return m_Woutdrivern; }
-    double get_Woutdriverp() const { return m_Woutdriverp; }
-
-    double get_WsenseQ1to4() const { return m_WsenseQ1to4; }
-    double get_Wbitmuxn() const { return m_Wbitmuxn; }
-    double get_Wmemcellr() const { return m_Wmemcellr; }
-    double get_Wmemcellw() const { return m_Wmemcellw; }
-    double get_Wmemcella() const { return m_Wmemcella; }
-    double get_Wmemcellbscale() const { return m_Wmemcellbscale; }
-    
-    double get_RegCellHeight() const { return m_RegCellHeight; }
-    double get_RegCellWidth() const { return m_RegCellWidth; }
-    double get_WordlineSpacing() const { return m_WordlineSpacing; }
-    double get_BitlineSpacing() const { return m_BitlineSpacing; }
-    double get_BitWidth() const { return m_BitWidth; }
-
-    double get_Wdecinvn() const { return m_Wdecinvn; }
-    double get_Wdecinvp() const { return m_Wdecinvp; }
-    double get_Wdec3to8n() const { return m_Wdec3to8n; }
-    double get_Wdec3to8p() const { return m_Wdec3to8p; }
-    double get_WdecNORn() const { return m_WdecNORn; }
-    double get_WdecNORp() const { return m_WdecNORp; }
-    double get_Wdecdriven() const { return m_Wdecdriven; }
-    double get_Wdecdrivep() const { return m_Wdecdrivep; }
-
-    double get_CrsbarCellWidth() const { return m_CrsbarCellWidth; }
-    double get_CrsbarCellHeight() const { return m_CrsbarCellHeight; }
-
-    double get_Wdff() const { return m_Wdff; }
-
-    double get_WireMinWidth() const { return m_WireMinWidth; }
-    double get_WireMinSpacing() const { return m_WireMinSpacing; }
-    double get_WireBarrierThickness() const { return m_WireBarrierThickness; }
-    double get_WireMetalThickness() const { return m_WireMetalThickness; }
-    double get_WireDielectricThickness() const { return m_WireDielectricThickness; }
-    double get_WireDielectricConstant() const { return m_WireDielectricConstant; }
-    double get_BufferDriveResistance() const { return m_BufferDriveResistance; }
-    double get_BufferInputCapacitance() const { return m_BufferInputCapacitance; }
-    double get_BufferNMOSOffCurrent() const { return m_BufferNMOSOffCurrent; }
-    double get_BufferPMOSOffCurrent() const { return m_BufferPMOSOffCurrent; }
-    double get_ClockCap() const { return m_ClockCap; }
-    double get_Clockwire() const { return m_Clockwire; }
-    double get_Reswire() const { return m_Reswire; }
-
-    double get_NMOS_TAB(uint32_t idx) const { return m_NMOS_TAB[idx]; }
-    double get_PMOS_TAB(uint32_t idx) const { return m_PMOS_TAB[idx]; }
-    double get_NAND2_TAB(uint32_t idx) const { return m_NAND2_TAB[idx]; }
-    double get_NOR2_TAB(uint32_t idx) const { return m_NOR2_TAB[idx]; }
-    double get_DFF_TAB(uint32_t idx) const { return m_DFF_TAB[idx]; }
-  
-  private:
-    void init();
-    void init_tech_110_800();
-    void init_tech_32_90();
-    void init_tech_90();
-
-  private:
-    const OrionConfig* m_orion_cfg_ptr;
-    unsigned int m_tech_node;
-    TransistorType m_transistor_type;
-    double m_vdd;
-    double m_freq;
-    double m_period;
-    WireLayerType m_wire_layer_type;
-
-    double m_af;
-    uint32_t m_max_n;
-    uint32_t m_max_subarrays;
-    uint32_t m_max_spd;
-    double m_vth_outdr_nor;
-    double m_vth_comp_inv;
-    uint32_t m_bit_out;
-    uint32_t m_ruu_issue_width;
-    double m_amp_idsat;
-    double m_vs_inv;
-    double m_gen_power_factor;
-    double m_vth_nand_60x90;
-    double m_fudge_factor;
-    double m_vth_outdrive;
-    double m_vth_muxdrv1;
-    double m_vth_muxdrv2;
-    double m_normalize_scale;
-    double m_vth_muxdrv3;
-    uint32_t m_address_bits;
-    uint32_t m_ruu_size;
-    double m_vth_nor_12x4x1;
-    double m_vth_nor_12x4x2;
-    double m_vth_outdr_inv;
-    double m_vth_nor_12x4x3;
-    double m_vth_eval_inv;
-    double m_vth_nor_12x4x4;
-    uint32_t m_res_ialu;
-    double m_vth_outdr_nand;
-    double m_vth_inv_100x60;
-
-    double m_Cpdiffarea;
-    double m_Cpdiffside;
-    double m_Cpoverlap;
-    double m_Cndiffarea;
-    double m_Cndiffside;
-    double m_Cnoverlap;
-    double m_Cgatepass;
-    double m_Cgate;
-    double m_Cpdiffovlp;
-    double m_Cndiffovlp;
-    double m_Cpoxideovlp;
-    double m_Cnoxideovlp;
-
-    double m_Vbitpre;
-    double m_Vbitsense;
-    double m_EnergyFactor;
-    double m_SenseEnergyFactor;
-    double m_SenseEnergyFactor3;
-    double m_SenseEnergyFactor2;
-
-    double m_SCALE_T;
-    double m_SCALE_M;
-    double m_SCALE_S;
-    double m_SCALE_W;
-    double m_SCALE_H;
-    double m_SCALE_BW;
-    double m_SCALE_Crs;
-
-    double m_LSCALE;
-    double m_MSCALE;
-
-    double m_BitWidth;
-    double m_BitHeight;
-    double m_BitlineSpacing;
-    double m_WordlineSpacing;
-
-    double m_RegCellWidth;
-    double m_RegCellHeight;
-
-    double m_Cout;
-
-    double m_Cwordmetal;
-    double m_Cbitmetal;
-
-    double m_Cmetal;
-    double m_CM2metal;
-    double m_CM3metal;
-
-    double m_CCmetal;
-    double m_CCM2metal;
-    double m_CCM3metal;
-
-    double m_CC2metal;
-    double m_CC2M2metal;
-    double m_CC2M3metal;
-
-    double m_CC3metal;
-    double m_CC3M2metal;
-    double m_CC3M3metal;
-
-    double m_Clockwire;
-    double m_Reswire;
-    double m_invCap;
-    double m_Resout;
-
-    double m_Leff;
-    double m_Lamda;
-
-    double m_Cpolywire;
-
-    double m_Rnchannelstatic;
-    double m_Rpchannelstatic;
-
-    double m_Rnchannelon;
-    double m_Rpchannelon;
-
-    double m_Rbitmetal;
-    double m_Rwordmetal;
-
-    double m_Vt;
-
-    double m_Wdecdrivep;
-    double m_Wdecdriven;
-    double m_Wdec3to8n;
-    double m_Wdec3to8p;
-    double m_WdecNORn;
-    double m_WdecNORp;
-    double m_Wdecinvn;
-    double m_Wdecinvp;
-    double m_Wdff;
-
-    double m_Wworddrivemax;
-    double m_Wmemcella;
-    double m_Wmemcellr;
-    double m_Wmemcellw;
-    double m_Wmemcellbscale;
-    double m_Wbitpreequ;
-
-    double m_Wbitmuxn;
-    double m_WsenseQ1to4;
-    double m_Wcompinvp1;
-    double m_Wcompinvn1;
-    double m_Wcompinvp2;
-    double m_Wcompinvn2;
-    double m_Wcompinvp3;
-    double m_Wcompinvn3;
-    double m_Wevalinvp;
-    double m_Wevalinvn;
-
-    double m_Wcompn;
-    double m_Wcompp;
-    double m_Wcomppreequ;
-    double m_Wmuxdrv12n;
-    double m_Wmuxdrv12p;
-    double m_WmuxdrvNANDn;
-    double m_WmuxdrvNANDp;
-    double m_WmuxdrvNORn;
-    double m_WmuxdrvNORp;
-    double m_Wmuxdrv3n;
-    double m_Wmuxdrv3p;
-    double m_Woutdrvseln;
-    double m_Woutdrvselp;
-    double m_Woutdrvnandn;
-    double m_Woutdrvnandp;
-    double m_Woutdrvnorn;
-    double m_Woutdrvnorp;
-    double m_Woutdrivern;
-    double m_Woutdriverp;
-    double m_Wbusdrvn;
-    double m_Wbusdrvp;
-
-    double m_Wcompcellpd2;
-    double m_Wcompdrivern;
-    double m_Wcompdriverp;
-    double m_Wcomparen2;
-    double m_Wcomparen1;
-    double m_Wmatchpchg;
-    double m_Wmatchinvn;
-    double m_Wmatchinvp;
-    double m_Wmatchnandn;
-    double m_Wmatchnandp;
-    double m_Wmatchnorn;
-    double m_Wmatchnorp;
-
-    double m_WSelORn;
-    double m_WSelORprequ;
-    double m_WSelPn;
-    double m_WSelPp;
-    double m_WSelEnn;
-    double m_WSelEnp;
-
-    double m_Wsenseextdrv1p;
-    double m_Wsenseextdrv1n;
-    double m_Wsenseextdrv2p;
-    double m_Wsenseextdrv2n;
-
-    double m_CamCellHeight;/*derived from Cacti 5.3 */ 
-    double m_CamCellWidth;/*derived from Cacti 5.3 */ 
-
-    double m_MatchlineSpacing;
-    double m_TaglineSpacing;
-
-    double m_CrsbarCellHeight;
-    double m_CrsbarCellWidth;
-
-    double m_krise;
-    double m_tsensedata;
-    double m_tsensetag;
-    double m_tfalldata;
-    double m_tfalltag;
-
-    double m_WireMinWidth;
-    double m_WireMinSpacing;
-    double m_WireMetalThickness;
-    double m_WireBarrierThickness;
-    double m_WireDielectricThickness;
-    double m_WireDielectricConstant;
-
-    double m_BufferDriveResistance;
-    double m_BufferIntrinsicDelay;
-    double m_BufferInputCapacitance;
-    double m_BufferPMOSOffCurrent;
-    double m_BufferNMOSOffCurrent;
-    double m_ClockCap;
-
-    double m_AreaNOR;
-    double m_AreaINV;
-    double m_AreaAND;
-    double m_AreaDFF;
-    double m_AreaMUX2;
-    double m_AreaMUX3;
-    double m_AreaMUX4;
-
-    double m_NMOS_TAB[1];
-    double m_PMOS_TAB[1];
-    double m_NAND2_TAB[4];
-    double m_NOR2_TAB[4];
-    double m_DFF_TAB[1];
-};
-
-#endif
diff --git a/src/mem/ruby/network/orion/Type.hh b/src/mem/ruby/network/orion/Type.hh
deleted file mode 100644 (file)
index 8dbec1e..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#ifndef __TYPE_H__
-#define __TYPE_H__
-
-typedef unsigned int uint32_t;
-
-#include <string>
-using std::string;
-
-#endif
-
diff --git a/src/mem/ruby/network/orion/Wire.cc b/src/mem/ruby/network/orion/Wire.cc
deleted file mode 100644 (file)
index 3bbd615..0000000
+++ /dev/null
@@ -1,391 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#include <cmath>
-#include <cstdlib>
-#include <iostream>
-
-#include "base/misc.hh"
-#include "mem/ruby/network/orion/TechParameter.hh"
-#include "mem/ruby/network/orion/Wire.hh"
-
-using namespace std;
-
-Wire::Wire(
-  const string& wire_spacing_model_str_,
-  const string& buf_scheme_str_,
-  bool is_shielding_,
-  const TechParameter* tech_param_ptr_
-)
-{
-    set_width_spacing_model(wire_spacing_model_str_);
-    set_buf_scheme(buf_scheme_str_);
-
-    m_is_shielding = is_shielding_;
-
-    m_tech_param_ptr = tech_param_ptr_;
-
-    if (m_tech_param_ptr->get_tech_node() > 90)
-    {
-        cerr << "ERROR: Wire model only support tech node <= 90" << endl;
-        exit(1);
-    }
-
-    init();
-}
-
-Wire::~Wire()
-{}
-
-// OPTIMUM K and H CALCULATION
-// Computes the optimum number and size of repeaters for the link   
-void Wire::calc_opt_buffering(
-        int* k_,
-        double* h_,
-        double len_
-        ) const
-{
-    double BufferDriveResistance = m_tech_param_ptr->get_BufferDriveResistance();
-    double BufferInputCapacitance = m_tech_param_ptr->get_BufferInputCapacitance();
-    switch(m_buf_scheme)
-    {
-        case MIN_DELAY:
-            {
-                if (m_is_shielding)
-                {
-                    double r = m_res_unit_len*len_;
-                    double c_g = 2*m_gnd_cap_unit_len*len_;
-                    double c_c = 2*m_couple_cap_unit_len*len_;
-                    *k_ = (int) sqrt(((0.4*r*c_g)+(0.57*r*c_c))/
-                            (0.7*BufferDriveResistance*BufferInputCapacitance)); //k is the number of buffers to be inserted
-                    *h_ = sqrt(((0.7*BufferDriveResistance*c_g)+
-                                (1.4*1.5*BufferDriveResistance*c_c))/(0.7*r*BufferInputCapacitance)); //the size of the buffers to be inserted
-                    break;
-                }
-                else
-                {
-                    double r = m_res_unit_len*len_;
-                    double c_g = 2*m_gnd_cap_unit_len*len_;
-                    double c_c = 2*m_couple_cap_unit_len*len_;
-                    *k_ = (int) sqrt(((0.4*r*c_g)+(1.51*r*c_c))/
-                            (0.7*BufferDriveResistance*BufferInputCapacitance));
-                    *h_ = sqrt(((0.7*BufferDriveResistance*c_g)+
-                                (1.4*2.2*BufferDriveResistance*c_c))/(0.7*r*BufferInputCapacitance));
-                    break;
-                }
-            }
-        case STAGGERED:
-            {
-                double r = m_res_unit_len*len_;
-                double c_g = 2*m_gnd_cap_unit_len*len_;
-                double c_c = 2*m_couple_cap_unit_len*len_;
-
-                *k_ = (int) sqrt(((0.4*r*c_g)+(0.57*r*c_c))/
-                        (0.7*BufferDriveResistance*BufferInputCapacitance));
-                *h_ = sqrt(((0.7*BufferDriveResistance*c_g)+
-                            (1.4*1.5*BufferDriveResistance*c_c))/(0.7*r*BufferInputCapacitance));
-                break;
-            }
-        default:
-            {
-                // make gcc happy although all the cases of the enum
-                // are already covered
-                *k_ = 0;
-                *h_ = 0;
-                break;
-            }
-    }
-    return;
-}
-
-double Wire::calc_dynamic_energy(double len_) const
-{
-
-    double c_g = 2*m_gnd_cap_unit_len*len_;
-    double c_c = 2*m_couple_cap_unit_len*len_;
-    double cap_wire = c_g + c_c;
-
-    int k;
-    double h;
-
-    calc_opt_buffering(&k, &h, len_);
-
-    double BufferInputCapacitance = m_tech_param_ptr->get_BufferInputCapacitance();
-    double cap_buf = ((double)k)*BufferInputCapacitance*h;
-
-    double e_factor = m_tech_param_ptr->get_EnergyFactor();
-    return ((cap_wire+cap_buf)*e_factor);
-}
-
-double Wire::calc_static_power(double len_) const
-{
-    int k;
-    double h;
-    calc_opt_buffering(&k, &h, len_);
-
-    double BufferNMOSOffCurrent = m_tech_param_ptr->get_BufferNMOSOffCurrent();
-    double BufferPMOSOffCurrent = m_tech_param_ptr->get_BufferPMOSOffCurrent();
-    double i_static_nmos = BufferNMOSOffCurrent*h*k;
-    double i_static_pmos = BufferPMOSOffCurrent*h*k;
-
-    double vdd = m_tech_param_ptr->get_vdd();
-    return (vdd*(i_static_pmos+i_static_nmos)/2);
-}
-
-void Wire::init()
-{
-    m_res_unit_len = calc_res_unit_len();
-    m_gnd_cap_unit_len = calc_gnd_cap_unit_len();
-    m_couple_cap_unit_len = calc_couple_cap_unit_len();
-    return;
-}
-
-void Wire::set_width_spacing_model(
-        const string& wire_spacing_model_str_
-        )
-{
-    if (wire_spacing_model_str_ == string("SWIDTH_SSPACE"))
-    {
-        m_width_spacing_model = SWIDTH_SSPACE;
-    }
-    else if (wire_spacing_model_str_ == string("SWIDTH_DSPACE"))
-    {
-        m_width_spacing_model = SWIDTH_DSPACE;
-    }
-    else if (wire_spacing_model_str_ == string("DWIDTH_SSPACE"))
-    {
-        m_width_spacing_model = DWIDTH_SSPACE;
-    }
-    else if (wire_spacing_model_str_ == string("DWIDTH_DSPACE"))
-    {
-        m_width_spacing_model = DWIDTH_DSPACE;
-    }
-    else
-    {
-        cerr << "ERROR: Invalid wire width/spacing model" << endl;
-        exit(1);
-    }
-    return;
-}
-
-void Wire::set_buf_scheme(
-        const string& buf_scheme_str_
-        )
-{
-    if (buf_scheme_str_ == string("MIN_DELAY"))
-    {
-        m_buf_scheme = MIN_DELAY;
-    }
-    else if (buf_scheme_str_ == string("STAGGERED"))
-    {
-        m_buf_scheme = STAGGERED;
-    }
-    else
-    {
-        cerr << "ERROR: Invalid wire buf scheme" << endl;
-        exit(1);
-    }
-    return;
-}
-
-// The following function computes the wire resistance considering
-// width-spacing combination and a width-dependent resistivity model
-double Wire::calc_res_unit_len()
-{
-    double r = -1.0;
-    double rho;
-    // r, rho is in ohm.m
-
-    double WireMinWidth = m_tech_param_ptr->get_WireMinWidth();
-    double WireBarrierThickness = m_tech_param_ptr->get_WireBarrierThickness();
-    double WireMetalThickness = m_tech_param_ptr->get_WireMetalThickness();
-
-    switch(m_width_spacing_model)
-    {
-        case SWIDTH_SSPACE:
-        case SWIDTH_DSPACE:
-            rho = 2.202e-8 + (1.030e-15  / (WireMinWidth - 2*WireBarrierThickness));
-            r = ((rho) / ((WireMinWidth - 2*WireBarrierThickness) *
-                        (WireMetalThickness - WireBarrierThickness)));
-            break;
-        case DWIDTH_SSPACE:
-        case DWIDTH_DSPACE:
-            rho = 2.202e-8 + (1.030e-15  / (2*WireMinWidth - 2*WireBarrierThickness));
-            r = ((rho) / ((2*WireMinWidth - 2*WireBarrierThickness) *
-                        (WireMetalThickness - WireBarrierThickness)));
-            break;
-        default:
-            warn("Orion: Width spacing model not found: %s\n", m_width_spacing_model);
-            r = 1.0;
-    }
-    return r;
-}
-
-// COMPUTE WIRE CAPACITANCE using PTM models
-double Wire::calc_gnd_cap_unit_len()
-{
-    // c_g is in F
-    double c_g = -1.0;
-
-    double WireMinWidth = m_tech_param_ptr->get_WireMinWidth();
-    double WireMinSpacing = m_tech_param_ptr->get_WireMinSpacing();
-    double WireMetalThickness = m_tech_param_ptr->get_WireMetalThickness();
-    double WireDielectricThickness = m_tech_param_ptr->get_WireDielectricThickness();
-    double WireDielectricConstant = m_tech_param_ptr->get_WireDielectricConstant();
-
-    switch(m_width_spacing_model)
-    {
-        case SWIDTH_SSPACE:
-            {
-                double A = (WireMinWidth/WireDielectricThickness);
-                double B = 2.04*pow((WireMinSpacing/(WireMinSpacing +
-                                0.54*WireDielectricThickness)), 1.77);
-                double C = pow((WireMetalThickness/(WireMetalThickness +
-                                4.53*WireDielectricThickness)), 0.07);
-                c_g = WireDielectricConstant*8.85e-12*(A+(B*C)); 
-                break;
-            }
-        case SWIDTH_DSPACE:
-            {
-                double minSpacingNew = 2*WireMinSpacing + WireMinWidth;
-                double A = (WireMinWidth/WireDielectricThickness);
-                double B = 2.04*pow((minSpacingNew/(minSpacingNew +
-                                0.54*WireDielectricThickness)), 1.77);
-                double C = pow((WireMetalThickness/(WireMetalThickness +
-                                4.53*WireDielectricThickness)), 0.07);
-                c_g = WireDielectricConstant*8.85e-12*(A+(B*C));
-                break;
-            }
-        case DWIDTH_SSPACE:
-            {
-                double minWidthNew = 2*WireMinWidth;
-                double A = (minWidthNew/WireDielectricThickness);
-                double B = 2.04*pow((WireMinSpacing/(WireMinSpacing +
-                                0.54*WireDielectricThickness)), 1.77);
-                double C = pow((WireMetalThickness/(WireMetalThickness +
-                                4.53*WireDielectricThickness)), 0.07);
-                c_g = WireDielectricConstant*8.85e-12*(A+(B*C)); 
-                break;
-            }
-        case DWIDTH_DSPACE:
-            {
-                double minWidthNew = 2*WireMinWidth;
-                double minSpacingNew = 2*WireMinSpacing;
-                double A = (minWidthNew/WireDielectricThickness);
-                double B = 2.04*pow((minSpacingNew/(minSpacingNew+
-                                0.54*WireDielectricThickness)), 1.77);
-                double C = pow((WireMetalThickness/(WireMetalThickness +
-                                4.53*WireDielectricThickness)), 0.07);
-                c_g = WireDielectricConstant*8.85e-12*(A+(B*C)); 
-                break;
-            }
-        default:
-            warn("Orion: Width spacing model not found: %s\n", m_width_spacing_model);
-            c_g = 1.0;
-    }
-
-    return c_g;
-}
-
-// Computes the coupling capacitance considering cross-talk
-double Wire::calc_couple_cap_unit_len()
-{
-    //c_c is in F
-    double c_c = -1.0;
-
-    double WireMinWidth = m_tech_param_ptr->get_WireMinWidth();
-    double WireMinSpacing = m_tech_param_ptr->get_WireMinSpacing();
-    double WireMetalThickness = m_tech_param_ptr->get_WireMetalThickness();
-    double WireDielectricThickness = m_tech_param_ptr->get_WireDielectricThickness();
-    double WireDielectricConstant = m_tech_param_ptr->get_WireDielectricConstant();
-
-    switch(m_width_spacing_model)
-    {
-        case SWIDTH_SSPACE:
-            {
-                double A = 1.14*(WireMetalThickness/WireMinSpacing) *
-                    exp(-4*WireMinSpacing/(WireMinSpacing + 8.01*WireDielectricThickness));
-                double B = 2.37*pow((WireMinWidth/(WireMinWidth + 0.31*WireMinSpacing)), 0.28);
-                double C = pow((WireDielectricThickness/(WireDielectricThickness +
-                                8.96*WireMinSpacing)), 0.76) *
-                    exp(-2*WireMinSpacing/(WireMinSpacing + 6*WireDielectricThickness));
-                c_c = WireDielectricConstant*8.85e-12*(A + (B*C));
-                break;
-            }
-        case SWIDTH_DSPACE:
-            {
-                double minSpacingNew = 2*WireMinSpacing + WireMinWidth;
-                double A = 1.14*(WireMetalThickness/minSpacingNew) *
-                    exp(-4*minSpacingNew/(minSpacingNew + 8.01*WireDielectricThickness));
-                double B = 2.37*pow((WireMinWidth/(WireMinWidth + 0.31*minSpacingNew)), 0.28);
-                double C = pow((WireDielectricThickness/(WireDielectricThickness +
-                                8.96*minSpacingNew)), 0.76) *
-                    exp(-2*minSpacingNew/(minSpacingNew + 6*WireDielectricThickness));
-                c_c = WireDielectricConstant*8.85e-12*(A + (B*C));
-                break;
-            }
-        case DWIDTH_SSPACE:
-            {
-                double minWidthNew = 2*WireMinWidth;
-                double A = 1.14*(WireMetalThickness/WireMinSpacing) *
-                    exp(-4*WireMinSpacing/(WireMinSpacing + 8.01*WireDielectricThickness));
-                double B = 2.37*pow((2*minWidthNew/(2*minWidthNew + 0.31*WireMinSpacing)), 0.28);
-                double C = pow((WireDielectricThickness/(WireDielectricThickness +
-                                8.96*WireMinSpacing)), 0.76) *
-                    exp(-2*WireMinSpacing/(WireMinSpacing + 6*WireDielectricThickness));
-                c_c = WireDielectricConstant*8.85e-12*(A + (B*C));
-                break;
-            }
-        case DWIDTH_DSPACE:
-            {
-                double minWidthNew = 2*WireMinWidth;
-                double minSpacingNew = 2*WireMinSpacing;
-                double A = 1.14*(WireMetalThickness/minSpacingNew) *
-                    exp(-4*minSpacingNew/(minSpacingNew + 8.01*WireDielectricThickness));
-                double B = 2.37*pow((minWidthNew/(minWidthNew + 0.31*minSpacingNew)), 0.28);
-                double C = pow((WireDielectricThickness/(WireDielectricThickness +
-                                8.96*minSpacingNew)), 0.76) *
-                    exp(-2*minSpacingNew/(minSpacingNew + 6*WireDielectricThickness));
-                c_c = WireDielectricConstant*8.85e-12*(A + (B*C));
-                break;
-            }
-        default:
-            warn("Orion: Width spacing model not found: %s\n", m_width_spacing_model);
-            c_c = 1.0;
-    }
-
-    return c_c;
-}
-
diff --git a/src/mem/ruby/network/orion/Wire.hh b/src/mem/ruby/network/orion/Wire.hh
deleted file mode 100644 (file)
index 2138cc3..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (c) 2009 Princeton University
- * Copyright (c) 2009 The Regents of the University of California
- * 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.
- *
- * Authors:  Hangsheng Wang (Orion 1.0, Princeton)
- *           Xinping Zhu (Orion 1.0, Princeton)
- *           Xuning Chen (Orion 1.0, Princeton)
- *           Bin Li (Orion 2.0, Princeton)
- *           Kambiz Samadi (Orion 2.0, UC San Diego)
- */
-
-#ifndef __WIRE_H__
-#define __WIRE_H__
-
-#include "mem/ruby/network/orion/Type.hh"
-
-class TechParameter;
-
-class Wire
-{
-  public:
-    enum WidthSpacingModel
-    {
-      SWIDTH_SSPACE,
-      SWIDTH_DSPACE,
-      DWIDTH_SSPACE,
-      DWIDTH_DSPACE
-    };
-    enum BufferScheme
-    {
-      MIN_DELAY,
-      STAGGERED
-    };
-
-  public:
-    Wire(
-      const string& wire_spacing_model_str_,
-      const string& buf_scheme_str_,
-      bool is_shielding_,
-      const TechParameter* tech_param_ptr_
-    );
-    ~Wire();
-
-  public:
-    void calc_opt_buffering(int* k_, double* h_, double len_) const;
-    double calc_dynamic_energy(double len_) const;
-    double calc_static_power(double len_) const;
-
-  private:
-    void init();
-    void set_width_spacing_model(const string& wire_spacing_model_str_);
-    void set_buf_scheme(const string& buf_scheme_str_);
-    double calc_res_unit_len();
-    double calc_gnd_cap_unit_len();
-    double calc_couple_cap_unit_len();
-
-  private:
-    const TechParameter* m_tech_param_ptr;
-    WidthSpacingModel m_width_spacing_model;
-    BufferScheme m_buf_scheme;
-    bool m_is_shielding;
-
-    double m_res_unit_len;
-    double m_gnd_cap_unit_len;
-    double m_couple_cap_unit_len;
-};
-
-#endif
diff --git a/src/mem/ruby/network/orion/orion.hh b/src/mem/ruby/network/orion/orion.hh
deleted file mode 100644 (file)
index 2153985..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2010 Massachusetts Institute of Technology
- * 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.
- *
- * Authors: Chia-Hsin Owen Chen
- */
-
-#ifndef __ORION_H__
-#define __ORION_H__
-
-#include "mem/ruby/network/orion/OrionConfig.hh"
-#include "mem/ruby/network/orion/OrionLink.hh"
-#include "mem/ruby/network/orion/OrionRouter.hh"
-
-#endif
-
diff --git a/src/mem/ruby/network/orion/router.cfg b/src/mem/ruby/network/orion/router.cfg
deleted file mode 100644 (file)
index 68f0cd1..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-# Copyright (c) 2010 Massachusetts Institute of Technology
-# 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.
-#
-# Authors: Chia-Hsin Owen Chen
-
-# Technology related parameters
-# technology node in nm (90, 65, 45, 32)
-TECH_NODE = 65
-# transistor type (HVT, NVT, LVT)
-TRANSISTOR_TYPE = NVT
-# operating voltage supply in volt
-VDD = 1.0
-# operating frequency in Hz
-FREQUENCY = 1.0e9
-
-# router module parameters
-# general parameters
-# number of router input ports
-NUM_INPUT_PORT = 0
-# number of router output ports
-NUM_OUTPUT_PORT = 0    
-# flit width in bit
-FLIT_WIDTH = 0
-
-# virtual channel parameters
-# number of message classes per port
-NUM_VIRTUAL_CLASS = 0
-# number of virtual channels per message class
-NUM_VIRTUAL_CHANNEL = 0
-# Are input virtual channels managed in a shared buffer? (Private buffer otherwise)
-IS_IN_SHARED_BUFFER = FALSE
-# Are output virtual channels managed in a shared buffer? (Private buffer otherwise)
-IS_OUT_SHARED_BUFFER = FALSE
-# Are input virtual channels sharing the same crossbar input ports?
-IS_IN_SHARED_SWITCH = TRUE
-# Are output virtual channels sharing the same crossbar output ports?
-IS_OUT_SHARED_SWITCH = TRUE
-
-# crossbar parameters
-# crossbar model
-CROSSBAR_MODEL = MULTREE_CROSSBAR
-
-CROSSBAR_CONNECT_TYPE = TRISTATE_GATE
-CROSSBAR_TRANS_GATE_TYPE = NP_GATE
-CROSSBAR_MUX_DEGREE = 4
-CROSSBAR_NUM_IN_SEG = 1
-CROSSBAR_NUM_OUT_SEG = 1
-# crossbar input line length
-CROSSBAR_LEN_IN_WIRE = 0
-# crossbar output line length
-CROSSBAR_LEN_OUT_WIRE = 0
-
-# input buffer parameters 
-IS_INPUT_BUFFER = TRUE
-# input buffer model (SRAM, REGISTER)
-IN_BUF_MODEL = REGISTER
-IN_BUF_NUM_SET = 0
-IN_BUF_NUM_READ_PORT = 1
-
-# output buffer parameters */
-IS_OUTPUT_BUFFER = FALSE
-# output buffer model (SRAM, REGISTER)
-OUT_BUF_MODEL = SRAM
-OUT_BUF_NUM_SET = 0
-OUT_BUF_NUM_WRITE_PORT = 0
-
-# array parameters shared by various sram buffers 
-SRAM_ROWDEC_MODEL = GENERIC_DEC
-SRAM_ROWDEC_PRE_MODEL = SINGLE_OTHER
-SRAM_WORDLINE_MODEL = RW_WORDLINE
-SRAM_BITLINE_MODEL = RW_BITLINE
-SRAM_OUTDRV_MODEL = REG_OUTDRV
-# these 3 should be changed together 
-# use double-ended bitline because the array is too large 
-SRAM_NUM_DATA_END = 2
-SRAM_AMP_MODEL = GENERIC_AMP
-SRAM_BITLINE_PRE_MODEL = EQU_BITLINE
-# SRAM_NUM_DATA_END  = 1
-# SRAM_AMP_MODEL = NO_MODEL
-# SRAM_BITLINE_PRE_MODEL = SINGLE_OTHER
-
-# switch allocator arbiter parameters 
-# arbiter mode (MATRIX_ARBITER, RR_ARBITER)
-SA_IN_ARB_MODEL = RR_ARBITER
-# flip-flop model
-SA_IN_ARB_FF_MODEL = NEG_DFF
-# arbiter mode (MATRIX_ARBITER, RR_ARBITER)
-SA_OUT_ARB_MODEL = MATRIX_ARBITER
-# flip-flop model
-SA_OUT_ARB_FF_MODEL = NEG_DFF
-
-# virtual channel allocator arbiter parameters 
-# allocator model (ONE_STAGE_ARB, TWO_STAGE_ARB, VC_SELECT)
-VA_MODEL = TWO_STAGE_ARB
-# arbiter mode (MATRIX_ARBITER, RR_ARBITER)
-VA_IN_ARB_MODEL = RR_ARBITER
-# flip-flop model
-VA_IN_ARB_FF_MODEL = NEG_DFF
-# arbiter mode (MATRIX_ARBITER, RR_ARBITER)
-VA_OUT_ARB_MODEL = MATRIX_ARBITER
-# flip-flop model
-VA_OUT_ARB_FF_MODEL = NEG_DFF
-# buffer model if VC_SELECT is used (SRAM, REGISTER)
-VA_BUF_MODEL = REGISTER
-
-# link wire parameters
-#link length in metres
-LINK_LENGTH = 1e-3
-# wire layer model (INTERMEDIATE, GLOBAL)
-WIRE_LAYER_TYPE = GLOBAL
-# wire width spacing (SWIDTH_SSPACE, SWIDTH_DSPACE, DWIDTH_SSPACE, DWIDTH_DSPACE)
-WIRE_WIDTH_SPACING = DWIDTH_DSPACE
-# buffering model (MIN_DELAY, STAGGERED)
-WIRE_BUFFERING_MODEL = MIN_DELAY
-# is shielding
-WIRE_IS_SHIELDING = FALSE
-
-# clock power parameters
-NUM_PIPELINE_STAGE = 3
-IS_HTREE_CLOCK = FALSE
-# router diagonal in um
-ROUTER_DIAGONAL = 442
-