chisel3.experimental

Package for experimental features, which may have their API changed, be removed, etc.

Because its contents won't necessarily have the same level of stability and support as non-experimental, you must explicitly import this package to use its contents.

Attributes

Members list

Packages

Implicit conversions from some Scala standard library types and Data

Implicit conversions from some Scala standard library types and Data

Attributes

Note

As this leans heavily on the experimental DataView feature, these APIs are experimental and subject to change

Type members

Classlikes

If mixed in with a user-defined type, Chisel will attempt to name instances of the type

If mixed in with a user-defined type, Chisel will attempt to name instances of the type

Attributes

Source
package.scala
Supertypes
class Object
trait Matchable
class Any

Generate prefixes from values of this type in the Chisel compiler plugin

Generate prefixes from values of this type in the Chisel compiler plugin

Users can mixin this trait to tell the Chisel compiler plugin to include the names of vals of this type when generating prefixes for naming Data and Mem instances. This is generally useful whenever creating a class that contains Data, Mem, or Module instances but does not itself extend Data or Module.

Attributes

See also

See the compiler plugin documentation for more information on this process.

Example
import chisel3._
import chisel3.experimental.AffectsChiselPrefix
class MyModule extends Module {
 // Note: This contains a Data but is not a named component itself
 class NotAData extends AffectsChiselPrefix {
   val value = Wire(Bool())
 }
 // Name with AffectsChiselPrefix:    "nonData_value"
 // Name without AffectsChiselPrefix: "value"
 val nonData = new NotAData
 // Name with AffectsChiselPrefix:    "nonData2_value"
 // Name without AffectsChiselPrefix: "value_1"
 val nonData2 = new NotAData
}
Source
package.scala
Supertypes
class Object
trait Matchable
class Any
Known subtypes
class Counter
final class Analog extends Element

Data type for representing bidirectional bitvectors of a given width

Data type for representing bidirectional bitvectors of a given width

Analog support is limited to allowing wiring up of Verilog BlackBoxes with bidirectional (inout) pins. There is currently no support for reading or writing of Analog types within Chisel code.

Given that Analog is bidirectional, it is illegal to assign a direction to any Analog type. It is legal to "flip" the direction (since Analog can be a member of aggregate types) which has no effect.

Analog types are generally connected using the bidirectional attach mechanism, but also support limited bulkconnect <>. Analog types are only allowed to be bulk connected once in a given module. This is to prevent any surprising consequences of last connect semantics.

Attributes

Note

This API is experimental and subject to change

Companion
object
Source
Analog.scala
Supertypes
class Element
class Data
trait InstanceId
class Object
trait Matchable
class Any
Show all
object Analog

Object that provides factory methods for Analog objects

Object that provides factory methods for Analog objects

Attributes

Note

This API is experimental and subject to change

Companion
class
Source
Analog.scala
Supertypes
class Object
trait Matchable
class Any
Self type
Analog.type
sealed trait AnyTargetable

Existential Type class for types that can be converted to a Target

Existential Type class for types that can be converted to a Target

This is useful for containers of Targetables.

Attributes

Companion
object
Source
Targetable.scala
Supertypes
class Object
trait Matchable
class Any
object AnyTargetable

Attributes

Companion
trait
Source
Targetable.scala
Supertypes
class Object
trait Matchable
class Any
Self type
object BaseModule

Attributes

Companion
class
Source
Module.scala
Supertypes
class Object
trait Matchable
class Any
Self type
BaseModule.type
abstract class BaseModule extends IsInstantiable, ReflectSelectable

Abstract base class for Modules, an instantiable organizational unit for RTL.

Abstract base class for Modules, an instantiable organizational unit for RTL.

Attributes

Companion
object
Source
Module.scala
Supertypes
trait Selectable
trait Selectable
trait InstanceId
class Object
trait Matchable
class Any
Show all
Known subtypes
class Class
class FixedIOExtModule[A]
class AutoBlackBox
class FixedIOModule[A]
class FixedIORawModule[A]
class CIRCTSRAM[T]
class TestHarness[M]
class RawModule
class AllUnitTests
class Module
class PRNG
class GaloisLFSR
trait LFSR
class Arbiter[T]
class LockingArbiter[T]
class LockingRRArbiter[T]
class RRArbiter[T]
class Pipe[T]
class Queue[T]
Show all
class BundleLiteralException(message: String) extends ChiselException

