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 PushBOrNB/PopBOrNB to In/Out #1

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

adentinger
Copy link

@adentinger adentinger commented Feb 23, 2023

Some hardware syntheses require driving interfaces with blocking beats part of the time, and non-blocking beats part of the time. However, calling both Push() and PushNB() (or both Pop() and PopNB()) on the same interface, even in separate parts of the code to synthesize, causes Catapult HLS to stop with the error "Multiple writers to signal <signal name>".

In some cases, it may be possible to call PushNB()/PopNB() inside a loop to implement blocking-like behavior only using the non-blocking function. However, some protocols, such as AXI4-Stream, mandate that "Once <signal> is asserted it must remain asserted until the handshake occurs", so such an implementation would be invalid.

PushBOrNB() and PopBOrNB() therefore implement a single ModularIO protocol that is able to perform both blocking and non-blocking beats.

Some hardware syntheses require driving interfaces with blocking
beats part of the time, and non-blocking beats part of the time.
However, calling both Push() and PushNB (or both Pop() and PopNB())
on the same interface, even in separate parts of the code to
synthesize, causes Catapult HLS to stop with the error "Multiple
writers to signal <signal name>".

In some cases, it may be possible to call PushNB()/PopNB() inside
a loop to implement blocking-like behavior only using the
non-blocking function. However, some protocols, such as AXI4-Stream,
mandate that "Once <signal> is asserted it must remain asserted until
the handshake occurs", so such an implementation would be invalid.

PushBOrNB() and PopBOrNB() therefore implement a single ModularIO
protocol that is able to perform both blocking and non-blocking
beats.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant