write to multiple possible tohost locations
This commit is contained in:
parent
4b4e8f7f62
commit
b95f095aca
@ -10,6 +10,7 @@ import cde.{Parameters, Field}
|
||||
case object BuildGroundTest extends Field[(Int, Parameters) => GroundTest]
|
||||
case object GroundTestMaxXacts extends Field[Int]
|
||||
case object GroundTestCSRs extends Field[Seq[Int]]
|
||||
case object TohostAddrs extends Field[Seq[BigInt]]
|
||||
|
||||
/** A "cache" that responds to probe requests with a release indicating
|
||||
* the block is not present */
|
||||
@ -113,15 +114,19 @@ class GroundTestFinisher(implicit p: Parameters) extends TLModule()(p) {
|
||||
|
||||
val addrBits = p(PAddrBits)
|
||||
val offsetBits = tlBeatAddrBits + tlByteAddrBits
|
||||
val tohostAddr = UInt("h80001000")
|
||||
val tohostAddrs = Vec(p(TohostAddrs).map(addr => UInt(addr)))
|
||||
|
||||
val s_idle :: s_write_tohost :: s_wait :: Nil = Enum(Bits(), 3)
|
||||
val (send_cnt, send_done) = Counter(io.mem.grant.fire(), tohostAddrs.size)
|
||||
val tohostAddr = tohostAddrs(send_cnt)
|
||||
|
||||
val s_idle :: s_write :: s_wait :: s_done :: Nil = Enum(Bits(), 4)
|
||||
val state = Reg(init = s_idle)
|
||||
|
||||
when (state === s_idle && io.finished) { state := s_write_tohost }
|
||||
when (state === s_idle && io.finished) { state := s_write }
|
||||
when (io.mem.acquire.fire()) { state := s_wait }
|
||||
when (io.mem.grant.fire()) { state := Mux(send_done, s_done, s_write) }
|
||||
|
||||
io.mem.acquire.valid := (state === s_write_tohost)
|
||||
io.mem.acquire.valid := (state === s_write)
|
||||
io.mem.acquire.bits := Put(
|
||||
client_xact_id = UInt(0),
|
||||
addr_block = tohostAddr(addrBits - 1, offsetBits),
|
||||
|
Loading…
Reference in New Issue
Block a user