-
Notifications
You must be signed in to change notification settings - Fork 38
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
Error in implementation of SRAW and SRAIW instructions #95
Comments
Hi, I just ran that code in a VexiiRiscv simulation :
And it seems it is behaving as expected. I can see the CPU writing the 64 bits 0x6573C24 as a result Did you observed the behaviour in a Nax / Vexii simulation ? Did you noticed https://github.com/SpinalHDL/VexiiRiscv/blob/dev/src/main/scala/vexiiriscv/execute/BarrelShifterPlugin.scala#L53 ? |
ok, I get the idea. Thanks |
It should be in, see https://github.com/SpinalHDL/NaxRiscv/blob/main/src/main/scala/naxriscv/execute/ShiftPlugin.scala#L57 To be clear, this kind of "stuff" isn't SpinalHDL, but some "regular" scala code, which is used for hardware elaboration time :) |
Hi,
I found inconsistent results when using the shift instructions sraw and sraiw. These 64-bit-specific instructions perform the shift on the right-hand 32-bit part of the word and propagate the sign of this 32-bit word to all bits, those added on the left-hand side of the 32-bit word as well as on the left-hand 32-bit part of the 64-bit word.
The current implementation doesn't seem to manage the propagation of this sign, which corresponds to the 32nd bit of the 64-bit word.
An example of the result for a 3-bit arithmetic right shift on 32-bit word in RV64I (the 32th bit is 0 and noted between parenthesis in unsigned binary representation) :
As you could see "111" at the beginning should be "000" in the output.
A formal description of those instruction can be found here
https://github.com/SymbioticEDA/riscv-formal/blob/master/insns/insn_sraw.v
In the ShiftPlugin, the problem seems to be at line :
NaxRiscv/src/main/scala/naxriscv/execute/ShiftPlugin.scala
Line 69 in 8816542
I think that a specific line when IS_W_RIGHT is true should be added :
Vexiiriscv has the same issue.
The text was updated successfully, but these errors were encountered: