From ba4eecc0f05a0814efc3d05836725ffaa1e9766b Mon Sep 17 00:00:00 2001 From: Andrew Waterman Date: Thu, 3 Aug 2017 14:55:39 -0700 Subject: [PATCH] Use UIntToOH1 (#921) Closes #920 --- src/main/scala/rocket/PMP.scala | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/scala/rocket/PMP.scala b/src/main/scala/rocket/PMP.scala index 1a55ed6c..2e277a77 100644 --- a/src/main/scala/rocket/PMP.scala +++ b/src/main/scala/rocket/PMP.scala @@ -51,7 +51,7 @@ class PMP(implicit p: Parameters) extends PMPReg { eval(x, comparand, mask) } else { // break up the circuit; the MSB part will be CSE'd - val lsbMask = mask | ~(((BigInt(1) << lgMaxSize) - 1).U << lgSize) + val lsbMask = mask | UIntToOH1(lgSize, lgMaxSize) val msbMatch = eval(x >> lgMaxSize, comparand >> lgMaxSize, mask >> lgMaxSize) val lsbMatch = eval(x(lgMaxSize-1, 0), comparand(lgMaxSize-1, 0), lsbMask(lgMaxSize-1, 0)) msbMatch && lsbMatch @@ -71,7 +71,7 @@ class PMP(implicit p: Parameters) extends PMPReg { } private def lowerBoundMatch(x: UInt, lgSize: UInt, lgMaxSize: Int) = - !boundMatch(x, ~(((BigInt(1) << lgMaxSize) - 1).U << lgSize)(lgMaxSize-1, 0), lgMaxSize) + !boundMatch(x, UIntToOH1(lgSize, lgMaxSize), lgMaxSize) private def upperBoundMatch(x: UInt, lgMaxSize: Int) = boundMatch(x, 0.U, lgMaxSize) @@ -105,7 +105,7 @@ class PMP(implicit p: Parameters) extends PMPReg { // returns whether this matching PMP fully contains the access def aligned(x: UInt, lgSize: UInt, lgMaxSize: Int, prev: PMP): Bool = if (lgMaxSize <= lgAlign) true.B else { - val lsbMask = ~(((BigInt(1) << lgMaxSize) - 1).U << lgSize)(lgMaxSize-1, 0) + val lsbMask = UIntToOH1(lgSize, lgMaxSize) val straddlesLowerBound = ((x >> lgMaxSize) ^ (prev.comparand >> lgMaxSize)) === 0 && (prev.comparand(lgMaxSize-1, 0) & ~x(lgMaxSize-1, 0)) =/= 0 val straddlesUpperBound = ((x >> lgMaxSize) ^ (comparand >> lgMaxSize)) === 0 && (comparand(lgMaxSize-1, 0) & (x(lgMaxSize-1, 0) | lsbMask)) =/= 0 val rangeAligned = !(straddlesLowerBound || straddlesUpperBound)