当我尝试使用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.+"
请帮助!
答案 0 :(得分:2)
将我的评论变成完整的答案,这样对以后的人来说更明显。
在chisel3
中,Chisel2中package Chisel
中的许多东西都移到了package chisel3.util
中。您可以使用ScalaDoc API搜索诸如Enum
或switch
之类的东西,以查看它们的位置(以及其他相关文档)。
在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)