未验证 提交 caaadfbe 编写于 作者: S sfencevma 提交者: GitHub

FreeList: fix freelist for 3ld2st (#2133)

Co-authored-by: NLyn <lyn@Lyns-MacBook-Pro.local>
上级 8a610956
......@@ -61,8 +61,6 @@ class FreeList(size: Int, allocWidth: Int, freeWidth: Int, enablePreAlloc: Boole
val tailPtrNext = Wire(new FreeListPtr)
// legality check
require(isPow2(freeWidth))
require((size % freeWidth) == 0)
def getRemBits(input: UInt)(rem: Int): UInt = {
VecInit((0 until size / freeWidth).map(i => { input(freeWidth * i + rem) })).asUInt
}
......@@ -73,28 +71,34 @@ class FreeList(size: Int, allocWidth: Int, freeWidth: Int, enablePreAlloc: Boole
val freeSelMaskVec = Wire(Vec(freeWidth, UInt(size.W)))
// update freeMask
require((size % freeWidth) == 0)
freeSelMask := freeSelMaskVec.reduce(_|_)
freeMask := (io.free | freeMask) & ~freeSelMask
val remFreeSelMaskVec = VecInit(Seq.tabulate(freeWidth)(rem => getRemBits((freeMask & ~freeSelMask))(rem)))
val remFreeSelIndexVec = VecInit(Seq.tabulate(freeWidth)(fport => {
val highIndex = PriorityEncoder(remFreeSelMaskVec(fport))
Cat(highIndex, fport.U(log2Ceil(freeWidth).W))
val remFreeSelIndexOHVec = VecInit(Seq.tabulate(freeWidth)(fport => {
val highIndexOH = PriorityEncoderOH(remFreeSelMaskVec(fport))
val freeIndexOHVec = Wire(Vec(size, Bool()))
freeIndexOHVec.foreach(e => e := false.B)
for (i <- 0 until size / freeWidth) {
freeIndexOHVec(i * freeWidth + fport) := highIndexOH(i)
}
freeIndexOHVec.asUInt
}))
val freeReq = RegNext(VecInit(remFreeSelMaskVec.map(_.asUInt.orR)))
val freeSlot = RegNext(remFreeSelIndexVec)
val freeSlotOH = RegNext(remFreeSelIndexOHVec)
val doFree = freeReq.asUInt.orR
for (i <- 0 until freeWidth) {
val offset = PopCount(freeReq.take(i))
val enqPtr = tailPtr + offset
val enqPtr = tailPtr + offset
when (freeReq(i)) {
freeList(enqPtr.value) := freeSlot(i)
freeList(enqPtr.value) := OHToUInt(freeSlotOH(i))
}
freeSelMaskVec(i) := Mux(freeReq(i), UIntToOH(freeSlot(i)), 0.U)
freeSelMaskVec(i) := Mux(freeReq(i), freeSlotOH(i), 0.U)
}
tailPtrNext := tailPtr + PopCount(freeReq)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册