プロジェクトのディレクトリ構造
Chiselを使用した開発にあたってScala制約の洗礼を受けます。代表的なものがディレクトリ構造の制約です。
root--+--build.sbt
|
+--src--+--main--+--scala--"YOUR_SOURCE_CODES.scala"
|
+--test--+--scala--"YOUR_TEST_CODES.scala"
この構造にしないとHDL生成時にトップファイルを見つけることができずClassNotFoundエラーになります。
コンパイル
コンパイルにあたって、SBTはプロジェクトディレクトリ構造に従ってそのディレクトリ内ををチェックします。SBTはトップモジュールを認識しそれに紐ずくファイル群をトレースしてクラス間依存を確認します。このため、トップモジュール(クラス)はどれかを指定してあげる必要があります。
コンパイルの前に
コンパイルにあたって次の事項を定義しておく必要があります。
-
[オプション] プロジェクト名:
プロジェクト名は開発するプロジェクトのアイデンティティです。固有の名前を定義することをお勧めします。この名前はbuild.sbt
ファイルに定義することで、実行中のスクリプトが何かを認識できるようになります。従って複数管理する場合ヒントになります。 -
トップクラス
HDLと同じくトップモジュール(クラス)はどれかを指定します。どのクラスがトップかを指定するにあたり、適宜固有な名前をクラスに付与してください。 -
"YOUR_TEST_CODES.scala"
iotestersで使用します。
トップクラス
トップクラスの記述はトップクラスのファイルに次の構文を付与すれば問題なくChiselはチェックできコンパイルに移行することができます。"ProjectName"を自分のプロジェクトの名前に置き換えてください。
chisel3.Driver.execute(args,()=>new ProjectName("_args_"))
}```
```_args_``` はそのトップモジュール(クラス)が継承している引数を表現していますので、クラスで引数を使用していなければ不要ですが使用している場合間接的でも良いので引数を指定しておく必要があります。
## コンパイル方法
ターミナルでコンパイルすることになると思いますが次のコマンドでコンパイルできます。
sbt 'run'
SBTはコンパイルにあたってどうしたいかを質問してきます。可能なオプションから番号を指定してコンパイルを行います。
あるいは、直接的に先に定義した```ProjectNameMain```を指定してコンパイルをすることもできます。
sbt 'runMain ProjectNameMain'
パッケージ名``package_name``を予め指定している場合(複数の同じクラスが存在していてそれを区別するためにパッケージ名を使用している)、パッケージ名も指定してコンパイルすることをお勧めします。
sbt 'runMain package_name.ProjectNameMain'
``runMain``は``ProjectNameMain``を呼び出しコンパイルを行い、HDLを生成します。