Add iBusCached regressions
This commit is contained in:
parent
5e7dd02bf7
commit
6bc5431fcd
|
@ -5,6 +5,7 @@ import java.io.File
|
||||||
import org.scalatest.FunSuite
|
import org.scalatest.FunSuite
|
||||||
import spinal.core.SpinalVerilog
|
import spinal.core.SpinalVerilog
|
||||||
import vexriscv.demo._
|
import vexriscv.demo._
|
||||||
|
import vexriscv.ip.InstructionCacheConfig
|
||||||
import vexriscv.plugin._
|
import vexriscv.plugin._
|
||||||
|
|
||||||
import scala.collection.mutable.ArrayBuffer
|
import scala.collection.mutable.ArrayBuffer
|
||||||
|
@ -186,7 +187,7 @@ class SrcDimension extends VexRiscvDimension("Src") {
|
||||||
|
|
||||||
|
|
||||||
class IBusDimension extends VexRiscvDimension("IBus") {
|
class IBusDimension extends VexRiscvDimension("IBus") {
|
||||||
override val positions = (for(prediction <- List(NONE, STATIC, DYNAMIC, DYNAMIC_TARGET);
|
override val positions = ((for(prediction <- List(NONE, STATIC, DYNAMIC, DYNAMIC_TARGET);
|
||||||
latency <- List(1,3);
|
latency <- List(1,3);
|
||||||
compressed <- List(false, true);
|
compressed <- List(false, true);
|
||||||
injectorStage <- List(false, true);
|
injectorStage <- List(false, true);
|
||||||
|
@ -202,7 +203,7 @@ class IBusDimension extends VexRiscvDimension("IBus") {
|
||||||
busLatencyMin = latency,
|
busLatencyMin = latency,
|
||||||
injectorStage = injectorStage
|
injectorStage = injectorStage
|
||||||
)
|
)
|
||||||
}) :+ new VexRiscvPosition("FullRelaxedDeep"){
|
}) :+ new VexRiscvPosition("SimpleFullRelaxedDeep"){
|
||||||
override def testParam = "IBUS=SIMPLE COMPRESSED=yes"
|
override def testParam = "IBUS=SIMPLE COMPRESSED=yes"
|
||||||
override def applyOn(config: VexRiscvConfig): Unit = config.plugins += new IBusSimplePlugin(
|
override def applyOn(config: VexRiscvConfig): Unit = config.plugins += new IBusSimplePlugin(
|
||||||
resetVector = 0x80000000l,
|
resetVector = 0x80000000l,
|
||||||
|
@ -214,7 +215,7 @@ class IBusDimension extends VexRiscvDimension("IBus") {
|
||||||
busLatencyMin = 3,
|
busLatencyMin = 3,
|
||||||
injectorStage = false
|
injectorStage = false
|
||||||
)
|
)
|
||||||
} :+ new VexRiscvPosition("FullRelaxedStd") {
|
} :+ new VexRiscvPosition("SimpleFullRelaxedStd") {
|
||||||
override def testParam = "IBUS=SIMPLE"
|
override def testParam = "IBUS=SIMPLE"
|
||||||
override def applyOn(config: VexRiscvConfig): Unit = config.plugins += new IBusSimplePlugin(
|
override def applyOn(config: VexRiscvConfig): Unit = config.plugins += new IBusSimplePlugin(
|
||||||
resetVector = 0x80000000l,
|
resetVector = 0x80000000l,
|
||||||
|
@ -226,10 +227,42 @@ class IBusDimension extends VexRiscvDimension("IBus") {
|
||||||
busLatencyMin = 1,
|
busLatencyMin = 1,
|
||||||
injectorStage = true
|
injectorStage = true
|
||||||
)
|
)
|
||||||
}
|
}) ++ (for(prediction <- List(NONE, STATIC, DYNAMIC, DYNAMIC_TARGET);
|
||||||
|
twoCycleCache <- List(false, true);
|
||||||
|
twoCycleRam <- List(false, true);
|
||||||
|
wayCount <- List(1, 4);
|
||||||
|
cacheSize <- List(512, 4096);
|
||||||
|
compressed <- List(false, true);
|
||||||
|
relaxedPcCalculation <- List(false, true);
|
||||||
|
if !(!twoCycleCache && twoCycleRam ) && !(prediction != NONE && (wayCount == 1 || cacheSize == 4096 ))) yield new VexRiscvPosition("Cached" + (if(twoCycleCache) "2cc" else "") + (if(twoCycleRam) "2cr" else "") + "S" + cacheSize + "W" + wayCount + (if(relaxedPcCalculation) "Relax" else "") + (if(compressed) "Rvc" else "") + prediction.getClass.getTypeName().replace("$","")) {
|
||||||
|
override def testParam = "IBUS=CACHED" + (if(compressed) " COMPRESSED=yes" else "")
|
||||||
|
override def applyOn(config: VexRiscvConfig): Unit = config.plugins += new IBusCachedPlugin(
|
||||||
|
resetVector = 0x80000000l,
|
||||||
|
compressedGen = compressed,
|
||||||
|
prediction = prediction,
|
||||||
|
relaxedPcCalculation = relaxedPcCalculation,
|
||||||
|
config = InstructionCacheConfig(
|
||||||
|
cacheSize = cacheSize,
|
||||||
|
bytePerLine = 32,
|
||||||
|
wayCount = wayCount,
|
||||||
|
addressWidth = 32,
|
||||||
|
cpuDataWidth = 32,
|
||||||
|
memDataWidth = 32,
|
||||||
|
catchIllegalAccess = false,
|
||||||
|
catchAccessFault = false,
|
||||||
|
catchMemoryTranslationMiss = false,
|
||||||
|
asyncTagMemory = false,
|
||||||
|
twoCycleRam = twoCycleRam,
|
||||||
|
twoCycleCache = twoCycleCache
|
||||||
|
)
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
// override def default = List(positions.last)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
abstract class ConfigPosition[T](val name: String) {
|
abstract class ConfigPosition[T](val name: String) {
|
||||||
def applyOn(config: T): Unit
|
def applyOn(config: T): Unit
|
||||||
var dimension : ConfigDimension[_] = null
|
var dimension : ConfigDimension[_] = null
|
||||||
|
@ -278,7 +311,7 @@ class TestIndividualFeatures extends FunSuite {
|
||||||
dimensions.foreach(d => d.positions.foreach(_.dimension = d))
|
dimensions.foreach(d => d.positions.foreach(_.dimension = d))
|
||||||
|
|
||||||
for (dimension <- dimensions) {
|
for (dimension <- dimensions) {
|
||||||
for (position <- dimension.positions) {
|
for (position <- dimension.positions/* if position.name.contains("Cached")*/) {
|
||||||
for(defaults <- genDefaultsPositions(dimensions.filter(_ != dimension))){
|
for(defaults <- genDefaultsPositions(dimensions.filter(_ != dimension))){
|
||||||
def gen = {
|
def gen = {
|
||||||
val config = VexRiscvConfig(
|
val config = VexRiscvConfig(
|
||||||
|
|
Loading…
Reference in New Issue