41struct vcd_mt_trace_file :
public sc_core::sc_trace_file,
public observer {
43 vcd_mt_trace_file(
const char* name, std::function<
bool()>& enable);
45 virtual ~vcd_mt_trace_file();
48#define DECL_TRACE_METHOD_A(tp) void trace(const tp& object, const std::string& name) override;
49#define DECL_TRACE_METHOD_B(tp) void trace(const tp& object, const std::string& name, int width) override;
50#if(SYSTEMC_VERSION >= 20171012) || defined(NCSC)
51 DECL_TRACE_METHOD_A(sc_core::sc_event)
52 DECL_TRACE_METHOD_A(sc_core::sc_time)
54 DECL_TRACE_METHOD_A(
bool)
55 DECL_TRACE_METHOD_A(sc_dt::sc_bit)
56 DECL_TRACE_METHOD_A(sc_dt::sc_logic)
57 DECL_TRACE_METHOD_B(
unsigned char)
58 DECL_TRACE_METHOD_B(
unsigned short)
59 DECL_TRACE_METHOD_B(
unsigned int)
60 DECL_TRACE_METHOD_B(
unsigned long)
61#ifdef SYSTEMC_64BIT_PATCHES
62 DECL_TRACE_METHOD_B(
unsigned long long)
64 DECL_TRACE_METHOD_B(
char)
65 DECL_TRACE_METHOD_B(
short)
66 DECL_TRACE_METHOD_B(
int)
67 DECL_TRACE_METHOD_B(
long)
68 DECL_TRACE_METHOD_B(sc_dt::int64)
69 DECL_TRACE_METHOD_B(sc_dt::uint64)
70 DECL_TRACE_METHOD_A(
float)
71 DECL_TRACE_METHOD_A(
double)
72 DECL_TRACE_METHOD_A(sc_dt::sc_int_base)
73 DECL_TRACE_METHOD_A(sc_dt::sc_uint_base)
74 DECL_TRACE_METHOD_A(sc_dt::sc_signed)
75 DECL_TRACE_METHOD_A(sc_dt::sc_unsigned)
76 DECL_TRACE_METHOD_A(sc_dt::sc_fxval)
77 DECL_TRACE_METHOD_A(sc_dt::sc_fxval_fast)
78 DECL_TRACE_METHOD_A(sc_dt::sc_fxnum)
79 DECL_TRACE_METHOD_A(sc_dt::sc_fxnum_fast)
80 DECL_TRACE_METHOD_A(sc_dt::sc_bv_base)
81 DECL_TRACE_METHOD_A(sc_dt::sc_lv_base)
82#undef DECL_TRACE_METHOD_A
83#undef DECL_TRACE_METHOD_B
85 void trace(
const unsigned int&
object,
const std::string& name,
const char** enum_literals)
override;
87#define DECL_REGISTER_METHOD_A(tp) observer::notification_handle* observe(tp const& o, std::string const& nm) override;
88#if(SYSTEMC_VERSION >= 20171012)
89 DECL_REGISTER_METHOD_A(sc_core::sc_event)
90 DECL_REGISTER_METHOD_A(sc_core::sc_time)
92 DECL_REGISTER_METHOD_A(
bool)
93 DECL_REGISTER_METHOD_A(sc_dt::sc_bit)
94 DECL_REGISTER_METHOD_A(sc_dt::sc_logic)
96 DECL_REGISTER_METHOD_A(
unsigned char)
97 DECL_REGISTER_METHOD_A(
unsigned short)
98 DECL_REGISTER_METHOD_A(
unsigned int)
99 DECL_REGISTER_METHOD_A(
unsigned long)
100 DECL_REGISTER_METHOD_A(
char)
101 DECL_REGISTER_METHOD_A(
short)
102 DECL_REGISTER_METHOD_A(
int)
103 DECL_REGISTER_METHOD_A(
long)
104 DECL_REGISTER_METHOD_A(sc_dt::int64)
105 DECL_REGISTER_METHOD_A(sc_dt::uint64)
107 DECL_REGISTER_METHOD_A(
float)
108 DECL_REGISTER_METHOD_A(
double)
109 DECL_REGISTER_METHOD_A(sc_dt::sc_int_base)
110 DECL_REGISTER_METHOD_A(sc_dt::sc_uint_base)
111 DECL_REGISTER_METHOD_A(sc_dt::sc_signed)
112 DECL_REGISTER_METHOD_A(sc_dt::sc_unsigned)
114 DECL_REGISTER_METHOD_A(sc_dt::sc_fxval)
115 DECL_REGISTER_METHOD_A(sc_dt::sc_fxval_fast)
116 DECL_REGISTER_METHOD_A(sc_dt::sc_fxnum)
117 DECL_REGISTER_METHOD_A(sc_dt::sc_fxnum_fast)
119 DECL_REGISTER_METHOD_A(sc_dt::sc_bv_base)
120 DECL_REGISTER_METHOD_A(sc_dt::sc_lv_base)
121#undef DECL_REGISTER_METHOD_A
124 void write_comment(
const std::string& comment)
override;
127 void cycle(
bool delta_cycle)
override;
129 void set_time_unit(
double v, sc_core::sc_time_unit tu)
override;
132#if WITH_SC_TRACING_PHASE_CALLBACKS
134 virtual void trace(sc_trace_file*)
const;
138 std::string prune_name(std::string
const& name);
139 std::string obtain_name();
140 std::function<bool()> check_enabled;
141 std::unique_ptr<trace::gz_writer> vcd_out{
nullptr};
145 vcd_mt_trace_file* that;
146 bool notify()
override;
148 : compare_and_update{compare_and_update}
151 virtual ~trace_entry() {}
153 std::deque<trace_entry> all_traces;
154 std::vector<trace_entry> active_traces;
155 std::vector<trace::vcd_trace*> changed_traces;
156 std::vector<trace::vcd_trace*> triggered_traces;
157 std::vector<trace::vcd_trace*> record_traces;
158 bool initialized{
false};
159 unsigned vcd_name_index{0};
161 std::future<bool> res;