summaryrefslogtreecommitdiff
path: root/src/main/scala/Chisel/util/Enum.scala
blob: 3e2b038fb4129656a60e9107ed24ad48fb455fbf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// See LICENSE for license details.

/** Enum generators, allowing circuit constants to have more meaningful names.
  */

package Chisel

object Enum {
  /** Returns a sequence of Bits subtypes with values from 0 until n. Helper method. */
  private def createValues[T <: Bits](nodeType: T, n: Int): Seq[T] = (0 until n).map(x => nodeType.fromInt(x))

  /** create n enum values of given type */
  def apply[T <: Bits](nodeType: T, n: Int): List[T] = createValues(nodeType, n).toList

  /** create enum values of given type and names */
  def apply[T <: Bits](nodeType: T, l: Symbol *): Map[Symbol, T] = (l zip createValues(nodeType, l.length)).toMap

  /** create enum values of given type and names */
  def apply[T <: Bits](nodeType: T, l: List[Symbol]): Map[Symbol, T] = (l zip createValues(nodeType, l.length)).toMap
}