是否有一个简单的示例说明如何从 Chisel3 模块生成 verilog?

Is there a simple example of how to generate verilog from Chisel3 module?

我正在寻找在 Verilog 中转换简单 Chisel3 模块的简单方法。

我取的是chisel官网给出的Gcd源码

  import chisel3._

  class GCD extends Module {
    val io = IO(new Bundle {
      val a  = Input(UInt(32.W))
      val b  = Input(UInt(32.W))
      val e  = Input(Bool())
      val z  = Output(UInt(32.W))
      val v  = Output(Bool())
    })
    val x = Reg(UInt(32.W))
    val y = Reg(UInt(32.W))
    when (x > y) {
      x := x -% y
    }.otherwise {
      y := y -% x
    }
    when (io.e) {
      x := io.a
      y := io.b
    }
    io.z := x
    io.v := y === 0.U
  }

我找不到如何编写 build.sbt 和 class 实例化以在 Verilog 中转换它。

感谢您对 Chisel 的关注!我们通常鼓励人们使用我们的 chisel-template repo 作为 Chisel3 项目的起点:https://github.com/ucb-bar/chisel-template

如果你想做最简单的事情。创建这个 build.sbt 并将其放在项目的根目录中。

scalaVersion := "2.13.8"

addCompilerPlugin("edu.berkeley.cs" % "chisel3-plugin" % "3.5.3" cross CrossVersion.full)

libraryDependencies += "edu.berkeley.cs" %% "chisel3" % "3.5.3"

将上面的GCD源码放在GCD.scala中,在文件中添加如下内容:

import chisel3.stage.ChiselStage

object GCDDriver extends App {
  (new ChiselStage).emitVerilog(new GCD, args)
}

然后您可以通过 运行: sbt "runMain GCDDriver" 生成 Verilog。默认输出目录为当前目录。

您可以通过 运行 查看可用的命令行选项 sbt "runMain GCDDriver --help" 例如 --target-dir 将让您更改目标目录