Add PlicCost test
This commit is contained in:
parent
6c0608f0dd
commit
e28702eb40
|
@ -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")
|
||||
}
|
Loading…
Reference in New Issue