Attributes

Source
Aggregate.scala
Supertypes
class Exception
class Throwable
trait Serializable
class Object
trait Matchable
class Any
Show all

Attributes

Source
package.scala
Supertypes
class Object
trait Matchable
class Any
Self type
sealed trait ChiselSubtypeOf[A, B]

Attributes

Source
ChiselSubtypeOf.scala
Supertypes
class Object
trait Matchable
class Any

Attributes

Source
package.scala
Supertypes
class Object
trait Matchable
class Any
Self type
case object DeprecatedSourceInfo extends NoSourceInfo

For when source info isn't generated because the function is deprecated and we're lazy.

For when source info isn't generated because the function is deprecated and we're lazy.

Attributes

Source
SourceInfo.scala
Supertypes
trait Singleton
trait Product
trait Mirror
trait Serializable
trait Product
trait Equals
trait NoSourceInfo
trait SourceInfo
class Object
trait Matchable
class Any
Show all
Self type
final class HWTuple10[+A <: Data, +B <: Data, +C <: Data, +D <: Data, +E <: Data, +F <: Data, +G <: Data, +H <: Data, +I <: Data, +J <: Data] extends Bundle

Data equivalent of Scala's scala.Tuple9

Data equivalent of Scala's scala.Tuple9

Users may not instantiate this class directly. Instead they should use the implicit conversion from Tuple9 in chisel3.experimental.conversions

Attributes

Source
package.scala
Supertypes
class Bundle
class Record
trait Selectable
trait Aggregate
class Data
trait InstanceId
class Object
trait Matchable
class Any
Show all
final class HWTuple2[+A <: Data, +B <: Data] extends Bundle

Data equivalent of Scala's scala.Tuple2

Data equivalent of Scala's scala.Tuple2

Users may not instantiate this class directly. Instead they should use the implicit conversion from Tuple2 in chisel3.experimental.conversions

Attributes

Source
package.scala
Supertypes
class Bundle
class Record
trait Selectable
trait Aggregate
class Data
trait InstanceId
class Object
trait Matchable
class Any
Show all
final class HWTuple3[+A <: Data, +B <: Data, +C <: Data] extends Bundle

Data equivalent of Scala's scala.Tuple3

Data equivalent of Scala's scala.Tuple3

Users may not instantiate this class directly. Instead they should use the implicit conversion from Tuple3 in chisel3.experimental.conversions

Attributes

Source
package.scala
Supertypes
class Bundle
class Record
trait Selectable
trait Aggregate
class Data
trait InstanceId
class Object
trait Matchable
class Any
Show all
final class HWTuple4[+A <: Data, +B <: Data, +C <: Data, +D <: Data] extends Bundle

Data equivalent of Scala's scala.Tuple4

Data equivalent of Scala's scala.Tuple4

Users may not instantiate this class directly. Instead they should use the implicit conversion from Tuple4 in chisel3.experimental.conversions

Attributes

Source
package.scala
Supertypes
class Bundle
class Record
trait Selectable
trait Aggregate
class Data
trait InstanceId
class Object
trait Matchable
class Any
Show all
final class HWTuple5[+A <: Data, +B <: Data, +C <: Data, +D <: Data, +E <: Data] extends Bundle

Data equivalent of Scala's scala.Tuple5

Data equivalent of Scala's scala.Tuple5

Users may not instantiate this class directly. Instead they should use the implicit conversion from Tuple5 in chisel3.experimental.conversions

Attributes

Source
package.scala
Supertypes
class Bundle
class Record
trait Selectable
trait Aggregate
class Data
trait InstanceId
class Object
trait Matchable
class Any
Show all
final class HWTuple6[+A <: Data, +B <: Data, +C <: Data, +D <: Data, +E <: Data, +F <: Data] extends Bundle

Data equivalent of Scala's scala.Tuple6

Data equivalent of Scala's scala.Tuple6

Users may not instantiate this class directly. Instead they should use the implicit conversion from Tuple6 in chisel3.experimental.conversions

Attributes

Source
package.scala
Supertypes
class Bundle
class Record
trait Selectable
trait Aggregate
class Data
trait InstanceId
class Object
trait Matchable
class Any
Show all
final class HWTuple7[+A <: Data, +B <: Data, +C <: Data, +D <: Data, +E <: Data, +F <: Data, +G <: Data] extends Bundle

