次の問題を考えてみましょう。ワンホット エンコーディングで現在スケジュールされているスレーブを表すビット文字列があります。たとえば、「00000100」(左端のビットが #7、右端のビットが #0) は、スレーブ #2 がスケジュールされていることを意味します。
ここで、ひねりを加えて、ラウンド ロビン スケジューリング スキームで次にスケジュールされたスレーブを選択したいと思います。どのスレーブが実際にスケジュールされたいかを示す「リクエストマスク」があります。次の奴隷は希望者からのみ選ばれます。
いくつかの例 (左にローテーションすることでラウンドロビン スケジューリングが行われると仮定します)。例1:
- 現在:「00000100」
- マスク:「01100000」
- 次のスケジュール: "00100000" - 通常のラウンドロビンでは、#2 の後に #3、次に #4 が来るはずですが、要求がないため、#5 が選択されます。
例 2:
- 現在:「01000000」
- マスク:「00001010」
- 次: "00000010" - スケジューリングは左に循環することによって行われ、#1 はその順序で最初に要求しているスレーブです。
さて、これはループで簡単にコーディングできます。しかし、実際には、ループなしで少しいじる操作で結果を取得したいと考えています。動機: これを VHDL/Verilog のハードウェア (FPGA) に実装したい。
ボーナスは、任意の量のスレーブ N に対して汎用的なアルゴリズムを構成することです。
ところで、これは宿題の問題ではありません。何らかの方法でスレーブをスケジュールし、スレーブの要求によってスケジュールを調整したい場合はいつでも、これは重要な問題です。私の現在の解決策はやや「重い」ものであり、明らかな何かが欠けているかどうか知りたいと思っていました。