fix(LSU): misalign exception are generated directly within the pipeline (#4757)
EMU Test / Changes Detection (push) Waiting to run Details
EMU Test / Generate Verilog (push) Blocked by required conditions Details
EMU Test / EMU - Basics (push) Blocked by required conditions Details
EMU Test / EMU - CHI (push) Blocked by required conditions Details
EMU Test / Docker Build (push) Blocked by required conditions Details
EMU Test / EMU - Performance (push) Blocked by required conditions Details
EMU Test / EMU - MC (push) Blocked by required conditions Details
EMU Test / SIMV - Basics (push) Blocked by required conditions Details
EMU Test / Upload Artifacts (push) Blocked by required conditions Details
EMU Test / Check Submodules (push) Blocked by required conditions Details
EMU Test / Check Format (push) Blocked by required conditions Details
Release Jobs / build-xsdev-image (push) Waiting to run Details

Previously, when accessing mmio space after splitting, we generated an
exception in misalignbuffer, which prevented the exception address from
being written to exceptionbuffer.
Therefore, we now choose to generate an exception in pipeline so that
the exception address can be written correctly.
This commit is contained in:
Anzo 2025-06-03 11:23:22 +08:00 committed by GitHub
parent 8769efd7b4
commit b4473bd3f0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 2 additions and 2 deletions

View File

@ -1314,7 +1314,7 @@ class LoadUnit(implicit p: Parameters) extends XSModule
// Here a judgement is made as to whether a misaligned exception needs to actually be generated.
// We will generate misaligned exceptions at mmio.
val s2_real_exceptionVec = WireInit(s2_exception_vec)
s2_real_exceptionVec(loadAddrMisaligned) := s2_out.isMisalign && s2_uncache
s2_real_exceptionVec(loadAddrMisaligned) := (s2_out.isMisalign || s2_out.isFrmMisAlignBuf) && s2_uncache
s2_real_exceptionVec(loadAccessFault) := s2_exception_vec(loadAccessFault) ||
s2_fwd_frm_d_chan && s2_d_corrupt ||
s2_fwd_data_valid && s2_fwd_frm_mshr && s2_mshr_corrupt

View File

@ -477,7 +477,7 @@ class StoreUnit(implicit p: Parameters) extends XSModule
s2_pmp.ld && s2_isCbo_noZero || // cmo need read permission but produce store exception
((s2_in.isvec || s2_isCbo) && s2_actually_uncache && RegNext(s1_feedback.bits.hit))
) && s2_vecActive
s2_out.uop.exceptionVec(storeAddrMisaligned) := s2_actually_uncache && s2_in.isMisalign && !s2_un_misalign_exception
s2_out.uop.exceptionVec(storeAddrMisaligned) := s2_actually_uncache && (s2_in.isMisalign || s2_in.isFrmMisAlignBuf) && !s2_un_misalign_exception
s2_out.uop.vpu.vstart := s2_in.vecVaddrOffset >> s2_in.uop.vpu.veew
// kill dcache write intent request when mmio or exception