SystemC has its own tracing functions for generating VCDs
(sc_create_vcd_trace_file
,
sc_close_vcd_trace_file
and
sc_trace
). However these only allow tracing of
SystemC signals.
Tracing the signals in the underlying Verilator model requires a
SystemC module which can drive Verilator's trace functions. In
this example, that module is TraceSC
.
Tracing must be enabled when the Verilator model is created, by use
of the -trace
flag. This can be conveniently passed
in using the VFLAGS
macro with the
Makefile
. When tracing has been turned on the
VM_TRACE
macro is defined, so C++ code can be made
conditional by using #if VM_TRACE
.
Tracing requires that the main model header is included and the
SystemPerl VCD tracing header. However the latter is only available if
the -trace
flag has been used, so its inclusion must
be conditional:
#include "Vorpsoc_fpga_top.h" #if VM_TRACE #include <SpTraceVcdC.h> #endif
Tracing requires a SystemC method to be woken on each clock edge to
generate trace output, a pointer to the Verilator model and a
pointer to a the SystemPerl trace file object of type
SpTraceVcdFile. This last is only available if the
-trace
flag has been used, so its definition must be
conditional on VM_TRACE
.