Fact-checked by Grok 2 weeks ago

SystemC

SystemC is an open-source C++ class library and methodology standard for system-level modeling, , and of complex electronic systems, including systems-on-chip (SoCs) that integrate and software components. It provides an event-driven and constructs such as modules, ports, signals, and processes to enable modeling at multiple abstraction levels, from algorithmic to register-transfer, facilitating /software partitioning, architectural exploration, and early software development. Developed to address the need for a unified spanning and software, SystemC supports (TLM) for high-level communication, analog/mixed-signal (AMS) extensions for hybrid systems, and libraries like UVM-SystemC and SCV for constrained random stimulus and coverage. Development of SystemC began in 1996 by and others. It was subsequently managed under the Open SystemC Initiative (), formed in 2000, was donated to Accellera in 2005 and has since been maintained by the Accellera Systems Initiative. It was first standardized as IEEE 1666-2005 and most recently updated to IEEE Std 1666-2023, which incorporates modern C++ features up to for improved performance and interoperability. The standard also includes a synthesizable subset for (HLS) tools, allowing SystemC models to be transformed into (RTL) implementations in hardware description languages like or . Widely adopted in the , (EDA), (IP), and industries, SystemC promotes model reuse, virtual platform creation, and co-simulation with other languages, reducing design cycle times and enabling faster validation of system architectures. Extensions like SystemC AMS (IEEE 1666.1-2016) broaden its applicability to analog and mixed-signal designs, while the , , and (CCI) standard enhances model parameterization and debugging. As of October 2025, the is SystemC 3.0.2, with ongoing efforts focused on performance optimizations and integration with emerging verification methodologies.

Introduction

Definition and Purpose

SystemC is an open-source C++ class library designed for system-level modeling of and software components, providing an event-driven simulation kernel along with signals, , and synchronization primitives to support the simulation of concurrent processes in complex systems. This library extends standard C++ to enable hardware-oriented constructs without requiring a separate language, allowing designers to leverage familiar programming paradigms for electronic system development. The reference implementation was updated to SystemC 3.0.2 in October 2025, aligning with IEEE Std 1666-2023. The primary purposes of SystemC are to facilitate system-level design exploration, architectural analysis, hardware-software co-simulation, and early-stage verification, thereby reducing dependency on traditional hardware description languages (HDLs) like or during initial phases of development. By supporting untimed and timed models at various abstraction levels, it enables and of integrated systems before committing to lower-level implementations. Key benefits of SystemC include the reusability of C++ models across design flows, high-level abstraction that hides low-level implementation details, and the ability to model heterogeneous systems encompassing digital logic, analog/mixed-signal components, and embedded software. Its development began in 1996 to overcome the limitations of HDLs in addressing system-level tasks, such as integrating software behavior and performing high-level simulations efficiently.

Applications in Design and Verification

SystemC plays a pivotal role in system-level and , enabling engineers to model, simulate, and validate complex hardware-software interactions at higher abstraction levels than traditional (RTL) descriptions. In flows, it facilitates the creation of behavioral models that can be refined progressively toward , while in , it supports advanced techniques to ensure functional correctness early in the development cycle. This dual utility stems from SystemC's C++-based foundation, which allows seamless integration with software tools and libraries for both exploratory analysis and rigorous testing. One primary application of SystemC is in high-level synthesis (HLS), where behavioral models described in synthesizable SystemC subsets are automatically transformed into RTL implementations for hardware description languages like Verilog or VHDL. This process abstracts away low-level details such as clock cycles and bit-level operations during initial design, allowing designers to focus on algorithmic functionality and architecture exploration before committing to gate-level netlists. Commercial HLS tools from vendors like Mentor Graphics and Cadence leverage the SystemC Synthesis Subset standard to generate optimized RTL, significantly reducing design time for digital circuits in complex systems. For instance, the SystemC Synthesis Subset 1.4.7 specification outlines the language features supported for this transformation, ensuring portability across tools. SystemC also excels in intellectual property (IP) development and reuse, particularly through virtual prototyping, which permits software engineers to develop and test applications on hardware models long before physical prototypes are available. IP blocks modeled in SystemC at the transaction-level can be composed into full system prototypes, promoting modularity and reuse across projects by standardizing interfaces and behaviors. This approach accelerates software-hardware co-development, as virtual prototypes simulate system interactions at speeds suitable for running millions of software instructions. A key benefit is the ability to validate driver software and firmware against untimed or loosely timed models, reducing integration risks in later stages. In verification, SystemC supports constrained to generate diverse input stimuli that exercise behaviors systematically, helping uncover corner cases that directed tests might miss. Integrated libraries like enable declarative constraints in C++ for random value generation, integrated directly into SystemC testbenches. Assertion-based is another cornerstone, where temporal properties are embedded as concurrent checks to monitor protocol compliance and state transitions during simulation. Functional coverage analysis complements these by tracking exercised scenarios against a coverage model, often using SystemC Verification (SCV) features to collect metrics on data, control, and cross-coverage points. These techniques, often combined in methodologies like UVM adapted for SystemC, provide a robust for ensuring model reliability at multiple levels. SystemC finds widespread adoption across industries such as system-on-chip (SoC) design, automotive electronics, aerospace, and telecommunications, where it models intricate interconnects and components at the system level. In SoC design, it is used to simulate processor architectures and memory hierarchies for performance trade-offs. Automotive applications include modeling engine control units (ECUs) and infotainment networks, such as MOST bus protocols for multimedia transport. In aerospace, SystemC aids in verifying avionics systems and satellite controllers, while telecommunications leverages it for baseband processors and network interfaces. These examples highlight its versatility in handling domain-specific protocols and real-time constraints. A key advantage of SystemC over traditional RTL-based methods is its speed, often 10 to 100 times faster, which enables rapid iteration during early exploration and trade-off analysis. This performance gain arises from higher abstraction, such as of communications, reducing the computational overhead of cycle-accurate details. Consequently, designers can evaluate multiple system configurations and power budgets in hours rather than days, informing decisions that propagate to downstream phases.

History and Development

Origins and Early Contributions

The development of SystemC was initiated in 1996 as a joint project between the (UCI) and , under the SCENIC framework, aimed at creating a C++-based library for modeling hardware components at the system level to enable efficient simulation of complex integrated systems. The primary motivations were to bridge the divide between software development in C++ and traditional hardware design flows, which often relied on proprietary hardware description languages, thereby facilitating hardware-software co-simulation in a unified, open environment without dependence on specialized tools. Key early contributors included researchers from UCI, such as those working on related system-level methodologies, and engineers from who focused on extending C++ for hardware semantics; the effort expanded through the formation of the Open SystemC Initiative (OSCI) in , which incorporated additional industry partners like CoWare, , and CynApps, with subsequent involvement from companies including and . The first public was released in September 1999 by , emphasizing cycle-accurate modeling to support precise timing and behavioral simulation at the . This foundational work laid the groundwork for SystemC's later evolution into an IEEE-standardized language.

Standardization and Key Milestones

