Der Suche nach dem nächsten im round-robin-scheduling von bit twiddling

Betrachten Sie das folgende problem. Haben Sie ein bit-string für den aktuellen geplanten slave in-one-hot-Codierung. Zum Beispiel, "00000100" (mit die am weitesten Links stehende bit #7 und am weitesten rechts liegenden #0) bedeutet, dass der slave #2 ist geplant.

Nun, ich möchte, um die nächste geplante slave in einem round-robin-scheduling-Schema, mit einem twist. Ich habe eine "Anfrage-Maske", die sagt, die Sklaven eigentlich wollen geplant werden. Der nächste slave wird wieder nur von denen, die wollen.

Einige Beispiele (angenommen, round-robin-scheduling erfolgt durch drehen nach Links).
Beispiel1:

  • Aktuell: "00000100"
  • Maske: "01100000"
  • Nächsten Termine: "00100000" - in der normalen round-robin -, #3 und #4 kommen sollte, nach #2, aber Sie nicht verlangen, also #5 ist ausgewählt.

Beispiel2:

  • Aktuell: "01000000"
  • Maske: "00001010"
  • Weiter: "00000010" - weil Planung ist mit dem Rad Links, und #1 ist die erste anfordernde slave-in dieser Reihenfolge.

Nun, dies kann leicht codiert in einer Schleife, die ich kenne. Aber eigentlich möchte ich, um mein Ergebnis mit einer bit-twiddling-Betrieb, ohne Schleifen. Die motivation: ich möchte, um dies zu implementieren in hardware (FPGA) in VHDL/Verilog.

Einen bonus ist ein Algorithmus, der den generische für jede Menge Sklaven N.

Übrigens, dies ist keine Hausaufgaben Frage. Es ist ein wichtiges problem ist, Wann immer man will, zu planen Sklaven in irgendeiner Art und Zustand der Planung von den Sklaven fordert. Meine aktuelle Lösung ist etwas "schwer" und ich wollte wissen, ob ich etwas fehlt offensichtlich.

Schreibe einen Kommentar