ハードウェアの気になるあれこれスマートフォン用の表示で見るハードウェアの気になるあれこれ技術的に興味のあることを調べて書いてくブログ。Scalaスポンサーリンク前回の続きでChiselの文法入門編その2自分の理解ではChiselでハードウェアを実装する場合に、以下の3つの要素についての区別を理解する必要があると思っています。Scalaの型Chiselの型Ciiselのハードウェアの要素これは言い換えると、以下の2つの境界線を明確に区別する必要があるということだと考えています。一回だと結構なボリュームになるので今回はまずScalaの型とChiselの型について見ていきますChisel入門編〜その2:Scala/Chiselの基本的なデータ型〜Scalaの型Chiselの型BoolSIntとUIntモジュール化して試してみるChisel入門編〜その2:Scala/Chiselの基本的なデータ型〜Scalaの型まずはScalaの型から。言っても、ものすごく簡単に。Chiselで使うScalaの基本の型は大体以下になると思います。Scalaの多倍長整数型(って訳されるのを初めて知った)あとは期待値の生成時にFloatやらDoubleも使うかもですが、とりあえず置いときます。ハードウェアの構築時にはコレクション型も使うと思います。キーと値がペアになったデータ構造。ハッシュ(Perl)とかディクショナリ(Python)とか呼ばれるアレ。この辺を使ったハードウェアの記述はまた別の記事で。上記のScalaの型に対して、Chiselの型がどうなっているかを見ていきます。BoolBool型は名前からも推測できるとは思いますがScalaのBooleanに対応するChiselの型です。宣言は以下のようになります。上記はa/bとcで若干区別が必要になります(後述の”Chiselのハードウェア要素”参照)当たり前の話ですがBool値なので1bitの信号が生成されることになりRTLに変換した際には1bitの信号にマッピングされます。上記のtrue.BはScalaの暗黙の型変換という機能によって、Chiselに実装されている所定のメソッドが呼び出されることによりBoolean→Boolの変換が実行されています。}SIntとUIntこの2つは符号あり/なしの違いがあるだけなので、まとめて扱います。宣言の仕方は以下のいずれかになります。S][(<ビット幅宣言>)]上記の<ビット幅宣言>は以下のようにScalaのInt型の整数に.Wを付与することを意味します。8bitにしたい場合は8.Wとなります。実際にやってみると以下のような感じです。因みに定数値を設定する際に同時にビット幅指定を行う場合(上記のuintBのようなケース)において、指定したビット幅が定数値のビット幅に満たない場合はエラーが発生します。required.またこちらについてもBoolの場合と同様の仕組みでChiselの型への変換が行われます。method.nameモジュール化して試してみるここまでのサンプルコードを実行できるようにモジュール化したものが以下になります。ここで2つのプリント文が使用されていますが、以下のような違いあります。io.in}上記を実行するためのメイン関数は以下のようにしました。シミュレーション時の出力も取得するために先ほどのメイン関数とは異なり、こちらではchisel3.iotesters.Driverで評価した後に、先ほどと同様にchisel3.DriverによりRTLを生成する形にしています。)}このElaborateTestChiselTypesを実行すると以下のような出力が得られます。#警告と2つ目のDriver.executeの実行結果は重複するので削除し、ログ中にコメントを付与しています。11:26:30ここまでChiselの基本のデータ型の挙動についてを確認してきました。簡単にまとめると以下のようになります。Chiselの基本となるデータ型には以下がある。