Add PlicCost test

This commit is contained in:
Dolu1990 2019-03-24 12:17:39 +01:00
parent 6c0608f0dd
commit e28702eb40
1 changed files with 76 additions and 0 deletions

View File

@ -0,0 +1,76 @@
package vexriscv.experimental
import spinal.core._
import spinal.lib._
import spinal.lib.bus.amba3.apb._
import spinal.lib.eda.bench.{Bench, Rtl, XilinxStdTargets}
import spinal.lib.eda.icestorm.IcestormStdTargets
import spinal.lib.misc.plic._
import vexriscv.VexRiscv
import vexriscv.demo.LinuxGen
import scala.collection.mutable.ArrayBuffer
class PlicBench(inputCount : Int) extends Component{
val io = new Bundle {
val apb = slave(Apb3(addressWidth = 16, dataWidth = 32))
val interrupts = in Bits(inputCount bits)
val cpuInterrupt = out Bool()
}
val priorityWidth = 1
val gateways = ArrayBuffer[PlicGateway]()
for(i <- 0 until inputCount) {
gateways += PlicGatewayActiveHigh(
source = io.interrupts(i),
id = 1 + i,
priorityWidth = priorityWidth
)
}
val targets = Seq(
PlicTarget(
gateways = gateways,
priorityWidth = priorityWidth
)
)
io.cpuInterrupt := targets(0).iep
val plicMapping = PlicMapping.light.copy(
// gatewayPriorityReadGen = true,
// gatewayPendingReadGen = true,
// targetThresholdReadGen = true
)
gateways.foreach(_.priority := 1)
targets.foreach(_.threshold := 0)
// targets.foreach(_.ie.foreach(_ := True))
val bus = Apb3SlaveFactory(io.apb)
val mapping = PlicMapper(bus, plicMapping)(
gateways = gateways,
targets = targets
)
}
object PlicCost extends App{
def rtlGen(inputCount : Int) = new Rtl {
override def getName(): String = s"PlicBench$inputCount"
override def getRtlPath(): String = s"PlicBench$inputCount.v"
SpinalVerilog(new PlicBench(inputCount).setDefinitionName(getRtlPath().split("\\.").head))
}
val rtls = List(8, 12, 16, 32).map(rtlGen)
// val rtls = List(smallestNoCsr, smallest, smallAndProductive, smallAndProductiveWithICache)
// val rtls = List(smallAndProductive, smallAndProductiveWithICache, fullNoMmuMaxPerf, fullNoMmu, full)
// val rtls = List(fullNoMmu)
val targets = IcestormStdTargets().take(1)
Bench(rtls, targets, "/eda/tmp")
}