De logische XOR-functie

Als we maar ver genoeg inzoomen op de geïntegreerde schakelingen in moderne computersystemen, zien we dat deze zijn opgebouwd uit een handvol digitale basisfuncties. Alle complexere functionaliteit is opgebouwd door meerdere van deze functionele basisbouwstenen op een intelligente manier te verbinden.
 
De zeven basispoorten in de digitale techniek zijn AND, OR, XOR, NOT, NAND, NOR en XNOR. Het zijn elektronische componenten die een enkel binair ‘actief’ (1) of ‘inactief’ (0) uitgangssignaal produceren op basis van het patroon van logische nullen of enen aan hun binaire ingangen. Ze vormen de bouwstenen voor alle complexere digitale schakelingen.

Video : toestemming voor cookies nodig
Instellingen

De basis wordt gevormd door drie logische poorten:

  • AND-poort: geeft alleen 1 uit als alle ingangen 1 zijn.
  • OR-poort: geeft 1 uit als ten minste één van de ingangen 1 is.
  • NOT-poort (inverter): keert de ingang om; geeft 0 uit als de ingang 1 is en 1 als de ingang 0 is.

Daarnaast bleek het, onder andere voor binaire rekenkundige bewerkingen, zinvol deze aan te vullen met een logische functie die erg lijkt op de OR-poort maar toch afwijkt:

  • XOR-poort (Exclusive OR): geeft, bij twee ingangen, alleen 1 uit wanneer deze verschillen. Bij meerdere ingangen kan het gedrag afwijken (dit wordt verderop in dit artikel besproken).

In de zogenaamde booleanse algebra, die met de poorten kan worden bedreven, is het soms praktischer poorten voorhanden te hebben waarvan het uitgangssignaal geïnverteerd is. Of, anders gezegd, al bij de uitgang reeds een extra NOT-poort is ingebouwd:

  • NAND-poort: het omgekeerde van de AND-poort; geeft alleen 0 uit als beide ingangen 1 zijn.
  • NOR-poort: het omgekeerde van de OR-poort; geeft alleen 1 uit wanneer beide ingangen 0 zijn.
  • XNOR-poort (Exclusive NOR): het omgekeerde van de XOR-poort; geeft 1 uit wanneer de ingangen hetzelfde zijn.

Deze logische functies vormen de basis van alle digitale systemen. Elektronisch uitgevoerd maken ze van eenvoudige rekenmachines tot complexe computers mogelijk. Maar de functionaliteit van deze basisfuncties komt ook terug in schakelschema’s met relaiscontacten of simpele schakelaars zoals in de afbeelding hieronder. Sluiten we een lamp aan met twee schakelaars in serie, is een AND-functie ontstaan. Beide schakelaars moeten immers gesloten zijn voordat de lamp gaat branden. Zetten we de schakelaars parallel, zal de lamp worden bediend volgens een OR-functie. De XOR-functie kennen we ook allemaal: denk maar aan de twee schakelaars waarmee we in een trappenhuis één enkel lichtpunt kunnen bedienen.

Switches-FunctionsAND-OR-Silberlingen

Zelf werk ik bij mijn experimenten vaak met de klassieke fischertechnik elektronicamodules uit de jaren 70. Er werden door fischertechnik ooit een AND/NAND en een OR/NOR module uitgebracht (de modules op de foto hierboven). Beiden modules hebben vier ingangen en werken met negatieve logica. Dus het voedingsspanningniveau is 'inactief' (0) en zodra dit zakt tot nulniveau wordt het als 'actief' (1) opgevat. Praktisch aan deze modules is dat de AND tevens een NAND is, en de OR ook als NOR kan worden gebruikt omdat zowel de normale, als de geïnverteerde (NOT) uitgang ter beschikking staat. Hierdoor was er nooit behoefte aan een aparte NOT-poort module. Immers, door het toepassen van de wetten van de Morgan valt de gewenste digitale functie altijd te verkrijgen, zelf als eigenlijk liever de complementaire ingangssignalen zouden worden gebruikt.

De wonderlijke XOR

De vintage fischertechnik elektronicamodules worden door hun blinkende frontplaatje soms liefkozen 'Silberlingen' genoemd. Een XOR-module werd door fischertechnik echter nooit gemaakt. Wellicht werd de XOR-functie als te weinig universeel bruibaar en te excentriek gezien en maakte het daarom nooit tot een eigen ‘Silberling’.

03 - Wahrheitstabel XOR

