From 23ed5086b5013caf6fc6f6e978ca7a6bb5b35c70 Mon Sep 17 00:00:00 2001 From: Mateusz Gancarz Date: Tue, 4 Mar 2025 13:10:30 +0100 Subject: [PATCH] [#74021] wip: SystemC support --- include/verilated_saif_sc.cpp | 24 ++++++++++ include/verilated_saif_sc.h | 56 ++++++++++++++++++++++++ src/V3Options.cpp | 4 -- test_regress/t/t_trace_saif_sc_unsup.out | 3 -- test_regress/t/t_trace_saif_sc_unsup.py | 23 ---------- 5 files changed, 80 insertions(+), 30 deletions(-) create mode 100644 include/verilated_saif_sc.cpp create mode 100644 include/verilated_saif_sc.h delete mode 100644 test_regress/t/t_trace_saif_sc_unsup.out delete mode 100755 test_regress/t/t_trace_saif_sc_unsup.py diff --git a/include/verilated_saif_sc.cpp b/include/verilated_saif_sc.cpp new file mode 100644 index 0000000000..991a3cdb9b --- /dev/null +++ b/include/verilated_saif_sc.cpp @@ -0,0 +1,24 @@ +// -*- mode: C++; c-file-style: "cc-mode" -*- +//============================================================================= +// +// THIS MODULE IS PUBLICLY LICENSED +// +// Copyright 2001-2025 by Wilson Snyder. This program is free software; you +// can redistribute it and/or modify it under the terms of either the GNU +// Lesser General Public License Version 3 or the Perl Artistic License +// Version 2.0. +// SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 +// +//============================================================================= +/// +/// \file +/// \brief Verilated tracing in SAIF for SystemC implementation code +/// +/// This file is deprecated, only verilated_saif_sc.h is needed. +/// It is provided only for backward compatibility with user's linker scripts. +/// +//============================================================================= + +#ifdef VL_NO_LEGACY +#error "verilated_saif_sc.cpp is deprecated; verilated_saif_sc.h is self-sufficient" +#endif diff --git a/include/verilated_saif_sc.h b/include/verilated_saif_sc.h new file mode 100644 index 0000000000..96067abbd2 --- /dev/null +++ b/include/verilated_saif_sc.h @@ -0,0 +1,56 @@ +// -*- mode: C++; c-file-style: "cc-mode" -*- +//============================================================================= +// +// Copyright 2001-2025 by Wilson Snyder. This program is free software; you can +// redistribute it and/or modify it under the terms of either the GNU +// Lesser General Public License Version 3 or the Perl Artistic License +// Version 2.0. +// SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 +// +//============================================================================= +/// +/// \file +/// \brief Verilated tracing in SAIF format for SystemC header +/// +/// User wrapper code should use this header when creating SAIF SystemC traces. +/// +/// This class is not threadsafe, as the SystemC kernel is not threadsafe. +/// +//============================================================================= + +#ifndef VERILATOR_VERILATED_SAIF_SC_H_ +#define VERILATOR_VERILATED_SAIF_SC_H_ + +#include "verilatedos.h" + +#include "verilated_saif_c.h" +#include "verilated_sc_trace.h" + +//============================================================================= +// VerilatedSaifSc +/// Trace file used to create SAIF dump for SystemC version of Verilated models. It's very similar +/// to its C version (see the class VerilatedSaifC) + +class VerilatedSaifSc final : VerilatedScTraceBase, public VerilatedSaifC { + // CONSTRUCTORS + VL_UNCOPYABLE(VerilatedSaifSc); + +public: + VerilatedSaifSc() { + spTrace()->set_time_unit(VerilatedScTraceBase::getScTimeUnit()); + spTrace()->set_time_resolution(VerilatedScTraceBase::getScTimeResolution()); + } + + // METHODS + // Override VerilatedSaifC. Must be called after starting simulation. + void open(const char* filename) override VL_MT_SAFE { + VerilatedScTraceBase::checkScElaborationDone(); + VerilatedSaifC::open(filename); + } + + // METHODS - for SC kernel + // Called from SystemC kernel + void cycle() override { VerilatedSaifC::dump(sc_core::sc_time_stamp().to_double()); } +}; + +#endif // Guard diff --git a/src/V3Options.cpp b/src/V3Options.cpp index b340767752..3ea1bd21e8 100644 --- a/src/V3Options.cpp +++ b/src/V3Options.cpp @@ -1816,10 +1816,6 @@ void V3Options::parseOptsList(FileLine* fl, const string& optdir, int argc, addIncDirUser(parseFileArg(optdir, string{valp})); }); - if (m_systemC && m_traceFormat == TraceFormat::SAIF) { - fl->v3warn(E_UNSUPPORTED, "Unsupported: SAIF trace with SystemC."); - } - parser.finalize(); for (int i = 0; i < argc;) { diff --git a/test_regress/t/t_trace_saif_sc_unsup.out b/test_regress/t/t_trace_saif_sc_unsup.out deleted file mode 100644 index 39aa5fd81b..0000000000 --- a/test_regress/t/t_trace_saif_sc_unsup.out +++ /dev/null @@ -1,3 +0,0 @@ -%Error-UNSUPPORTED: Unsupported: SAIF trace with SystemC. - ... For error description see https://verilator.org/warn/UNSUPPORTED?v=latest -%Error: Exiting due to diff --git a/test_regress/t/t_trace_saif_sc_unsup.py b/test_regress/t/t_trace_saif_sc_unsup.py deleted file mode 100755 index 0d8a09a9f6..0000000000 --- a/test_regress/t/t_trace_saif_sc_unsup.py +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env python3 -# DESCRIPTION: Verilator: Verilog Test driver/expect definition -# -# Copyright 2025 by Wilson Snyder. This program is free software; you -# can redistribute it and/or modify it under the terms of either the GNU -# Lesser General Public License Version 3 or the Perl Artistic License -# Version 2.0. -# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 - -import vltest_bootstrap - -test.scenarios('linter') - -test.top_filename = "t/t_trace_fst_sc.v" - -if not test.have_sc: - test.skip("No SystemC installed") - -test.lint(fails=test.vlt_all, - verilator_flags2=["--sc --trace-saif --lint-only"], - expect_filename=test.golden_filename) - -test.passes()