コードのテスト
- iotesterを使ってターミナル上でのテストする場合は次のコマンドを実行します
sbt 'test:runMain ProjectNameMain'
ProjectNameMain
の部分は先に説明したとおりです。複数のテストを行い時は次のようにテストを指示します。
sbt test
TestClassNameMain
でクラスを指定してテストもできます。
sbt 'testOnly TestClassNameMain'
VCDのダンプ
VCDファイルをダンプできますので波形を確認できます。全てのプリミティブをダンプしてしまうので、規模や時間が長い場合はファイルサイズに注意が必要です。
-- -DwriteVcd=1
VCDはtest_run_dir
ディレクトリにあります。
Chiselの制約
-
符号付き整数がデフォルト
Java系言語は符号付き整数のみ対応しています。32bit 符号なし整数を使う場合、テスト上、最上ビットは符号ビットとして扱われます。また代入捜査においてもエラーとして扱われます。 32ビット符号無しUInt
のプリミティブ (eg. I/O, wire) に最上位ビットを立てたい場合、
Primitive := 0x80000000L.U
が簡単な方法です。リテラル L
は signed long、で リテラル U で符号無し整数(UInt)へキャストしています。
代表的なエラーとその対処方法
- [error] "OutOfMemory (memory space)"
原因: SBT (Java Virtual Machine; JVM) はメモリを必要としています。
対処: SBTにさらにメモリを割り当てます。SBT実行時に次のオプションをしています。
-mem 4096
これで4GiB割り当てることができます(MiB単位です).
- [error] "OutOfMemory (heap space)"
原因: SBT (Java Virtual Machine; JVM) はヒープメモリを必要としています。
対処: 環境変数を設定します。ターミナルで下記を実行するかシェル設定ファイルへ記述します。
export _JAVA_OPTIONS=-Xmx2048m
これによりヒープスペースとして2GiB割り当てます(MiB単位)。Xmx
は最大割り当てサイズで、JVMはXms
で定義されているサイズから必要に応じてこの最大サイズまで動的に確保します。
- [error] "java.lang.ClassNotFoundException: ProjectName"
原因: ProjectNameのトップクラス(モジュール)がプロジェクトファイルに記述されていないときに発生します。あるいはプロジェクトのディレクトリ構造が先に説明した構造になっていない場合も発生します。
対処: トップクラス(モジュール)の名前を確認してください。あるいはディレクトリ構造も併せて確認してください。