aboutsummaryrefslogtreecommitdiff
path: root/VexRiscv/src/main/scala/vexriscv/demo/OpenRoad.scala
diff options
context:
space:
mode:
Diffstat (limited to 'VexRiscv/src/main/scala/vexriscv/demo/OpenRoad.scala')
-rw-r--r--VexRiscv/src/main/scala/vexriscv/demo/OpenRoad.scala103
1 files changed, 103 insertions, 0 deletions
diff --git a/VexRiscv/src/main/scala/vexriscv/demo/OpenRoad.scala b/VexRiscv/src/main/scala/vexriscv/demo/OpenRoad.scala
new file mode 100644
index 0000000..3938eff
--- /dev/null
+++ b/VexRiscv/src/main/scala/vexriscv/demo/OpenRoad.scala
@@ -0,0 +1,103 @@
+package vexriscv.demo
+
+import spinal.core._
+import vexriscv.ip.{DataCacheConfig, InstructionCacheConfig}
+import vexriscv.{Riscv, VexRiscv, VexRiscvConfig, plugin}
+import vexriscv.plugin.{BranchPlugin, CsrAccess, CsrPlugin, CsrPluginConfig, DBusCachedPlugin, DecoderSimplePlugin, FullBarrelShifterPlugin, HazardSimplePlugin, IBusCachedPlugin, IntAluPlugin, MmuPlugin, MmuPortConfig, MulDivIterativePlugin, MulPlugin, RegFilePlugin, STATIC, SrcPlugin, YamlPlugin}
+
+object OpenRoad extends App{
+
+ def linuxConfig = VexRiscvConfig(
+ withMemoryStage = true,
+ withWriteBackStage = true,
+ List(
+ // new SingleInstructionLimiterPlugin(),
+ new IBusCachedPlugin(
+ resetVector = 0,
+ compressedGen = false,
+ prediction = vexriscv.plugin.NONE,
+ injectorStage = false,
+ config = InstructionCacheConfig(
+ cacheSize = 4096,
+ bytePerLine = 64,
+ wayCount = 1,
+ addressWidth = 32,
+ cpuDataWidth = 32,
+ memDataWidth = 32,
+ catchIllegalAccess = true,
+ catchAccessFault = true,
+ asyncTagMemory = true,
+ twoCycleRam = false,
+ twoCycleCache = true
+ ),
+ memoryTranslatorPortConfig = MmuPortConfig(
+ portTlbSize = 4
+ )
+ ),
+ new DBusCachedPlugin(
+ dBusCmdMasterPipe = true,
+ dBusCmdSlavePipe = true,
+ dBusRspSlavePipe = true,
+ config = new DataCacheConfig(
+ cacheSize = 4096,
+ bytePerLine = 64,
+ wayCount = 1,
+ addressWidth = 32,
+ cpuDataWidth = 32,
+ memDataWidth = 32,
+ catchAccessError = true,
+ catchIllegal = true,
+ catchUnaligned = true,
+ asyncTagMemory = true,
+ withLrSc = true,
+ withAmo = true
+ // )
+ ),
+ memoryTranslatorPortConfig = MmuPortConfig(
+ portTlbSize = 4
+ )
+ ),
+ new DecoderSimplePlugin(
+ catchIllegalInstruction = true
+ ),
+ new RegFilePlugin(
+ regFileReadyKind = plugin.SYNC,
+ zeroBoot = false,
+ x0Init = true
+ ),
+ new IntAluPlugin,
+ new SrcPlugin(
+ separatedAddSub = false
+ ),
+ new FullBarrelShifterPlugin(earlyInjection = true),
+ new HazardSimplePlugin(
+ bypassExecute = true,
+ bypassMemory = true,
+ bypassWriteBack = true,
+ bypassWriteBackBuffer = true,
+ pessimisticUseSrc = false,
+ pessimisticWriteRegFile = false,
+ pessimisticAddressMatch = false
+ ),
+ new MulDivIterativePlugin(
+ genMul = true,
+ genDiv = true,
+ mulUnrollFactor = 32,
+ divUnrollFactor = 8
+ ),
+ new CsrPlugin(CsrPluginConfig.openSbi(0,Riscv.misaToInt("imas")).copy(ebreakGen = false, mtvecAccess = CsrAccess.READ_WRITE)), //mtvecAccess read required by freertos
+
+ new BranchPlugin(
+ earlyBranch = true,
+ catchAddressMisaligned = true,
+ fenceiGenAsAJump = false
+ ),
+ new MmuPlugin(
+ ioRange = (x => x(31))
+ ),
+ new YamlPlugin("cpu0.yaml")
+ )
+ )
+
+ SpinalConfig().addStandardMemBlackboxing(blackboxAllWhatsYouCan).generateVerilog(new VexRiscv(linuxConfig).setDefinitionName("VexRiscvMsuI4D4"))
+}