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
Ordering
- Alphabetic
- By Inheritance
Inherited
- MulPlugin
- MulReuse
- ExecutionUnitElementSimple
- FiberPlugin
- Hostable
- Area
- OverridedEqualsHashCode
- ValCallbackRec
- ValCallback
- NameableByComponent
- Nameable
- ContextUser
- ScalaLocated
- GlobalDataUser
- OwnableRef
- AnyRef
- Any
- Hide All
- Show All
Visibility
- Public
- All
Instance Constructors
- 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
-
class
Logic extends Api with Area with PostInitCallback
- Definition Classes
- ExecutionUnitElementSimple
-
abstract
type
RefOwnerType
- Definition Classes
- OwnableRef
Value Members
-
val
SEL: NamedType[Bool]
- Definition Classes
- ExecutionUnitElementSimple
-
val
_context: Capture
- Definition Classes
- Area
-
def
addService[T](that: T): T
- Definition Classes
- FiberPlugin
-
def
awaitBuild(): Unit
- Definition Classes
- FiberPlugin
- var bufferedHigh: Option[Boolean]
-
def
buildBefore(l: ⇒ Lock): Unit
- Definition Classes
- FiberPlugin
-
var
buildCount: Int
- Definition Classes
- FiberPlugin
-
def
childNamePriority: Byte
- Definition Classes
- Area
- var cmdAt: Int
-
def
component: Component
- Definition Classes
- ContextUser
-
def
during: AnyRef { ... /* 2 definitions in type refinement */ }
- Definition Classes
- FiberPlugin
-
def
equals(obj: Any): Boolean
- Definition Classes
- OverridedEqualsHashCode → AnyRef → Any
-
def
foreachReflectableNameables(doThat: (Any) ⇒ Unit): Unit
- Definition Classes
- Nameable
-
def
getDisplayName(): String
- Definition Classes
- Nameable
-
def
getInstanceCounter: Int
- Definition Classes
- ContextUser
-
def
getName(default: String): String
- Definition Classes
- NameableByComponent → Nameable
-
def
getName(): String
- Definition Classes
- NameableByComponent → Nameable
-
def
getPartialName(): String
- Definition Classes
- Nameable
-
def
getPath(from: Component, to: Component): Seq[Component]
- Definition Classes
- NameableByComponent
-
def
getRefOwnersChain(): List[Any]
- Definition Classes
- OwnableRef
-
def
getScalaLocationLong: String
- Definition Classes
- ScalaLocated
-
def
getScalaLocationShort: String
- Definition Classes
- ScalaLocated
-
def
getScalaTrace(): Throwable
- Definition Classes
- ScalaLocated
-
val
globalData: GlobalData
- Definition Classes
- GlobalDataUser
-
def
hashCode(): Int
- Definition Classes
- OverridedEqualsHashCode → AnyRef → Any
-
var
host: PluginHost
- Definition Classes
- FiberPlugin
-
val
hostLock: Lock
- Definition Classes
- FiberPlugin
- def inject(src1: Bits, src2: Bits): Unit
- val injectApi: Area { ... /* 6 definitions in type refinement */ }
- def injectWidth(a: Int, b: Int, result: Int): Unit
-
def
isCompletelyUnnamed: Boolean
- Definition Classes
- Nameable
-
final
def
isNamed: Boolean
- Definition Classes
- Nameable
-
def
isPriorityApplicable(namePriority: Byte): Boolean
- Definition Classes
- Nameable
-
def
isUnnamed: Boolean
- Definition Classes
- NameableByComponent → Nameable
- var keepMulSrc: Boolean
- val layer: LaneLayer
-
val
lockables: LinkedHashSet[() ⇒ Lock]
- Definition Classes
- FiberPlugin
- val logic: Handle[Logic { ... /* 12 definitions in type refinement */ }]
- var mulAt: Int
-
val
mulLock: Retainer
- Definition Classes
- MulReuse
-
val
name: String
- Definition Classes
- Nameable
-
def
overrideLocalName(name: String): MulPlugin.this.type
- Definition Classes
- Nameable
-
val
parentScope: ScopeStatement
- Definition Classes
- ContextUser
-
var
pluginEnabled: Boolean
- Definition Classes
- FiberPlugin
-
val
refOwner: RefOwnerType
- Definition Classes
- OwnableRef
- Annotations
- @DontName()
-
def
reflectNames(): Unit
- Definition Classes
- Nameable
-
def
retains(head: Any, tail: Any*): RetainerGroup
- Definition Classes
- FiberPlugin
-
def
retains(that: Seq[Any]): RetainerGroup
- Definition Classes
- FiberPlugin
-
def
rework[T](body: ⇒ T): T
- Definition Classes
- Area
- def rsp: Bits
- def rspAt: Int
-
val
scalaTrace: Throwable
- Definition Classes
- ScalaLocated
-
def
setCompositeName(nameable: Nameable, postfix: String, namePriority: Byte): MulPlugin.this.type
- Definition Classes
- Nameable
-
def
setCompositeName(nameable: Nameable, postfix: String, weak: Boolean): MulPlugin.this.type
- Definition Classes
- Nameable
-
def
setCompositeName(nameable: Nameable, postfix: String): MulPlugin.this.type
- Definition Classes
- Nameable
-
def
setCompositeName(nameable: Nameable, namePriority: Byte): MulPlugin.this.type
- Definition Classes
- Nameable
-
def
setCompositeName(nameable: Nameable, weak: Boolean): MulPlugin.this.type
- Definition Classes
- Nameable
-
def
setCompositeName(nameable: Nameable): MulPlugin.this.type
- Definition Classes
- Nameable
-
def
setHost(h: PluginHost): Unit
- Definition Classes
- FiberPlugin → Hostable
-
def
setLambdaName(isNameBody: ⇒ Boolean)(nameGen: ⇒ String): MulPlugin.this.type
- Definition Classes
- Nameable
-
def
setName(name: String, namePriority: Byte): MulPlugin.this.type
- Definition Classes
- Nameable
-
def
setName(name: String, weak: Boolean): MulPlugin.this.type
- Definition Classes
- Nameable
-
def
setName(name: String): MulPlugin.this.type
- Definition Classes
- Nameable
-
def
setNameAsWeak(): MulPlugin.this.type
- Definition Classes
- Nameable
-
def
setPartialName(name: String, namePriority: Byte, owner: Any): MulPlugin.this.type
- Definition Classes
- Nameable
-
def
setPartialName(name: String, namePriority: Byte): MulPlugin.this.type
- Definition Classes
- Nameable
-
def
setPartialName(name: String, weak: Boolean): MulPlugin.this.type
- Definition Classes
- Nameable
-
def
setPartialName(owner: Nameable, name: String, namePriority: Byte): MulPlugin.this.type
- Definition Classes
- Nameable
-
def
setPartialName(owner: Nameable, name: String, weak: Boolean): MulPlugin.this.type
- Definition Classes
- Nameable
-
def
setPartialName(name: String): MulPlugin.this.type
- Definition Classes
- Nameable
-
def
setPartialName(owner: Nameable, name: String): MulPlugin.this.type
- Definition Classes
- Nameable
-
def
setPartialName(owner: Nameable): MulPlugin.this.type
- Definition Classes
- Nameable
-
def
setRefOwner(that: Any): Unit
- Definition Classes
- OwnableRef
-
def
setScalaLocated(source: ScalaLocated): MulPlugin.this.type
- Definition Classes
- ScalaLocated
-
def
setWeakName(name: String): MulPlugin.this.type
- Definition Classes
- Nameable
-
def
setupRetain(l: ⇒ Lock): Unit
- Definition Classes
- FiberPlugin
- var splitWidthA: Int
- var splitWidthB: Int
-
val
subservices: ArrayBuffer[Any]
- Definition Classes
- FiberPlugin
- var sumAt: Int
- var sumsSpec: List[(Int, Int)]
-
def
toString(): String
- Definition Classes
- Area → Nameable → AnyRef → Any
-
def
unsetName(): MulPlugin.this.type
- Definition Classes
- Nameable
- var untilOffsetS0: Int
- var useRsUnsignedPlugin: Boolean
-
def
valCallback[T](ref: T, name: String): T
- Definition Classes
- ValCallbackRec → ValCallback
-
def
valCallbackOn(ref: Any, name: String, refs: Set[Any]): Unit
- Definition Classes
- ValCallbackRec
-
def
valCallbackRec(obj: Any, name: String): Unit
- Definition Classes
- Area → ValCallbackRec
-
def
withPrefix(prefix: String): FiberPlugin
- Definition Classes
- FiberPlugin
- var writebackAt: Int