Wat is One-hot-codering?

Codering waarbij aan elke toestand van een toestandsmachine één flipflop wordt toegewezen en er altijd maar één op 1 staat. De logica is eenvoudig en vaak snel, en wordt veel gebruikt bij FPGA's.

Japanse benaming: ワンホット符号化

“One-hot-codering” komt voor in 2 oefenvragen uit 1 onderwerpen, bijv. Hardwarebeschrijvingstalen en verificatie.

Vakgebied: Hardwarebeschrijvingstalen en verificatie

Hoe one-hot-toestandscodering werkt

In een eindige toestandsmachine geeft one-hot-codering elke toestand een eigen flipflop, en staat er op elk moment precies één flipflop op 1. Vier toestanden worden 0001, 0010, 0100 en 1000. Testen of de machine in een bepaalde toestand is, betekent naar één bit kijken, dus uitgangen die van de toestand afhangen zijn vaak gewoon één flipflop of een kleine OR van enkele. De next-state-ingang van elke flipflop is de OR van de condities op de overgangen naar die toestand, elk ge-AND met het bit van de brontoestand, wat de logische diepte klein en de machine snel houdt.

One-hot vs. binaire codering

Binaire codering nummert de toestanden en heeft maar de bovenafronding van log2 N flipflops nodig: drie toestanden passen in twee flipflops, terwijl one-hot er drie nodig heeft, en zestien toestanden vragen vier flipflops tegenover zestien. De prijs van binaire codering is bredere decodeerlogica, omdat je voor het herkennen van een toestand alle toestandsbits moet vergelijken. Gray-codering, een derde optie, kent codes zo toe dat veelvoorkomende overgangen maar één bit veranderen, wat de schakelactiviteit vermindert. Binair past bij ontwerpen waarin flipflops schaars zijn of het aantal toestanden groot is; one-hot past bij snelheid en eenvoud als er flipflops genoeg zijn.

Waarom FPGA's er de voorkeur aan geven

Een FPGA-logicablok koppelt elke kleine lookup table (LUT) aan een of meer flipflops, dus registers zijn er volop, terwijl brede logische functies over meerdere LUT-niveaus moeten worden verdeeld. One-hot-codering past goed bij deze structuur: de next-state-functie van elk toestandsbit heeft meestal maar enkele ingangen en past in één LUT, wat kritieke paden verkort. Synthesetools herkennen toestandsmachines meestal en kiezen automatisch een codering, vaak one-hot voor kleine en middelgrote machines, al kunnen ontwerpers die keuze overschrijven. In ASIC's, waar flipflops meer oppervlak kosten, zijn binaire of andere compacte coderingen gebruikelijker.

Ongeldige toestanden en herstel

Met N flipflops gebruikt one-hot maar N van de 2^N mogelijke patronen, dus het patroon met alleen nullen en patronen met meerdere enen zijn ongeldig. Ruis, een glitch of een door straling veroorzaakte bitflip kan de machine in een daarvan brengen, waar ze kan vastlopen of onvoorspelbaar gedrag kan vertonen. Binaire codering heeft hetzelfde probleem met ongebruikte codes, zoals 11 in een machine met drie toestanden. Robuuste ontwerpen definiëren daarom een default-tak die elke onverwachte toestand terugbrengt naar een bekende, en synthesetools bieden opties voor veilige toestandsmachines (safe FSM) die deze herstellogica behouden in plaats van haar weg te optimaliseren.

Nu oefenen: vragen over One-hot-codering

Welke uitspraak over de kenmerken van one-hot-codering bij het coderen van toestanden van een toestandsmachine is juist?

  1. ADe toestand wordt binair weergegeven en het aantal flipflops is zo klein mogelijk
  2. BAlle flipflops zijn altijd 1
  3. CEr worden zoveel flipflops gebruikt als er toestanden zijn en er is altijd maar één 1, waardoor de logica voor volgende toestand en uitgang eenvoudig en snel is
Antwoord en toelichting tonen

Antwoord: C. Er worden zoveel flipflops gebruikt als er toestanden zijn en er is altijd maar één 1, waardoor de logica voor volgende toestand en uitgang eenvoudig en snel is

Bij one-hot-codering worden bijvoorbeeld vier toestanden weergegeven als 0001, 0010, 0100 en 1000, en wordt aan elke toestand één flipflop toegewezen. Het aantal flipflops neemt toe, maar of men in een bepaalde toestand is, blijkt uit één bit, zodat de logica die de volgende toestand en uitgang bepaalt ondiep en snel is. Het wordt veel gebruikt bij FPGA's, die veel flipflops hebben, en als het aantal flipflops moet worden verminderd, wordt binaire codering gebruikt.

Welke combinatie van het aantal flipflops dat nodig is om de toestand te onthouden bij een toestandsmachine met drie toestanden is juist (binaire codering/one-hot-codering)?

  1. A3/2
  2. B2/3
  3. C1/3
Antwoord en toelichting tonen

Antwoord: B. 2/3

Bij binaire codering worden toestanden met een binair nummer weergegeven, dus voor drie toestanden volstaan de 2 bits 00, 01 en 10 (2 flipflops). Bij one-hot-codering wordt per toestand één flipflop gebruikt, dus 3. Bij binair blijft de ongebruikte code 11 over, en om bij binnenkomst daar door ruis e.d. naar de juiste toestand terug te kunnen keren, is het veilig met default de bestemming te bepalen.

Veelgestelde vragen

Hoeveel flipflops heeft one-hot-codering nodig?

Eén flipflop per toestand, dus een machine met N toestanden heeft N flipflops nodig. Binaire codering van dezelfde machine heeft maar de bovenafronding van log2 N nodig.

Wat is het verschil tussen one-hot- en binaire toestandscodering?

One-hot gebruikt één flipflop per toestand met één bit gezet, wat eenvoudige, snelle decodeerlogica geeft ten koste van meer registers. Binaire codering slaat het toestandsnummer op in zo weinig mogelijk flipflops, maar heeft bredere logica nodig om elke toestand te decoderen.

Is one-hot-codering in digitaal ontwerp hetzelfde als one-hot-codering in machine learning?

Het idee is hetzelfde: een vector met precies één element op 1 identificeert één item uit een verzameling. In hardware codeert het de huidige toestand van een toestandsmachine of een selectiesignaal, terwijl het in machine learning een categorische waarde als numerieke vector weergeeft.

“One-hot-codering” in de toelichting

Vragen met “One-hot-codering” (2)

  1. Welke uitspraak over de kenmerken van one-hot-codering bij het coderen van toestanden van een toestandsmachine is juist?
  2. Welke combinatie van het aantal flipflops dat nodig is om de toestand te onthouden bij een toestandsmachine met drie toestanden is juist (binaire codering/one-hot-codering)?

Verwante termen

Flipflop FPGA Asynchrone reset Blocking assignment Combinatorische lus (combinational loop) Constrained-random-verificatie Gate-level-simulatie Generate-statement Hardwarebeschrijvingstaal (HDL) Lint

Naar de woordenlijst