Data equivalent of Scala's scala.Tuple7

Data equivalent of Scala's scala.Tuple7

Users may not instantiate this class directly. Instead they should use the implicit conversion from Tuple7 in chisel3.experimental.conversions

Attributes

Source
package.scala
Supertypes
class Bundle
class Record
trait Selectable
trait Aggregate
class Data
trait InstanceId
class Object
trait Matchable
class Any
Show all
final class HWTuple8[+A <: Data, +B <: Data, +C <: Data, +D <: Data, +E <: Data, +F <: Data, +G <: Data, +H <: Data] extends Bundle

Data equivalent of Scala's scala.Tuple8

Data equivalent of Scala's scala.Tuple8

Users may not instantiate this class directly. Instead they should use the implicit conversion from Tuple8 in chisel3.experimental.conversions

Attributes

Source
package.scala
Supertypes
class Bundle
class Record
trait Selectable
trait Aggregate
class Data
trait InstanceId
class Object
trait Matchable
class Any
Show all
final class HWTuple9[+A <: Data, +B <: Data, +C <: Data, +D <: Data, +E <: Data, +F <: Data, +G <: Data, +H <: Data, +I <: Data] extends Bundle

Data equivalent of Scala's scala.Tuple9

Data equivalent of Scala's scala.Tuple9

Users may not instantiate this class directly. Instead they should use the implicit conversion from Tuple9 in chisel3.experimental.conversions

Attributes

Source
package.scala
Supertypes
class Bundle
class Record
trait Selectable
trait Aggregate
class Data
trait InstanceId
class Object
trait Matchable
class Any
Show all

Trait for Records that signals the compiler plugin to generate a typeName for the inheriting Record based on the parameter values provided to its constructor.

Trait for Records that signals the compiler plugin to generate a typeName for the inheriting Record based on the parameter values provided to its constructor.

Attributes

Example

Consider a Bundle which manually implements typeName:

class MyBundle(param1: Int, param2: Int)(gen: Data) extends Bundle {
 val foo = UInt(param1.W)
 val bar = UInt(param2.W)
 val data = gen
 override def typeName = s"MyBundle_${param1}_${param2}_${gen.typeName}"
}
(new MyBundle(3, 4)(SInt(3.W))).typeName // "MyBundle_3_4_SInt3"
(new MyBundle(1, 32)(Bool())).typeName   // "MyBundle_1_32_Bool"

An identical typeName implementation can be generated and provided with HasAutoTypename, making the manual implementation unnecessary:

class MyBundle(param1: Int, param2: Int)(gen: Data) extends Bundle with HasAutoTypename {
 val foo = UInt(param1.W)
 val bar = UInt(param2.W)
 val data = gen
}
(new MyBundle(3, 4)(SInt(3.W))).typeName // "MyBundle_3_4_SInt3"
(new MyBundle(1, 32)(Bool())).typeName   // "MyBundle_1_32_Bool"
Source
HasAutoTypename.scala
Supertypes
class Object
trait Matchable
class Any
Self type
trait HasTypeAlias

Attributes

Source
HasTypeAlias.scala
Supertypes
class Object
trait Matchable
class Any
Self type
trait Markers

Attributes

Source
HierarchyMarker.scala
Supertypes
class Object
trait Matchable
class Any
sealed trait NoSourceInfo extends SourceInfo

Attributes

Source
SourceInfo.scala
Supertypes
trait SourceInfo
class Object
trait Matchable
class Any
Known subtypes
trait OpaqueType extends Data

Indicates if this Record represents an "Opaque Type"

Indicates if this Record represents an "Opaque Type"

Opaque types provide a mechanism for user-defined types that do not impose any "boxing" overhead in the emitted FIRRTL and Verilog. You can think about an opaque type Record as a box around a single element that only exists at Chisel elaboration time. Put another way, if this trait is mixed into a Record, the Record may only contain a single element with an empty name and there will be no _ in the name for that element in the emitted Verilog.

Attributes

See also

OpaqueTypeSpec in Chisel's tests for example usage and expected output

Source
OpaqueType.scala
Supertypes
class Data
trait InstanceId
class Object
trait Matchable
class Any
Self type
case class RecordAlias

