検索
[Chisel]繰り返しを途中で抜ける
- M.R

- 2024年6月29日
- 読了時間: 2分
やりたいこと
★
同種のモジュールが複数ある
これらのうち、所定の条件を満たすものを1つ選択
これを実現するために
モジュール一覧を配列で定義
Seq.tabulateでモジュール配列に対してループを回す
1つ1つ条件を満たすかチェック
満たせばそれを選択し、ループ終了
という高級言語では一般的なことをやろうとした
しかし、chiselの文法ではループを回せてもそれを途中で抜ける(いわゆるbreak)、ということができない
対応策
結論から言うと、「ループを途中で抜ける」ということはできない。
★を実現したければ最後までループを回すしかない。
「それじゃ効率悪いじゃん」と思ったが、これはソフトウェアで考えているからで、ハードウェア的に考えられていないから。
★のシチュエーションに限っていえば、この探索は複数のモジュールに対して並列して行われる、言い換えれば1つ1つ順番に行われるのではなく全部同時に行われる。
つまり「途中で抜ける」という概念はなく、いくつかに対しては条件チェックをしない、となる。これは別に処理が速くなるわけではないし、そもそも他のモジュールの結果を待ってから条件チェックをするのではない。
最後に
文法が高級言語に似ているからつい同じように考えてしまうが、「どのようにハードウェアを動かすか」を記述しているということをちゃんと意識しないとダメですね。






コメント