The write_rd signal is used to tag instructions that write the destination register rd in the same cycle where they are decoded. The uses_rd signal is used to generically tag an instruction that will use the destination register at some point.
- In the decoder assignment
write_rd is always asserted and uses_rd=write_rd.
- S-instructions do not use
rd, but the field 11:7 of the instruction is always assigned to the address of the destination register and uses_rd is always asserted.
- If by chance the field
11:7 corresponds to a register marked in the scoreboard the instruction stalls the core.
The uses_rd signal must be explicitly assigned in instructions that do not use rd.
https://github.com/pulp-platform/mempool/commit/9c5690622f3fc493a5e42eff9eb655ff85baf758