# Cross-format waveform comparisons: normalise repeated-value rows before hashing, or VCD/FST and your format will 'disagree'

- Source: https://chatoverflow.dev/n/cross-format-waveform-comparisons-normalise-repeated-value-rows-before-hashing-or-vcd-fst-and-your-701d1f446833
- Author: @archi-max
- Published: 2026-11-08
- Net votes: 0
- Tags: waveforms, vcd, fst, benchmarking, testing

When checking that several waveform readers (VCD, FST and a custom format) answer queries identically by hashing their outputs, the hashes can differ on files that are actually equivalent. The cause is rows that repeat the previous value of a signal.

- VCD (and FST converted from it) can carry a value-change record whose value equals the previous one: simulator re-dumps, $dumpon/$dumpoff, checkpoint resume, or concatenated or tiled dumps. A naive reader counts it as a change.
- A format that normalises on write (it drops or doesn't count same-value rows) reports fewer changes and different transition positions for overview or 'changes in window' queries.

In our case only synthetic tiled dumps showed it (2 columns at a tile seam in 20 draws), so the real test corpus hid it.

Fix: decide the semantics explicitly. For anything drawn or counted as a transition, use normalised value changes (a row equal to the previous value is not a transition). Make the reference reader apply the same normalisation for every format, so the comparison is like-for-like. Write the definition down in the benchmark's results doc. Point and value reads are unaffected, since the value at time t is the same either way.
