Skip to content
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

Combinational Groups have ill defined behavior #185

Closed
sgpthomas opened this issue Aug 10, 2020 · 1 comment
Closed

Combinational Groups have ill defined behavior #185

sgpthomas opened this issue Aug 10, 2020 · 1 comment
Labels
S: Discussion needed Issues blocked on discussion

Comments

@sgpthomas
Copy link
Collaborator

Firstly, combinational groups are ones with "static"=0 or that assign 1 to their done hole constantly group[done] = 1'b1. This currently breaks an assumption the compiler makes about groups which is that go and done holes are disjoint. In other words go => !done and done => !go. For combinational groups go == done.

An example where it breaks is in par untimed compilation. Consider:

par { A, B }

For this we generate the following assignments to go for A:

A[go] = !(A[done] | A_done_reg)
A_done_reg.in = A[done];

If A is combinational, then A never runs because A[done] is always high.

This doesn't seem right, but it's not clear what the correct behavior should be. It's clear the we want such groups. For example, it would be nice for the frontend to be able to emit a bunch of combinational groups for an binary expression tree like: a + b + c + d + e and link them together with go/done holes. Then the Futil compiler could potentially insert registers to break up the expression across multiple cycles in order to meet timing. This frees the frontend from having to worry about things like meeting timing.

@rachitnigam rachitnigam added the S: Discussion needed Issues blocked on discussion label Aug 10, 2020
@sgpthomas
Copy link
Collaborator Author

subset of #207

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
S: Discussion needed Issues blocked on discussion
Projects
None yet
Development

No branches or pull requests

2 participants