Meer algemeen kunnen we vaststellen dat in het vakgebied van de proces-automatisering de XOR-functie nuttig gebruikt wordt om het mogelijke verschil tussen twee signalen te detecteren. Bijvoorbeeld om een alarm te laten afgaan als een sensor een afwijking van de geconfigureerde instelling detecteert. Zie in de (waarheids)tabel hiernaast hoe de uitgang zich gedraagt bij verschillende combinaties van de twee ingangssignalen.

In de digitale techniek wordt de XOR-functie, zowel elektronisch als in software uitgevoerd, vaker gebruikt en heeft verschillende toepassingen. Een paar voorbeelden:

  • Foutdetectie en -correctie: XOR-gates worden gebruikt in algoritmen voor foutdetectie en -correctie, zoals parity bits en checksums.
  • Encryptie: XOR-poorten worden gebruikt in encryptie vanwege de eigenschap dat a XOR b XOR a = b, wat betekent dat de oorspronkelijke data (a) kan worden hersteld door de versleutelde data nogmaals te XOR-en met de sleutel (b): a XOR b. Deze symmetrische eigenschap maakt XOR een efficiënte en veelgebruikte logische bewerking voor zowel encryptie als decryptie in diverse algoritmen.
  • Rekenkundige bewerkingen: XOR-gates kunnen worden gebruikt om bepaalde rekenkundige bewerkingen uit te voeren, zoals het berekenen van de som van twee binaire getallen (zonder rekening te houden met de carry).

De samengestelde XOR

Hiernaast één de mogelijkheden waarop de XOR-functionaliteit kan worden opgebouwd uit andere logische poorten. Er wordt een NAND- (of een AND gevolgd door een NOT/inverter), een OR- en een AND-poort gebruikt, maar er zijn meer mogelijkheden. Veel gezien is een opbouw uit vier NAND-poorten. Bij gebrek aan een XOR-'Silberling' kunnen we de XOR-functie dus ook kunnen bouwen uit deze drie 'vintage' fischertechnik modules, zoals hieronder getoond.

04 - 3_gate_XOR

XOR-Silberlingen-Schematics

De opbouw, waarbij de twee ingangssignalen met ompoolschakelaars kunnen worden ingegeven is hieronder te zien. Hoewel de XOR-functie dus kan worden gemaakt met bestaande onderdelen uit het (voormalige) fischertechnik-programma, is dit in schakelingen waar meerdere XOR-poorten noodzakelijk zijn vanzelfsprekend niet erg efficiënt. Dit gemis bracht me er toe te onderzoeken welke mogelijkheden er zijn het bekende klassieke Silberlingen-arsenaal uit te breiden met deze nuttige logische functie. Omdat ik reeds de nodige ervaring met het nabouwen van de originele modules had, moest dit toch mogelijk zijn!

XOR-Silberlingen

Een XOR met vier ingangen

Als we werkelijk de XOR-Silberling willen creeëren die zo goed mogelijk aansluit bij de bekende AN (AND-NAND) en ON (OR-NOR) elektronica bouwstenen, dan zouden hieraan vermoedelijk de volgende eisen gesteld worden:

  • De module zou, net als de AN- en ON-modules, moeten werken met z.g. negatieve logica (het voedingsspanning-niveau geldt als logisch ‘inactief’ en nul-niveau als logisch ‘actief’) en de uitgangen zouden elektrisch compatible moeten zijn zodat hij naadloos kan samenwerken met de originele fischertechnik Silberlingen.
  • Hij zou, analoog aan de AN- en ON-logische poorten, naast de normale XOR-uitgang, tevens het complementaire (tegengestelde) uitgangssignaal moeten bieden.
  • De module moet zijn opgebouwd uit discrete componenten zoals weerstanden, dioden en transistors conform de elektronische opbouw van de traditionele modules.
  • Hij zou moeten zijn ondergebracht in de bekende Silberling-behuizing waarbij de voedingsspanning kan worden doorgelust met de rode doorverbindingsclip (fischertechnik nr. 36380) zodat hij tezamen met de klassieke Silberlingen kan worden gebruikt.
  • Om historisch correct te zijn, zou als symbool op het front het toentertijd gebruikelijke symbool (Duitse DIN 40700 standaard) voor de XOR moeten worden gebruikt en niet het latere ANSI of nog modernere IEC symbool.
  • Een afweging is of deze module, conform de AN- en ON-logische poorten, vier ingangen zou moeten hebben, of dat met twee ingangen kan worden volstaan.

