Packages

c

vexiiriscv.schedule

DispatchPlugin

class DispatchPlugin extends FiberPlugin

The role of the dispatch plugin is to : - Collect the instruction exiting the decode pipeline, - Figuring out on which execution lane they could be scheduled (checking for dependencies). If none, then wait for some. - Issue instructions on execution lanes

It is likely one of the hardest plugin to read, as it does a lot of elaboration time analysis to generate the "right" hadware

How to check if a instruction can schedule : - If one of the pipeline which implement its micro op is free - There is no inflight non-bypassed RF write to one of the source operand - There is no scheduling fence - ...

Schedule heuristic : - In priority order, go through the slots - Check which pipeline could schedule it (free && compatible) - Select the pipeline which the highest priority (to avoid using the one which can do load and store, for instance) - If the slot can't be schedule, disable all following ones with same HART_ID

Linear Supertypes
FiberPlugin, Hostable, Area, OverridedEqualsHashCode, ValCallbackRec, ValCallback, NameableByComponent, Nameable, ContextUser, ScalaLocated, GlobalDataUser, OwnableRef, AnyRef, Any
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. DispatchPlugin
  2. FiberPlugin
  3. Hostable
  4. Area
  5. OverridedEqualsHashCode
  6. ValCallbackRec
  7. ValCallback
  8. NameableByComponent
  9. Nameable
  10. ContextUser
  11. ScalaLocated
  12. GlobalDataUser
  13. OwnableRef
  14. AnyRef
  15. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Instance Constructors

  1. new DispatchPlugin(dispatchAt: Int, trapLayer: LaneLayer, withBuffer: Boolean)

Type Members

  1. abstract type RefOwnerType
    Definition Classes
    OwnableRef

