All Downloads are FREE. Search and download functionalities are using the official Maven repository.

spinal.lib.sim.bus.wishbone.WishboneMonitor.scala Maven / Gradle / Ivy

There is a newer version: 1.10.2a
Show newest version
package spinal.lib.wishbone.sim

import spinal.sim._
import spinal.core._
import spinal.core.sim._
import spinal.lib.bus.wishbone._
import scala.collection.mutable._

object WishboneMonitor{
  def apply(bus : Wishbone, clockdomain: ClockDomain)(callback: (Wishbone) => Unit) = new WishboneMonitor(bus,clockdomain).addCallback(callback)
}

/** This is a helping class for executing code when an acknoledge happend on the bus
  * @param bus the wishbone bus to drive
  * @param clockdomain the clockdomain where the bus reside
  */
class WishboneMonitor(bus: Wishbone, clockdomain: ClockDomain){
  val busStatus = WishboneStatus(bus)
  val callbacks = ArrayBuffer[(Wishbone) => Unit]()

  /** Add a callback, this will be executed on every bus acknoledge
    * @param callback a function or code block that takes a wishbone bus as parameter
    */
  def addCallback(callback: (Wishbone) => Unit): Unit = callbacks += callback

  fork{
    while(true){
      clockdomain.waitSamplingWhere(busStatus.isAck)
      callbacks.foreach{_(bus)}
    }
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy