[Chisel] Queue.enq.valid vs deq.valid
概要
Queueを使ってデータのやり取りをする場合、以下のような操作が可能です。
Queue.io.enq.valid:falseにするとデータを入れない
Queue.io.deq.valid:falseにするとデータを取り出さない
これらの使い分けについてまとめてみます
Queue.io.enq.valid
これは「ある条件が満たされたらデータを入れない」という場合にfalseにします。そもそもデータがキューに入らないので、取り出されて処理されることもありません。
Queue.io.deq.valid
これは「今はデータを取り出さない」という場合にfalseにします。逆言えばいつかは取り出します。
enq.validと違ってキューは占有されるので、取り出さないと次のデータは取り出せません。
使い分け
そもそも処理対象としての条件を満たしていない場合はenq.validをfalse
処理対象ではあるが今は取り出さないという場合はdeq.readyをfalse
もちろん取り出し後に条件チェックして条件を満たしていなければ捨てる、ということもできますが、1サイクル無駄ですし、キューの領域も占有します。
最新記事
すべて表示現象 配列がある インデックスを表す変数が配列のサイズ内かをチェックし、サイズ内の場合のみ要素にアクセス というよくあることをやろうとした val array = Seq.fill(ARRAY_SIZE)(...) when(i.U < ARRAY_SIZE){...
やりたいこと 類似したユニットが複数ある これらの処理は大部分が共通で一部のみ異なる 条件に応じて適切なユニットを1つ選び、処理を実行させる やろうとしたこと これを実現するために 親クラスを定義し、共通処理はここに記述...
やりたいこと ★ 同種のモジュールが複数ある これらのうち、所定の条件を満たすものを1つ選択 これを実現するために モジュール一覧を配列で定義 Seq.tabulateでモジュール配列に対してループを回す 1つ1つ条件を満たすかチェック 満たせばそれを選択し、ループ終了...
Comments