diff --git a/src/main/scala/uncore/tilelink2/Edges.scala b/src/main/scala/uncore/tilelink2/Edges.scala index 6c156ab6..eca8d307 100644 --- a/src/main/scala/uncore/tilelink2/Edges.scala +++ b/src/main/scala/uncore/tilelink2/Edges.scala @@ -12,8 +12,7 @@ class TLEdge( { def isAligned(address: UInt, lgSize: UInt) = if (maxLgSize == 0) Bool(true) else { - val ones = UInt((1 << maxLgSize) - 1) - val mask = (ones << lgSize)(maxLgSize*2-1, maxLgSize) + val mask = ~(SInt(-1, width=maxLgSize).asUInt << lgSize)(maxLgSize-1, 0) (address & mask) === UInt(0) } diff --git a/src/main/scala/uncore/tilelink2/Fragmenter.scala b/src/main/scala/uncore/tilelink2/Fragmenter.scala index be140c53..4eb68b0c 100644 --- a/src/main/scala/uncore/tilelink2/Fragmenter.scala +++ b/src/main/scala/uncore/tilelink2/Fragmenter.scala @@ -139,7 +139,7 @@ class TLFragmenter(minSize: Int, maxSize: Int, alwaysMin: Boolean = false) exten val maxDownSize = if (alwaysMin) minSize else manager.maxTransfer def OH1ToUInt(x: UInt) = OHToUInt((x << 1 | UInt(1)) ^ x) - def UIntToOH1(x: UInt, width: Int) = (UInt((1 << width) - 1) << x)(width*2-1, width) + def UIntToOH1(x: UInt, width: Int) = ~(SInt(-1, width=width).asUInt << x)(width-1, 0) // First, handle the return path val acknum = RegInit(UInt(0, width = counterBits)) diff --git a/src/main/scala/uncore/tilelink2/Narrower.scala b/src/main/scala/uncore/tilelink2/Narrower.scala index 2a345dc1..9fbfac6b 100644 --- a/src/main/scala/uncore/tilelink2/Narrower.scala +++ b/src/main/scala/uncore/tilelink2/Narrower.scala @@ -26,7 +26,7 @@ class TLNarrower(innerBeatBytes: Int) extends LazyModule val ratio = innerBeatBytes / outerBeatBytes val bce = edge.manager.anySupportAcquire && edge.client.anySupportProbe - def UIntToOH1(x: UInt, width: Int) = (UInt((1 << width) - 1) << x)(width*2-1, width) + def UIntToOH1(x: UInt, width: Int) = ~(SInt(-1, width=width).asUInt << x)(width-1, 0) def trailingZeros(x: Int) = if (x > 0) Some(log2Ceil(x & -x)) else None def split(in: HasTLData, fire: Bool): (Bool, UInt, UInt) = { @@ -96,7 +96,7 @@ class TLNarrower(innerBeatBytes: Int) extends LazyModule out.a.bits.mask := amask val (dlast, ddata) = merge(out.d.bits, out.d.fire()) - out.d.ready := in.d.ready + out.d.ready := in.d.ready || !dlast in.d.valid := out.d.valid && dlast in.d.bits := out.d.bits in.d.bits.data := ddata