[Chisel]繰り返しを途中で抜ける
やりたいこと
★
同種のモジュールが複数ある
これらのうち、所定の条件を満たすものを1つ選択
これを実現するために
モジュール一覧を配列で定義
Seq.tabulateでモジュール配列に対してループを回す
1つ1つ条件を満たすかチェック
満たせばそれを選択し、ループ終了
という高級言語では一般的なことをやろうとした
しかし、chiselの文法ではループを回せてもそれを途中で抜ける(いわゆるbreak)、ということができない
対応策
結論から言うと、「ループを途中で抜ける」ということはできない。
★を実現したければ最後までループを回すしかない。
「それじゃ効率悪いじゃん」と思ったが、これはソフトウェアで考えているからで、ハードウェア的に考えられていないから。
★のシチュエーションに限っていえば、この探索は複数のモジュールに対して並列して行われる、言い換えれば1つ1つ順番に行われるのではなく全部同時に行われる。
つまり「途中で抜ける」という概念はなく、いくつかに対しては条件チェックをしない、となる。これは別に処理が速くなるわけではないし、そもそも他のモジュールの結果を待ってから条件チェックをするのではない。
最後に
文法が高級言語に似ているからつい同じように考えてしまうが、「どのようにハードウェアを動かすか」を記述しているということをちゃんと意識しないとダメですね。
最新記事
すべて表示現象 配列がある インデックスを表す変数が配列のサイズ内かをチェックし、サイズ内の場合のみ要素にアクセス というよくあることをやろうとした val array = Seq.fill(ARRAY_SIZE)(...) when(i.U < ARRAY_SIZE){...
概要 Queueを使ってデータのやり取りをする場合、以下のような操作が可能です。 Queue.io.enq.valid:falseにするとデータを入れない Queue.io.deq.valid:falseにするとデータを取り出さない これらの使い分けについてまとめてみます...
やりたいこと 類似したユニットが複数ある これらの処理は大部分が共通で一部のみ異なる 条件に応じて適切なユニットを1つ選び、処理を実行させる やろうとしたこと これを実現するために 親クラスを定義し、共通処理はここに記述...
Comentários