この記事は、 NetBSD Advent Calendar 2018の20日目の記事です。
はじめに
MIPSの 命令セットアーキテクチャーと実装が オープンソースになるような時代が来るとは思っていませんでした。 これもRISC-Vへの期待に影響があるのかもしれません。
Chiselと言うハードウェア記述言語は、そのRISC-Vの代表的な実装である Rocket chip の多くの部分を書くのに使われているものです。
今回は、Rocket chipは大規模過ぎるので、Chiselのチュートリアルである Chisel TutorialsのChiselコードをVerilogに変換して、 verilatorでのシミュレーション実行もしてみたいと思います。
私はこれからChiselで書いてみたい回路があるのですが、 NetBSDで生活して良くあるのは、そもそも環境が整わない、整ったと思ったら誤作動している と行ったことなので、既存の正しく動くことの分かっているものが、同じように動くことを 確認するのは大切です。
Chiselの環境の準備
Chiselは、ScalaというJava Virtual Machine (JVM)で動く処理系で書かれています。 Chisel自体が、Scala言語のドメイン固有言語(DSL)になっています。
Chiselの処理系は、sbt (pkgsrc/lang/scala-sbt
)を使って各環境ごとに
それぞれ用意します。
ですので、/usr/local
以下にインストールしておくといったことは
一般的ではないようです。
まずは、pkgsrc.lang/scala-sbt
のインストールですが、
NetBSD/amd64のネイティブなOpenJDK 8ではうまく動きません。
Java Native Access (JNA)
がサポートされていないのが
いけませんし、他にも理由はありそうです。
pkgsrc/lang/openjdk8
をちゃんと直さないといけません…。
ですが、ここでは先を急いでpkgsrc/lang/oracle-jdk8
を
使うことにしてしまいます。
java.sun.com
からLinux/x86_64用のJREとJDKの配布物をダウンロードして$DISTDIR
に配置した上で、以下のように実行すれば良いでしょう。
# cd /usr/pkgsrc/lang/scala-sbt # make ACCEPTABLE_LICENSES=oracle-binary-code-license installこれで、Oracle JDKを追加でインストールしてsbtはそれを使うようにできます。
pkgsrc/lang/openjdk8
と共存できるので、
アンインストールは不要です。
Chisel Tutorialsから試してみます。chisel-tutorial
の
Gitリポジトリーをクローンし、まずはFIRRTLでシミュレーションをしてみます。
Chisel Tutorialsの課題の加算器の解答例をシミュレーションしてみます。
初回は、Chisel自体のインストールも実行されます。
$ git clone git@github.com:ucb-bar/chisel-tutorial.git $ cd chisel-tutorial $ sbt -v "test:runMain solutions.Launcher Adder" (snip) [info] Loading settings from build.sbt ... [info] Set current project to chisel-tutorial (in build file:/home/ryoon/chisel/chisel-tutorial/) [warn] Multiple main classes detected. Run 'show discoveredMainClasses' to see the list [info] Running solutions.Launcher Adder Starting tutorial Adder [info] [0.002] Elaborating design... [info] [1.010] Done elaborating. Total FIRRTL Compile Time: 508.3 ms Total FIRRTL Compile Time: 82.5 ms file loaded in 0.149673865 seconds, 6 symbols, 2 statements [info] [0.001] SEED 1545137294717 test Adder Success: 10 tests passed in 15 cycles in 0.020284 seconds 739.49 Hz [info] [0.007] RAN 10 CYCLES PASSED Tutorials passing: 1 [success] Total time: 4 s, completed 2018/12/18 21:48:16どうやら、テストまで成功したようです。
次には、Verilogのコードを生成し、Verilatorによるシミュレーションも実施してみます。
ですが、そうやらChiselは、GNU makeがmake
と言う名前でPATH
にあることを前提にしているようです。
Chiselをbuildし直したら良いのでしょうが、ここでは簡便に/usr/pkg/bin/gmake
をmake
としてシンボリックリンクを作成してしまいます。
# cd /usr/pkgsrc/cad/verilator # make install $ ln -s /usr/pkg/bin/gmake make $ PATH=./:$PATH sbt -v "test:runMain solutions.Launcher Adder --backend-name verilator Archiving VAdder__ALL.a ... ar r VAdder__ALL.a VAdder__ALLcls.o VAdder__ALLsup.o ranlib VAdder__ALL.a c++ Adder-harness.o verilated.o verilated_vcd_c.o VAdder__ALL.a -o VAdder -lm -lstdc++ make: Leaving directory '/home/ryoon/chisel/chisel-tutorial/test_run_dir/solutions/Adder' sim start on brownie at Tue Dec 18 21:56:19 2018 inChannelName: 00029411.in outChannelName: 00029411.out cmdChannelName: 00029411.cmd STARTING test_run_dir/solutions/Adder/VAdder [info] [0.001] SEED 1545137775286 Enabling waves.. Exit Code: 0 [info] [0.022] RAN 10 CYCLES PASSED Tutorials passing: 1 [success] Total time: 6 s, completed 2018/12/18 21:56:19テストまで完了し成功したようです。 ここで、Verilogのソースコードは
test_run_dir/solutions/Adder/Adder.v
に
生成されます。
これをVerilatorでシミュレーションした際の波形ファイルは、test_run_dir/solutions/Adder/Adder.vcd
に
生成されます。
pkgsrc/cad/gtkwave
で波形を見ることができます。
# cd /usr/pkgsrc/cad/gtkwave # make install $ gtkwave test_run_dir/solutions/Adder/Adder.vcdですが、今の私には波形が正しいかを判断することはできません…。
Chiselでの回路の記述と確認は、どうにかNetBSD/amd64上でも実施できそうです。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。