In 2001, donated the SystemC library to the Open SystemC Initiative (), establishing it as an open-source C++ class library for system-level modeling and paving the way for collaborative efforts. This donation facilitated the transition from proprietary development to community-driven evolution, with overseeing reference implementations and language refinements. The initiative culminated in the first formal standard, IEEE 1666-2005, which defined the core SystemC library for hardware and software co-design, approved by the on December 7, 2005. Key milestones in SystemC's standardization include the release of SystemC 2.0 in , which expanded capabilities for general system modeling beyond cycle-accurate hardware simulation. Subsequent updates addressed performance and usability, such as SystemC 2.3 in 2011, which introduced optimizations for simulation speed and improved support for concurrent processes. A major advancement came with SystemC 3.0 in 2024, emphasizing enhanced software integration, including better compliance, and scheduler improvements for more efficient event handling in complex systems. As of 2025, recent developments include the SystemC 3.0.2 release on October 31, 2025, which incorporates updates to the (TLM) library for improved interoperability in virtual prototyping. The IEEE 1666-2023 standard, published in September 2023, refined the language reference manual to align with modern C++ practices and SystemC 3.0 features, followed by Corrigendum 1 in March 2025, which clarified ambiguities in the class library and TLM specifications. Community efforts have sustained SystemC's evolution through Accellera Systems Initiative working groups, formed after the 2011 merger of Accellera and , which coordinate language extensions and reference implementations. Annual SystemC Evolution Day events, starting in 2016, foster discussions on future directions, such as co-simulation integrations. Open-source maintenance occurs via the official repository, ensuring accessible updates and for the reference simulator.

Standards and Specifications

Core Language Versions

SystemC's core language has evolved through several major versions, each introducing enhancements to support more sophisticated and system modeling while maintaining compatibility with prior releases where possible. The initial version laid the foundation for event-driven , while subsequent iterations expanded modeling abstractions and aligned with efforts. Version 1.0, released in 1999, provided the basic event-driven kernel and primitive channels, enabling simple modeling through modules, processes, and signals. It supported concurrency via SC_METHOD and SC_THREAD processes, delta-cycle timing, and basic data types like sc_bit and sc_logic for bit-accurate representations. Multiple clocks with arbitrary phases were included, along with an ultra-lightweight cycle-based option for performance-critical applications. This version focused on extending C++ for description, allowing cycle-accurate simulations without requiring a full HDL. Version 2.0, released in 2002, significantly advanced the language by introducing interfaces, events, and the sc_module class to facilitate hierarchical and modular designs. Key additions included generalized communication modeling with channels and ports, dynamic process sensitivity for more flexible event handling, and support for abstract interfaces that decoupled modules from specific channel implementations. These features enabled higher-level system modeling and prepared the language for IEEE standardization, with the reference implementation distributed by the Open SystemC Initiative (later Accellera). with version 1.0 was maintained for existing models. Version 2.3.3, released in 2018, built on prior releases with enhancements to data types, including improved via sc_fixed and sc_ufixed classes for better precision and performance in models. It refined elaboration semantics to resolve ambiguities in and , ensuring more predictable construction during setup. guarantees were explicitly provided, allowing seamless from earlier 2.x versions without code changes. This maintenance release included bug fixes and minor optimizations, with the undergoing extensive by Accellera to verify compliance. Versions 3.0.0 (2024), 3.0.1 (2024), and 3.0.2 (2025) represent a major evolution, incorporating through features such as auto, lambdas, move semantics, and others to modernize the library and reduce in user models. They introduced better multi-threading support through thread-safe primitives and a proof-of-concept simulation kernel, enabling across to lower overhead in large-scale designs. Alignment with IEEE Std 1666-2023 ensured formal semantics for core constructs, with optimizations like refined delta-cycle handling for improved performance in representative benchmarks. The Accellera includes comprehensive suites for , promoting widespread adoption in electronic system-level design flows. SystemC has been extended through several official standards and libraries developed under the auspices of Accellera Systems Initiative and ratified by the IEEE, enabling specialized modeling and capabilities while maintaining with the core language. These extensions build upon the foundational SystemC infrastructure to address specific needs in system-level , without modifying the base semantics of event-driven or hierarchies. The SystemC Transaction-Level Modeling (TLM) 2.0.1 standard, incorporated into IEEE Std 1666-2011, provides a standardized framework for high-level communication between modules at the , facilitating model and across the ecosystem. It defines key interfaces for blocking and non-blocking protocols, allowing synchronous or asynchronous exchanges that away low-level signal details, and introduces a generic payload protocol for memory-mapped transactions to ensure consistent formatting and extension points. This standard supports loosely-timed and approximately-timed modeling styles, optimizing for performance in virtual prototyping and software-hardware co-simulation environments. SystemC Analog/Mixed-Signal (AMS) extensions, version 2.3.4 and standardized as IEEE Std 1666.1-2016, extend the core language to model continuous-time behaviors in mixed-signal systems, integrating and analog domains for applications in RF, sensors, and . The extensions introduce modeling through classes like sca_ct_ for conservative continuous-time simulation, enabling accurate representation of physical phenomena such as voltage and current flows, and support dynamic typing via the Timed Data Flow (TDF) model for efficient discrete-time approximation of analog signals. These features allow seamless co-simulation of AMS components within discrete-event SystemC environments, with solver-based integration for cluster computations. The SystemC Verification (SCV) library, at version 2.0.1 released in 2017, offers a set of C++ for advanced tasks, including constrained random stimulus , functional coverage , and transaction-level recording to enhance testbench and debug capabilities. It integrates with external tools like the library for BDD- and SAT/SMT-based random and the FC4SC library for coverage via covergroups and bins, outputting results in standard formats such as UCIS for analysis interoperability. While now in , SCV remains compatible with SystemC 2.3.x implementations and supports integration with methodologies like UVM-SystemC. SystemC Configuration, Control, and Inspection (CCI) 1.0, released in 2018, defines APIs for runtime configuration, control, and inspection of SystemC simulations, promoting tool-model by standardizing access to parameters and hierarchies without requiring modifications. Key capabilities include portable value representations, metadata-driven parameter lookup, callbacks for value changes, and access restrictions, enabling features like preload settings and in multi-tool workflows. The proof-of-concept implementation demonstrates its layering on existing SystemC PoCs, supporting user-defined types and future extensions for checkpointing. These extensions layer orthogonally onto the core SystemC language, preserving its kernel semantics and simulation cycle while providing domain-specific abstractions through additional headers and classes, ensuring models remain portable across compliant simulators and tools. This design facilitates incremental adoption, where TLM, , SCV, and CCI can be combined in a single simulation environment for comprehensive system analysis.

Core Modeling Constructs

Structural Elements

