[Chisel]条件分岐について
はじめに
chiselを書いていると、条件分岐として以下の文法が使えることを学びます。
if
when
Mux (MuxCase)
これらはどのように使い分けたらいいのでしょうか?
ifとwhen/Mux
まずこれらは条件判定に用いる変数がscalaのBoolean型かchiselのBOOL型かが異なります。
if: scalaのBoolean型
when/Mux: chiselのBOOL型
つまり、判定対象の変数の型によってifを使うのかwhen/Muxを使うのかが決まります。
whenとMux
ではwhenとMuxをどのように使い分けるかというと、これはあくまで個人的な意見ですが
何らかの信号に繋げる値の計算を場合分けする場合はMux whenの中で計算した値をwhenの外で定義した値に繋ぐのはできないらしい(コンパイルエラーになった)
条件によって処理が変わる場合はwhen
というように考えています。
最新記事
すべて表示現象 配列がある インデックスを表す変数が配列のサイズ内かをチェックし、サイズ内の場合のみ要素にアクセス というよくあることをやろうとした val array = Seq.fill(ARRAY_SIZE)(...) when(i.U < ARRAY_SIZE){...
概要 Queueを使ってデータのやり取りをする場合、以下のような操作が可能です。 Queue.io.enq.valid:falseにするとデータを入れない Queue.io.deq.valid:falseにするとデータを取り出さない これらの使い分けについてまとめてみます...
やりたいこと 類似したユニットが複数ある これらの処理は大部分が共通で一部のみ異なる 条件に応じて適切なユニットを1つ選び、処理を実行させる やろうとしたこと これを実現するために 親クラスを定義し、共通処理はここに記述...
Comments