9 Stimmen

Suche nach dem nächsten in der Round-Robin-Planung durch Bit-Twiddling

Betrachten Sie das folgende Problem. Sie haben eine Bit-Zeichenkette, die den aktuellen geplanten Slave in One-Hot-Codierung darstellt. Zum Beispiel bedeutet "00000100" (wobei das ganz linke Bit #7 und das ganz rechte #0 ist), dass Slave #2 geplant ist.

Jetzt möchte ich den nächsten geplanten Sklaven in einem Round-Robin-Planungsschema auswählen, allerdings mit einer Besonderheit. Ich habe eine "Anforderungsmaske", die angibt, welche Slaves tatsächlich eingeplant werden wollen. Der nächste Slave wird nur von denjenigen ausgewählt, die das wollen.

Einige Beispiele (unter der Annahme, dass die Einteilung nach dem Round-Robin-Prinzip durch Linksdrehung erfolgt) Beispiel 1:

  • Aktuell: "00000100"
  • Maske: "01100000"
  • Nächster Termin: "00100000" - in einer normalen Runde sollten nach der Nummer 2 die Nummer 3 und dann die Nummer 4 an der Reihe sein, aber sie beantragen nicht, also wird die Nummer 5 ausgewählt.

Beispiel2:

  • Aktuell: "01000000"
  • Maske: "00001010"
  • Nächste: "00000010" - weil die Planung in der Reihenfolge von links nach rechts erfolgt und Nr. 1 der erste anfordernde Slave in dieser Reihenfolge ist.

Ich weiß, dass dies leicht in einer Schleife kodiert werden kann. Aber eigentlich möchte ich mein Ergebnis durch eine Bit-twiddling-Operation erhalten, ohne Schleifen. Die Motivation: Ich möchte dies in Hardware (in einem FPGA) in VHDL/Verilog implementieren.

Ein Bonus ist die Entwicklung eines Algorithmus, der für jede beliebige Anzahl von Sklaven N geeignet ist.

Dies ist übrigens keine Frage für die Hausaufgaben. Es handelt sich um ein wichtiges Problem, das immer dann auftritt, wenn man Sklaven in irgendeiner Weise einplanen und die Einplanung von den Anforderungen der Sklaven abhängig machen will. Meine derzeitige Lösung ist etwas "schwerfällig" und ich wollte wissen, ob ich etwas Offensichtliches übersehe.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X