Wrapper object for a Record alias name. Primarily intended to provide an invocation point for source line locators, but also contains pertinent information to generating FIRRTL alias statements.

Wrapper object for a Record alias name. Primarily intended to provide an invocation point for source line locators, but also contains pertinent information to generating FIRRTL alias statements.

Value parameters

id

The desired name to generate an alias statement

strippedSuffix

In the case of forced coersion by Input or Output, the string to append to the end of the alias name. Takes the default value of "_stripped"

Attributes

Companion
object
Source
HasTypeAlias.scala
Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all
object RecordAlias

Attributes

Companion
class
Source
HasTypeAlias.scala
Supertypes
trait Product
trait Mirror
class Object
trait Matchable
class Any
Self type
sealed trait SourceInfo

Abstract base class for generalized source information.

Abstract base class for generalized source information.

Attributes

Companion
object
Source
SourceInfo.scala
Supertypes
class Object
trait Matchable
class Any
Known subtypes
object SourceInfo

Attributes

Companion
trait
Source
SourceInfo.scala
Supertypes
trait Sum
trait Mirror
class Object
trait Matchable
class Any
Self type
SourceInfo.type
case class SourceLine(filename: String, line: Int, col: Int) extends SourceInfo

For FIRRTL lines from a Scala source line.

For FIRRTL lines from a Scala source line.

Attributes

Note

A column == 0 indicates no column

Source
SourceInfo.scala
Supertypes
trait Serializable
trait Product
trait Equals
trait SourceInfo
class Object
trait Matchable
class Any
Show all
sealed trait Targetable[A]

Type class for types that can be converted to a Target

Type class for types that can be converted to a Target

See AnyTargetable for type-erased containers of Targetables

Attributes

Note

This uses type classes instead of inheritance because Hierarchy does not constrain its type parameter and thus not all instances of Hierarchy are Targetable.

Companion
object
Source
Targetable.scala
Supertypes
class Object
trait Matchable
class Any
object Targetable

Attributes

Companion
trait
Source
Targetable.scala
Supertypes
class Object
trait Matchable
class Any
Self type
Targetable.type
object Trace

The util that records the reference map from original Data/Module annotated in Chisel and final FIRRTL.

The util that records the reference map from original Data/Module annotated in Chisel and final FIRRTL.

Attributes

Example
 class Dut extends Module {
   val a = WireDefault(Bool())
   Trace.traceName(a)
 }
 val annos = (new ChiselStage).execute(Seq(ChiselGeneratorAnnotation(() => new Dut)))
 val dut = annos.collectFirst { case DesignAnnotation(dut) => dut }.get.asInstanceOf[CollideModule]
 // get final reference of `a` Seq(ReferenceTarget("Dut", "Dut", Seq.empty, "a", Seq.empty))
 val firrtlReferenceOfDutA = finalTarget(annos)(dut.a)
Source
Trace.scala
Supertypes
class Object
trait Matchable
class Any
Self type
Trace.type
case object UnlocatableSourceInfo extends NoSourceInfo

For when source info can't be generated because of a technical limitation, like for Reg because Scala macros don't support named or default arguments.

For when source info can't be generated because of a technical limitation, like for Reg because Scala macros don't support named or default arguments.

Attributes

Source
SourceInfo.scala
Supertypes
trait Singleton
trait Product
trait Mirror
trait Serializable
trait Product
trait Equals
trait NoSourceInfo
trait SourceInfo
class Object
trait Matchable
class Any
Show all
Self type
class VecLiteralException(message: String) extends ChiselException

Attributes

Source
Aggregate.scala
Supertypes
class Exception
class Throwable
trait Serializable
class Object
trait Matchable
class Any
Show all
object VecLiterals

This class provides the Lit method needed to define a Vec literal

This class provides the Lit method needed to define a Vec literal

Attributes

Source
package.scala
Supertypes
class Object
trait Matchable
class Any
Self type
object annotate

Attributes

Source
Annotation.scala
Supertypes
class Object
trait Matchable
class Any
Self type
annotate.type
object attach

Attributes

Source
Attach.scala
Supertypes
class Object
trait Matchable
class Any
Self type
attach.type
object dedupGroup

Attributes

