凿子“ Enum(UInt(),5)”失败

时间:2018-10-21 13:58:16

标签: scala chisel

当我尝试使用Chisel来构建FSM时,我使用了Enum(),如Chisel教程所述。但是,我遇到了此类错误。

我的代码:

val sIdle::s1::s2::s3::s4::Nil = Enum(UInt(), 5)

但是,当我执行 sbt run 时,它打印出来了

[error] /Users/xxx.scala:28:3: object java.lang.Enum is not a value
[error]   Enum(UInt(),5)
[error]   ^

我的构建sbt文件是

scalaVersion := "2.11.12"
resolvers ++= Seq(
Resolver.sonatypeRepo("snapshots"),
Resolver.sonatypeRepo("releases")
)
libraryDependencies += "edu.berkeley.cs" %% "chisel3" % "3.1.+"

请帮助!

2 个答案:

答案 0 :(得分:2)

将我的评论变成完整的答案,这样对以后的人来说更明显。

chisel3中,Chisel2中package Chisel中的许多东西都移到了package chisel3.util中。您可以使用ScalaDoc API搜索诸如Enumswitch之类的东西,以查看它们的位置(以及其他相关文档)。

在chisel3中,Enum(type, size)也被弃用,例如Enum(size)。您应该使用:

import chisel3._
import chisel3.util.Enum

val sIdle :: s1 :: s2 :: s3 :: s4 :: Nil = Enum(5)

我还想提到我们有一个新的“ ChiselEnum”,它提供了比现有API更多的功能,并且我们打算进一步扩展其功能。如果您从源代码构建chisel3,则可以使用它,也可以等待3.2的发布。新枚举的示例:

import chisel3._
import chisel3.experimental.ChiselEnum

object EnumExample extends ChiselEnum {
  val e0, e1, e2 = Value // Assigns default values starting at 0

  val e100 = Value(100.U) // Can provide specific values if desired
}
import EnumExample._

val myState = Reg(EnumExample()) // Can give a register the actual type instead of just UInt
myState := e100

答案 1 :(得分:1)

默认情况下,Enum引用java.lang.Enum。 Chisel有自己的Enum对象,在使用之前必须先导入该对象:

import Chisel.Enum
import Chisel.UInt

val sIdle::s1::s2::s3::s4::Nil = Enum(UInt(), 5)

// Or an alternative way to unpack a List:
// val List(sIdle, s1, s2, s3, s4) = Enum(UInt(), 5)