In SystemC, structural elements form the foundational components for defining and establishing interconnections among modeling entities, enabling the of complex, modular designs without specifying execution semantics. These elements include modules as the primary hierarchical units, ports and exports for communication pathways, signals as basic channels for data transport, and interfaces as abstract protocol definitions. They are instantiated and connected during the elaboration phase prior to , supporting a tree-like where parent-child relationships facilitate scalable composition. The sc_module class serves as the basic unit for encapsulating functionality, structure, and communication within a SystemC , deriving from sc_object to enable . Modules support nested , allowing submodules to be created as members within a parent module, which builds the overall system through parent-child relationships and hierarchical naming conventions. occurs exclusively during the elaboration via constructors or the SC_MODULE , which simplifies declaration by automatically handling the base class derivation and constructor setup; for example, a module can declare and instantiate child modules in its constructor, ensuring all structural elements are resolved before simulation begins. During elaboration, modules undergo configuration through simulation phases like SC_ELABORATION, with support for callbacks such as before_end_of_elaboration and end_of_elaboration to perform hierarchical setup tasks like binding resolution. This mechanism ensures that modules provide a self-contained encapsulation of design components, promoting reusability and maintainability in hardware-software co-design. sc_port acts as a typed interface for connecting modules to channels or other communication entities, templated on an interface type to enforce type-safe interconnections. Ports derive from sc_port_base and are declared within to request access to required s, supporting both single and multiport variants (e.g., sc_vector<sc_port>) for fan-out connections. They enable to channels, other ports, or exports using named or positional semantics during elaboration, with compatibility checked via the required ; multiple bindings are possible for multiports, but each port instance binds to exactly one target. This templated design decouples the module's internal logic from the specific channel , allowing flexible interconnections such as a module port to an sc_signal for . Ports facilitate hierarchical communication by propagating access through the module tree, abstracting the and enabling modular rewiring without altering module internals. The sc_signal class implements a primitive channel for point-to-point or multi-driver value transport, templated on a data type (e.g., sc_signal) to carry arbitrary C++ types with event notification capabilities. As a single-writer, multiple-reader channel, it supports connections via ports, where value updates occur in the update phase of the simulation cycle, propagating changes across delta cycles for zero-time event-driven semantics. Signals are instantiated as module members or free objects during elaboration and provide methods like write() for assignment and read() for access, with automatic event posting on value changes to notify bound processes. This enables temporal decoupling between producers and consumers, as updates are queued and resolved in subsequent delta cycles, ensuring consistent signal resolution in concurrent models. Multi-driver support allows multiple ports to drive a single signal, with resolution functions (e.g., for sc_logic) handling conflicts, making signals suitable for basic interconnect modeling in digital systems. sc_export provides a mechanism for exposing internal interfaces to parent modules, allowing hierarchical abstraction by forwarding method calls from external ports to bound channels or interfaces within the module. Deriving from sc_export_base, exports are templated on an interface type and declared in modules to offer a provided interface, bound exclusively via named semantics to one target (e.g., an internal port or channel) during elaboration. This binding resolves in the elaboration phase, enabling parent modules to connect their ports to the export, which proxies calls downward through the hierarchy; for instance, an export can expose a submodule's port, hiding implementation details. Exports support , where they bind to other exports, promoting and reusability by separating the external view from internal structure. This facilitates top-down design, as complex subsystems can be integrated as black boxes via their exports. The sc_interface class serves as an abstract base for defining custom communication , consisting of pure virtual functions that specify method signatures without implementation. It decouples protocol definition from realization, with channels implementing the to provide concrete services like read/write operations. are not instantiated directly but are used as templates for ports and exports, ensuring type during ; for example, a custom might define nb_read() and nb_write() for non-blocking access, implemented by derived classes. This enhances by allowing modules to declare required or provided independently of specific types, supporting extensible interconnects in hierarchical designs. is enforced at elaboration, preventing mismatches between ports, exports, and channels.

Behavioral Elements

Behavioral elements in SystemC enable the modeling of concurrent processes and timing behaviors within hardware-software systems, allowing designers to specify executable components that simulate parallelism and without relying on operating system threads. These elements are built upon the sc_process class, which serves as the foundational abstraction for all concurrent execution units managed by the SystemC scheduler. Processes in SystemC execute in a , event-driven manner, where concurrency is achieved through semantics rather than true parallelism, ensuring deterministic behavior during elaboration and runtime. The primary process types derive from sc_process and include SC_METHOD for combinational logic modeling and SC_THREAD for sequential behaviors. An SC_METHOD is a non-preemptive process that executes to completion in zero simulation time upon triggering, without retaining state between invocations; it is ideal for stateless, event-driven operations like signal combinational updates and does not support wait statements. In contrast, an SC_THREAD is preemptive and coroutine-like, maintaining its own execution context and state across suspensions; it uses wait statements to yield control back to the scheduler, enabling modeling of sequential algorithms with explicit timing control. SC_METHOD processes typically employ static sensitivity lists defined during module construction, while SC_THREAD supports both static and dynamic sensitivity for flexible reactivation. Synchronization between processes relies on sc_event objects, which act as lightweight notification primitives for and coordination. An sc_event can be notified immediately (triggering sensitive processes in the current delta cycle), after a delta delay (next delta cycle), or at a future time, using methods like notify(), notify(SC_ZERO_TIME), or notify(sc_time). Processes, particularly SC_THREAD instances, wait on these events via wait(e) calls, suspending until the event occurs; named events facilitate global access across modules. Event lists support logical OR (|) for any-occurrence resumption or AND (&) for all-occurrence resumption, enhancing complex patterns without introducing race conditions. Sensitivity lists define the conditions under which a resumes execution, specifying reactions to signal value changes or with edge semantics such as posedge (positive edge), negedge (negative edge), or any edge. For SC_METHOD , sensitivity is declared statically using the sensitive operator (e.g., sensitive << sig || posedge(clk)) during elaboration, ensuring the process triggers only on listed . SC_THREAD processes, however, use dynamic sensitivity through wait statements or next_trigger calls, allowing runtime adaptation to changing conditions like multiple signal edges or timeouts. This mechanism binds behavioral to structural elements like ports and signals, integrating concurrency with the module hierarchy. Delta cycles provide the fine-grained time resolution for event ordering in zero-time simulations, consisting of alternating evaluate and update phases within the same simulation timestamp. During the evaluate phase, ready processes execute and may schedule further notifications; the update phase then applies signal changes, potentially triggering additional delta cycles until quiescence. This structure, limited to a maximum of 10,000 cycles per time step to prevent infinite loops, ensures causal ordering of concurrent events without advancing wall-clock time, critical for modeling asynchronous behaviors accurately. Specialized behavioral constructs include sc_cthread for clocked synchronous modeling and sc_main for top-level simulation control. An sc_cthread is a clock-sensitive thread that synchronizes to clock edges using wait() statements, facilitating RTL-like descriptions with implicit edge detection; though deprecated in favor of SC_THREAD with explicit clock sensitivity, it remains supported for legacy synthesizable designs. The sc_main function serves as the user's entry point, responsible for instantiating modules, binding processes to structural ports, elaborating the design hierarchy, and invoking sc_start to launch the simulation kernel.

Data Types and Interfaces

SystemC provides a rich set of data types designed to model hardware values accurately within a C++ framework, supporting both bit-accurate and abstract representations for electronic system design and verification. These types extend beyond standard C++ primitives to handle arbitrary precision, multi-valued logic, and fixed-point arithmetic, enabling efficient simulation of digital and mixed-signal behaviors. The type system emphasizes type safety and interoperability, with built-in support for operations like arithmetic, bitwise manipulation, and conversions that align with hardware semantics. Among the built-in types, sc_int and sc_uint offer signed and unsigned fixed-precision integer representations, supporting up to 64 bits; for arbitrary precision beyond 64 bits, sc_bigint and sc_biguint are used. These types facilitate arithmetic operations such as addition, subtraction, multiplication, and division, alongside bitwise shifts, logical operations, and bit or part selects, with an initial value of zero upon construction. For logic modeling, sc_logic represents a single bit using four states—'0', '1', 'X' (unknown), and 'Z' (high-impedance)—which supports standard logic operations via predefined truth tables, making it suitable for Verilog-like signal behaviors in simulations. Fixed-point arithmetic is handled by sc_fixed for signed values and sc_ufixed for unsigned, both parameterized by word length, integer word length, quantization mode, overflow mode, and saturation bits to control precision and error handling during computations. Templated containers enhance modularity for multi-bit structures; sc_vector serves as an array-like class for bit or logic vectors, such as sc_bv (bit vector) or sc_lv (logic vector), supporting dynamic sizing, indexing, iteration, concatenation, and slicing operations. Similarly, sc_array provides a general-purpose container for SystemC objects, including ports or signals, with indexed access and flexible sizing to group related elements efficiently. For bus modeling, sc_logic_vector extends sc_logic to multi-bit aggregates, enabling bitwise operations and multi-driver resolution akin to hardware buses. Communication protocols are abstracted through sc_interface, a pure virtual base class that defines communication methods for channels and ports, promoting polymorphic interactions between modules. Key methods include read(), which returns a constant reference to the current value, and write(const T&), which schedules an update for the next delta cycle, with implementations varying by channel type to enforce access semantics. These interfaces support generic data types T, allowing reuse across different modeling levels while restricting multiple writes per cycle in resolved scenarios to prevent race conditions. Type resolution ensures consistent value propagation through ports and signals, particularly in multi-driver environments, by applying resolution functions such as logical OR or AND policies to combine inputs and avoid conflicts. During elaboration, types are checked for compatibility between ports and connected channels; unresolved types—where no resolution function is defined or bindings remain incomplete—trigger errors or default to undefined states like 'X', detectable at simulation start or end-of-elaboration. This mechanism maintains simulation integrity by propagating resolved values while supporting abstract interfaces with placeholder types until fully bound. Extensions like sc_time augment the type system for temporal modeling, representing simulation time in units from femtoseconds to seconds, with arithmetic support and global resolution control via sc_set_time_resolution for precise delay annotations in processes. Overall, these data types and interfaces form the foundational layer for hardware abstraction in SystemC, balancing expressiveness with simulation performance.

