@@ -58,7 +58,7 @@ class RXSNP(
58
58
* while waitings for DS write were unnecessary since the silent transition would only happen on clean block.
59
59
*/
60
60
val reqBlockSnpMask = VecInit (io.msInfo.map(s =>
61
- s.valid && s.bits.set === task.set && s.bits.reqTag === task.tag && (
61
+ s.valid && s.bits.set === task.set && s.bits.reqTag === task.tag && (
62
62
s.bits.w_grantfirst || // See [2], [3] above with 's.bits.blockRefill'
63
63
s.bits.aliasTask.getOrElse(false .B ) && ! s.bits.w_rprobeacklast || // See [5] above
64
64
! s.bits.s_cmoresp && (! s.bits.w_rprobeacklast || ! s.bits.s_cmometaw) // See [6] above
@@ -93,7 +93,7 @@ class RXSNP(
93
93
// '!s.bits.dirHit' : Nesting a Cache Replacement subsequent release
94
94
// '!s.bits.s_cmoresp' : Nesting a CMO subsequent release
95
95
val replaceNestSnpMask = VecInit (io.msInfo.map(s =>
96
- s.valid && s.bits.set === task.set && s.bits.metaTag === task.tag &&
96
+ s.valid && s.bits.set === task.set && s.bits.metaTag === task.tag &&
97
97
(! s.bits.dirHit || ! s.bits.s_cmoresp) && s.bits.meta.state =/= INVALID &&
98
98
RegNext (s.bits.w_replResp) && s.bits.w_rprobeacklast && ! s.bits.w_releaseack
99
99
)).asUInt
@@ -109,7 +109,7 @@ class RXSNP(
109
109
Mux (hit, ms.bits.meta, MetaEntry ())
110
110
}})
111
111
112
- assert(PopCount (replaceNestSnpMask) <= 1 .U , " multiple replace nest snoop" )
112
+ assert(! rxsnp.valid || PopCount (replaceNestSnpMask) <= 1 .U , " multiple replace nest snoop" )
113
113
114
114
task := fromSnpToTaskBundle(rxsnp.bits)
115
115
0 commit comments