mem-garnet: Integration of HeteroGarnet
[gem5.git] / src / mem / ruby / network / garnet2.0 / Credit.cc
index eb286ec4992e4fc21cce19f5dec862f63a15d2d2..3e56b4ed52ea913194b563cd075b0ff32e7a8f83 100644 (file)
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-
 #include "mem/ruby/network/garnet2.0/Credit.hh"
 
+#include "base/trace.hh"
+#include "debug/RubyNetwork.hh"
+
 // Credit Signal for buffers inside VC
 // Carries m_vc (inherits from flit.hh)
 // and m_is_free_signal (whether VC is free or not)
 
-Credit::Credit(int vc, bool is_free_signal, Cycles curTime)
+Credit::Credit(int vc, bool is_free_signal, Tick curTime)
 {
     m_id = 0;
     m_vc = vc;
     m_is_free_signal = is_free_signal;
     m_time = curTime;
+    m_type = CREDIT_;
+}
+
+flit *
+Credit::serialize(int ser_id, int parts, uint32_t bWidth)
+{
+    DPRINTF(RubyNetwork, "Serializing a credit\n");
+    bool new_free = false;
+    if ((ser_id+1 == parts) && m_is_free_signal) {
+        new_free = true;
+    }
+    Credit *new_credit_flit = new Credit(m_vc, new_free, m_time);
+    return new_credit_flit;
 }
+
+flit *
+Credit::deserialize(int des_id, int num_flits, uint32_t bWidth)
+{
+    DPRINTF(RubyNetwork, "DeSerializing a credit vc:%d free:%d\n",
+    m_vc, m_is_free_signal);
+    if (m_is_free_signal) {
+        // We are not going to get anymore credits for this vc
+        // So send a credit in any case
+        return new Credit(m_vc, true, m_time);
+    }
+
+    return new Credit(m_vc, false, m_time);
+}
+
+void
+Credit::print(std::ostream& out) const
+{
+    out << "[Credit:: ";
+    out << "Type=" << m_type << " ";
+    out << "VC=" << m_vc << " ";
+    out << "FreeVC=" << m_is_free_signal << " ";
+    out << "Set Time=" << m_time << " ";
+    out << "]";
+}
+
+
+