Advanced Modeling Paradigms

Transaction-Level Modeling (TLM)

Transaction-Level Modeling (TLM) in provides a high-level abstraction for modeling communication between components, emphasizing the separation of computational functionality from the underlying transport mechanisms to enable efficient simulation of complex systems. This paradigm shifts from pin-accurate, signal-level descriptions to transaction-based interactions, allowing designers to focus on system architecture and behavior rather than low-level details. By standardizing interfaces and payloads, TLM facilitates model reuse and interoperability across different tools and vendors. TLM 2.0 introduces initiator and target sockets as key structural elements for interconnecting modules, building on core SystemC ports and interfaces to support protocol-agnostic communication. Initiator sockets, such as tlm_initiator_socket, are used by components that initiate transactions, while target sockets, like tlm_target_socket, are employed by responders. These sockets encapsulate multiple transport interfaces, enabling both blocking and non-blocking transport calls. The blocking transport interface, defined by the b_transport method, performs a single-phase request-response cycle over the forward path only, where the initiator blocks until the target completes the transaction. In contrast, the non-blocking transport interface uses nb_transport_fw for the forward path (initiator to target) and nb_transport_bw for the backward path (target to initiator), allowing multi-phase protocols with asynchronous handshaking to model concurrent activities. Central to TLM 2.0 is the payload protocol, exemplified by the tlm::tlm_generic_payload class, which serves as a standardized transaction object for memory-mapped bus modeling. This payload includes essential attributes such as a command (e.g., read or write), an address specifying the target location, a data array or pointer for the transaction content, the data length, a response status (e.g., TLM_OK_RESPONSE indicating success), and byte enable flags for partial accesses. To accommodate domain-specific needs, the payload supports extensions via the tlm_extension mechanism, allowing custom attributes to be attached dynamically—either as ignorable (for optional processing) or mandatory (requiring support)—while ensuring backward compatibility through reference counting and memory management protocols. TLM 2.0 supports varying abstraction levels to balance simulation speed and accuracy, with loosely-timed (LT) modeling suited for fast virtual platforms that prioritize performance over precise timing. In LT style, models use blocking transport with temporal decoupling, executing transactions immediately and advancing time only at two points per transaction (request and response), which enables untimed or loosely synchronized simulations ideal for software development and architectural exploration. Cycle-accurate (CA) modeling, in contrast, aims for precise timing fidelity, often extending AT mechanisms to align transactions with exact clock cycles, though it is not formally standardized in TLM 2.0 and may require additional refinements for bit-accurate behavior. For scenarios requiring a compromise between speed and timing accuracy, multi-phase and approximately-timed (AT) modeling employs non-blocking transport with quantum-based time advances. AT models use four phases—BEGIN_REQ, END_REQ, BEGIN_RESP, and END_RESP—to decouple computation from communication, scheduling responses via a Payload Event Queue (PEQ) and advancing local time in quanta managed by tlm_global_quantum and tlm_quantumkeeper. This approach allows bounded inaccuracies in timing (e.g., up to the quantum size) while supporting multi-processor synchronization, making it suitable for performance analysis and hardware-software co-verification. Compliance with IEEE Std 1666-2023 ensures that TLM 2.0 models adhere to standardized semantics for sockets, interfaces, and payloads, promoting interoperability between components developed by different vendors or tools. This standard formalizes the requirements for forward and backward paths, transport protocols, and abstraction styles, enabling seamless integration in heterogeneous simulation environments without proprietary extensions. The reference implementation as of October 2025 is SystemC 3.0.2, which includes TLM support aligned with this standard, with ongoing community efforts such as the SystemC Summer of Code 2025 advancing the ecosystem.

Analog/Mixed-Signal Modeling (AMS)

SystemC Analog/Mixed-Signal (AMS) extensions enable the modeling of continuous-time and sampled-data behaviors within the primarily discrete-event framework, facilitating the design and verification of hybrid systems that combine digital logic with analog components. These extensions introduce specialized classes and models of computation (MoCs) to handle phenomena such as electrical networks, signal processing, and time-varying dynamics, which are essential for applications in communications, sensors, and power electronics. By integrating with the core SystemC kernel, AMS models support co-simulation where analog behaviors evolve alongside digital events, ensuring synchronized time advancement across domains. The foundational base classes for AMS components are sca_module and sca_traceable_object. The sca_module class serves as the primary derivation point for all AMS primitive modules, inheriting from sc_core::sc_module to provide hierarchical structuring, behavioral callbacks (such as initialize(), processing(), and reinitialize()), and timestep management methods like set_timestep() and get_timestep(). This allows modules in different MoCs—such as Timed Data Flow (TDF), Linear Signal Flow (LSF), and Electrical Linear Networks (ELN)—to be uniformly managed while supporting domain-specific semantics. Complementing this, sca_traceable_object acts as a base for traceable entities like signals, ports, and variables, enabling runtime tracing of analog quantities (e.g., voltages and currents) through utilities in sca_util::sca_trace, which aids in debugging and waveform analysis during mixed-signal simulations. Primitive channels form the interconnection fabric for AMS models, with sca_signal being a key example tailored to electrical domains in the ELN MoC. In ELN, sca_eln::sca_signal and related primitives like sca_node and sca_terminal model conservative electrical networks by enforcing and at the network level, where node voltages and branch currents are computed via integrated numerical solvers during simulation. These solvers handle the resulting system of differential-algebraic equations, supporting dynamic topologies and non-ideal components such as resistors, capacitors, and inductors. Similar signal classes exist in TDF (sca_tdf::sca_signal) and LSF (sca_lsf::sca_signal) for discrete and linear signal propagation, respectively, but ELN's emphasis on physical conservation laws distinguishes it for accurate analog circuit representation. To organize complex electrical networks, SystemC AMS employs cluster and connector concepts alongside discipline mechanisms. A cluster represents a connected group of ELN modules sharing the same MoC, forming an equation system that the solver resolves collectively to maintain global consistency. Connectors, implemented as channels like sca_node or sca_signal, link these modules or ports, allowing hierarchical composition of networks. Conditional connectivity is achieved through disciplines, where if/else constructs in ELN components (e.g., switches) or module attributes enforce domain-specific rules, such as voltage-discipline for potential-based connections or current-discipline for flow-based ones, ensuring energy conservation across the network. This abstraction level permits modeling of switchable or reconfigurable analog circuits without manual equation derivation. For sampled-data and linear systems, SystemC AMS provides the Timed Data Flow (TDF) and Linear Signal Flow (LSF) MoCs. TDF targets discrete-time approximations of continuous signals in multirate sampled-data systems, using ports like sca_tdf::sca_in<T> and sca_tdf::sca_out<T> connected via sca_signal channels; modules process samples synchronously based on declared timesteps (via set_timestep()), supporting non-linear behaviors through the processing() callback and enabling interfaces to the via conversion ports. Since version 2.0, TDF accommodates non-equidistant timesteps for more flexible modeling of variable-rate systems like ADCs or filters. In contrast, LSF approximates linear time-invariant systems using block-diagram primitives (e.g., sca_lsf::sca_gain, sca_lsf::sca_integ, and sca_lsf::sca_ltf_nd for N-D transfer functions), where signals propagate continuously in the (s-domain or jω-axis), ideal for control loops and linear approximations without explicit time discretization. Both MoCs integrate seamlessly with ELN for full mixed-signal hierarchies. The IEEE Std 1666.1-2016 defines the precise semantics for co-simulation with the SystemC , specifying how TDF, LSF, and ELN clusters synchronize time with events through mechanisms like tagged sample times, delta-cycle handling, and port conversions (e.g., sca_de::sca_in for event-driven interfaces). This standard ensures deterministic execution by advancing the global simulation time in , with clusters processing during elaboration, initialization, and timed phases, while allowing dynamic timestep adjustments relative to edges. The latest proof-of-concept implementation as of 2023 is SystemC 2.3.4.