Source
Annotation.scala
Supertypes
class Object
trait Matchable
class Any
Self type
dedupGroup.type
object doNotDedup

Marks that a module to be ignored in Dedup Transform in Firrtl pass

Marks that a module to be ignored in Dedup Transform in Firrtl pass

Attributes

Example
def fullAdder(a: UInt, b: UInt, myName: String): UInt = {
  val m = Module(new Module {
    val io = IO(new Bundle {
      val a = Input(UInt(32.W))
      val b = Input(UInt(32.W))
      val out = Output(UInt(32.W))
    })
    override def desiredName = "adder_" + myNname
    io.out := io.a + io.b
  })
  doNotDedup(m)
  m.io.a := a
  m.io.b := b
  m.io.out
}
class AdderTester extends Module
with ConstantPropagationTest {
val io = IO(new Bundle {
  val a = Input(UInt(32.W))
  val b = Input(UInt(32.W))
  val out = Output(Vec(2, UInt(32.W)))
})
io.out(0) := fullAdder(io.a, io.b, "mod1")
io.out(1) := fullAdder(io.a, io.b, "mod2")
}
Source
Annotation.scala
Supertypes
class Object
trait Matchable
class Any
Self type
doNotDedup.type
object firrtlComment

Use to leave a comment in the generated FIRRTL.

Use to leave a comment in the generated FIRRTL.

These can be useful for debugging complex generators. Note that these are comments and thus are ignored by the FIRRTL compiler.

Attributes

Example
firrtlComment("This is a comment")
val w = Wire(Bool())
firrtlComment("This is another comment")
Source
FirrtlComment.scala
Supertypes
class Object
trait Matchable
class Any
Self type

Attributes

Source
Annotation.scala
Supertypes
class Object
trait Matchable
class Any
Self type

Attributes

Source
Annotation.scala
Supertypes
class Object
trait Matchable
class Any
Self type

Attributes

Source
Annotation.scala
Supertypes
class Object
trait Matchable
class Any
Self type

Attributes

Source
Annotation.scala
Supertypes
class Object
trait Matchable
class Any
Self type
object noPrefix

Use to eliminate any existing prefixes within the provided scope.

Use to eliminate any existing prefixes within the provided scope.

Attributes

Example
val x1 = noPrefix {
 // Anything generated here will not be prefixed by anything outside this scope
}
Source
prefix.scala
Supertypes
class Object
trait Matchable
class Any
Self type
noPrefix.type
object prefix

Use to add a prefix to any components generated in the provided scope.

Use to add a prefix to any components generated in the provided scope.

Attributes

Example
val x1 = prefix("first") {
 // Anything generated here will be prefixed with "first"
}
val x2 = prefix(mysignal) {
 // Anything generated here will be prefixed with the name of mysignal
}
Source
prefix.scala
Supertypes
class Object
trait Matchable
class Any
Self type
prefix.type

Require that a Data can be annotated. It must be non-literal hardware.

Require that a Data can be annotated. It must be non-literal hardware.

Attributes

Source
package.scala
Supertypes
class Object
trait Matchable
class Any
Self type

Requires that a node is a chisel type (not hardware, "unbound")

Requires that a node is a chisel type (not hardware, "unbound")

Attributes

Source
package.scala
Supertypes
class Object
trait Matchable
class Any
Self type

Requires that a node is hardware ("bound")

Requires that a node is hardware ("bound")

Attributes

Source
package.scala
Supertypes
class Object
trait Matchable
class Any
Self type
object skipPrefix

Attributes

Source
prefix.scala
Supertypes
class Object
trait Matchable
class Any
Self type
skipPrefix.type

Deprecated classlikes

case class DoubleParam(value: Double) extends Param

Attributes

Deprecated
[Since version since] deprecatedCaseClass
Source
ExtModule.scala
Supertypes
trait Serializable
trait Product
trait Equals
class Param
class Object
trait Matchable
class Any
Show all
abstract class ExtModule(val params: Map[String, Param] = ..., val knownLayers: Seq[Layer] = ..., val requirements: Seq[String] = ...)

Defines a black box, which is a module that can be referenced from within Chisel, but is not defined in the emitted Verilog. Useful for connecting to RTL modules defined outside Chisel.

Defines a black box, which is a module that can be referenced from within Chisel, but is not defined in the emitted Verilog. Useful for connecting to RTL modules defined outside Chisel.

