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.
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.