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

Add new ops like those of handshake dialect in CIRCT #9

Open
HahaLan97 opened this issue Apr 12, 2024 · 1 comment
Open

Add new ops like those of handshake dialect in CIRCT #9

HahaLan97 opened this issue Apr 12, 2024 · 1 comment
Labels
TODO Something in the TODO list.

Comments

@HahaLan97
Copy link
Collaborator

IDEA: fork, join, sink ...

@KFAFSP
Copy link
Collaborator

KFAFSP commented Apr 13, 2024

I notice that there are two primitive KPN nodes that I need to implement this HLS DF here that are not regular SDF operators (and don't have regular multiplicities). They have data dependent multiplicities, and I hope (?) they might be sufficient to cover all remaining HLS scenarios.

  • Converging execution y = converge(c, x_0, ..., x_N) with y = x_c

    First, a conditional token is received from channel c. Then, the data token is received from channel x_c, and pushed to channel y.

    The wait state machine for this node would have to initialize in the wait c state, but then transition to the correct wait x_c state depending on the data recieved. That means the edges in this FSM depend on valid and data.

    A more general algorithm to implement these FSMs might determine that the wait states following wait c are a set (just like unordered_pull), but would have to predicate these edges with a control-flow witness (here thats the token received from c) to avoid consuming from an input that must stay untouched.

  • Diverging execution y_0, ..., y_N = diverge(c, x) with y_c = x

    First, a conditional token is received from channel c. Then, the data token is received from channel x, and pushed to channel y_c.

    This seems trivial, as the resulting conditional should already be correctly synthesized to an FSM, and pushing to a channel is not priviledged like pulling.

Regardless, this type of DF needs to be supported by Olympus for this to make sense. Since Olympus does not consider the bodies of the processes, a stream channel should probably result in the right interface for the IP block. The questions is whether the multiplicity can be omitted.

EDIT: Had the names the wrong way around.

@KFAFSP KFAFSP mentioned this issue Apr 13, 2024
@HahaLan97 HahaLan97 added the TODO Something in the TODO list. label May 28, 2024
@HahaLan97 HahaLan97 changed the title [TODO] Add new ops like those of handshake dialect in CIRCT Add new ops like those of handshake dialect in CIRCT May 28, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
TODO Something in the TODO list.
Projects
None yet
Development

No branches or pull requests

2 participants