MODERN SOC DESIGN · PRESENTATION 10
From RTL Simulation to Silicon Sign-Off
| Stage Found | Relative Cost |
|---|---|
| RTL Simulation | 1× |
| Gate-Level Sim | 3–5× |
| Emulation | 10–50× |
| FPGA Prototype | 50–100× |
| First Silicon | 500–1000× |
| In-Field | 1000–10,000× |
RTL simulation · UVM methodology · Assertions · Coverage-driven verification
The foundation of all digital verification — cycle-by-cycle behavioral modeling
0, 1, X, Z model unknown and high-impedance states critical for reset and bus behavior// Simple directed test in SystemVerilog
module tb_counter;
logic clk, rst_n, en;
logic [7:0] count;
counter dut(.clk, .rst_n, .en, .count);
initial begin
clk = 0;
forever #5ns clk = ~clk;
end
initial begin
rst_n = 0; en = 0;
#20ns rst_n = 1;
#10ns en = 1;
repeat(256) @(posedge clk);
$finish;
end
endmodule
IEEE 1800.2 standard — the industry-standard framework for reusable, scalable verification
class axi_transaction extends uvm_sequence_item;
rand bit [31:0] addr;
rand bit [7:0] data[];
rand axi_burst_e burst_type;
rand bit [3:0] len;
// Constraints focus stimulus on corners
constraint c_aligned {
addr[1:0] == 2'b00; // word-aligned
}
constraint c_burst {
burst_type dist {
FIXED := 10, INCR := 60, WRAP := 30
};
}
constraint c_len {
len inside {[0:3], 7, 15}; // AXI legal
}
`uvm_object_utils_begin(axi_transaction)
`uvm_field_int(addr, UVM_ALL_ON)
`uvm_field_array_int(data, UVM_ALL_ON)
`uvm_field_enum(axi_burst_e,
burst_type, UVM_ALL_ON)
`uvm_object_utils_end
endclass
Embedding design intent directly into RTL — continuous checking across all simulation cycles
| Type | Timing | Use Case |
|---|---|---|
| Immediate | Combinational (no clock) | Checking invariants in procedural code |
| Concurrent | Clock-based, multi-cycle | Protocol checking, temporal properties |
// Immediate assertion
always_comb begin
assert (onehot(grant))
else $error("Grant not one-hot!");
end
// Concurrent: AXI handshake protocol
property axi_handshake;
@(posedge clk) disable iff (!rst_n)
valid |-> s_eventually ready;
endproperty
assert property (axi_handshake)
else $error("AXI handshake timeout");
// Concurrent: data stability
property axi_stable;
@(posedge clk) disable iff (!rst_n)
(valid && !ready) |=>
($stable(addr) && $stable(data));
endproperty
assert property (axi_stable);
// Sequence: request followed by grant
sequence req_grant_seq;
req ##[1:5] gnt; // 1-5 cycle delay
endsequence
// Property: grant must be followed by ack
property grant_ack_p;
@(posedge clk) disable iff (!rst_n)
gnt |-> ##[1:3] ack;
endproperty
// Cover property for functional coverage
cover property (
@(posedge clk)
req ##1 gnt ##1 ack
);
cover property tracks when specific scenarios occurMeasuring what you have verified — the quantitative backbone of verification signoff
| Type | Measures | Source |
|---|---|---|
| Line | Which RTL lines executed | Automatic |
| Branch | if/else/case paths taken | Automatic |
| Toggle | Signal 0→1 and 1→0 | Automatic |
| FSM | States visited, arcs traversed | Automatic |
| Functional | Spec scenarios hit | Manual |
| Cross | Combinations of coverpoints | Manual |
covergroup axi_cg @(posedge clk);
cp_burst: coverpoint burst_type {
bins fixed = {FIXED};
bins incr = {INCR};
bins wrap = {WRAP};
}
cp_size: coverpoint size {
bins byte = {0};
bins hword = {1};
bins word = {2};
bins dword = {3};
}
// Cross: all burst x size combos
bxs: cross cp_burst, cp_size;
endgroup
Unreachable code/states must be formally proven unreachable and waivered — never silently excluded.
Model checking · Equivalence checking · CDC/RDC analysis · Lint
Exhaustive mathematical proof — no stimulus required, no coverage gaps
| Property | Meaning | Example |
|---|---|---|
| Safety | "Bad thing never happens" | No deadlock on bus |
| Liveness | "Good thing eventually happens" | Every request gets response |
| Fairness | "No starvation" | Arbiter grants all ports |
// Formal assumptions + assertions
// Prove FIFO never overflows
module fifo_formal #(DEPTH=16) (
input logic clk, rst_n, push, pop
);
logic [$clog2(DEPTH):0] count;
// Assumption: environment constraint
assume property (@(posedge clk)
disable iff (!rst_n)
(count == DEPTH) |-> !push);
// Assertion: count never exceeds DEPTH
assert property (@(posedge clk)
disable iff (!rst_n)
count <= DEPTH);
// Liveness: FIFO eventually drains
assert property (@(posedge clk)
disable iff (!rst_n)
(count > 0) |-> s_eventually (count == 0));
endmodule
Pre-packaged formal solutions for common SoC verification challenges
Prove that SoC integration wiring is correct: interrupt routing, MUX selections, address decode, pin connections. Replaces 1000s of directed tests.
Jasper Connectivity / VC Formal CC
Automatically verify CSR read/write behavior, field access policies (RW, RO, W1C, RC), reset values against register spec (RALF/IP-XACT/SystemRDL).
Jasper FRV / VC Formal REG
Exhaustively prove that protocol FSMs cannot deadlock or enter infinite non-progress loops. Critical for NoC routers, cache coherence, arbiters.
Jasper DLV / VC Formal DPV
Prove that secure assets (keys, fuses, privileged registers) are unreachable from untrusted interfaces. Information flow analysis across all possible execution paths.
Jasper SPV / Radix-S
Detect where X-optimism in RTL simulation masks real hardware behavior. Proves that unknown values on reset or uninitialized memories cannot reach functional outputs.
Jasper X-Prop / Questa X-Check
LEC (Logic Equivalence Checking): prove RTL ≡ gate-level netlist after synthesis. Sequential equivalence for retiming, clock-gating, datapath optimization.
Conformal LEC / Formality / SLEC
Catch structural and multi-clock bugs without simulation
| Check | Standard | Catches |
|---|---|---|
| Isolation | UPF (IEEE 1801-2024) | Missing isolation cells on power boundary crossings |
| Retention | UPF (IEEE 1801-2024) | State lost on power-down without save/restore |
| Level Shift | UPF (IEEE 1801-2024) | Voltage domain crossings without level shifters |
| Power Seq | UPF (IEEE 1801-2024) | Incorrect power-up/down sequencing |
Emulation · FPGA prototyping · Bridging simulation and silicon
Custom hardware to run full SoC designs at 1–10 MHz — 100–1000× faster than simulation
| Platform | Vendor | Architecture | Capacity |
|---|---|---|---|
| Palladium Z3 | Cadence | Custom processors | up to 48B gates |
| Veloce Strato | Siemens | Custom ASIC | 15B gates |
| ZeBu-200 / ZeBu Server 5 | Synopsys | AMD Virtex UltraScale+ VU19P | ZeBu-200 15 BG; Server 5 >60 BG modular |
Running SoC designs on multi-FPGA boards at near-real-time speeds
| Platform | Vendor | Speed | Use |
|---|---|---|---|
| HAPS-100 | Synopsys | ~200 MHz | Pre-silicon SW dev |
| Protium X3 | Cadence | ~100 MHz | HW/SW co-validation (2024 launch; 2× capacity vs X2) |
| Custom | Various | 50–150 MHz | Customer-specific |
| Feature | Emulation | FPGA Proto |
|---|---|---|
| Speed | 1–10 MHz | 50–200 MHz |
| Debug | Full waveform | Limited probes |
| Compile time | Hours | Hours–days |
| Determinism | Deterministic | Non-deterministic |
| Cost | $5M–$50M | $50K–$500K |
| Primary use | HW verification | SW development |
Integration verification · DFT · Performance validation · System-level scenarios
Proving the whole is correct when the parts are assembled
Connectivity checking (Jasper/VC Formal) proves wiring against spreadsheet spec. 100% completeness.
C-based tests running on embedded CPU; boot sequence, register access, interrupt exercises.
Full firmware boot; OS driver bring-up; real-world traffic scenarios at ~MHz speed.
Enabling post-silicon manufacturing test to catch defects in fabricated chips
| Technique | Purpose | Coverage Target |
|---|---|---|
| Scan | Convert FFs to scan chains; shift-in test patterns, capture, shift-out | ≥95% stuck-at |
| ATPG | Automatic Test Pattern Generation for stuck-at, transition, path-delay faults | ≥98% combined |
| LBIST | Logic Built-In Self-Test — on-chip PRBS generation + MISR compression | In-field test |
| MBIST | Memory BIST — march algorithms for SRAM/ROM defect detection | 100% memory |
Ensuring the SoC meets bandwidth, latency, and throughput targets under real traffic
AI/ML SoC verification · Verification signoff · Emerging tools and methods
Unique challenges when verifying neural processing units and accelerator datapaths
| Domain | Frequency | CDC Challenge |
|---|---|---|
| PE Array | 1–2 GHz | Weight load from SRAM domain |
| SRAM Ctrl | 1–1.5 GHz | Activation shuffle between banks |
| NoC Interface | 0.5–1 GHz | AXI async FIFO crossings |
| Config/CSR | 200–500 MHz | Register access from APB domain |
The systematic process of declaring a design verified and ready for tape-out
| Criterion | Target | Status |
|---|---|---|
| Functional coverage | ≥100% | PASS |
| Code coverage (line) | ≥95% | PASS |
| Code coverage (branch) | ≥90% | PASS |
| Formal proofs | All converged | PASS |
| CDC signoff | 0 violations | PASS |
| Lint (Spyglass) | 0 errors | PASS |
| LEC (RTL vs netlist) | Equivalent | PASS |
| DFT coverage (ATPG) | ≥98% | PASS |
| Bug rate | Declining ≥4 weeks | PASS |
| Open P0/P1 bugs | 0 | PASS |
The three major EDA vendors and the growing open-source ecosystem
| Category | Synopsys | Cadence | Siemens EDA | Open Source |
|---|---|---|---|---|
| RTL Simulation | VCS | Xcelium | Questa Sim | Verilator, Icarus |
| Debug | Verdi | SimVision / Indago | Questa Visualizer | GTKWave, Surfer |
| Formal | VC Formal | Jasper | Questa Formal | SymbiYosys, modelchecker |
| Emulation | ZeBu Server 5 / ZeBu-200 | Palladium Z3 | Veloce CS | — |
| FPGA Proto | HAPS-200 / HAPS-100 | Protium X3 | Veloce proFPGA | LiteX, custom |
| Lint / CDC | Spyglass | JasperGold CDC | Questa CDC | Verilator lint, SVLint |
| DFT | DFT Compiler | Modus | Tessent | — |
| Coverage | Verdi Coverage | vManager / IMC | Questa CoverCheck | — |
| UVM Framework | IEEE 1800.2 — all three support standard UVM | cocotb (Python), CHISEL/ChiselTest, pyuvm | ||
Verilator — cycle-accurate C++ sim, now supports UVM subset, multi-threading, and is the default for RISC-V verification. cocotb — Python-based testbench framework gaining traction for rapid prototyping and ML-driven test generation.
Accellera PSS 3.0 (2024) — write test intent once, generate tests for simulation, emulation, FPGA, and post-silicon. 3.0 adds behavioural coverage (scenario-level coverpoints). Declarative constraint-based approach.
IEEE 1800-2023 — SystemVerilog Unified Hardware Design, Specification, and Verification Language LRM (supersedes 1800-2017; free via IEEE GET)
IEEE 1800.2-2020 — Universal Verification Methodology (UVM) standard
Accellera PSS 3.0 (2024) — Portable Test and Stimulus Standard; adds behavioural coverage, supersedes 2.0 / 2.1
Spear, C. — SystemVerilog for Verification, 3rd ed., Springer, 2012
Bromley, J. — SystemVerilog Assertions Handbook, VhdlCohen Publishing
Bergeron, J. et al. — Verification Methodology Manual for SystemVerilog, Springer
Synopsys — VCS, Verdi, ZeBu EP1, Spyglass, DFT Compiler documentation
Cadence — Xcelium, Jasper, Palladium Z2, Modus product literature
Siemens EDA — Questa, Veloce Strato, Tessent technical references
Wilson Research Group — DVCON Functional Verification Study (annual industry survey)
Verilator — verilator.org — open-source SystemVerilog simulator
cocotb — cocotb.org — Python-based verification framework
Presentation built with Reveal.js 4.6 · Saira Semi Condensed + Archivo + Share Tech Mono
Educational use. Code examples provided as-is.