@@ -126,9 +126,11 @@ class MainPipe(implicit p: Parameters) extends LLCModule with HasCHIOpcodes {
126126 val cleanInvalid_s3 = ! refill_task_s3 && opcode_s3 === CleanInvalid
127127 val cleanShared_s3 = ! refill_task_s3 && opcode_s3 === CleanShared
128128 val writeCleanFull_s3 = ! refill_task_s3 && opcode_s3 === WriteCleanFull
129+ val writeEvictOrEvict_s3 = ! refill_task_s3 && opcode_s3 === WriteEvictOrEvict && afterIssueE.B
129130
130- assert(! task_s3.valid || refill_task_s3 || readNotSharedDirty_s3 || readUnique_s3 || makeUnique_s3 || writeBackFull_s3 ||
131- evict_s3 || makeInvalid_s3 || cleanInvalid_s3 || cleanShared_s3 || writeCleanFull_s3, " Unsupported opcode" )
131+ assert(! task_s3.valid || refill_task_s3 ||
132+ readNotSharedDirty_s3 || readUnique_s3 || makeUnique_s3 || writeBackFull_s3 || evict_s3 || makeInvalid_s3 ||
133+ cleanInvalid_s3 || cleanShared_s3 || writeCleanFull_s3 || writeEvictOrEvict_s3, " Unsupported opcode" )
132134
133135 /**
134136 * Requests have different coherence states after processing
@@ -140,7 +142,7 @@ class MainPipe(implicit p: Parameters) extends LLCModule with HasCHIOpcodes {
140142 */
141143 val exclusiveReq_s3 = readUnique_s3 || readNotSharedDirty_s3 && ! peerRNs_hit_s3 || makeUnique_s3
142144 val sharedReq_s3 = readNotSharedDirty_s3 && peerRNs_hit_s3
143- val releaseReq_s3 = writeBackFull_s3 || evict_s3
145+ val releaseReq_s3 = writeBackFull_s3 || evict_s3 || writeEvictOrEvict_s3
144146 val invalidReq_s3 = makeInvalid_s3 || cleanInvalid_s3
145147 val cleanReq_s3 = cleanInvalid_s3 || cleanShared_s3
146148
@@ -257,6 +259,8 @@ class MainPipe(implicit p: Parameters) extends LLCModule with HasCHIOpcodes {
257259 val cleanInvalid_s4 = RegNext (cleanInvalid_s3, false .B )
258260 val cleanShared_s4 = RegNext (cleanShared_s3, false .B )
259261 val writeCleanFull_s4 = RegNext (writeCleanFull_s3, false .B )
262+ val writeEvictOrEvict_s4 = RegNext (writeEvictOrEvict_s3, false .B )
263+
260264 val sharedReq_s4 = RegNext (sharedReq_s3, false .B )
261265 val exclusiveReq_s4 = RegNext (exclusiveReq_s3, false .B )
262266 val releaseReq_s4 = RegNext (releaseReq_s3, false .B )
@@ -355,7 +359,7 @@ class MainPipe(implicit p: Parameters) extends LLCModule with HasCHIOpcodes {
355359 ).asBools
356360 )
357361 refill_s4.valid := task_s4.valid && (
358- (sharedReq_s4 || writeBackFull_s4) && ! self_hit_s4 ||
362+ (sharedReq_s4 || writeBackFull_s4 || writeEvictOrEvict_s4 ) && ! self_hit_s4 ||
359363 replace_snoop_s4
360364 )
361365 refill_s4.bits.state.s_refill := false .B
@@ -401,10 +405,11 @@ class MainPipe(implicit p: Parameters) extends LLCModule with HasCHIOpcodes {
401405 comp_s4.bits.state.s_urgentRead := true .B
402406 comp_s4.bits.state.w_datRsp := ! (readNotSharedDirty_s4 || readUnique_s4)
403407 comp_s4.bits.state.w_snpRsp := ! Cat (snpVec_comp_s4).orR
404- comp_s4.bits.state.w_compack := ! (readUnique_s4 || readNotSharedDirty_s4 || makeUnique_s4)
408+ comp_s4.bits.state.w_compack := ! (readUnique_s4 || readNotSharedDirty_s4 || makeUnique_s4 ||
409+ writeEvictOrEvict_s4 && self_hit_s4)
405410 comp_s4.bits.state.w_comp := ! (cleanReq_s4 && self_hit_s4 && selfDirty_s4)
406411 comp_s4.bits.task := comp_task_s4
407- comp_s4.bits.is_miss := (readNotSharedDirty_s4 || readUnique_s4) && ! self_hit_s4
412+ comp_s4.bits.is_miss := ! self_hit_s4
408413
409414 /** Read/Write request to MemUnit **/
410415 val mem_task_s4 = WireInit (req_s4)
0 commit comments