Skip to main content

systemverilog-verification

Provides verification methodology, SVA assertion patterns, coverage techniques, and testbench templates. Use when the user mentions 'testbench', 'assertion', 'SVA', 'property', 'sequence', 'coverage', 'covergroup', 'coverpoint', 'bins', 'cross coverage', 'constrained random', 'randomize', 'constraint', 'simulate', 'waveform', 'VCD', '$display', '$finish', or 'self-checking'.

معلومات المصدر

المستودع
codejunkie99/gateflow-cli
آخر نشاط في المصدر
٥ فبراير ٢٠٢٦ في ٢١:٢٢
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
٣
التفرعات
٠

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
name
SystemVerilog Verification
description
Provides verification methodology, SVA assertion patterns, coverage techniques, and testbench templates. Use when the user mentions 'testbench', 'assertion', 'SVA', 'property', 'sequence', 'coverage', 'covergroup', 'coverpoint', 'bins', 'cross coverage', 'constrained random', 'randomize', 'constraint', 'simulate', 'waveform', 'VCD', '$display', '$finish', or 'self-checking'.
version
1.0.0
# SystemVerilog Verification Reference ## SVA (SystemVerilog Assertions) ### Assertion Types | Type | Use Case | Example | |------|----------|---------| | Immediate | Procedural checks | `assert (a == b) else $error("mismatch");` | | Concurrent | Temporal sequences | `assert property (@(posedge clk) req |-> ##[1:5] ack);` | ### Temporal Operators ```systemverilog // Sequence operators ##N // Delay N cycles ##[M:N] // Delay M to N cycles ##[0:$] // Eventually (use sparingly - unbounded) // Property operators |-> // Overlapping implication (same cycle) |=> // Non-overlapping implication (next cycle) not // Property negation and // Both properties must hold or // Either property must hold ``` ### Common Assertion Patterns ```systemverilog // 1. Request-Acknowledge handshake property p_req_ack; @(posedge clk) disable iff (!rst_n) req |-> ##[1:5] ack; endproperty // 2. Mutual exclusion property p_mutex; @(posedge clk) disable iff (!rst_n) !(grant_a && grant_b); endproperty // 3. One-hot state encoding property p_onehot_state; @(posedge clk) disable iff (!rst_n) $onehot(state); endproperty // 4. Data stability during valid property p_data_stable; @(posedge clk) disable iff (!rst_n) (valid && !ready) |=> $stable(data); endproperty // 5. FIFO overflow protection property p_no_overflow; @(posedge clk) disable iff (!rst_n) full |-> !wr_en; endproperty // 6. Counter bounds property p_counter_bounds; @(posedge clk) disable iff (!rst_n) count <= MAX_VALUE; endproperty ``` ### System Functions for Assertions ```systemverilog $rose(sig) // Signal rose this cycle $fell(sig) // Signal fell this cycle $stable(sig) // Signal unchanged $changed(sig) // Signal changed $past(sig, N) // Value N cycles ago $onehot(vec) // Exactly one bit set $onehot0(vec) // At most one bit set $isunknown(sig) // Contains X or Z $countones(vec) // Number of 1s ``` ## Coverage ### Covergroup Structure ```systemverilog covergroup cg_name @(posedge clk); option.per_instance = 1; option.goal = 100; // Basic coverpoint cp_state: coverpoint state { bins idle = {IDLE}; bins active = {ACTIVE}; bins done = {DONE}; illegal_bins bad = {INVALID}; } // Range bins cp_data: coverpoint data { bins zero = {0}; bins low = {[1:63]}; bins mid = {[64:191]}; bins high = {[192:254]}; bins max = {255}; } // Transition bins cp_state_trans: coverpoint state { bins t1 = (IDLE => ACTIVE); bins t2 = (ACTIVE => DONE); bins t3 = (DONE => IDLE); } // Cross coverage cross_state_valid: cross cp_state, valid; endgroup ``` ### Coverage Best Practices 1. **Goal setting**: Set realistic goals (90-100%) 2. **Meaningful bins**: Cover interesting ranges, not just random values 3. **Illegal bins**: Mark invalid states to catch bugs 4. **Transition coverage**: Important for FSMs 5. **Cross coverage**: Test combinations that matter ## Testbench Architecture ### Recommended Structure ``` tb_top ├── Clock/Reset Generation ├── DUT Instance ├── Interface Connections ├── Stimulus (initial block or tasks) ├── Assertions (properties) ├── Coverage (covergroups) └── Result Checking (scoreboard) ``` ### Useful Tasks ```systemverilog // Reset task task automatic apply_reset(int cycles = 5); rst_n = 0; repeat(cycles) @(posedge clk); rst_n = 1; @(posedge clk); endtask // Wait for condition with timeout task automatic wait_for(ref logic condition, int timeout = 1000); fork begin wait(condition); end begin repeat(timeout) @(posedge clk); $error("Timeout waiting for condition"); end join_any disable fork; endtask // Randomized delay task automatic random_delay(int min_cycles, int max_cycles); int delay; delay = $urandom_range(max_cycles, min_cycles); repeat(delay) @(posedge clk); endtask ``` ## Constrained Random ```systemverilog class Transaction; rand bit [7:0] data; rand bit [3:0] addr; rand bit write; // Constraints constraint c_addr { addr inside {[0:10]}; // Valid address range } constraint c_data_special { data dist { 0 := 10, // 10% weight for 0 [1:254] := 80, // 80% weight for middle 255 := 10 // 10% weight for max }; } endclass // Usage Transaction tx = new(); repeat(100) begin assert(tx.randomize()); // Use tx.data, tx.addr, tx.write end ``` ## Debug Tips ### VCD File Generation ```systemverilog initial begin $dumpfile("simulation.vcd"); $dumpvars(0, tb_top); // Dump all signals // OR selective: $dumpvars(1, tb_top.u_dut); // Only DUT, 1 level deep end ``` ### Useful Display Formats ```systemverilog $display("Time=%0t data=0x%h valid=%b", $time, data, valid); $monitor("@%0t: state=%s", $time, state.name()); $strobe("End of timestep: count=%0d", count); // After NBA ``` ### Waveform Markers ```systemverilog // Add markers for key events always @(posedge error_flag) $display("=== ERROR at %0t ===", $time); ```
عرض على GitHub