Simulation and Analysis Techniques

Event-Driven Simulation Mechanics

The SystemC simulation kernel is a discrete-event engine that orchestrates the execution of hardware and software models through its internal management structures. The kernel maintains the overall simulation state, including active processes, event notifications, and temporal progression, while coordinating phase transitions such as elaboration and runtime simulation. It handles callbacks for key lifecycle events, including the start and end of elaboration, as well as the initiation and termination of the main simulation loop, ensuring a structured progression from model construction to execution. Central to the kernel's operation are , which represent zero-time increments within a given to resolve dependencies without advancing the clock. Each consists of an evaluation , where sensitive processes are executed non-preemptively; an update , where signal value changes are ; and a for immediate triggers. The kernel processes these cycles iteratively until no further runnable processes or pending updates remain at the current time, only then advancing to the next scheduled . queues, managed through classes like sc_event and sc_event_queue, store notifications in chronological order, supporting immediate (synchronous), (next cycle), and timed (absolute or relative) scheduling via the notify() method. For modeling, immediate self-notifications in the enable iterative of changes, mimicking zero-delay without infinite loops due to the single-write policy for signals. Time semantics in SystemC are encapsulated by the sc_time , which employs a 64-bit representation scaled to a user-defined resolution, typically settable to 1 (10^{-15} seconds) for high-precision modeling, though the default is 1 . This facilitates absolute and relative delays through statements like wait(sc_time(5, SC_NS)), allowing processes to suspend until the specified time elapses or an event occurs, with the advancing time only when all cycles at the current are exhausted and the next event time is reached. The resolution is established via sc_set_time_resolution() during elaboration and remains fixed thereafter, ensuring consistent temporal behavior across the model. The simulation begins with the elaboration phase, where the constructs the , instantiates components, binds ports to interfaces, and registers processes without executing behavioral . This separation from ensures that the model structure is fully resolved before runtime, preventing dynamic modifications that could alter scheduling. During , the selects and runs ready processes based on their sensitivities—static for methods or dynamic for threads—advancing through delta cycles as needed. Performance in the -driven relies on - optimizations, such as limiting signal updates to once per and prioritizing processing to minimize unnecessary invocations. The deterministic scheduling within —based on notification order—avoids non-deterministic behavior while reducing overhead from context switches in thread-based , though method are preferred for combinational elements to further enhance efficiency. These mechanisms enable scalable of complex systems by focusing computations only on active .

Power and Energy Estimation Methods

Power and energy estimation in SystemC simulations typically employs annotation-based approaches, where models such as lookup tables or analytical formulas are attached to modules or to enable non-functional without modifying the core functional model. These methods characterize consumption at the transaction level by augmenting SystemC models with pre-computed derived from lower-level simulations or measurements, allowing estimation of dynamic and static based on input stimuli and operational modes. For instance, profiles can be annotated to peripherals in system-on-chip designs, providing accuracy within 10-15% of gate-level simulations while maintaining simulation speeds orders of magnitude faster. The TLM POWER3 library extends this paradigm specifically for SystemC TLM 2.0 models by adding non-functional attributes to every , including power states, physical layout dimensions, and energy-per-transaction logging. Developed as an open-source add-on, it supports phase-based power modeling through technology files that define leakage, dynamic switching, and short-circuit components, while incorporating layout data like module area and wire estimated via Rent's for inter-module connections. Dynamic is achieved by tracking payloads, such as Hamming distances for wiring , and enabling direct memory interface (DMI) optimizations with and annotations, resulting in reports that include utilization statistics and energy breakdowns for voltage islands. This library facilitates early architectural exploration by computing total system power with errors under 20% compared to RTL references in benchmarks like NoC designs. Powersim provides another integrated solution as a C++ class that embeds switching activity directly into SystemC simulations at any abstraction level, from to TLM. It operates by monitoring kernel events and operator executions during simulation, using event traces to quantify toggles and derive dissipation via analytical models parameterized by supply voltage, data types, and workload inputs. The defines as a measure in a mathematical , allowing seamless integration without alterations, and has been applied to estimate consumption in encoders and systems with average errors of 5-10% relative to simulations. By capturing traces from TLM transactions—such as those in bus protocols—Powersim supports scalable for SoCs. Statistical methods, including simulations, address variability in power estimation by sampling workload scenarios, process parameters, and voltage/frequency scalings to compute average energy metrics in SystemC environments. These approaches propagate uncertainties through high-level models, such as TLM platforms, by running multiple randomized trials to model leakage and dynamic effects under variations, often calibrated against transistor-level data for confidence intervals. In practice, techniques have been used to characterize leakage models in SystemC simulations, achieving statistical bounds on power with 95% confidence for deep submicron technologies while incorporating environmental factors like temperature. Despite these advances, challenges persist in bridging abstraction gaps between TLM/ESL models and gate-level accuracy, where high-level estimates can deviate by 20-30% due to omitted signal-level details like propagation. Calibration techniques mitigate this by referencing or gate-level simulations to refine annotated models, adjusting parameters through iterative matching of power traces from co-simulation environments. SystemC's multi- support enables such hybrid flows, but requires careful validation to ensure ESL estimates inform low-power optimizations without over-optimism.

Practical Usage

Basic Code Examples

SystemC provides a C++-based for modeling and software systems, where basic usage revolves around defining modules, processes, signals, and clocks to simulate concurrent behavior. The entry point for any SystemC simulation is the sc_main function, which instantiates modules, binds ports to signals or channels, and initiates the simulation kernel via sc_start(). Constructors initialize module components, such as registering processes with sensitivity lists for event-driven execution, and the simulation concludes with sc_stop() or by reaching the end of sc_start duration.

Example 1: Basic Module with SC_METHOD Process, Signal Connection, and Clock Generator

A fundamental example involves a simple module, such as a 2-input , that uses an SC_METHOD process sensitive to input signals. The process evaluates the logic and updates the output. Signals connect module ports, and an sc_clock generates periodic for synchronous stimulus. The following code defines a module, a stimulus generator, and ties them together in sc_main.
cpp
#include "systemc.h"

SC_MODULE(nand2) {
  sc_in<bool> A, B;
  sc_out<bool> F;

  void do_nand2() {
    F.write(!(A.read() && B.read()));
  }

  SC_CTOR(nand2) {
    SC_METHOD(do_nand2);
    sensitive << A << B;
  }
};

SC_MODULE(stim) {
  sc_out<bool> A, B;
  sc_in<bool> Clk;

  void stim_gen() {
    A = false; B = false; wait();
    A = false; B = true; wait();
    A = true; B = false; wait();
    A = true; B = true; wait();
    sc_stop();
  }

  SC_CTOR(stim) {
    SC_THREAD(stim_gen);
    sensitive << Clk.pos();
  }
};