Dit laatste punt vergt wellicht enige toelichting omdat de XOR-functie afwijkt van de elektronisch gemakkelijk met meerdere ingangen uit te breiden AND en OR functies. Zolang een XOR slechts twee ingangen heeft (zie de waarheidstabel op deze pagina) is de functie eenduidig gedefinieerd. Anders wordt het als een XOR-poort meer dan twee ingangen heeft. Er dienen zich dan voor het logische gedrag namelijk meerdere mogelijkheden aan:

  1. Door de uitgang van een XOR-poort met twee ingangen als ingang van een volgende XOR-poort te gebruiken, kan telkens per aanvullende XOR-poort in deze keten een ingang worden toegevoegd. Deze seriële schakelwijze vormt een z.g. pariteits-, of ‘oneven’-XOR. De uitgang is actief als er een oneven aantal ingangen actief is, en inactief bij een even aantal actieve ingangen.
  2. Een minder gangbaar gedrag, dat in mijn ogen echter de term ‘exclusive’ beter volgt, is dat de XOR alleen een actief uitgangssignaal heeft als slechts één, en ook precies slechts één, ingangssignaal actief is. Zodra er twee of meer ingangssignalen actief zijn, is er immers geen ingangssignaal meer als enige (exclusief) actief, en zou de uitgang daarom inactief moeten worden. Dit type XOR is in sommige situaties daadwerkelijk zinvol en wordt een ‘one hot’ XOR genoemd.

Om goed aan te sluiten bij de klassieke fischertechnik AND- en OR-modules zou het ontwerp dus idealiter vier ingangen moeten hebben. Maar het is lastig te bepalen welk bovenbeschreven gedrag de voorkeur heeft om de module universeel mogelijk te houden. Het gedrag is immers niet meer later instelbaar. Daar komt bij dat het elektronische ontwerp van een XOR-poort met vier ingangen qua elektronische constructie een geheel andere propositie dan de AN- en ON-logische poorten van fischertechnik. Immers, deze modules laten zich door met diodes voor de 'wired logic' aan de ingang, gemakkelijk ongebreideld uitbreiden met aanvullende ingangen. De realisatie van een XOR-functie met meerdere ingangen bleek elektronisch echter een stuk ingewikkelder.

Na enig puzzelen, simuleren en experimenteren, en het testen van (deel)schakelingen op een breadboard, kwam ik uiteindelijk tot werkende schakelingen met beider XOR-schakelgedrag. Hierbij bleek het ontwerp van een pariteits-XOR ongeveer even complex als het ontwerp van een ‘one hot’-XOR met vier ingangen. De pariteits-XOR heeft hierbij een meer sequentieel schakelschema van eendere XOR-schalingen met twee ingangen. De ‘one hot’-XOR bestaat daarentegen uit een aantal parallel geschakelde OR-poorten die ieder, indien de betreffende ingang actief wordt, alle andere OR-poorten blokkeren.

Er ontbreekt hier de ruimte om op alle ontwikkelstappen en schema’s uitvoerig in te gaan. Daarom beperk ik me (voor de liefhebbers) tot het schema van de ‘one-hot’-XOR van het schema linksonderaan de pagina dat leidde tot de in de foto getoonde XOR-Silberling met vier ingangen. Zodra deze echter ontwikkeld was, werden ook de beperkingen zichtbaar.

4-input-XOR-Silberling
various 2-input Silberlingen

Allereerst lijkt het nut van twee extra ingangen beperkt, maar belangrijker is misschien dat hierdoor moet worden gekozen tussen de twee verschillende XOR-principes. Deze keuze behoeft bij een XOR-poort met slechts twee ingangen nog niet te worden gemaakt. In de praktijk zullen daarom XOR-poorten met simpelweg slechts twee ingangen universeler bruikbaar zijn.

Voor de meeste experimenten lijkt het daarom zinvol om liever modules te bouwen die telkens twee eendere XOR-gates met ieder twee ingangen bevatten. Het resultaat van de zelfbouw van dergelijke modules, volgens het schema hier rechtsonder, is hiernaast op de foto te zien. En als we toch bezig zijn is het misschien een goed idee om ook van de AND-module een variant te hebben waarin twee AND-poorten met ieder 2 ingangen in één Silberling-behuizing zijn ondergebracht.

Deze nieuwe modules kunnen we prima gebruiken voor de volgende digitale experimenten. Zo leek het me altijd al eens leerzaam en leuk om een z.g. Half- en Full-Adder op te bouwen uit concrete logische poorten. Klik hiervoor door naar het volgende project.

XOR 4 inputs schematic              Dual XOR Schematics