-
Notifications
You must be signed in to change notification settings - Fork 53
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Pass to remove combinational groups #620
Conversation
Runs into the bug with #520. |
@cgyurgyik the TCAM test seems to fail on this PR. Can I get some help debugging what is going/what is expected? |
Changes from #624 to the tcam implementation doesn't seem to fix the problem. |
Aha! Turned out to be a dump problem--- |
I think this opens up a deeper question about passes that change the timing behavior of components. In essence, by using both a combinational group, you're telling the compiler to automatically schedule it while by giving it a Similar problems will occur with level-2 primitives like pipelines which imply register insertion and might have different timing behavior. |
This is a potential breaking change. Visitors used to simply reuse the struct constructed initially to traverse all components. This commit makes it so that the visitors call ConstructVisitor::clear_data before traversing a new component.
79ef58f
to
a2451dd
Compare
Got it. Is it a correct summary to say that:
Surely there is something deeper to be done here, but it seems like a reasonable low-hanging-fruit solution would be:
Then the practical thing to do, as you implied, is to make |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
All looks good! Wahoo!!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM!
Slicing this pass out of #589 because this should be standalone.
The newly added
remove-comb-groups
pass transforms all groups with a donecondition in the form of
group[done] = 1'd1
to groups that take exactly onecycle. In the future, this pass will do the same thing to groups defined using
the the custom
comb group
syntax (#588).The works as follows:
using the
with
syntax ofif
andwhile
.registers.
This PR also makes it a hard error to use a combinational group within normal
control operartors such as
seq
andpar
. Combinational groups may only beused as part of the
with
syntax.