int sc_main(int argc, char* argv[]) {
  sc_clock clk("clk", 10, SC_NS, 0.5);
  sc_signal<bool> a_sig, b_sig, f_sig;

  nand2 nand("nand");
  nand.A(a_sig); nand.B(b_sig); nand.F(f_sig);

  stim stimulus("stim");
  stimulus.A(a_sig); stimulus.B(b_sig); stimulus.Clk(clk);

  sc_start(100, SC_NS);
  return 0;
}
This example demonstrates static sensitivity in the SC_METHOD for the NAND process, which triggers on changes to inputs A or B, and dynamic sensitivity in the stimulus thread to positive clock edges. Initial signal values may be undefined at time zero, so adding a startup delay to the clock (e.g., via the fifth constructor argument) avoids race conditions in evaluation.

Example 2: Hierarchical Design with Parent-Child Modules, Port Bindings, and Event Notification

For more complex designs, SystemC supports hierarchy by instantiating child modules within a parent, binding ports to internal signals, and using sc_event for inter-process synchronization across modules. Consider an XOR gate built from four NAND submodules, with an event to coordinate stimulus and monitoring. The parent module encapsulates the hierarchy, and events notify waiting processes of specific conditions, such as data ready.
cpp
#include "systemc.h"

SC_MODULE(nand2) {
  sc_in<bool> A, B;
  sc_out<bool> F;

  void do_nand2() {
    F = !(A.read() && B.read());
  }

  SC_CTOR(nand2) {
    SC_METHOD(do_nand2);
    sensitive << A << B;
  }
};

SC_MODULE(xor2) {
  sc_in<bool> A, B;
  sc_out<bool> F;
  sc_event* data_ready;  // Pointer to shared event for synchronization
  nand2 n1, n2, n3, n4;
  sc_signal<bool> s1, s2, s3;

  SC_CTOR(xor2) : n1("n1"), n2("n2"), n3("n3"), n4("n4") {
    data_ready = nullptr;
    // Bind ports to internal signals
    n1.A(A); n1.B(B); n1.F(s1);
    n2.A(A); n2.B(s1); n2.F(s2);
    n3.A(s1); n3.B(B); n3.F(s3);
    n4.A(s2); n4.B(s3); n4.F(F);

    SC_METHOD(eval_xor);
    sensitive << s2 << s3;
  }

  void eval_xor() {
    F.write(s2.read() ^ s3.read());
    data_ready->notify();  // Notify waiting processes
  }
};

SC_MODULE(monitor) {
  sc_in<bool> F;
  sc_event* data_ready;

  void monitor_output() {
    while (true) {
      wait(*data_ready);  // Wait for event notification
      cout << "Output F: " << F.read() << " at " << sc_time_stamp() << endl;
    }
  }

  SC_CTOR(monitor) {
    data_ready = nullptr;
    SC_THREAD(monitor_output);
  }
};

SC_MODULE(stim) {
  sc_out<bool> A, B;
  sc_in<bool> Clk;

  void stim_gen() {
    A = false; B = false; wait();
    A = false; B = true; wait();
    A = true; B = false; wait();
    A = true; B = true; wait();
    sc_stop();
  }

  SC_CTOR(stim) {
    SC_THREAD(stim_gen);
    sensitive << Clk.pos();
  }
};

int sc_main(int argc, char* argv[]) {
  sc_clock clk("clk", 10, SC_NS, 0.5);
  sc_signal<bool> a_sig, b_sig, f_sig;
  sc_event shared_event("shared_event");

  xor2 dut("xor2");
  dut.A(a_sig); dut.B(b_sig); dut.F(f_sig);
  dut.data_ready = &shared_event;

  monitor mon("mon");
  mon.F(f_sig);
  mon.data_ready = &shared_event;

  stim stimulus("stim");
  stimulus.A(a_sig); stimulus.B(b_sig); stimulus.Clk(clk);

  sc_start(100, SC_NS);
  return 0;
}
In this hierarchical setup, the xor2 parent instantiates nand2 children and binds ports to local signals, forming the XOR logic. The sc_event data_ready is notified after evaluation, synchronizing the monitor thread via wait(e), enabling precise control over simulation flow without relying solely on signals. Events can be immediate (notify()) or timed (notify(delay)), and cancellations prevent unintended triggers.

Code Structure and Compilation Notes

SystemC code structure mandates #include <systemc.h> for core headers, defining modules with SC_MODULE, registering processes in constructors via SC_CTOR, and using sc_main for top-level elaboration and control with sc_start(duration) followed by sc_stop() if needed. Constructors handle declarations, signal instantiations, and process sensitivities; elaboration occurs implicitly before . To compile, include the SystemC headers with -I$SYSTEMC_HOME/include, link the library with -L$SYSTEMC_HOME/lib-linux64 -lsystemc, and use g++ with support via -std=c++11 for modern features like and lambdas, though core SystemC remains compatible with earlier standards. Example command: g++ -std=c++11 -I$SYSTEMC_HOME/include -L$SYSTEMC_HOME/lib-linux64 main.cpp -lsystemc -o sim. Ensure the SystemC library (e.g., version 3.0.2 as of October 2025) is installed and environment variables like SYSTEMC_HOME are set.

Common Pitfalls

A frequent issue is incomplete sensitivity lists in SC_METHOD processes, leading to missed triggers or non-deterministic behavior if inputs change without re-evaluation; always include all read signals using sensitive << sig. Another pitfall is omitting process registration in the constructor, causing the method or thread to never execute—SC_METHOD(proc) must pair with sensitive setup. Modules no longer require an explicit SC_MODULE_END; macro, as the } closes the definition, but forgetting constructor calls like port bindings can result in unbound interfaces and runtime errors. Additionally, using wait() in SC_METHOD is invalid, as methods are combinatorial and non-blocking; reserve wait for SC_THREAD or SC_CTHREAD.

Integration with Tools and Workflows

SystemC integrates seamlessly into (EDA) workflows through support from commercial and open-source tools, enabling efficient simulation, debugging, and synthesis across design abstraction levels. Commercial simulators like Xcelium provide accelerated simulation for SystemC models, leveraging multi-core processing and parallelism to handle large-scale (TLM) designs with up to 5x performance gains over traditional kernels. Verdi offers comprehensive debugging capabilities, including waveform viewing, signal tracing, and co-simulation support for mixed SystemC, , and environments, facilitating unified analysis of hardware-software interactions. Open-source tools such as Verilator enable co-simulation by compiling designs into SystemC-compatible C++ models, allowing integration with SystemC testbenches for high-speed verification without proprietary licenses. In typical workflows, SystemC serves as a bridge from electronic system-level (ESL) design to (RTL) implementation, often via (HLS) tools like Cadence Stratus HLS, which synthesizes untimed or loosely timed SystemC descriptions directly into optimized RTL code, reducing development cycles from months to weeks while preserving functional equivalence. Virtual platform creation further extends these workflows by integrating SystemC with processor emulators such as , where SystemC TLM-2.0 interfaces encapsulate QEMU models to simulate full system behaviors, including software execution on virtual CPUs alongside hardware peripherals, as demonstrated in academic and industrial prototypes for early software validation. Best practices in SystemC development emphasize to promote , such as encapsulating components with standard TLM sockets and interfaces to enable plug-and-play integration across projects, as outlined in Accellera tutorials that highlight single-source models compatible with multiple abstraction levels. Version control systems like are recommended for managing SystemC libraries, with Accellera standards providing compliance proofs through reference implementations and suites to ensure portability and during iterative development. suites, often automated with tools generating test cases from high-level models, support by replaying scenarios across ESL and stages, minimizing errors in evolving designs. As of 2025, emerging trends in SystemC workflows include the formation of Accellera's Federated Simulation Working Group, which aims to standardize distributed simulation ecosystems for interoperable models across industries like automotive and , potentially extending SystemC's TLM capabilities to orchestrated, multi-tool environments. This aligns with broader EDA shifts toward cloud-based executions, where SystemC simulations can leverage scalable infrastructure for parallel runs, though specific implementations remain tool-vendor dependent. A key challenge in SystemC adoption is interoperability with verification standards like the Universal Verification Methodology (UVM), originally designed for , leading to fragmented testbenches in mixed-abstraction flows; the Accellera UVM-SystemC library addresses this by providing a C++-based equivalent with reusable components, phasing mechanisms, and configuration databases, enabling scalable ESL verification while bridging to RTL UVM environments.