Value Members

  1. val DONT_FLUSH: NamedType[Bool]
  2. val DONT_FLUSH_FROM_LANES: NamedType[Bool]
  3. val FENCE_OLDER: NamedType[Bool]
  4. val MAY_FLUSH: NamedType[Bool]
  5. val _context: Capture
    Definition Classes
    Area
  6. def addDispatchCtx(that: NamedType[_ <: Data]): LinkedHashSet[NamedType[_ <: Data]]
  7. def addService[T](that: T): T
    Definition Classes
    FiberPlugin
  8. val api: Handle[Area { val haltDispatch: spinal.core.Bool }]
  9. def awaitBuild(): Unit
    Definition Classes
    FiberPlugin
  10. def buildBefore(l: ⇒ Lock): Unit
    Definition Classes
    FiberPlugin
  11. var buildCount: Int
    Definition Classes
    FiberPlugin
  12. def childNamePriority: Byte
    Definition Classes
    Area
  13. def component: Component
    Definition Classes
    ContextUser
  14. var dispatchAt: Int
  15. def during: AnyRef { ... /* 2 definitions in type refinement */ }
    Definition Classes
    FiberPlugin
  16. val elaborationLock: Retainer
  17. def equals(obj: Any): Boolean
    Definition Classes
    OverridedEqualsHashCode → AnyRef → Any
  18. def fenceOlder(op: MicroOp): LinkedHashSet[MicroOp]
  19. val fenceOlderOps: LinkedHashSet[MicroOp]
  20. def foreachReflectableNameables(doThat: (Any) ⇒ Unit): Unit
    Definition Classes
    Nameable
  21. def getDisplayName(): String
    Definition Classes
    Nameable
  22. def getInstanceCounter: Int
    Definition Classes
    ContextUser
  23. def getName(default: String): String
    Definition Classes
    NameableByComponent → Nameable
  24. def getName(): String
    Definition Classes
    NameableByComponent → Nameable
  25. def getPartialName(): String
    Definition Classes
    Nameable
  26. def getPath(from: Component, to: Component): Seq[Component]
    Definition Classes
    NameableByComponent
  27. def getRefOwnersChain(): List[Any]
    Definition Classes
    OwnableRef
  28. def getScalaLocationLong: String
    Definition Classes
    ScalaLocated
  29. def getScalaLocationShort: String
    Definition Classes
    ScalaLocated
  30. def getScalaTrace(): Throwable
    Definition Classes
    ScalaLocated
  31. val globalData: GlobalData
    Definition Classes
    GlobalDataUser
  32. def haltDispatchWhen(cond: Bool): Bool
  33. def hashCode(): Int
    Definition Classes
    OverridedEqualsHashCode → AnyRef → Any
  34. val hmKeys: LinkedHashSet[NamedType[_ <: Data]]
  35. var host: PluginHost
    Definition Classes
    FiberPlugin
  36. val hostLock: Lock
    Definition Classes
    FiberPlugin
  37. def isCompletelyUnnamed: Boolean
    Definition Classes
    Nameable
  38. final def isNamed: Boolean
    Definition Classes
    Nameable
  39. def isPriorityApplicable(namePriority: Byte): Boolean
    Definition Classes
    Nameable
  40. def isUnnamed: Boolean
    Definition Classes
    NameableByComponent → Nameable
  41. val lockables: LinkedHashSet[() ⇒ Lock]
    Definition Classes
    FiberPlugin
  42. val logic: Handle[Area { ... /* 58 definitions in type refinement */ }]
  43. val name: String
    Definition Classes
    Nameable
  44. def overrideLocalName(name: String): DispatchPlugin.this.type
    Definition Classes
    Nameable
  45. val parentScope: ScopeStatement
    Definition Classes
    ContextUser
  46. var pluginEnabled: Boolean
    Definition Classes
    FiberPlugin
  47. val refOwner: RefOwnerType
    Definition Classes
    OwnableRef
    Annotations
    @DontName()
  48. def reflectNames(): Unit
    Definition Classes
    Nameable
  49. def retains(head: Any, tail: Any*): RetainerGroup
    Definition Classes
    FiberPlugin
  50. def retains(that: Seq[Any]): RetainerGroup
    Definition Classes
    FiberPlugin
  51. def rework[T](body: ⇒ T): T
    Definition Classes
    Area
  52. val scalaTrace: Throwable
    Definition Classes
    ScalaLocated
  53. def setCompositeName(nameable: Nameable, postfix: String, namePriority: Byte): DispatchPlugin.this.type
    Definition Classes
    Nameable
  54. def setCompositeName(nameable: Nameable, postfix: String, weak: Boolean): DispatchPlugin.this.type
    Definition Classes
    Nameable
  55. def setCompositeName(nameable: Nameable, postfix: String): DispatchPlugin.this.type
    Definition Classes
    Nameable
  56. def setCompositeName(nameable: Nameable, namePriority: Byte): DispatchPlugin.this.type
    Definition Classes
    Nameable
  57. def setCompositeName(nameable: Nameable, weak: Boolean): DispatchPlugin.this.type
    Definition Classes
    Nameable
  58. def setCompositeName(nameable: Nameable): DispatchPlugin.this.type
    Definition Classes
    Nameable
  59. def setHost(h: PluginHost): Unit
    Definition Classes
    FiberPlugin → Hostable
  60. def setLambdaName(isNameBody: ⇒ Boolean)(nameGen: ⇒ String): DispatchPlugin.this.type
    Definition Classes
    Nameable
  61. def setName(name: String, namePriority: Byte): DispatchPlugin.this.type
    Definition Classes
    Nameable
  62. def setName(name: String, weak: Boolean): DispatchPlugin.this.type
    Definition Classes
    Nameable
  63. def setName(name: String): DispatchPlugin.this.type
    Definition Classes
    Nameable
  64. def setNameAsWeak(): DispatchPlugin.this.type
    Definition Classes
    Nameable
  65. def setPartialName(name: String, namePriority: Byte, owner: Any): DispatchPlugin.this.type
    Definition Classes
    Nameable
  66. def setPartialName(name: String, namePriority: Byte): DispatchPlugin.this.type
    Definition Classes
    Nameable
  67. def setPartialName(name: String, weak: Boolean): DispatchPlugin.this.type
    Definition Classes
    Nameable
  68. def setPartialName(owner: Nameable, name: String, namePriority: Byte): DispatchPlugin.this.type
    Definition Classes
    Nameable
  69. def setPartialName(owner: Nameable, name: String, weak: Boolean): DispatchPlugin.this.type
    Definition Classes
    Nameable
  70. def setPartialName(name: String): DispatchPlugin.this.type
    Definition Classes
    Nameable
  71. def setPartialName(owner: Nameable, name: String): DispatchPlugin.this.type
    Definition Classes
    Nameable
  72. def setPartialName(owner: Nameable): DispatchPlugin.this.type
    Definition Classes
    Nameable
  73. def setRefOwner(that: Any): Unit
    Definition Classes
    OwnableRef
  74. def setScalaLocated(source: ScalaLocated): DispatchPlugin.this.type
    Definition Classes
    ScalaLocated
  75. def setWeakName(name: String): DispatchPlugin.this.type
    Definition Classes
    Nameable
  76. def setupRetain(l: ⇒ Lock): Unit
    Definition Classes
    FiberPlugin
  77. val subservices: ArrayBuffer[Any]
    Definition Classes
    FiberPlugin
  78. def toString(): String
    Definition Classes
    Area → Nameable → AnyRef → Any
  79. var trapLayer: LaneLayer
  80. def unsetName(): DispatchPlugin.this.type
    Definition Classes
    Nameable
  81. def valCallback[T](ref: T, name: String): T
    Definition Classes
    ValCallbackRec → ValCallback
  82. def valCallbackOn(ref: Any, name: String, refs: Set[Any]): Unit
    Definition Classes
    ValCallbackRec
  83. def valCallbackRec(obj: Any, name: String): Unit
    Definition Classes
    Area → ValCallbackRec
  84. var withBuffer: Boolean
  85. def withPrefix(prefix: String): FiberPlugin
    Definition Classes
    FiberPlugin