Papers
Topics
Authors
Recent
2000 character limit reached

SystemC-Based Modeling

Updated 16 December 2025
  • SystemC-based modeling is a versatile framework using C++ for executable simulation and formal verification across multiple abstraction levels.
  • It employs discrete-event simulation with SC_METHOD and SC_THREAD processes, facilitating rigorous property checking and design-space exploration.
  • The approach supports integration testing and industrial-scale verification by addressing state-space explosion and promoting interface consistency.

SystemC-based modeling denotes the comprehensive use of the SystemC class library—embedded in C++—for executable, hierarchical, and timed modeling of digital systems at multiple abstraction levels, including RTL (Register Transfer Level), TLM (Transaction-Level Modeling), and mixed analog/mixed-signal domains (via AMS extensions). SystemC’s kernel provides discrete-event simulation, module abstraction, concurrency primitives, explicit time, and typed channels, enabling formal system verification, design-space exploration, performance modeling, and hardware/software codesign. The flexibility of SystemC’s semantics and extensibility of its C++ substrate facilitate the construction, integration, and analysis of complex hardware and software systems, supporting both simulation-based validation and formal verification flows.

1. Semantic Foundations of SystemC Models

The semantic core of SystemC is the discrete-event simulation kernel layered atop C++. SystemC models are defined as labeled transition systems (S,I,T,L)(S, I, T, L):

  • SS: global states comprising all sc_signalssc\_signals, local module data, and kernel scheduler state (event queues, process statuses),
  • II: initial states set post-elaboration and pre-simulation,
  • TS×ST \subseteq S \times S: transitions induced by process activations within delta-cycles,
  • L:S2APL: S \rightarrow 2^{AP}: labeling of states with sets of atomic propositions APAP for property checking, typically derived from port values and module flags.

Concurrency in SystemC is structured around two process types:

  • SC_METHOD: Zero-time combinational processes, sensitive to event notifications.
  • SC_THREAD: Sequential, wait-aware processes for complex control/temporal flows.

Time is advanced through a discrete delta-cycle abstraction, and event synchronization is driven by an explicit notification mechanism (Kandl et al., 2014). Practical formalization requires C++ feature restriction—no dynamic allocation at simulation, bounded data types, and avoidance of recursive/unbounded loops—to guarantee finite, analyzable model state spaces.

2. Component Microstructure: Module, Ports, Processes

SystemC component modeling employs sc_modulesc\_module as the encapsulation unit. Component structure involves:

  • Module hierarchy: Arbitrary nesting or flat instantiation; each unit encapsulates its own ports, channels, and processes.
  • Ports and channels: sc_insc\_in/sc_outsc\_out ports (typed, directioned) and sc_signalsc\_signal, sc_fifosc\_fifo, or custom interface channels, supporting typed point-to-point or broadcast data movement.
  • Process design: Explicit mapping of combinational logic to SC_METHODSC\_METHOD (no waitwait) and sequential or timed control to SC_THREADSC\_THREAD (uses waitwait on events or timeouts).
  • Formal modeling guidelines: Data types are kept finite for tractable analysis (e.g., sc_uint<4>sc\_uint<4>), and potentially infinite control structures are replaced with bounded analogs. For formal verification, variables of interest are annotated as observables for property specification (Kandl et al., 2014, 0801.2201).

Example: Arbiter Module Microstructure

1
2
3
4
5
6
7
8
9
10
11
12
class Arbiter : public sc_module {
public:
    sc_in<bool>  req; 
    sc_in<bool>  gnt_in;
    sc_out<bool> gnt;
    SC_CTOR(Arbiter) {
        SC_METHOD(eval);
        sensitive << req << gnt_in;
    }
private:
    void eval();
};

3. Formal Verification and Property Checking

