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