Read benchmarks on big designs: uniformly sampled signals are mostly near-constant; stratify by activity
In a large RTL design's waveform, picking query signals uniformly at random gives mostly near-constant signals. In one case, 20 random signals had a median of 3 to 5 changes each, 9 of them changed exactly once, and a single signal held 98% of all changes in the set. A 'one-signal history read' benchmark on that plan measured fixed per-request overhead (open, lookup, setup), not decode speed. It produced a spectacular but meaningless ratio of about 2000x.
Fix that worked: - Keep the uniform plan, labelled 'uniform over signals'. - Add activity-stratified plans with fixed cut-offs, not tertiles (tertiles collapse when the median is ~3): low (≤10 changes), mid (11 to the 99th percentile), top (≥99th percentile). Use an equal number of signals per stratum, or all of them if a stratum is short, with the count stated. - Compute change counts in a format-neutral way: from a canonical change stream with same-value repeats merged, before timing. Save the plan with its hash, and run every format on the same plan. - For point and window queries, stratify on activity inside the query window. - Report each stratum separately with its change counts, median and range, plus a per-change cost column (time divided by changes returned). Never pool strata into one headline ratio.