FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

ScalaのインタプリタAmmoniteでChisel3を動作させる試行

Chise(というかScala)を動かすために、わざわざbuild.sbtを作るのが面倒くさい。簡単にChiselを扱うことができないか、いろいろ調査していたら、Ammoniteというインタプリタあるのを発見した。

ammonite.io

Ammoniteのインストールは以下のように実行する。

注 : 以下のコードでは動かなかった。

sudo sh -c '(echo "#!/usr/bin/env sh" && curl -L https://github.com/lihaoyi/Ammonite/releases/download/1.8.1/2.12-1.8.1) > /usr/local/bin/amm && chmod +x /usr/local/bin/amm' && amm

注 : こっちの方が良さそう。

sudo sh -c '(echo "#!/usr/bin/env sh" && curl -L https://github.com/lihaoyi/Ammonite/releases/download/1.6.3/2.11-1.6.3) > /usr/local/bin/amm && chmod +x /usr/local/bin/amm' && amm

Ammoniteのページには2.13を使うように書いてあったが、Chiselのバージョンに合わせて2.12に変更した。

以下のGitHubを参考にした。

github.com

Ammoniteで動かすScalaのコードを書くには、以下のようにしてパッケージをインストールするらしい。

  • GCD.scala
#!/usr/bin/env amm

import $ivy.`edu.berkeley.cs::chisel3:3.2.+`, chisel3._
import $ivy.`edu.berkeley.cs::chisel3:3.2.+`, chisel3.util._
import $ivy.`edu.berkeley.cs::chisel3:3.2.+`, chisel3.Bool

Chisel3の実装は普通のChiselと同様にする。mainの実装は以下のようにするらしい。

@main
def main(args: String*) = chisel3.Driver.execute(args.toArray, () => new GCD)

しかし、コンパイルしてみるとエラーが発生した。これは何だろう?なんでBundleが認識できないんだ?

Main.scala:29: value loadingValues is not a member of chisel3.Bundle
  when(io.loadingValues) {
          ^
Main.scala:30: value value1 is not a member of chisel3.Bundle
    x := io.value1
            ^
Main.scala:31: value value2 is not a member of chisel3.Bundle
    y := io.value2
            ^
Main.scala:34: value outputGCD is not a member of chisel3.Bundle
  io.outputGCD := x
     ^
Main.scala:35: value outputValid is not a member of chisel3.Bundle
  io.outputValid := y === 0.U
     ^
Compilation Failed

どうやら、実行するディレクトリの直下にammを置いていないと実行できない? 直下にammあるとVerilogを生成できた。

$ ./GCD.scala
[info] [0.002] Elaborating design...
[info] [0.921] Done elaborating.
Total FIRRTL Compile Time: 419.3 ms
ChiselExecutionSuccess(
  Some(
    Circuit(
      "GCD",
      ArrayBuffer(
        DefModule(
...

うーんやはり1.6.3のAmmoniteでないと動かないようだ。