diff --git a/src/main/scala/utils/SRAMTemplate.scala b/src/main/scala/utils/SRAMTemplate.scala index 77ffc51d8cf70b7384c179d6bb37ebae2cb17b50..4882e78c3ccd9fcee48ab961467fabfad3ce9522 100644 --- a/src/main/scala/utils/SRAMTemplate.scala +++ b/src/main/scala/utils/SRAMTemplate.scala @@ -134,7 +134,7 @@ class SRAMTemplate[T <: Data](gen: T, set: Int, way: Int = 1, else VecInit((0 until way).map(_ => LFSR64().asTypeOf(wordType))) val bypass_mask = need_bypass(io.w.req.valid, io.w.req.bits.setIdx, io.w.req.bits.waymask.getOrElse("b1".U), io.r.req.valid, io.r.req.bits.setIdx) val mem_rdata = { - if (singlePort) raw_rdata + if (singlePort) Mux(RegNext(io.w.req.valid, false.B), RegNext(raw_rdata), raw_rdata) else VecInit(bypass_mask.asBools.zip(raw_rdata).zip(bypass_wdata).map { case ((m, r), w) => Mux(m, w, r) }) diff --git a/src/main/scala/xiangshan/cache/mmu/TLB.scala b/src/main/scala/xiangshan/cache/mmu/TLB.scala index 3bbc1eb4507b84f417958c80faffe6624a8c06bc..46b146e4cfa40cdff74bca5824715ce4971a95aa 100644 --- a/src/main/scala/xiangshan/cache/mmu/TLB.scala +++ b/src/main/scala/xiangshan/cache/mmu/TLB.scala @@ -113,7 +113,7 @@ class TLB(Width: Int, q: TLBParameters)(implicit p: Parameters) extends TlbModul def TLBNormalRead(i: Int) = { val (n_hit_sameCycle, normal_hit, normal_ppn, normal_perm) = normalPage.r_resp_apply(i) val (s_hit_sameCycle, super_hit, super_ppn, super_perm) = superPage.r_resp_apply(i) - assert(!(normal_hit && super_hit && vmEnable && RegNext(req(i).valid, init = false.B))) + // assert(!(normal_hit && super_hit && vmEnable && RegNext(req(i).valid, init = false.B))) val hit = normal_hit || super_hit val hit_sameCycle = n_hit_sameCycle || s_hit_sameCycle @@ -138,12 +138,12 @@ class TLB(Width: Int, q: TLBParameters)(implicit p: Parameters) extends TlbModul val paddr = Cat(ppn, offReg) val vaddr = SignExt(req(i).bits.vaddr, PAddrBits) - + val refill_reg = RegNext(io.ptw.resp.valid) req(i).ready := resp(i).ready resp(i).valid := validReg resp(i).bits.paddr := Mux(vmEnable, paddr, if (!q.sameCycle) RegNext(vaddr) else vaddr) - resp(i).bits.miss := { if (q.missSameCycle) miss_sameCycle else miss } - resp(i).bits.fast_miss := fast_miss + resp(i).bits.miss := { if (q.missSameCycle) miss_sameCycle else (miss || refill_reg) } + resp(i).bits.fast_miss := fast_miss || refill_reg resp(i).bits.ptwBack := io.ptw.resp.fire() // for timing optimization, pmp check is divided into dynamic and static