Skip to content

Commit

Permalink
Merge pull request OpenXiangShan#2053 from guanmingxing/nanhu-v2
Browse files Browse the repository at this point in the history
update hit func for global entry
  • Loading branch information
Siudya authored May 10, 2023
2 parents fa84653 + 7462a95 commit b2810d6
Showing 1 changed file with 10 additions and 3 deletions.
13 changes: 10 additions & 3 deletions src/main/scala/xiangshan/cache/mmu/MMUBundle.scala
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,8 @@ class TlbEntry(pageNormal: Boolean, pageSuper: Boolean)(implicit p: Parameters)
}

def hit(vpn: UInt, asid: UInt, nSets: Int = 1, ignoreAsid: Boolean = false): Bool = {
val asid_hit = if (ignoreAsid) true.B else (this.asid === asid)
val perm_g = this.perm.g
val asid_hit = if (ignoreAsid) true.B else (this.asid === asid || perm_g === true.B)

// NOTE: for timing, dont care low set index bits at hit check
// do not need store the low bits actually
Expand Down Expand Up @@ -540,7 +541,9 @@ class PtwEntry(tagLen: Int, hasPerm: Boolean = false, hasLevel: Boolean = false)
def hit(vpn: UInt, asid: UInt, allType: Boolean = false, ignoreAsid: Boolean = false) = {
require(vpn.getWidth == vpnLen)
// require(this.asid.getWidth <= asid.getWidth)
val asid_hit = if (ignoreAsid) true.B else (this.asid === asid)
val perm_g = perm.getOrElse(0.U.asTypeOf(new PtePermBundle)).g;
//val ignore_asid = if(perm_g) true else ignoreAsid
val asid_hit = if (ignoreAsid) true.B else (this.asid === asid || perm_g)
if (allType) {
require(hasLevel)
val hit0 = tag(tagLen - 1, vpnnLen*2) === vpn(tagLen - 1, vpnnLen*2)
Expand Down Expand Up @@ -615,7 +618,11 @@ class PtwEntries(num: Int, tagLen: Int, level: Int, hasPerm: Boolean)(implicit p
}

def hit(vpn: UInt, asid: UInt, ignoreAsid: Boolean = false) = {
val asid_hit = if (ignoreAsid) true.B else (this.asid === asid)
val permsInner = perms.getOrElse(0.U.asTypeOf(Vec(num, new PtePermBundle)))
val perms_g = permsInner.map(_.g)
val hit_g = perms_g.zipWithIndex.map {case(g, i) => g && i.U === sectorIdxClip(vpn, level)}
//perms_g[sectorIdxClip(vpn, level)] == 1
val asid_hit = if (ignoreAsid) true.B else (this.asid === asid || hit_g.reduce(_ || _))
asid_hit && tag === tagClip(vpn) && (if (hasPerm) true.B else vs(sectorIdxClip(vpn, level)))
}

Expand Down

0 comments on commit b2810d6

Please sign in to comment.