Why Your pll_locked Assertion is Failing: SVALint Liveness Rules
As we gear up for the 63rd Design Automation Conference (DAC) next week, the engineering team at AsFigo (in collaboration with VerifWorks) is rolling out a major extension to SVALint —our blazing-fast, Verible-backed SystemVerilog Assertion linter. Among our new suite of functional correctness checks, one major hazard we are targeting is the misapplication of liveness operators in dynamic simulation environments: specifically, bounded weak-strong patterns like eventually s_always . The Trap: A Common Scenario with pll_locked Consider a standard verification check for a clock generation block. An engineer writes an assertion expecting that within a reasonable window after reset, the PLL locks and remains permanently stable: // Risky Assertion Style property p_pll_stable; @(posedge clk) disable iff (!rst_n) eventually [1:10] s_always pll_locked; endproperty : p_pll_stable a_p_pll_stable : assert property (p_pll_stable) else begin `uvm_error("a_p_pll...