class MulPlugin extends ExecutionUnitElementSimple with MulReuse

Implement RISC-V multiplication instructions by subdividing them into partial ones. For instance, 32bits x 32 bits = a[15: 0]*b[15: 0] + a[15: 0]*b[31:16] + a[31:16]*b[15: 0] + a[31:16]*b[31:16]

This calculation is splited over multiple stages to get a good FMax on FPGA (in general)

bufferedHigh can be used to buffer the mulh instruction one extra cycle on the stage to improve the FMax at the cost of one idle cycle.

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

Instance Constructors

  1. new MulPlugin(layer: LaneLayer, cmdAt: Int = 0, mulAt: Int = 0, sumAt: Int = 1, sumsSpec: List[(Int, Int)] = List((44, 8), (1000, 1000)), untilOffsetS0: Int = Integer.MAX_VALUE, writebackAt: Int = 2, splitWidthA: Int = 17, splitWidthB: Int = 17, useRsUnsignedPlugin: Boolean = false, keepMulSrc: Boolean = false, bufferedHigh: Option[Boolean] = None)

Type Members

  1. class Logic extends Api with Area with PostInitCallback
    Definition Classes
    ExecutionUnitElementSimple
  2. abstract type RefOwnerType
    Definition Classes
    OwnableRef

Value Members

  1. val SEL: NamedType[Bool]
    Definition Classes
    ExecutionUnitElementSimple
  2. val _context: Capture
    Definition Classes
    Area
  3. def addService[T](that: T): T
    Definition Classes
    FiberPlugin
  4. def awaitBuild(): Unit
    Definition Classes
    FiberPlugin
  5. var bufferedHigh: Option[Boolean]
  6. def buildBefore(l: ⇒ Lock): Unit
    Definition Classes
    FiberPlugin
  7. var buildCount: Int
    Definition Classes
    FiberPlugin
  8. def childNamePriority: Byte
    Definition Classes
    Area
  9. var cmdAt: Int
    Definition Classes
    MulPluginMulReuse
  10. def component: Component
    Definition Classes
    ContextUser
  11. def during: AnyRef { ... /* 2 definitions in type refinement */ }
    Definition Classes
    FiberPlugin
  12. def equals(obj: Any): Boolean
    Definition Classes
    OverridedEqualsHashCode → AnyRef → Any
  13. def foreachReflectableNameables(doThat: (Any) ⇒ Unit): Unit
    Definition Classes
    Nameable
  14. def getDisplayName(): String
    Definition Classes
    Nameable
  15. def getInstanceCounter: Int
    Definition Classes
    ContextUser
  16. def getName(default: String): String
    Definition Classes
    NameableByComponent → Nameable
  17. def getName(): String
    Definition Classes
    NameableByComponent → Nameable
  18. def getPartialName(): String
    Definition Classes
    Nameable
  19. def getPath(from: Component, to: Component): Seq[Component]
    Definition Classes
    NameableByComponent
  20. def getRefOwnersChain(): List[Any]
    Definition Classes
    OwnableRef
  21. def getScalaLocationLong: String
    Definition Classes
    ScalaLocated
  22. def getScalaLocationShort: String
    Definition Classes
    ScalaLocated
  23. def getScalaTrace(): Throwable
    Definition Classes
    ScalaLocated
  24. val globalData: GlobalData
    Definition Classes
    GlobalDataUser
  25. def hashCode(): Int
    Definition Classes
    OverridedEqualsHashCode → AnyRef → Any
  26. var host: PluginHost
    Definition Classes
    FiberPlugin
  27. val hostLock: Lock
    Definition Classes
    FiberPlugin
  28. def inject(src1: Bits, src2: Bits): Unit
    Definition Classes
    MulPluginMulReuse
  29. val injectApi: Area { ... /* 6 definitions in type refinement */ }
  30. def injectWidth(a: Int, b: Int, result: Int): Unit
    Definition Classes
    MulPluginMulReuse
  31. def isCompletelyUnnamed: Boolean
    Definition Classes
    Nameable
  32. final def isNamed: Boolean
    Definition Classes
    Nameable
  33. def isPriorityApplicable(namePriority: Byte): Boolean
    Definition Classes
    Nameable
  34. def isUnnamed: Boolean
    Definition Classes
    NameableByComponent → Nameable
  35. var keepMulSrc: Boolean
  36. val layer: LaneLayer
  37. val lockables: LinkedHashSet[() ⇒ Lock]
    Definition Classes
    FiberPlugin
  38. val logic: Handle[Logic { ... /* 12 definitions in type refinement */ }]
  39. var mulAt: Int
  40. val mulLock: Retainer
    Definition Classes
    MulReuse
  41. val name: String
    Definition Classes
    Nameable
  42. def overrideLocalName(name: String): MulPlugin.this.type
    Definition Classes
    Nameable
  43. val parentScope: ScopeStatement
    Definition Classes
    ContextUser
  44. var pluginEnabled: Boolean
    Definition Classes
    FiberPlugin
  45. val refOwner: RefOwnerType
    Definition Classes
    OwnableRef
    Annotations
    @DontName()
  46. def reflectNames(): Unit
    Definition Classes
    Nameable
  47. def retains(head: Any, tail: Any*): RetainerGroup
    Definition Classes
    FiberPlugin
  48. def retains(that: Seq[Any]): RetainerGroup
    Definition Classes
    FiberPlugin
  49. def rework[T](body: ⇒ T): T
    Definition Classes
    Area
  50. def rsp: Bits
    Definition Classes
    MulPluginMulReuse
  51. def rspAt: Int
    Definition Classes
    MulPluginMulReuse
  52. val scalaTrace: Throwable
    Definition Classes
    ScalaLocated
  53. def setCompositeName(nameable: Nameable, postfix: String, namePriority: Byte): MulPlugin.this.type
    Definition Classes
    Nameable
  54. def setCompositeName(nameable: Nameable, postfix: String, weak: Boolean): MulPlugin.this.type
    Definition Classes
    Nameable
  55. def setCompositeName(nameable: Nameable, postfix: String): MulPlugin.this.type
    Definition Classes
    Nameable
  56. def setCompositeName(nameable: Nameable, namePriority: Byte): MulPlugin.this.type
    Definition Classes
    Nameable
  57. def setCompositeName(nameable: Nameable, weak: Boolean): MulPlugin.this.type
    Definition Classes
    Nameable
  58. def setCompositeName(nameable: Nameable): MulPlugin.this.type
    Definition Classes
    Nameable
  59. def setHost(h: PluginHost): Unit
    Definition Classes
    FiberPlugin → Hostable
  60. def setLambdaName(isNameBody: ⇒ Boolean)(nameGen: ⇒ String): MulPlugin.this.type
    Definition Classes
    Nameable
  61. def setName(name: String, namePriority: Byte): MulPlugin.this.type
    Definition Classes
    Nameable
  62. def setName(name: String, weak: Boolean): MulPlugin.this.type
    Definition Classes
    Nameable
  63. def setName(name: String): MulPlugin.this.type
    Definition Classes
    Nameable
  64. def setNameAsWeak(): MulPlugin.this.type
    Definition Classes
    Nameable
  65. def setPartialName(name: String, namePriority: Byte, owner: Any): MulPlugin.this.type
    Definition Classes
    Nameable
  66. def setPartialName(name: String, namePriority: Byte): MulPlugin.this.type
    Definition Classes
    Nameable
  67. def setPartialName(name: String, weak: Boolean): MulPlugin.this.type
    Definition Classes
    Nameable
  68. def setPartialName(owner: Nameable, name: String, namePriority: Byte): MulPlugin.this.type
    Definition Classes
    Nameable
  69. def setPartialName(owner: Nameable, name: String, weak: Boolean): MulPlugin.this.type
    Definition Classes
    Nameable
  70. def setPartialName(name: String): MulPlugin.this.type
    Definition Classes
    Nameable
  71. def setPartialName(owner: Nameable, name: String): MulPlugin.this.type
    Definition Classes
    Nameable
  72. def setPartialName(owner: Nameable): MulPlugin.this.type
    Definition Classes
    Nameable
  73. def setRefOwner(that: Any): Unit
    Definition Classes
    OwnableRef
  74. def setScalaLocated(source: ScalaLocated): MulPlugin.this.type
    Definition Classes
    ScalaLocated
  75. def setWeakName(name: String): MulPlugin.this.type
    Definition Classes
    Nameable
  76. def setupRetain(l: ⇒ Lock): Unit
    Definition Classes
    FiberPlugin
  77. var splitWidthA: Int
  78. var splitWidthB: Int
  79. val subservices: ArrayBuffer[Any]
    Definition Classes
    FiberPlugin
  80. var sumAt: Int
  81. var sumsSpec: List[(Int, Int)]
  82. def toString(): String
    Definition Classes
    Area → Nameable → AnyRef → Any
  83. def unsetName(): MulPlugin.this.type
    Definition Classes
    Nameable
  84. var untilOffsetS0: Int
  85. var useRsUnsignedPlugin: Boolean
  86. def valCallback[T](ref: T, name: String): T
    Definition Classes
    ValCallbackRec → ValCallback
  87. def valCallbackOn(ref: Any, name: String, refs: Set[Any]): Unit
    Definition Classes
    ValCallbackRec
  88. def valCallbackRec(obj: Any, name: String): Unit
    Definition Classes
    Area → ValCallbackRec
  89. def withPrefix(prefix: String): FiberPlugin
    Definition Classes
    FiberPlugin
  90. var writebackAt: Int