Gabe Black has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/12455

Change subject: systemc: Implement sc_fifo::dump and improve sc_fifo::print.
......................................................................

systemc: Implement sc_fifo::dump and improve sc_fifo::print.

The print function is supposed to print both pending and committed
writes, apparently.

Accellera's implementation of sc_fifo uses a ring buffer to store the
entries and manages a head and tail pointer to keep track of what's
full, etc. Their dump function prints that whole buffer using the
indexes. When not using a ring buffer, there's no easy way to determine
what those indexes should be.

Fortunately the test that uses dump never moves away from the base of
the ring buffer, so I can get the same effect (which also makes sense
on its own) by printing the index into the fifo instead.

Change-Id: I50fe049461f6a5e8a55b54eeb2f134d20f0812c6
---
M src/systemc/ext/channel/sc_fifo.hh
1 file changed, 17 insertions(+), 4 deletions(-)



diff --git a/src/systemc/ext/channel/sc_fifo.hh b/src/systemc/ext/channel/sc_fifo.hh
index 78051d5..6189c2a 100644
--- a/src/systemc/ext/channel/sc_fifo.hh
+++ b/src/systemc/ext/channel/sc_fifo.hh
@@ -142,15 +142,28 @@
     virtual void
     print(std::ostream &os=std::cout) const
     {
+        for (typename ::std::list<T>::iterator pos = _pending.begin();
+                pos != _pending.end(); pos++) {
+            os << *pos << ::std::endl;
+        }
         for (typename ::std::list<T>::iterator pos = _entries.begin();
                 pos != _entries.end(); pos++) {
             os << *pos << ::std::endl;
         }
     }
     virtual void
-    dump(std::ostream & =std::cout) const
+    dump(std::ostream &os=std::cout) const
     {
-        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+        os << "name = " << name() << std::endl;
+        int idx = 0;
+        for (typename ::std::list<T>::iterator pos = _pending.begin();
+                pos != _pending.end(); pos++) {
+            os << "value[" << idx++ << "] = " << *pos << ::std::endl;
+        }
+        for (typename ::std::list<T>::iterator pos = _entries.begin();
+                pos != _entries.end(); pos++) {
+            os << "value[" << idx++ << "] = " << *pos << ::std::endl;
+        }
     }
     virtual const char *kind() const { return "sc_fifo"; }

@@ -187,9 +200,9 @@

 template <class T>
 inline std::ostream &
-operator << (std::ostream &os, const sc_fifo<T> &)
+operator << (std::ostream &os, const sc_fifo<T> &f)
 {
-    sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+    f.print(os);
     return os;
 }


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/12455
To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings

Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: I50fe049461f6a5e8a55b54eeb2f134d20f0812c6
Gerrit-Change-Number: 12455
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black <[email protected]>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to