Chapter 7: SystemC 1666-2023 LRM

LRM Standards Version Map

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

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.

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. Mandates C++14 support (compatible up to C++17/C++20). Introduces stages of elaboration callbacks, fine-grained thread suspension, and extensive memory management formalizations.

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.

4. UVM-SystemC

  • UVM-SystemC 1.0 (2021): A faithful port of the IEEE 1800.2 (SystemVerilog UVM) standard to C++. It introduces uvm_component, phasing, configuration databases, and sequence mechanisms to the C++ ESL ecosystem.

Basic Compliant Starter

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

#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