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
systemcGitHub repository updated itsCMakeLists.txtto strictly mandateCMAKE_CXX_STANDARD 14(compatible up to C++17/C++20). This update replaced many internal macro-hacks with native C++11/14 features (likestd::unique_ptrin internal object managers andoverridespecifiers), 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_paramand broker APIs for configuring Virtual Platforms without proprietary string parsing. Under the Hood: Theccirepo integrates cleanly withsc_object, leveraging the 1666 hierarchical string mapping to provide JSON-likecci_valueconfiguration 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-systemcrepository relies heavily on 1666sc_spawnto execute itsrun_phasecoroutines, 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