2016-07-11 21:10:27 +02:00
|
|
|
package rocketchip
|
|
|
|
|
|
|
|
import Chisel._
|
|
|
|
import cde.{Parameters, Field}
|
|
|
|
import groundtest._
|
|
|
|
import uncore.tilelink._
|
|
|
|
import uncore.agents._
|
|
|
|
|
2016-07-11 21:17:29 +02:00
|
|
|
case object ExportGroundTestStatus extends Field[Boolean]
|
|
|
|
|
2016-08-10 18:49:56 +02:00
|
|
|
class DirectGroundTestCoreplex(topParams: Parameters) extends Coreplex()(topParams) {
|
|
|
|
override val io = new CoreplexIO {
|
2016-07-11 21:17:29 +02:00
|
|
|
// Need to export this for FPGA testing, but not for simulator
|
|
|
|
val status = if (p(ExportGroundTestStatus)) Some(new GroundTestStatus) else None
|
|
|
|
}
|
2016-07-11 21:10:27 +02:00
|
|
|
|
|
|
|
// Not using the debug
|
|
|
|
io.debug.req.ready := Bool(false)
|
|
|
|
io.debug.resp.valid := Bool(false)
|
|
|
|
|
2016-08-10 18:49:56 +02:00
|
|
|
require(!exportMMIO)
|
|
|
|
require(!exportBus)
|
2016-07-11 21:10:27 +02:00
|
|
|
require(nMemChannels == 1)
|
|
|
|
require(nTiles == 1)
|
|
|
|
|
|
|
|
val test = p(BuildGroundTest)(outermostParams.alterPartial({
|
|
|
|
case GroundTestId => 0
|
|
|
|
case CacheName => "L1D"
|
|
|
|
}))
|
|
|
|
require(test.io.cache.size == 0)
|
|
|
|
require(test.io.mem.size == nBanksPerMemChannel)
|
|
|
|
require(test.io.ptw.size == 0)
|
|
|
|
|
2016-07-11 21:17:29 +02:00
|
|
|
when (test.io.status.finished) { stop() }
|
2016-07-11 21:10:27 +02:00
|
|
|
|
|
|
|
val mem_ic = Module(new TileLinkMemoryInterconnect(
|
|
|
|
nBanksPerMemChannel, nMemChannels)(outermostParams))
|
|
|
|
|
|
|
|
mem_ic.io.in <> test.io.mem
|
2016-08-10 18:49:56 +02:00
|
|
|
io.mem <> mem_ic.io.out
|
|
|
|
|
2016-07-11 21:17:29 +02:00
|
|
|
io.status.map { status =>
|
|
|
|
val s_running :: s_finished :: s_errored :: s_timeout :: Nil = Enum(Bits(), 4)
|
|
|
|
val state = Reg(init = s_running)
|
|
|
|
val error_code = Reg(status.error.bits)
|
|
|
|
val timeout_code = Reg(status.timeout.bits)
|
|
|
|
when (state === s_running) {
|
|
|
|
when (test.io.status.finished) { state := s_finished }
|
|
|
|
when (test.io.status.error.valid) {
|
|
|
|
state := s_errored
|
|
|
|
error_code := test.io.status.error.bits
|
|
|
|
}
|
|
|
|
when (test.io.status.timeout.valid) {
|
|
|
|
state := s_timeout
|
|
|
|
timeout_code := test.io.status.timeout.bits
|
|
|
|
}
|
|
|
|
}
|
|
|
|
status.finished := (state === s_finished)
|
|
|
|
status.error.valid := (state === s_errored)
|
|
|
|
status.error.bits := error_code
|
|
|
|
status.timeout.valid := (state === s_timeout)
|
|
|
|
status.timeout.bits := timeout_code
|
|
|
|
}
|
2016-07-11 21:10:27 +02:00
|
|
|
}
|