verific: Improve logic generated for SVA value change expressions
authorJannis Harder <me@jix.one>
Mon, 9 May 2022 13:04:01 +0000 (15:04 +0200)
committerJannis Harder <me@jix.one>
Mon, 9 May 2022 13:04:01 +0000 (15:04 +0200)
commita855d62b420446756a8a36f5fd25a5c77ff07e16
tree83e61e98317217b5d0563eb6cdf638b2cac79ef4
parent58b23954e89a75e726d98716d5029f148c804073
verific: Improve logic generated for SVA value change expressions

The previously generated logic assumed an unconstrained past value in
the initial state and did not handle 'x values. While the current formal
verification flow uses 2-valued logic, SVA value change expressions
require a past value of 'x during the initial state to behave in the
expected way (i.e. to consider both an initial 0 and an initial 1 as
$changed and an initial 1 as $rose and an initial 0 as $fell).

This patch now generates logic that at the same time

a) provides the expected behavior in a 2-valued logic setting, not
   depending on any dont-care optimizations, and

b) properly handles 'x values in yosys simulation
frontends/verific/verific.cc
tests/sva/.gitignore
tests/sva/Makefile
tests/sva/runtest.sh
tests/sva/sva_value_change_changed.sv [new file with mode: 0644]
tests/sva/sva_value_change_rose.sv [new file with mode: 0644]
tests/sva/sva_value_change_sim.sv [new file with mode: 0644]
tests/sva/sva_value_change_sim.ys [new file with mode: 0644]