Altifigence Academy

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.

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 r3r2r1r0r_3r_2r_1r_0 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 r3r2r1r0validindex
1---111
01--110
001-101
0001100
0000000

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.

valid=r3+r2+r1+r0,index1=r3+r2,index0=r3+r2‾r1valid=r_3+r_2+r_1+r_0,\quad index_1=r_3+r_2,\quad index_0=r_3+\overline{r_2}r_1

1011 ergibt index=11. Bei 0110 hat r2 Vorrang vor r1, also index=10.

Jede Spalte ist eine unabhängige Anforderungskombination
Wellenformdaten anzeigen
Wellenformdaten: Jedes Zeichen steht für ein Intervall, ein Punkt hält den vorherigen Zustand und p ist ein Taktzyklus.
SignalWellenformBuswerte
requests2345230000 → 0001 → 0011 → 0110 → 1011 → 1000
valid01....
index2.345.00 → 01 → 10 → 11

RTL muss die Priorität sichtbar machen

SystemVerilog
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;
end

Ist 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

Genau eine von gleichzeitigen Anforderungen auswählen

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.

granti=valid∧(index=i)grant_i=valid\land(index=i)

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.

Deine Auswahl gilt für diesen Browser. Du kannst sie jederzeit in der Fußzeile ändern.