A variant of BlackBox, this has a more consistent naming scheme in allowing multiple top-level IO and does not drop the top prefix.

Attributes

Note

The parameters API is experimental and may change

Example

Some design require a differential input clock to clock the all design. With the xilinx FPGA for example, a Verilog template named IBUFDS must be integrated to use differential input:

IBUFDS #(.DIFF_TERM("TRUE"),
         .IOSTANDARD("DEFAULT")) ibufds (
 .IB(ibufds_IB),
 .I(ibufds_I),
 .O(ibufds_O)
);

To instantiate it, a BlackBox can be used like following:

import chisel3._
// Example with Xilinx differential buffer IBUFDS
class IBUFDS extends ExtModule(Map("DIFF_TERM" -> "TRUE", // Verilog parameters
                                  "IOSTANDARD" -> "DEFAULT"
                    )) {
 val O = IO(Output(Clock()))
 val I = IO(Input(Clock()))
 val IB = IO(Input(Clock()))
}
Deprecated
[Since version since] this has moved from `chisel3.experimental` to `chisel3`
Source
ExtModule.scala
Supertypes
class BaseModule
trait Selectable
trait Selectable
trait InstanceId
class Object
trait Matchable
class Any
Show all
Known subtypes
case class IntParam(value: BigInt) extends Param

Attributes

Deprecated
[Since version since] deprecatedCaseClass
Source
ExtModule.scala
Supertypes
trait Serializable
trait Product
trait Equals
class Param
class Object
trait Matchable
class Any
Show all
abstract class IntrinsicModule(intrinsicName: String, val params: Map[String, Param] = ...)

Attributes

Deprecated
[Since version Chisel 7.0.0] use Intrinsic and IntrinsicExpr instead, intrinsic modules are deprecated
Source
IntrinsicModule.scala
Supertypes
class BaseModule
trait Selectable
trait Selectable
trait InstanceId
class Object
trait Matchable
class Any
Show all
abstract class Param

Parameters for BlackBoxes

Parameters for BlackBoxes

Attributes

Deprecated
[Since version since] deprecatedCaseClass
Source
ExtModule.scala
Supertypes
class Object
trait Matchable
class Any
Known subtypes
class DoubleParam
class IntParam
class RawParam
class StringParam
case class PrintableParam(value: Printable, context: BaseModule) extends Param

Creates a parameter from the Printable's resulting format String

Creates a parameter from the Printable's resulting format String

Attributes

Deprecated
[Since version since] deprecatedCaseClass
Source
ExtModule.scala
Supertypes
trait Serializable
trait Product
trait Equals
class Param
class Object
trait Matchable
class Any
Show all
case class RawParam(value: String) extends Param

Unquoted String

Unquoted String

Attributes

Deprecated
[Since version since] deprecatedCaseClass
Source
ExtModule.scala
Supertypes
trait Serializable
trait Product
trait Equals
class Param
class Object
trait Matchable
class Any
Show all
case class StringParam(value: String) extends Param

Attributes

Deprecated
[Since version since] deprecatedCaseClass
Source
ExtModule.scala
Supertypes
trait Serializable
trait Product
trait Equals
class Param
class Object
trait Matchable
class Any
Show all

Types

type ClonePorts = ClonePorts

A record containing the results of CloneModuleAsRecord The apply method is retrieves the element with the supplied name.

A record containing the results of CloneModuleAsRecord The apply method is retrieves the element with the supplied name.

Attributes

Source
package.scala

Attributes

Source
package.scala

Value members

Concrete fields

Attributes

Source
package.scala

Deprecated fields

val FlatIO: FlatIO.type

Attributes

Deprecated
[Since version Chisel 6.0] FlatIO has moved to package chisel3
Source
package.scala

Implicits

Implicits

implicit def fromBigIntToIntParam(x: BigInt): IntParam

Attributes

Source
package.scala
implicit def fromDoubleToDoubleParam(x: Double): DoubleParam

Attributes

Source
package.scala
implicit def fromIntToIntParam(x: Int): IntParam

Attributes

Source
package.scala
implicit def fromLongToIntParam(x: Long): IntParam

Attributes

Source
package.scala
implicit def fromStringToStringParam(x: String): StringParam

Attributes

Source
package.scala