-
|
Hi, I would like to ask about the current support for multiple channel operations in XLS. I was told by @proppy that this support was greatly improved by @ericastor and that multiple non-exclusive (unconditional) sends should be possible. proc MultipleIO {
req0_r: chan<u32> in;
req1_r: chan<u32> in;
resp_s: chan<u32> out;
init {}
config(
req0_r: chan<u32> in,
req1_r: chan<u32> in,
resp_s: chan<u32> out
) { (req0_r, req1_r, resp_s)}
next(state: ()) {
let (tok, data) = recv(join(), req0_r);
let tok = send(tok, resp_s, data);
let (tok, data) = recv(tok, req1_r);
let tok = send(tok, resp_s, data);
}
}Unfortunately, I receive the following errors: Because of that I have the following questions:
Thanks for the clarification. |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 1 reply
-
|
Sorry for the slow response; this fell through the cracks. We have experimental functionality for the v2 proposal in XLS IR, our internal representation, and recently added an experimental way to use it in DSLX: the it is supposed to support multiple operations on this channel when there is a well-defined order in which they should execute (e.g., your example above, due to the token you threaded between the sends). When you get to codegen, if you've left it at the default options, it will correctly complain that it cannot schedule without a relaxed worst-case throughput bound; supporting N operations on a single channel in a single activation requires lowering your throughput to at most 1/N. This is still very much experimental, rather than considered stable or ready for use. We have some changes coming that we hope will improve it, but we're not yet certain that we've fixed all the issues. |
Beta Was this translation helpful? Give feedback.
Sorry for the slow response; this fell through the cracks.
We have experimental functionality for the v2 proposal in XLS IR, our internal representation, and recently added an experimental way to use it in DSLX: the
#[channel_strictness("...")]attribute. For example, if you annotate the channel at the point where it's declared with:it is supposed to support multiple operations on this channel when there is a well-defined order in which they should execute (e.g., your example above, due to the token you threaded between the sends). When you get to codegen, if you've left it at the default options, it will correctly comp…