-
Notifications
You must be signed in to change notification settings - Fork 115
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
Move Handshake and Aux Chain out of Opgroups #133
base: develop
Are you sure you want to change the base?
Conversation
…potential cases where a bitflip causes a stall due to activating a division lane that does not exist.
4647577
to
f5e0339
Compare
LGTM! |
@Lynx005F thanks for the PR, I would also like to offer some feedback. In general, I am totally in favor of a cleaner separation between control flow and data flow (e.g., moving handshake, tag, and aux signals away from the actual computations). That being said, it seems to me that moving the control logic out of the lanes but keeping it in the opgroups only does the job halfway. Since you are already undertaking such a large refactoring, I would suggest to move the control logic (i.e., the new |
I think the upper limit to where we could put the What could be doable is to put the
I think that could be feasible, but I can't really see why you think this is should go hand-in-hand with my previous changes. The aux modules primarily allow easy per-lane functionality and merge any non lane specific functionality, so I think they should be on the level of the lane for-loop. |
Agree.
That's where I would suggest to put it.
As far as I have seen, the only difference between the
I do not think that this is strictly necessary either. The aux module could provide a single reg enable for each stage and that signal could then be distributed to each lane and individually gated within the opgroups. The lane count should not be required for the FSM either, since the first thing that happens to the
The lane active signal could stay within the opgroups (or even in the individual lanes/slices).
Your aux module could remain completely agnostic to the lane count. There is no arbitration or similar control decisions that depend on the individual lanes and even your FSM code operates all lanes in sync. This is why I would suggest to raise the instantiation of this aux module and all the control logic within it to the highest level that does not involve arbitration decisions. I agree that the |
Ah I see what you mean, I actually had some versions that did it kind of like that and then ended up going with this version instead. But I think there is probably way to make it more simple than what I have now. The main difference in between |
I made some lane-agnostic versions of the aux chain modules for the pulp version to see how it would look like, I will port it over soon: I think this is the first step towards the direction that you want to go. The next step would now be to combine the |
I made some of the requested changes, while I ignored others:
|
PR to keep in sync with pulp-platform#10
Summary
Introduces new modules that hold the handshake and aux data and use reg-enable to pass data through individual lanes.
This has the following benefits:
In the future this change could also allow operations where Lane 0 is not used e.g. non-vectorial lower precision formats could be calculated on low-precision only units.
Testing
So far I ran the following tests
If you want any of my testbenches, please contact Luca Bertaccini
Structure
The commits in this PR have the following structure:
Notes:
fpnew_opgroup_multifmt_slice.sv
the signalsconv_target_q
,result_vec_op
andresult_is_cpk
are not used, meaning the section L490 - L519 (and a few other lines) are superfluous. I modified them as if they were used.