11 / 37 · Konzept
Encoder und Priorität: Eine von mehreren Anforderungen wählen
Die Eingangsannahme eines One-hot-Encoders von valid und Auswahl eines Prioritätsencoders unterscheiden.
Lektionen sind frei lesbar. Schreibe dich ein, um deinen Fortschritt zu speichern.
Auch die Umkehrung eines Decoders braucht Voraussetzungen
Ein DecoderDecoder Aktiviert die einem Binärcode zugeordnete Ausgangsleitung. Mit enable können im deaktivierten Zustand alle Ausgänge 0 sein. Mehr erfahren wandelt eine Adresse in One-hot-AuswahlleitungenOne-hot Darstellung mit genau einer 1 unter mehreren Bits. Die Variante, die auch nur Nullen erlaubt, heißt one-hot-or-zero. Mehr erfahren um. Ein Encoder wandelt die Position eines aktiven Eingangs in eine Adresse um. Ein gewöhnlicher One-hot-Encoder setzt aber genau einen aktiven Eingang voraus. Für mehrere Einsen muss festgelegt werden, welche Position ausgegeben wird.
Für erhält die höhere Nummer Vorrang. Bei lauter Nullen setzen wir valid=0 und index=00. index=00 allein kann keine fehlende Anforderung anzeigen, da es auch r0 bezeichnet.
| Eingang r3r2r1r0 | valid | index |
|---|---|---|
| 1--- | 1 | 11 |
| 01-- | 1 | 10 |
| 001- | 1 | 01 |
| 0001 | 1 | 00 |
| 0000 | 0 | 00 |
Das - bedeutet gleiches Ergebnis für 0 und 1, nicht, dass Simulations-X zulässig wäre. Die Muster sind von oben nach unten gegenseitig ausschließend definiert.
1011 ergibt index=11. Bei 0110 hat r2 Vorrang vor r1, also index=10.
Wellenformdaten anzeigen
| Signal | Wellenform | Buswerte |
|---|---|---|
| requests | 234523 | 0000 → 0001 → 0011 → 0110 → 1011 → 1000 |
| valid | 01.... | |
| index | 2.345. | 00 → 01 → 10 → 11 |
RTL muss die Priorität sichtbar machen
always_comb begin
valid = |request;
index = 2'b00;
if (request[3]) index = 2'd3;
else if (request[2]) index = 2'd2;
else if (request[1]) index = 2'd1;
endIst nur request[0] gesetzt, bleibt index beim Standardwert 0 und valid=1. Standardwerte auf allen Pfaden verhindern Speicherverhalten in der kombinatorischen Logik. Prüfen Sie alle 16 Eingaben: Bei valid=1 muss das gewählte Bit 1 sein, alle höherwertigen Bits müssen 0 sein.
Auswahl und Fairness sind verschiedene Aufgaben
Bleibt r3 dauerhaft 1, wird r0 nie gewählt. Diese Schaltung implementiert nur feste Priorität. Eine faire Zuteilung benötigt einen Arbiter, der frühere Entscheidungen speichert, und ist damit sequenziell.
Übung · Anforderungen, Adresse und grant gemeinsam beobachten
r3r2r1r0=1011; valid=1; index=11; grant=1000. Anforderungen mit höherer Nummer haben Vorrang. Bei valid=0 kennzeichnet index keine ausgewählte Anforderung.
Anfangs wählt 1011 r3. Schalten Sie r3 aus: r1 wird gewählt, index=01 und grant=0010. Solange r1=1 bleibt, darf das Ein- und Ausschalten von r0 die Auswahl nicht ändern.
Vergleichen Sie „Alle ausschalten“ mit ausschließlich aktivem r0. In beiden Fällen ist index=00, aber valid und grant unterscheiden sich. Eine nachfolgende Schaltung, die nur index liest, könnte eine nicht vorhandene Anforderung bearbeiten.
grant setzt nur das gewählte Anforderungsbit und entsteht durch erneutes Decodieren von index und valid.
Prüfen Sie drei Invarianten: grant enthält höchstens eine 1; an dieser Position liegt tatsächlich eine Anforderung; alle Anforderungen mit höherer Nummer sind 0. Die Übung verbraucht keine Anforderungen und speichert keine frühere Auswahl. Dass niedrigere Anforderungen bei dauerhaftem r3 warten, ist eine Eigenschaft fester Priorität.
Selbst ausprobieren
Bestimmen Sie index, valid und grant für 0101 und 0001. Warum darf bei 0000 nicht allein wegen index=00 r0 bearbeitet werden?
Erklärung lesen
0101: index=10, valid=1, grant=0100. 0001: index=00, valid=1, grant=0001. Bei 0000 ist index=00 nur ein Standardwert; valid=0 und grant=0000 bedeuten, dass keine Anforderung vorliegt.