aboutsummaryrefslogtreecommitdiff
path: root/VexRiscv/src/main/scala/vexriscv/plugin/SingleInstructionLimiterPlugin.scala
diff options
context:
space:
mode:
Diffstat (limited to 'VexRiscv/src/main/scala/vexriscv/plugin/SingleInstructionLimiterPlugin.scala')
-rw-r--r--VexRiscv/src/main/scala/vexriscv/plugin/SingleInstructionLimiterPlugin.scala17
1 files changed, 17 insertions, 0 deletions
diff --git a/VexRiscv/src/main/scala/vexriscv/plugin/SingleInstructionLimiterPlugin.scala b/VexRiscv/src/main/scala/vexriscv/plugin/SingleInstructionLimiterPlugin.scala
new file mode 100644
index 0000000..c6c9706
--- /dev/null
+++ b/VexRiscv/src/main/scala/vexriscv/plugin/SingleInstructionLimiterPlugin.scala
@@ -0,0 +1,17 @@
+package vexriscv.plugin
+
+import vexriscv._
+import spinal.core._
+import spinal.lib._
+
+
+class SingleInstructionLimiterPlugin() extends Plugin[VexRiscv] {
+ override def build(pipeline: VexRiscv): Unit = {
+ import pipeline._
+ import pipeline.config._
+ val fetcher = pipeline.service(classOf[IBusFetcher])
+ when(fetcher.incoming() || List(decode,execute,memory,writeBack).map(_.arbitration.isValid).orR) {
+ fetcher.haltIt()
+ }
+ }
+}