Made priority of misalignment depend on ZICCLSM_SUPPORTED and made StoreAmo take prioirty over load faults

This commit is contained in:
David Harris 2023-12-19 12:51:45 -08:00
parent 6ba3ae662f
commit b0f34a6377

View File

@ -112,11 +112,13 @@ module trap import cvw::*; #(parameter cvw_t P) (
// coverage on // coverage on
else if (BreakpointFaultM) CauseM = 3; else if (BreakpointFaultM) CauseM = 3;
else if (EcallFaultM) CauseM = {2'b10, PrivilegeModeW}; else if (EcallFaultM) CauseM = {2'b10, PrivilegeModeW};
else if (LoadMisalignedFaultM) CauseM = 4; else if (StoreAmoMisalignedFaultM & ~P.ZICCLSM_SUPPORTED) CauseM = 6; // misaligned faults are higher priority if they always are taken
else if (StoreAmoMisalignedFaultM) CauseM = 6; else if (LoadMisalignedFaultM & ~P.ZICCLSM_SUPPORTED) CauseM = 4;
else if (LoadPageFaultM) CauseM = 13;
else if (StoreAmoPageFaultM) CauseM = 15; else if (StoreAmoPageFaultM) CauseM = 15;
else if (LoadAccessFaultM) CauseM = 5; else if (LoadPageFaultM) CauseM = 13;
else if (StoreAmoAccessFaultM) CauseM = 7; else if (StoreAmoAccessFaultM) CauseM = 7;
else if (LoadAccessFaultM) CauseM = 5;
else if (StoreAmoMisalignedFaultM & P.ZICCLSM_SUPPORTED) CauseM = 6; // See priority in Privileged Spec 3.1.15
else if (LoadMisalignedFaultM & P.ZICCLSM_SUPPORTED) CauseM = 4;
else CauseM = 0; else CauseM = 0;
endmodule endmodule