From b0f34a6377195f2ac0fdc454d79404ecf6f11634 Mon Sep 17 00:00:00 2001 From: David Harris Date: Tue, 19 Dec 2023 12:51:45 -0800 Subject: [PATCH] Made priority of misalignment depend on ZICCLSM_SUPPORTED and made StoreAmo take prioirty over load faults --- src/privileged/trap.sv | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/privileged/trap.sv b/src/privileged/trap.sv index 61acdd31c..bec22a92b 100644 --- a/src/privileged/trap.sv +++ b/src/privileged/trap.sv @@ -112,11 +112,13 @@ module trap import cvw::*; #(parameter cvw_t P) ( // coverage on else if (BreakpointFaultM) CauseM = 3; else if (EcallFaultM) CauseM = {2'b10, PrivilegeModeW}; - else if (LoadMisalignedFaultM) CauseM = 4; - else if (StoreAmoMisalignedFaultM) CauseM = 6; - else if (LoadPageFaultM) CauseM = 13; + else if (StoreAmoMisalignedFaultM & ~P.ZICCLSM_SUPPORTED) CauseM = 6; // misaligned faults are higher priority if they always are taken + else if (LoadMisalignedFaultM & ~P.ZICCLSM_SUPPORTED) CauseM = 4; else if (StoreAmoPageFaultM) CauseM = 15; - else if (LoadAccessFaultM) CauseM = 5; + else if (LoadPageFaultM) CauseM = 13; 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; endmodule