fix numerical overflow in bit shift operation #41
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
In
xsim, the limited bit width of the shift-right argumentr_grant_encodedcauses overflow when the shift amount is multiplied by DATA_WIDTH, leading to a result of always 0 (for example, on a 32-bit wide 3x1 crossbar,r_grant_encodedwould have a bit width of 2 bits, which is then multiplied by 32, which yields 0 for any value ofr_grant_encodedthat is multiplied and then stuffed back into its 2-bit specified width).This creates an explicitly sized shift right argument to fix this small compatibility issue. I'm not actually sure if this is a bug is
xsim(this is the Xilinx Vivado simulator) or if it's an issue with the code; however, empirically, this fixes an issue encountered simulating the code.