【问题标题】:chisel "Enum(UInt(), 5)" failed凿子“枚举(UInt(),5)”失败
【发布时间】:2018-10-21 13:58:16
【问题描述】:

当我尝试使用 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.+"

请帮忙!

【问题讨论】:

    标签: scala chisel


    【解决方案1】:

    把我的评论变成一个完整的答案,这样对未来的人来说更明显。

    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
    

    【讨论】:

    • 谢谢。我已成功导入“开关”。但是请注意,我们应该同时导入“chisel3.utils.switch”和“chisel3.utils.SwitchContext”来启用“switch”和“chisel3.utils.is”来启用“is”
    • 好点,我认为人们在使用switch时通常只使用import chisel3.util._
    • 是的,我几分钟前才知道,哈哈。似乎下划线会导入所有对象和类。
    【解决方案2】:

    默认情况下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)
    

    【讨论】:

    • 感谢您的回复!但是,我有这一行“import chisel3._”。这不应该涵盖枚举类吗?
    • @EricWu 看来,它不是出于某种原因。
    • 现在我遇到了其他问题...我无法使用参数“switch” --> not found: value switch
    • 在 chisel3 中,许多实用程序被移入 chisel3.util,试试 import chisel3.util.Enum。如果有疑问,您可以搜索 Chisel3 ScalaDoc:chisel.eecs.berkeley.edu/api/latest/index.html。请注意,ScalaDoc 包含包 Chisel 作为 Chisel2 的兼容性包装,您应该更喜欢 chisel3 中的内容。另请注意,您应该从 chisel3.whatever 而不是 chisel3.core.whatever 导入内容
    • 第二个上面的@jkoenig,但更强烈的是:只有在处理用 Chisel2 编写的遗留代码时,才应该使用Chisel 兼容层。任何新代码都应始终使用chisel3
    猜你喜欢
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    相关资源
    最近更新 更多