fix(#4402):missing sign while for loop iteration variable is signed #4416
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.
Reseaon
issue #4402
RCA:
Like the code blow, iteration variable
forvar14
is signed. However, the iteration variable lost the signed information during the ast simplify. For example, the value offorvar14
should be$signed(3'h0)
instead of3'h0
in the first loop cycle.Fixes:
backends/verilog/verilog_backend.cc
Signed should be writed while dump verilog;
frontends/ast/genrtlil.cc
Before this change, children[0] will use the children[1]'s
width_hint
andsign_hint
whengenRTLIL
, because they use the same variables and children[1]'s will overide children[0]'s.frontends/ast/simplify.cc
Record iteration variable is signed or not;
Test
A case was provided in #4402 , use PR branch to build a new yosys, read the 'rtl.v' and dump the verilog after synthesis. Then follow the reproduce steps in issue #4402 , result will meet expectations.