1
0

add CacheFillTest

This commit is contained in:
Howard Mao 2015-11-19 00:15:36 -08:00
parent 640544ea5a
commit 49c6b1ad1c

View File

@ -0,0 +1,43 @@
package groundtest
import Chisel._
import uncore._
import cde.{Parameters, Field}
class CacheFillTest(implicit val p: Parameters) extends GroundTest()(p)
with HasTileLinkParameters {
val capacityKb: Int = p("L2_CAPACITY_IN_KB")
val nblocks = capacityKb * 1024 / p(CacheBlockBytes)
val s_start :: s_prefetch :: s_retrieve :: s_finished :: Nil = Enum(Bits(), 4)
val state = Reg(init = s_start)
val inflight = Reg(init = Bool(false))
val active = state === s_prefetch || state === s_retrieve
val (xact_id, xact_flip) = Counter(io.mem.acquire.fire(), tlMaxClientXacts)
val (req_block, round_done) = Counter(io.mem.acquire.fire(), nblocks)
io.mem.acquire.valid := active && !inflight
io.mem.acquire.bits := Mux(state === s_prefetch,
GetPrefetch(xact_id, req_block),
GetBlock(xact_id, req_block))
io.mem.grant.ready := active
when (io.mem.acquire.fire()) {
inflight := Bool(true)
}
val last_grant = !io.mem.grant.bits.hasMultibeatData() ||
io.mem.grant.bits.addr_beat === UInt(tlDataBeats - 1)
when (io.mem.grant.fire() && last_grant) {
inflight := Bool(false)
}
when (state === s_start) { state := s_prefetch }
when (state === s_prefetch && round_done) { state := s_retrieve }
when (state === s_retrieve && round_done) { state := s_finished }
io.finished := (state === s_finished)
io.cache.req.valid := Bool(false)
}