【问题标题】:Is it possible to test chisel Reg() in console?是否可以在控制台中测试凿子 Reg()?
【发布时间】:2019-11-15 22:27:56
【问题描述】:

为了测试 Chisel 代码,我在我的项目目录中启动了一个控制台 sbt,然后是 scala,文件 build.sbt 所在的位置。我可以导入 chisel3 库:

$ cd myproject
$ sbt
sbt:myproject> console
scala> import chisel3._
import chisel3._

然后我可以测试一些数据类型的凿子代码,例如:

scala> val plop = "b01010101".U(20.W)
plop: chisel3.UInt = UInt<20>(85)

但我可以测试 Reg() 或其他 Module() 元素:

scala> val plopReg = RegInit(23.U(24.W))
java.lang.IllegalArgumentException: requirement failed: must be inside Builder context
  at scala.Predef$.require(Predef.scala:281)
  at chisel3.internal.Builder$.dynamicContext(Builder.scala:232)
  at chisel3.internal.Builder$.currentClock(Builder.scala:308)
  at chisel3.internal.Builder$.forcedClock(Builder.scala:318)
  at chisel3.RegInit$.apply(Reg.scala:155)
  at chisel3.RegInit$.apply(Reg.scala:173)
  ... 36 elided

是否有在控制台中测试这些凿子元素的提示?还是强制写文件代码源?

【问题讨论】:

  • 您可以在控制台中使用它们,但您需要在 Module 上下文中实例化所有硬件类型(RegWire 等)。在github.com/freechipsproject/chisel-bootcamp 中使用ammonite 兼容的shell (almond+jupyter) 完成了类似的事情。

标签: scala sbt chisel


【解决方案1】:

这里发生的情况是UInt 是凿子类型,而Reg 是硬件类型。

您只能在模块内使用硬件类型。我经常在控制台上做如下的事情来和他们一起玩:

import chisel3._
import chisel3.stage.{ChiselStage, ChiselGeneratorAnnotation}
import chisel3.util.Cat

import firrtl.EmittedCircuitAnnotation

class Foo extends MultiIOModule {
  val in = IO(Input(Bool()))
  val out = IO(Output(Bool()))

  val tmp = RegNext(~in)

  out := tmp
}

val args = Array(
  "-X", "verilog",
  "-E", "high",
  "-E", "middle",
  "-E", "low",
  "-E", "verilog")

(new ChiselStage).execute(args, Seq(ChiselGeneratorAnnotation(() => new Foo)))

然后您可以查看 chisel3 顶级目录中的各种输出。

更多信息

具体来说,UInt(以及类似的东西)是生成类的工厂方法(从技术上讲,UInt 实际上是一个扩展 UIntFactory 的对象)。当您执行UInt(4.W) 时,即构建了一个新的UInt。你应该能够在任何你想要的地方构建新的类,这就是它在控制台上工作的原因。

但是,当您执行Reg(UInt(4.W)) 时,它会与细化过程中使用的全局可变状态进行交互,以将寄存器与特定模块相关联。这个全局可变状态存储在Builder 中。您收到的错误来自Builder,您在其中尝试使用其方法,而无需先进入模块。

【讨论】:

    猜你喜欢
    • 2019-04-07
    • 1970-01-01
    • 1970-01-01
    • 2020-04-03
    • 1970-01-01
    • 2019-02-25
    • 2013-06-06
    • 2011-09-26
    • 2016-02-16
    相关资源
    最近更新 更多