43 lines
1009 B
Scala
43 lines
1009 B
Scala
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
/** Enum generators, allowing circuit constants to have more meaningful names.
|
|
*/
|
|
|
|
package chisel3.util
|
|
|
|
import chisel3._
|
|
|
|
/** Defines a set of unique UInt constants
|
|
*
|
|
* Unpack with a list to specify an enumeration. Usually used with [[switch]] to describe a finite
|
|
* state machine.
|
|
*
|
|
* @example {{{
|
|
* val state_on :: state_off :: Nil = Enum(2)
|
|
* val current_state = WireDefault(state_off)
|
|
* switch (current_state) {
|
|
* is (state_on) {
|
|
* ...
|
|
* }
|
|
* is (state_off) {
|
|
* ...
|
|
* }
|
|
* }
|
|
* }}}
|
|
*/
|
|
trait Enum {
|
|
|
|
/** Returns a sequence of Bits subtypes with values from 0 until n. Helper method. */
|
|
protected def createValues(n: Int): Seq[UInt] =
|
|
(0 until n).map(_.U((1.max(log2Ceil(n))).W))
|
|
|
|
/** Returns n unique UInt values
|
|
*
|
|
* @param n Number of unique UInt constants to enumerate
|
|
* @return Enumerated constants
|
|
*/
|
|
def apply(n: Int): List[UInt] = createValues(n).toList
|
|
}
|
|
|
|
object Enum extends Enum
|