01
Getting Started
2 articles
1
What Is System-Level Modeling? — And Why SystemC Is Built for It
System-level modeling explained from scratch — abstraction levels, virtual prototypes, and where SystemC fits in the picture.
→
2
Installing SystemC on Windows, Linux & macOS
Build SystemC 2.3.3 from source — CMake flags, library path setup, and your first simulation running.
→
02
Language Fundamentals
4 articles
2
SC_MODULE in SystemC
The macro expansion, SC_CTOR vs SC_HAS_PROCESS, ports, processes, and module hierarchy.
→
3
SystemC Data Types
sc_int, sc_uint, sc_bv, sc_logic, sc_lv, sc_bigint, sc_fixed — bit ops, range/slice syntax, when to use each.
→
4
sc_main Deep Dive
Elaboration, sc_start(), sc_stop(), VCD tracing, sc_report_handler, and common sc_main mistakes.
→
5
sc_clock in SystemC
Period, duty cycle, posedge/negedge events, multiple clocks, and clock gating patterns.
→
03
Processes & Timing
5 articles
6
SC_THREAD vs SC_METHOD
SC_THREAD suspends with wait(); SC_METHOD runs to completion. Stack, sensitivity, and when calling wait() is a fatal error.
→
7
Events and Sensitivity in SystemC
sc_event, notify(), wait(), static vs dynamic sensitivity — and the lost notification problem when notify() fires before wait().
→
8
sc_signal and the Evaluate-Update Mechanism
Why reading a signal in the same delta you wrote it returns the old value — and the single-writer rule.
→
9
Delta Cycles in SystemC
The evaluate-update loop, SC_ZERO_TIME vs immediate notify(), and what triggers the delta cycle limit exceeded error.
→
10
Simulation Phases in SystemC
before_end_of_elaboration → end_of_elaboration → start_of_simulation → execute → end_of_simulation. Every phase explained.
→
04
Channels & Communication
4 articles
11
Evolution of Channels in SystemC
From sc_signal to TLM 2.0 — primitive vs hierarchical channels and when to use sc_signal vs sc_fifo vs custom channel.
→
12
sc_fifo in SystemC
Blocking write()/read(), non-blocking nb_write()/nb_read(), depth, events, and a complete producer-consumer example.
→
13
sc_mutex and sc_semaphore
Coordinating SC_THREAD access to shared resources — lock/unlock, wait/post, deadlock pitfalls, and comparison table.
→
14
sc_prim_channel — Building Custom Channels
request_update() and update() — how to build a correct, deadlock-free custom channel from scratch.
→
05
Ports & Interfaces
4 articles
15
sc_interface in SystemC
The abstract base class behind every SystemC channel — the Interface Method Call (IMC) pattern and custom interfaces.
→
16
sc_port and sc_export
sc_port requires a service; sc_export provides one. Hierarchical binding and how one channel serves multiple interface views.
→
17
Port Binding in SystemC
Direct binding in sc_main, hierarchical port forwarding, the four binding rules, and common binding errors.
→
18
SystemC IMC Pattern
Wire sc_interface, sc_prim_channel, and sc_port into a complete Master/Memory system — the pattern TLM 2.0 is built on.
→
06
Internals
1 article
19
SystemC Scheduler Internals
The runnable queue, cooperative multitasking, process states, initialization phase, and why execution order is never guaranteed.
→
// Go deeper
Ready to build real SystemC designs?
The SystemC Studio takes you from these articles into hands-on projects — step by step, with exercises and a capstone timer model.
Open SystemC Studio →