chisel6.4.0 < Back


# Packages

-  package root
  Definition Classes
    root
-  package chisel3

  This package contains the main chisel3 API.

  This package contains the main chisel3 API.

  Definition Classes
    root
-  package choice

  This package contains Chisel language definitions for describing configuration options and their accepted values.

  This package contains Chisel language definitions for describing configuration options and their accepted values.

  Definition Classes
    chisel3
- Case
- Group
- ModuleChoice

o

chisel3.choice

# ModuleChoice

###

#### object ModuleChoice extends SourceInfoDoc

Source
  ModuleChoice.scala

Linear Supertypes
SourceInfoDoc, AnyRef, Any

Ordering

1. Grouped
2. Alphabetic
3. By Inheritance

Inherited

1. ModuleChoice
2. SourceInfoDoc
3. AnyRef
4. Any

1. Hide All
2. Show All

Visibility

1. Public
2. Protected

### Value Members

1.  final def !=(arg0: Any): Boolean
   Definition Classes
     AnyRef → Any
2.  final def ##: Int
   Definition Classes
     AnyRef → Any
3.  final def ==(arg0: Any): Boolean
   Definition Classes
     AnyRef → Any
4.  macro def apply[T <: Data](default: => FixedIOBaseModule[T])(choices: => Seq[(Case, () => FixedIOBaseModule[T])]): T

   A wrapper method for Module instantiation based on option choices.

   A wrapper method for Module instantiation based on option choices. (necessary to help Chisel track internal state).

   default

     the Module to instantiate if no module is specified

   choices

     the mapping from cases to module generators

   returns

     the input module `m` with Chisel metadata properly set

   Exceptions thrown

     `java.lang.IllegalArgumentException` if the cases do not belong to the same option.

   See also

     chisel3.choice.Group on how to declare the options for the alternatives. Example: ```val module = ModuleChoice(new DefaultModule)(Seq( Platform.FPGA -> new FPGATarget, Platform.ASIC -> new ASICTarget )) `````````

5.  final def asInstanceOf[T0]: T0
   Definition Classes
     Any
6.  def clone(): AnyRef
   Attributes
     protected[lang]
   Definition Classes
     AnyRef
   Annotations
     @throws(classOf[java.lang.CloneNotSupportedException]) @native()
7.  def do_apply[T <: Data](default: => FixedIOBaseModule[T], choices: Seq[(Case, () => FixedIOBaseModule[T])])(implicit sourceInfo: SourceInfo): T

8.  final def eq(arg0: AnyRef): Boolean
   Definition Classes
     AnyRef
9.  def equals(arg0: AnyRef): Boolean
   Definition Classes
     AnyRef → Any
10.  def finalize(): Unit
    Attributes
      protected[lang]
    Definition Classes
      AnyRef
    Annotations
      @throws(classOf[java.lang.Throwable])
11.  final def getClass(): Class[_ <: AnyRef]
    Definition Classes
      AnyRef → Any
    Annotations
      @native()
12.  def hashCode(): Int
    Definition Classes
      AnyRef → Any
    Annotations
      @native()
13.  final def isInstanceOf[T0]: Boolean
    Definition Classes
      Any
14.  final def ne(arg0: AnyRef): Boolean
    Definition Classes
      AnyRef
15.  final def notify(): Unit
    Definition Classes
      AnyRef
    Annotations
      @native()
16.  final def notifyAll(): Unit
    Definition Classes
      AnyRef
    Annotations
      @native()
17.  final def synchronized[T0](arg0: => T0): T0
    Definition Classes
      AnyRef
18.  def toString(): String
    Definition Classes
      AnyRef → Any
19.  final def wait(): Unit
    Definition Classes
      AnyRef
    Annotations
      @throws(classOf[java.lang.InterruptedException])
20.  final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
      AnyRef
    Annotations
      @throws(classOf[java.lang.InterruptedException])
21.  final def wait(arg0: Long): Unit
    Definition Classes
      AnyRef
    Annotations
      @throws(classOf[java.lang.InterruptedException]) @native()

### Inherited from SourceInfoDoc

### Inherited from AnyRef

### Inherited from Any

### Ungrouped

### SourceInfoTransformMacro

These internal methods are not part of the public-facing API!
The equivalent public-facing methods do not have the `do_` prefix or have the same name. Use and look at the documentation for those. If you want left shift, use `<<`, not `do_<<`. If you want conversion to a Seq of Bools look at the `asBools` above, not the one below. Users can safely ignore every method in this group!
🐉🐉🐉 Here be dragons... 🐉🐉🐉
These `do_X` methods are used to enable both implicit passing of SourceInfo while also supporting chained apply methods. In effect all "normal" methods that you, as a user, will use in your designs, are converted to their "hidden", `do_*`, via macro transformations. Without using macros here, only one of the above wanted behaviors is allowed (implicit passing and chained applies)---the compiler interprets a chained apply as an explicit 'implicit' argument and will throw type errors.
The "normal", public-facing methods then take no SourceInfo. However, a macro transforms this public-facing method into a call to an internal, hidden `do_*` that takes an explicit SourceInfo by inserting an `implicitly[SourceInfo]` as the explicit argument.