aboutsummaryrefslogtreecommitdiffstats
path: root/passes/equiv/equiv_remove.cc
diff options
context:
space:
mode:
authorJannis Harder <me@jix.one>2022-10-06 15:36:35 +0200
committerJannis Harder <me@jix.one>2022-10-07 16:04:51 +0200
commit925f92918af783af71d5c9f1f358f79de5c20f04 (patch)
tree8039d3933eef9f7e6eb98fc8ca929151c827de86 /passes/equiv/equiv_remove.cc
parentc4a52b1b028fed3fcb1d14fb7c430ab1af5608ca (diff)
downloadyosys-925f92918af783af71d5c9f1f358f79de5c20f04.tar.gz
yosys-925f92918af783af71d5c9f1f358f79de5c20f04.tar.bz2
yosys-925f92918af783af71d5c9f1f358f79de5c20f04.zip
clk2fflogic: Always correctly handle simultaneously changing signals
This is a complete rewrite of the FF replacing code. The previous implementation tried to implement the negative hold time by wrapping async control signals individually with pulse stretching. This did not correctly model the interaction between different simultaneously changing inputs (e.g. a falling ALOAD together with a changing AD would load the changed AD instead of the value AD had when ALOAD was high; a falling CLR could mask a raising SET for one cycle; etc.). The new approach first has the logic for all updates using only sampled values followed by the logic for all updates using only current values. That way, e.g., a falling ALOAD will load the sampled AD value but a still active ALOAD will load the current AD value. The new code also has deterministic behavior for the initial state: no operation is active when that operation would depend on a specific previous signal value. This also means clk2fflogic will no longer generate any additional uninitialized FFs. I also documented the negative hold time behavior in the help message, copying the relevant part from async2sync's help messages.
Diffstat (limited to 'passes/equiv/equiv_remove.cc')
0 files changed, 0 insertions, 0 deletions