systemc: Use the stage of simulation and not port size in add_trace.

The assumption was that a port wouldn't have any interfaces until
after elaboration, and that if it would be traced, it would have
interfaces. Checking if the simulation has started (and hence
elaboration has finished) is a more accurate and direct way to check
the same thing.

Change-Id: I7fe9ecea469997d1a257dd3e4a0db31889aff722
Reviewed-on: https://gem5-review.googlesource.com/c/13195
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>
This commit is contained in:
Gabe Black
2018-09-30 22:40:28 -07:00
parent 163eb3c56b
commit e5a994140a
2 changed files with 20 additions and 18 deletions

View File

@@ -33,6 +33,7 @@
#include <string>
#include "../core/sc_event.hh"
#include "../core/sc_main.hh"
#include "../core/sc_port.hh"
#include "../utils/sc_trace_file.hh"
#include "sc_signal_in_if.hh"
@@ -155,10 +156,10 @@ template <class T>
inline void
sc_trace(sc_trace_file *tf, const sc_in<T> &i, const std::string &name)
{
if (i.size())
sc_trace(tf, i->read(), name);
else
if (::sc_core::sc_get_status() < ::sc_core::SC_START_OF_SIMULATION)
i.add_trace(tf, name);
else
sc_trace(tf, i->read(), name);
}
template <>
@@ -316,10 +317,10 @@ inline void
sc_trace<bool>(sc_trace_file *tf, const sc_in<bool> &i,
const std::string &name)
{
if (i.size())
sc_trace(tf, i->read(), name);
else
if (::sc_core::sc_get_status() < ::sc_core::SC_START_OF_SIMULATION)
i.add_trace(tf, name);
else
sc_trace(tf, i->read(), name);
}
template <>
@@ -475,10 +476,10 @@ inline void
sc_trace<sc_dt::sc_logic>(sc_trace_file *tf, const sc_in<sc_dt::sc_logic> &i,
const std::string &name)
{
if (i.size())
sc_trace(tf, i->read(), name);
else
if (::sc_core::sc_get_status() < ::sc_core::SC_START_OF_SIMULATION)
i.add_trace(tf, name);
else
sc_trace(tf, i->read(), name);
}
} // namespace sc_core

View File

@@ -33,6 +33,7 @@
#include <string>
#include "../core/sc_event.hh"
#include "../core/sc_main.hh"
#include "../core/sc_port.hh"
#include "../dt/bit/sc_logic.hh"
#include "../utils/sc_trace_file.hh"
@@ -184,10 +185,10 @@ template <class T>
inline void
sc_trace(sc_trace_file *tf, const sc_inout<T> &i, const std::string &name)
{
if (i.size())
sc_trace(tf, i->read(), name);
else
if (::sc_core::sc_get_status() < ::sc_core::SC_START_OF_SIMULATION)
i.add_trace(tf, name);
else
sc_trace(tf, i->read(), name);
}
template <>
@@ -357,10 +358,10 @@ template <>
inline void sc_trace<bool>(
sc_trace_file *tf, const sc_inout<bool> &i, const std::string &name)
{
if (i.size())
sc_trace(tf, i->read(), name);
else
if (::sc_core::sc_get_status() < ::sc_core::SC_START_OF_SIMULATION)
i.add_trace(tf, name);
else
sc_trace(tf, i->read(), name);
}
template <>
@@ -549,10 +550,10 @@ inline void
sc_trace<sc_dt::sc_logic>(sc_trace_file *tf,
const sc_inout<sc_dt::sc_logic> &i, const std::string &name)
{
if (i.size())
sc_trace(tf, i->read(), name);
else
if (::sc_core::sc_get_status() < ::sc_core::SC_START_OF_SIMULATION)
i.add_trace(tf, name);
else
sc_trace(tf, i->read(), name);
}
} // namespace sc_core