Open rroohhh opened 2 days ago
output data_out; wire data_out; assign data_out = client_valid; assign client_valid_next = ~client_valid;
Oh. You're taking feedback from your own output. There's a bit of code that special-cases outputs (it was related to reducing the amount of delta cycles if all you have is a model with a bunch of LED outputs), and since normal code rarely does that, it's buggy.
Try removing this line and seeing if it helps:
Oh. You're taking feedback from your own output. There's a bit of code that special-cases outputs (it was related to reducing the amount of delta cycles if all you have is a model with a bunch of LED outputs), and since normal code rarely does that, it's buggy.
What do you mean by feedback from your own output
? This is just a comb output driven from a internal register. I don't see how there is feedback from my output?
Try removing this line and seeing if it helps:
I tried this and it did not change the output. Also I don't quite see how this could change anything, as !module->get_bool_attribute(ID::top)
should always be false for a single module (or a flattened hierarchy) and therefore the if
never triggering anyways, right?
This is just a comb output driven from a internal register. I don't see how there is feedback from my output?
Oh, you're right; I misread the code.
Version
Yosys 0.45 (git sha1 9ed031ddd588442f22be13ce608547a5809b62f0, g++ 13.3.0 -fPIC -O3)
On which OS did this happen?
Linux
Reproduction Steps
running the following script
using a
main.cpp
containingYou can also find the
yosys
script aswell as themain.cpp
in the attached repro.zip.For reference, the rtlil is generated from the following verilog file:
Expected Behavior
I expect the
a.out
binary to never print "fail", or expressed differently for the value of a output port to not change between subsequent.step()
calls.Actual Behavior
The value of the output port changes between
.step()
calls.