Fix verification generation for event driven simulators #2455
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Event driven simulators (such as vivado xsim and synopsys vcs) behave fundamentally differently than cycle based simulators like icarus and verilator. Rather than taking a full cycle step at a time, individual values within a cycle can be updated independently of each other, which makes the current way of combinationally checking disjoint guards invalid. We can fix this issue by only performing disjoint checks at the positive edge of the clock, which is fine because it's the only time that we truly care about the guards being disjoint. Without these fixes you have to turn off verification to run calyx verilog through commercial simulators.