References

  1. [1]
    Overview - SystemC
    SystemC is a single, unified design and verification language that expresses architectural and other system-level attributes in the form of open-source C++ ...SystemC TLM · SystemC Verification · SystemC CCI · SystemC AMS
  2. [2]
    System-Level Modeling in SystemC - European Space Agency
    SystemC is a set of C++ classes and macros which provide an event-driven simulation kernel in C++, together with signals, events, and synchronization ...
  3. [3]
    IEEE 1666-2023 - IEEE SA
    Sep 8, 2023 · SystemC is an ISO standard C++ class library for system and hardware design for use by designers and architects who need to address complex systems.
  4. [4]
    accellera-official/systemc - GitHub
    SystemC addresses the need for a system design and verification language that spans hardware and software. It is a language built as an ANSI C++ class library.
  5. [5]
    Accellera Systems Initiative advances the SystemC ecosystem with ...
    1666-2011 "Standard SystemC Language Reference Manual, "SystemC is a high-level language used in the design and development of electronic and embedded systems.
  6. [6]
    [PDF] SystemC Analog/Mixed-Signal User's Guide - Accellera
    This guide is for engineers using SystemC AMS extensions for system-level design and verification, explaining modeling fundamentals and examples.
  7. [7]
    High Performance SoC Modeling with Verilator - Embecosm
    The development of SystemC as a standard for modeling hardware started in 1996. Version 2.0 of the proposed standard was released by the Open SystemC Initiative ...
  8. [8]
    SystemC fills HDL/ C++ gap - EE Times
    SystemC fills a gap between traditional hardware-description languages (HDLs) and software-development methods based on C/C++.
  9. [9]
    [PDF] SystemC Synthesizable Subset Version 1.4.7 - Accellera
    This standard defines a SystemC subset for HLS tools, allowing hardware designers to create portable models. It is a minimum subset for synthesis.<|control11|><|separator|>
  10. [10]
    [PDF] How HLS and SystemC is Delivering on its Promise of Design and ...
    • Simulation acceleration (100X faster than RTL). • Physical design benefits: • High quality RTL with good timing/routing characteristics. RTL Development.
  11. [11]
    Embedded Design Prototyping Relies on IP Model Availability
    Jul 29, 2020 · Explore the crucial role of early SystemC IP models in enhancing embedded design prototyping and software development efficiency.
  12. [12]
    [PDF] Increasing Efficiency and Reuse in Modeling SystemC/TLM IPs ...
    ... SystemC allow the development of IP models on a high abstraction level, rendering them useful for development of Virtual Prototypes. The Transaction Level ...
  13. [13]
    CRAVE: An advanced constrained random verification environment ...
    For the verification of SystemC models, Constrained Random Verification (CRV) plays a major role. CRV allows to automatically generate simulation scenarios ...
  14. [14]
    [PDF] A SystemC-based UVM verification infrastructure
    Constraint based random verification is enabled through use of external randomization library called CRAVE. The syntax of CRAVE has been designed to naturally ...
  15. [15]
    [PDF] Functional coverage-driven verification with SystemC on multiple ...
    supports features such as verification by assertions, constraint- based random test pattern generation, and functional coverage. In this article we present ...
  16. [16]
    [PDF] Case Studies in SystemC Hints and Tips for Exploiting the Latest ...
    Mar 3, 2014 · Example: Communication System. ▫ Tight interaction between digital ... - Applications: communication, automotive and imaging systems design.
  17. [17]
    [PDF] Design of a Simulation Framework for Automotive Networks using ...
    MOST (Media Oriented System Transport) is a serial communication system intended for interconnecting multimedia and infotainment components in vehicles at bit ...<|separator|>
  18. [18]
    Digital Electronic System-on-Chip Design: Methodologies, Tools ...
    System-on-chip (SoC) technology has several applications in the aerospace industry which range from avionics systems to engine control systems and satellites.
  19. [19]
    [PDF] Technical Report - NEC Corporation
    This has several advantages over RTL simulations: 1. It is faster (10-100x) 2. It does not require an RTL license as it generates SystemC which then compiled ...
  20. [20]
    Power Exploration in High-Level Synthesis - EEJournal
    Dec 19, 2006 · Advanced high-level synthesis tools automatically create SystemC wrappers, allowing designers to rapidly verify their designs 20X to 100X faster ...
  21. [21]
    SystemC - Semiconductor Engineering
    SystemC is a class library built on top of the C++ language. Work started on it in 1996. There is some contention about the origins of the language.
  22. [22]
    [PDF] An Introduction to System Design with SystemC - UC Irvine
    SystemC 2.0 has more general system level modeling capabilities with channels, interfaces, and events. • SystemC 3.0 will focus on software and scheduler ...Missing: overview | Show results with:overview<|control11|><|separator|>
  23. [23]
    Download SystemC - Accellera Systems Initiative
    SystemC specifications and documents are available for download. Current releases include SystemC 3.0.1 and SystemC AMS 2.3.4. Some older releases may require ...
  24. [24]
    [PDF] Implementing a Graphical User Interface for SystemC
    pooled their expertise and formed the Open SystemC. Initiative (OSCI) and, in September 1999, released a first version of SystemC, a C++ library with an Open.
  25. [25]
    Mentor warms to System C as Synopsys sets OSCI free - EE Times
    Synopsys Inc. (Mountain View, Calif.) has relinquished control of the Open System C Initiative (OSCI) licensing agreement and ...
  26. [26]
    IEEE 1666-Standard SystemC - Semiconductor Engineering
    A custom, purpose-built integrated circuit made for a specific task or product. Application-Specific Standard Product (ASSP). An IC created and optimized for ...
  27. [27]
    Community Newsletter: May 2024 - Accellera Systems Initiative
    May 30, 2024 · The much-anticipated UVM 3.0 and SystemC 3.0.0 have been officially released, offering many new features and improvements. Additionally, the ...
  28. [28]
    2023 Standard Available Through IEEE GET Program - Accellera
    Nov 8, 2023 · “SystemC has been in use for more than two decades, and as the standard is revised Accellera will continue to leverage its relationship to ...
  29. [29]
    1666-2023/Cor 1-2025 - Corrigendum 1 | IEEE Standard - IEEE Xplore
    Mar 14, 2025 · The specific purpose of this standard is to provide a precise and complete definition of the SystemC class library including a TLM library ...
  30. [30]
    Accellera Systems Initiative FAQ
    Accellera Systems Initiative (Accellera) was formed by the merger of Accellera and the Open SystemC Initiative (OSCI) on December 5, 2011. Read about the ...
  31. [31]
    SystemC Evolution Day 2016
    May 3, 2016 · The first SystemC Evolution Day was a new full-day technical workshop on the evolution of SystemC standards to advance the SystemC ecosystem.
  32. [32]
    [PDF] Version 1.0 User's Guide - UTK-EECS
    Multiple clocks, with arbitrary phase relationship, are supported. • Cycle-based simulation: SystemC includes an ultra light-weight cycle-based simulation ...Missing: 1999 | Show results with:1999
  33. [33]
    [PDF] Functional Specification for SystemC 2.0
    Apr 5, 2002 · The SystemC 2.0 reference implementation is released in five stages: 1.1 Beta, 1.2 Beta, 2.0. Beta-1, 2.0 Beta-2, and 2.0 Production. n. 1.1 ...Missing: 1999 | Show results with:1999
  34. [34]
    SystemC Update 2024 - SemiWiki
    Dec 3, 2024 · The SystemC Evolution Day took place on October 17th in Munich, focusing on co-simulation capabilities with QEMU. The release of SystemC 3.0.
  35. [35]
    1666-2011 - IEEE Standard for Standard SystemC Language ...
    Jan 9, 2012 · SystemC is an ANSI standard C++ class library for system and hardware design for use by designers and architects who need to address complex ...Missing: overview | Show results with:overview
  36. [36]
    SystemC Transaction Level Modeling (TLM)
    SystemC provides an essential framework needed for model exchange within companies and across the IP supply chain for architecture analysis, software ...
  37. [37]
    [PDF] OSCI TLM-2.0 LANGUAGE REFERENCE MANUAL - Accellera
    IEEE Std 1666-2005, SystemC Language Reference Manual. Requirements ... models using SystemC and TLM-1 as it stands, but the requirement for the ...Missing: 1666-2011 | Show results with:1666-2011
  38. [38]
  39. [39]
    SystemC Analog/Mixed-Signal Extensions
    The SystemC AMS standard defines the execution semantics and language constructs for system-level design and modeling of embedded analog/mixed-signal systems ...Why Systemc Ams? · What Is The Difference... · Is There A Reference...
  40. [40]
    SystemC Verification Working Group - Accellera Systems Initiative
    This release contains the UVM-SystemC Language Reference Manual and the proof-of-concept implementation. Notable updates since the last package are documented ...Missing: features | Show results with:features
  41. [41]
    SystemC Verification Library (SCV)
    The SystemC Verification (SCV) library provides a common set of APIs that are used as a basis to verification activities with SystemC, such as generation of ...
  42. [42]
    SystemC Ecosystem Gets Boost with Accellera's New SystemC CCI ...
    Jun 13, 2018 · SystemC Ecosystem Gets Boost with Accellera's New SystemC CCI 1.0 Standard. New standard enables greater interoperability among tools and ...
  43. [43]
    SystemC Configuration, Control and Inspection (CCI)
    The SystemC Configuration, Control and Inspection (CCI) standard enables greater interoperability of SystemC models within the SystemC ecosystem.
  44. [44]
    [PDF] SystemC Configuration, Control and Inspection Standard - Accellera
    The SystemC Configuration, Control and Inspection standard is a collection of C++ APIs layered on SystemC, for configuring model properties.
  45. [45]
    SystemC Standards & Implementations
    This page lists the most recent versions of the SystemC standards and implementations. Older versions can be found on the Accellera SystemC download page.
  46. [46]
    [PDF] IEEE Standard for Standard SystemC® Language Reference Manual
    Jan 9, 2012 · SystemC is an ANSI standard C++ class library for system and hardware design for use by designers and architects who need to address complex.
  47. [47]
    SystemC Syntax Summary - Doulos
    SystemC syntax includes modules, signals, ports, processes, timing control, simulation control, debugging, and data types.
  48. [48]
    [PDF] Standard SystemC AMS extensions 2.0 Language Reference Manual
    Aug 12, 2016 · SystemC AMS extensions overview. The SystemC AMS extensions broaden the scope of SystemC towards design of analog/mixed-signal and signal ...
  49. [49]
  50. [50]
    [PDF] The SystemC Simulation Engine
    Execute code possibly issuing events or updates. Stop either waiting to run or exit entirely. Updates s1=V2 s2=V3.Missing: sc_simcontext | Show results with:sc_simcontext
  51. [51]
    A power estimation methodology for systemC transaction level models
    Sep 19, 2005 · We describe techniques and a setup for transaction level power characterization, and an approach to augment SystemC transaction level models to ...
  52. [52]
  53. [53]
  54. [54]
    High-level power estimation techniques in embedded systems ...
    Sep 8, 2022 · The methodology described in [32] is used to estimate energy dissipation in hardware at any level of abstraction in SystemC with Powersim. This ...
  55. [55]
    IEEE Standard for Standard SystemC® Language Reference Manual
    Sep 8, 2023 · Scope: This standard defines SystemC® with Transaction Level Modeling (TLM) as an ISO standard C++ class library for system and hardware design.
  56. [56]
  57. [57]
    Modules and Processes - Doulos
    Hierarchy in SystemC is created using a class sc_module. sc_module may be used directly, or may be "hidden" using the macro SC_MODULE. The example SC_MODULE ...Missing: elements sc_interface
  58. [58]
    Event - Learn SystemC
    Any given event may be notified on many separate occasions. sc_event has the following methods: 1. void notify(): create an immediate notification 2. void ...Missing: documentation | Show results with:documentation
  59. [59]
    [PDF] What C++11 means to SystemC? - Doulos
    Technically, SystemC is simply a standardized C++ library with an event driven simulation kernel and facilities to simplify modeling of hardware components ...
  60. [60]
    SystemC- sensitivity list - c++ - Stack Overflow
    May 23, 2019 · I have recently started learning SystemC and I have got an error with sensitivity list in "SC_METHOD". I am trying to implement a fifo and the error ...SystemC sensitivity list behaviour / driving the pins from main programSC_THREAD does not get triggered by its sensitivity listMore results from stackoverflow.comMissing: end_module | Show results with:end_module
  61. [61]
    Xcelium Logic Simulation - Cadence
    Xcelium is a high-performance simulation platform with best-in-class core engine performance for SystemVerilog, VHDL, SystemC, and other languages, using ...Missing: Synopsys Verdi Icarus
  62. [62]
    Verdi Automated Debug System | Synopsys
    Provides comprehensive views of the overall design, debug for co-simulation of analog, digital and mixed-signal subsystems within a unified debug environment.Missing: SystemC Cadence Xcelium Icarus
  63. [63]
    Welcome to Verilator - Veripool
    Verilator is a fast Verilog/SystemVerilog simulator that reads code, performs lint checks, and compiles it into a faster model, outputting C++/SystemC files.Missing: Verdi Xcelium co-
  64. [64]
    Stratus High-Level Synthesis - Cadence
    Stratus HLS quickly designs and verifies RTL implementations from SystemC, C, or C++ models, enabling faster, high-quality results.Missing: workflows ESL QEMU virtual
  65. [65]
    [PDF] On the co-simulation of SystemC with QEMU and OVP ... - Hal-Inria
    The integration with SystemC is enabled by the ICM APIs. OVP models and OVPsim can be encapsulated inside a SystemC design to create a virtual platform where.Missing: workflows Stratus
  66. [66]
    [PDF] Accellera SystemC Standards Update October 2021
    The SystemC Language Working Group is responsible for the definition and development of the SystemC core language, the foundation on which all other SystemC ...
  67. [67]
    [PDF] Automated Test Generation for Validating SystemC Designs
    Jan 28, 2021 · This also enables verification reuse in that testbench and test cases devel- oped for high-level designs may be reused for the later low-level ...
  68. [68]
    Community Newsletter: September 2024 - Accellera
    Sep 10, 2024 · The UVM for SystemC group has just released its beta6 version, an exciting development for the SystemC community. The Federated Simulation ...News From Accellera Working... · Upcoming Events · Dvcon Europe 2024
  69. [69]
    Accellera's UVM in SystemC Standardization: Going Universal for ESL
    May 14, 2015 · The SystemVerilog-based UVM reference library could be used, but ESL designs are typically verified using SystemC/C++ for both the hardware and ...