@@ -126,9 +126,10 @@ 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 readNoSnp_s3 = ! refill_task_s3 && opcode_s3 === ReadNoSnp
129130
130131 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" )
132+ evict_s3 || makeInvalid_s3 || cleanInvalid_s3 || cleanShared_s3 || writeCleanFull_s3 || readNoSnp_s3 , " Unsupported opcode" )
132133
133134 /**
134135 * Requests have different coherence states after processing
@@ -257,6 +258,7 @@ class MainPipe(implicit p: Parameters) extends LLCModule with HasCHIOpcodes {
257258 val cleanInvalid_s4 = RegNext (cleanInvalid_s3, false .B )
258259 val cleanShared_s4 = RegNext (cleanShared_s3, false .B )
259260 val writeCleanFull_s4 = RegNext (writeCleanFull_s3, false .B )
261+ val readNoSnp_s4 = RegNext (readNoSnp_s3, false .B )
260262 val sharedReq_s4 = RegNext (sharedReq_s3, false .B )
261263 val exclusiveReq_s4 = RegNext (exclusiveReq_s3, false .B )
262264 val releaseReq_s4 = RegNext (releaseReq_s3, false .B )
@@ -374,7 +376,7 @@ class MainPipe(implicit p: Parameters) extends LLCModule with HasCHIOpcodes {
374376 val respSC_s4 = sharedReq_s4
375377 val respUC_s4 = makeUnique_s4 || ! makeUnique_s4 && exclusiveReq_s4 && (! selfDirty_s4 || ! self_hit_s4)
376378 val respUD_s4 = ! makeUnique_s4 && exclusiveReq_s4 && self_hit_s4 && selfDirty_s4
377- val respI_s4 = releaseReq_s4 || invalidReq_s4 || cleanReq_s4 || writeCleanFull_s4
379+ val respI_s4 = releaseReq_s4 || invalidReq_s4 || cleanReq_s4 || writeCleanFull_s4 || readNoSnp_s4
378380 val snpVec_comp_s4 = VecInit (
379381 Mux (
380382 request_snoop_s4,
@@ -394,12 +396,12 @@ class MainPipe(implicit p: Parameters) extends LLCModule with HasCHIOpcodes {
394396 )
395397
396398 comp_s4.valid := task_s4.valid && (
397- releaseReq_s4 || invalidReq_s4 || cleanReq_s4 || makeUnique_s4 || writeCleanFull_s4 ||
399+ releaseReq_s4 || invalidReq_s4 || cleanReq_s4 || makeUnique_s4 || writeCleanFull_s4 || readNoSnp_s4 ||
398400 (readNotSharedDirty_s4 || readUnique_s4) && ! self_hit_s4
399401 )
400402 comp_s4.bits.state.s_comp := false .B
401403 comp_s4.bits.state.s_urgentRead := true .B
402- comp_s4.bits.state.w_datRsp := ! (readNotSharedDirty_s4 || readUnique_s4)
404+ comp_s4.bits.state.w_datRsp := ! (readNotSharedDirty_s4 || readUnique_s4 || readNoSnp_s4 )
403405 comp_s4.bits.state.w_snpRsp := ! Cat (snpVec_comp_s4).orR
404406 comp_s4.bits.state.w_compack := ! (readUnique_s4 || readNotSharedDirty_s4 || makeUnique_s4)
405407 comp_s4.bits.state.w_comp := ! (cleanInvalid_s4 && self_hit_s4 && selfDirty_s4)
@@ -420,7 +422,7 @@ class MainPipe(implicit p: Parameters) extends LLCModule with HasCHIOpcodes {
420422 mem_task_s4.expCompAck := false .B
421423
422424 // need ReadNoSnp/WriteNoSnp downwards
423- val memRead_s4 = (readNotSharedDirty_s4 || readUnique_s4) && ! self_hit_s4 && ! peerRNs_hit_s4
425+ val memRead_s4 = (readNotSharedDirty_s4 || readUnique_s4) && ! self_hit_s4 && ! peerRNs_hit_s4 || readNoSnp_s4
424426 val memWrite_s4 = cleanReq_s4 && unique_peerRN_s4 || writeCleanFull_s4
425427 mem_s4.valid := task_s4.valid && (memRead_s4 || memWrite_s4)
426428 mem_s4.bits.state.s_issueReq := false .B
0 commit comments