Chapter 7: SystemC 1666-2023 LRM

LRM Standards Version Map

Understanding the chronological evolution of IEEE 1666, SystemC AMS, CCI, and UVM-SystemC standards.

How to Read This Lesson

This lesson is an LRM bridge. We translate standard language into the questions you actually ask while debugging and reviewing models.

LRM Standards Version Map

The SystemC ecosystem is defined by several inter-locking standards managed by Accellera and IEEE. Understanding the version history is critical for ensuring compliance and compiler compatibility. Furthermore, examining the Accellera GitHub repositories reveals how these versions are enforced at compile time.

Source and LRM Trail

This chapter is the LRM bridge. The primary reference is Docs/LRMs/SystemC_LRM_1666-2023.pdf; the secondary reference is .codex-src/systemc. Read the LRM first for the rule, then read the source to understand why the rule produces the behavior you see in a debugger.

1. SystemC Core (IEEE 1666)

  • IEEE 1666-2005: The first formal IEEE standardization of SystemC. Introduced core discrete-event simulation, SC_METHOD, SC_THREAD, events, and standard data types.
  • IEEE 1666-2011: The landmark update that officially merged TLM 2.0 into the core language standard. Introduced process control (sc_process_handle), sc_spawn, and async resets.
  • IEEE 1666-2023 (Current): The modern standard. Under the Hood: The official Accellera systemc GitHub repository updated its CMakeLists.txt to strictly mandate CMAKE_CXX_STANDARD 14 (compatible up to C++17/C++20). This update replaced many internal macro-hacks with native C++11/14 features (like std::unique_ptr in internal object managers and override specifiers), introduced stages of elaboration callbacks (before_end_of_elaboration, etc.), and formalized memory management semantics.

2. SystemC AMS (Analog/Mixed-Signal)

  • AMS 1.0 (2010): Introduced Timed Data Flow (TDF), Linear Signal Flow (LSF), and Electrical Linear Networks (ELN).
  • AMS 2.0 (2016 - Current): Defined dynamic TDF rates, improved continuous-time solver synchronization with the IEEE 1666 discrete kernel, and added standard AMS tracing capabilities.

3. SystemC CCI (Configuration, Control, and Inspection)

  • CCI 1.0 (2018): Standardized the cci_param and broker APIs for configuring Virtual Platforms without proprietary string parsing. Under the Hood: The cci repo integrates cleanly with sc_object, leveraging the 1666 hierarchical string mapping to provide JSON-like cci_value configuration trees.

4. UVM-SystemC

  • UVM-SystemC 1.0 (2021): A faithful port of the IEEE 1800.2 (SystemVerilog UVM) standard to C++. Under the Hood: The uvm-systemc repository relies heavily on 1666 sc_spawn to execute its run_phase coroutines, and C++ RTTI to emulate the SystemVerilog factory pattern.

Basic Compliant Starter

A compliant model today explicitly leverages the sc_core namespace and standard macros.

Under the Hood: sc_core::sc_version() returns a statically compiled string generated during the library's CMake build process (usually combining SC_VERSION, SC_VERSION_RELEASE_DATE, and SC_VERSION_PRERELEASE macros from sysc/kernel/sc_ver.h), ensuring you can programmatically verify the kernel version.

#include <systemc>
 
// A fully IEEE 1666-2023 compliant stub
SC_MODULE(CompliantModel) {
    SC_CTOR(CompliantModel) {
        SC_REPORT_INFO("Version", sc_core::sc_version());
    }
};
 
int sc_main(int argc, char* argv[]) {
    CompliantModel model("model");
    sc_core::sc_start();
    return 0;
}

Comments and Corrections