SystemC-based modeling directly supports rigorous formal verification workflows, both at the component and integrated system level.

  • Property identification: Functional invariants, safety (G(¬reqgnt)G(\lnot req \wedge gnt)), and liveness (G(reqFgnt)G(req \rightarrow F gnt)) requirements are formulated in Linear Temporal Logic (LTL).
  • Model extraction: SystemC designs are translated through a toolchain—e.g., PinaVM to annotated LLVM IR—to extract the component structure and process scheduling semantics.
  • Scheduler encoding: The delta-cycle scheduler is encoded explicitly or collapsed to atomic transitions for state-space reduction.
  • Model translation: The translated semantics map sc_modulesc\_module to verification processes (e.g., proctypeproctype in Promela), sc_signalsc\_signal to global variables or channels, with process bodies as guarded commands.
  • Model checking: The Promela model is verified in SPIN, with LTL properties, counterexample trace reporting, and partial order/data reduction optimizations (Kandl et al., 2014).

This process can be iteratively applied: first to individual components, and later to the interconnected system.

4. System Assembly and Integration Testing

After isolated verification, SystemC-based modeling supports systematic integration:

  • System integration: Top-level sc_modulesc\_module instances are built by instantiating previously verified components and binding their ports and channels to new or shared objects (e.g., sc_signalsc\_signal, sc_fifosc\_fifo).
  • Interface abstraction: Only those interfaces necessary for emergent system behavior are preserved; internal module states may be abstracted out to reduce verification complexity.
  • Emergent behaviors: Shared resources (e.g., buses, arbitration logic) are explicitly modeled. For example, an arbiter can be extended to reflect memory backpressure or other emergent behavioral attributes.
  • Integrated formal verification: The composite model is subjected to the same property-extraction, translation, and model-checking flow as for components. System-level LTL properties (e.g., mutual exclusion, progress guarantees) are specified and checked (Kandl et al., 2014).

5. Advanced Modeling and Performance Exploration

SystemC-based modeling enables high-productivity topologies and rapid performance investigation:

  • Embedded DSLs: Embedded C++ DSLs provide concise graph-based pipeline descriptions (e.g., s1>>s2>>s3s_1 >> s_2 >> s_3), abstracting connection/topology logic by operator overloading and automatic code generation.
  • Policy-based modeling: Modular "policy classes" for function, communication, timing, and process style decompose each stage's behavior, allowing mix-and-match assembly for performance exploration without code rework.
  • Performance modeling: Analytical expressions for latency and throughput are supported. For a pipeline of NN stages with delays did_i and initiation interval IIII:

L=i=1Ndi+(N1)II,Φ=1IIL = \sum_{i=1}^N d_i + (N-1)II, \quad \Phi = \frac{1}{II}

  • Zero-boilerplate parameterization: Changing communication channel type, timing assumptions, or process granularity is achieved by replacing policies or adjusting DSL expressions, enabling fast design-space exploration (0801.2201).

6. Scaling and Industrial Verification

Scaling SystemC-based modeling to industrial-scale systems presents challenges and corresponding mitigations:

  • State-space explosion: Mitigated by aggressive data abstraction, incremental module-wise verification, and counterexample-guided refinement.
  • C++ feature set: Analysis is tractable only when restricting synthesis to a formalizable subset: no dynamic memory allocation, controlled STL container usage, and avoidance of advanced template metaprogramming.
  • Automation: Metadata-driven code generation (e.g., from design files such as UML, AUTOSAR) and tool support for automatic glue code and channel instantiation are critical.
  • Interface consistency: Assume-guarantee contracts for interface properties, checked during integration, assure component behaviors remain valid in system context.
  • Toolchain integration: Formal verification pipelines (e.g., PinaVM-SPIN) can be embedded in nightly regressions or simulated co-design flows, delivering black-box contract validation at the component level and emergent-failure exclusion at the system level—closing the fidelity gap between simulation and exhaustive verification (Kandl et al., 2014).

In summary, SystemC-based modeling constitutes a rigorous, multi-paradigm framework for both executable simulation and formal verification of digital systems, with high modularity, abstraction control, and workflow extensibility. Its semantic alignment with labeled transition systems, C++ modularity, and discrete-event simulation facilitate both high-assurance verification and rapid architectural exploration, forming the foundation for industrial system integration testing and advanced system-level design (Kandl et al., 2014, 0801.2201).

Definition Search Book Streamline Icon: https://streamlinehq.com
References (2)

Whiteboard

Follow Topic

Get notified by email when new papers are published related to SystemC-based Modeling.