Chisel3:如何同时获取verilog、cpp和vcd文件

Chisel3: How to get verilog,cpp and vcd files simultaneously

我是凿子新手。未来几天我会在我的项目中使用它,我正在努力熟悉这个库。

在使用 Chisel-tutorials 之后,我对 chisel 的工作原理有了更好的了解。在教程中,一切都以一种让初学者更容易的方式提供(我想这就是教程的目的!)。

现在,我想进入下一部分,在那里我想开发自己的小项目,并从一个简单的 Mux4.scala 锉刀。 (我正在从 获取正确版本的 Mux4 模块代码和测试器)。 我刚刚在 Mux4.scala

的末尾添加了以下行
object Mux4Driver extends App {
  chisel3.Driver.execute(args, () => new Mux4(32))
} 

直接获取verilog代码

我已将 scala 文件放在 src/main/scala/ 中,将测试程序放在 src/test/scala/ 中。

这是我遇到问题的地方。正如 jkoenig 所指出的,我可以通过在根目录中使用命令 sbt "run-main Mux4Driver" 运行 我的代码。这样做我得到三个文件,Mux4.firMux4.vMux4.anno

  1. 但是我怎样才能得到我用

    得到的各种文件(下面的截图)

    TESTER_BACKENDS=verilator ./run-examples.sh GCD

当我实现自己的模块时。(我知道我可以通过 verilator 传递 verilog 文件来获取 cpp 文件,但是有没有像教程中那样同时获取所有文件的圆滑方法 [应该有一种方式,但我就是想不通])

(我正在为我的项目使用 chisel-template)。

  1. 我了解到在编写模块之后,似乎需要 sbt 知识才能成功 运行 您的代码并生成所需的文件。我想了解如何使用 sbt 来组织我的项目,就像在凿子教程中一样,并使用单个命令 运行 它们(如 ./run-examples.sh mymodule)。

我已经对上述问题进行了研究,但无法弄清楚。如果您能为像我这样的新用户编写一些关于如何处理您自己的项目的步骤,我将不胜感激。

编辑:

在尝试下面的答案中提到的命令时,我遇到了以下错误:

在尝试 --help 时,我的选择与您建议的不同。在将我的 --help 输出与输出 here 匹配时,我发现我的输出中没有测试器选项。

这是我使用的 Chisel(使用 Chisel3)或 sbt 版本的问题吗?

这是针对问题的变化而修改的。

chisel-template repo 是如何组织进一步开发工作的合理示例。但根据您的问题,我建议您使用两种不同的方法之一来调用单元测试。

class GCDTester extends ChiselFlatSpec {
  "GCD" should "calculate proper greatest common denominator" in {
    iotesters.Driver.execute(Array(), () => new GCD) {
      c => new GCDUnitTester(c)
    } should be (true)
  }
}

object GCDMain extends App {
  iotesters.Driver.execute(args, () => new GCD) {
    c => new GCDUnitTester(c)
  }
}

一个 重要 与您问题中的代码的区别是上面引用的驱动程序是 chisel3.iotesters.Driver 而不是 chisel3.Driver。 您可以将命令行参数与其中任何一个一起使用,例如: 将 --help 添加到参数中,例如

iotesters.Driver.execute(Array("--help"), () => new GCD) {

和 运行 你的测试,或者 运行 来自第二个例子的 main:

sbt 'runMain examples.GCDMain --help'

无论哪种方式,您都会看到大量可用选项。 您对

感兴趣
  -tbn, --backend-name <firrtl|verilator|vcs>
                           backend to use with tester, default is firrtl

也许

  -fiwv, --fint-write-vcd  writes vcd execution log, filename will be base on top

您可以添加这些参数中的任何一个,就像添加 --help 一样。所以到 运行 verilator

iotesters.Driver.execute(Array("--backend-name", "verilator"), () => new GCD) {

和 运行 你的测试,或者 运行 来自第二个例子的 main:

sbt 'runMain examples.GCDMain --backend-name verilator'

chisel.Driver只支持iotesters.Driver的部分选项,不包含verilator

要获得所需的所有文件,您需要运行 对需要某种测试工具的电路进行模拟。 iotesters.Driver.execute 将调用您的测试工具,这将创建您感兴趣的文件(当 运行 和 --backend-name verilator 时)。 chisel.Driver.execute 仅详细说明电路,不运行 仿真。

注意:虽然--fint-write-vcd只是在使用解释器时获取VCD输出文件,我相信默认使用verilator后端输出vcd。