Digital logic
Introductie
Wat is digitale logica?
- Digitale logica gaat over systemen die informatie verwerken en opslaan in een digitale vorm, meestal in de vorm van binaire waarden: 0 en 1.
- Deze binaire waarden worden vaak geassocieerd met elektrische signalen, waarbij een lage spanning een '0' voorstelt en een hoge spanning een '1'.
Waarom logische poorten?
- Logische poorten zijn de fundamentele bouwstenen van digitale schakelingen.
- Ze voeren eenvoudige logische functies uit die de basis vormen voor complexere operaties in digitale systemen.
- Er zijn verschillende soorten logische poorten, zoals AND, OR, NOT, NAND, NOR, XOR, en XNOR.
- Elk van deze poorten voert een specifieke logische operatie uit op één of meer binaire ingangen om een binaire uitgang te produceren.
Abstractie en vereenvoudiging:
- Het idee van digitale logica en logische poorten is een abstractie.
- De echte fysieke componenten die deze operaties in elektronische apparaten uitvoeren, kunnen bestaan uit transistors, diodes, weerstanden en andere elektronische componenten.
Door deze complexe circuits te representeren als logische poorten, kunnen ontwerpers en ingenieurs:
- Het ontwerp vereenvoudigen: Door te denken in termen van logische operaties in plaats van individuele transistors.
- Fouten verminderen: Abstractie helpt bij het focussen op de hogere logica in plaats van de onderliggende elektronica.
- Modulariteit: Door logische poorten als bouwstenen te gebruiken, kunnen complexe systemen modulair worden opgebouwd.
Formalisatie:
- Digitale logica is ook streng geformaliseerd in wiskundige termen, wat helpt bij het analyseren, begrijpen en optimaliseren van digitale systemen.
- Booleaanse algebra is het wiskundige kader achter digitale logica en biedt regels en methoden om logische uitdrukkingen te manipuleren.
Conclusie: Digitale logica en logische poorten dienen als een vereenvoudigd en gestandaardiseerd raamwerk waarmee ontwerpers complexe digitale systemen kunnen opbouwen en begrijpen.
Digitale logica vormt de basis voor digitale elektronische apparaten zoals microprocessoren, microcontrollers, en andere geïntegreerde schakelingen die de kern vormen van embedded systemen.
Digitale logica is relevant voor studenten die embedded software studeren om de volgende redenen:
- Begrip van hardware: Embedded softwareontwikkelaars werken nauw samen met hardware en moeten een goed begrip hebben van de onderliggende digitale logica om effectief met hardwareontwerpers te kunnen communiceren en hardwareproblemen te kunnen debuggen.
- Programmeer- en ontwerpconcepten: Veel programmeer- en ontwerpconcepten in embedded software zijn gebaseerd op digitale logica, zoals binaire operaties, bitmanipulatie, en logische bewerkingen (AND, OR, NOT, en XOR). Een goed begrip van digitale logica helpt studenten deze concepten beter te begrijpen en toe te passen in hun softwareontwikkeling.
- Optimalisatie: Kennis van digitale logica stelt embedded softwareontwikkelaars in staat om hun code en algoritmen te optimaliseren voor efficiëntie, snelheid en energieverbruik, wat essentieel is voor veel embedded systemen met beperkte bronnen.
- Interfacing met randapparatuur: Embedded systemen communiceren vaak met verschillende randapparatuur (zoals sensoren, actuatoren, en communicatiemodules) via digitale interfaces en protocollen. Begrip van digitale logica helpt studenten bij het ontwerpen en implementeren van deze interfaces en het correct interpreteren van de gecommuniceerde gegevens.
- Foutdetectie en -correctie: In embedded systemen is het belangrijk om fouten in gegevens en communicatie te detecteren en te corrigeren. Digitale logica speelt een cruciale rol in foutdetectie- en correctietechnieken, zoals pariteitscontrole en Hamming-codes.
Samenvattend is digitale logica een fundamenteel concept dat belangrijk is voor studenten die embedded software studeren.
logische families en compatibiiteit
Er zijn verschillende logische families in geïntegreerde schakelingen (IC's) die op verschillende manieren zijn geoptimaliseerd. Hier zijn enkele belangrijke eigenschappen van de LS (Low-power Schottky), HCT (High-speed CMOS with TTL compatibility) en HC (High-speed CMOS) logische families:
- LS (Low-power Schottky) - Deze familie maakt gebruik van de TTL (Transistor-Transistor Logic) technologie met Schottky-diodes om de snelheid te verhogen en het stroomverbruik te verminderen. LS is niet compatibel met CMOS-families zoals HC en HCT, maar is compatibel met andere TTL-families. LS werkt meestal met een voedingsspanning van 5 V.
- HCT (High-speed CMOS with TTL compatibility) - Deze familie maakt gebruik van CMOS (Complementary Metal-Oxide-Semiconductor) technologie en is specifiek ontworpen om compatibel te zijn met TTL-niveau-ingangssignalen, zoals die van de LS-familie. Dit betekent dat HCT IC's kunnen worden gebruikt in combinatie met LS IC's zonder problemen. HCT werkt ook met een voedingsspanning van 5 V.
- HC (High-speed CMOS) - Deze familie maakt gebruik van CMOS-technologie en biedt een hoge snelheid en een laag stroomverbruik. HC is niet direct compatibel met TTL-families zoals LS, maar is compatibel met andere CMOS-families, waaronder HCT. HC werkt met een bredere voedingsspanning, meestal tussen 2 V en 6 V.
Hier is een tabel met de belangrijkste eigenschappen en compatibiliteit van deze logische families:
Familie | Technologie | Voedingsspanning | TTL-compatibiliteit | Opmerkingen |
---|---|---|---|---|
LS | TTL (Schottky) | 5 V | Ja | Hogere snelheid en lager verbruik dan standaard TTL |
HCT | CMOS | 5 V | Ja | Specifiek ontworpen voor TTL-compatibiliteit |
HC | CMOS | 2 V - 6 V | Nee | Hogere snelheid en lager verbruik dan HCT |
Let op dat er nog veel meer logische families zijn, elk met hun eigen eigenschappen en toepassingen. De keuze van de juiste logische familie hangt af van de specifieke eisen van uw project, zoals snelheid, stroomverbruik, compatibiliteit en kosten.
Logische families
Related topics (optional)
Arduino, ESP32 en STM32 microcontrollers zijn gebaseerd op verschillende technologieën en maken gebruik van verschillende logische families. Hier is een kort overzicht van de logische families die u kunt tegenkomen bij het werken met deze microcontrollers:
- Arduino: De meeste Arduino-boards, zoals de populaire Arduino Uno, maken gebruik van een Atmel AVR-microcontroller (zoals de ATmega328P). Deze microcontrollers zijn gebaseerd op CMOS-technologie en hebben een voedingsspanning van 5 V of 3,3 V, afhankelijk van het specifieke model. De logische niveaus zijn compatibel met andere CMOS-families, zoals HC en HCT.
- ESP32: De ESP32 is een populaire microcontroller voor IoT-toepassingen en is ontwikkeld door Espressif Systems. Het maakt gebruik van de Tensilica Xtensa LX6-microprocessor, die is gebaseerd op de CMOS-technologie. De ESP32 werkt op een voedingsspanning van 3,3 V en heeft logische niveaus die compatibel zijn met CMOS-families, zoals HC en HCT.
- STM32: STM32 microcontrollers zijn ontwikkeld door STMicroelectronics en zijn gebaseerd op de ARM Cortex-M-processorkernen. Ze maken ook gebruik van CMOS-technologie. Afhankelijk van het specifieke model kunnen STM32-microcontrollers werken met voedingsspanningen van 1,8 V, 2,5 V, 3,3 V of 5 V. De logische niveaus zijn compatibel met andere CMOS-families, zoals HC en HCT.
Bij het werken met deze microcontrollers en het aansluiten van externe logische IC's of randapparatuur, is het belangrijk om rekening te houden met de compatibiliteit van de logische niveaus en voedingsspanningen. Zorg ervoor dat u de specificaties van zowel de microcontroller als de externe componenten controleert om ervoor te zorgen dat ze correct met elkaar kunnen communiceren. In veel gevallen zijn level shifters of spanningsregelaars nodig om de compatibiliteit tussen verschillende logische families en voedingsspanningen te waarborgen.
Meer info kun je hier vinden : https://learn.sparkfun.com/tutorials/logic-levels
Meer info over de toleranties (omdat echte elektronica niet perfect is) : https://www.allaboutcircuits.com/textbook/digital/chpt-3/logic-signal-voltage-levels/ hier zie je ook het begrip “noise-level” dat van toepassing is als je componenten gaat koppelen, de signalen moeten over fysieke draden en die kunnen werken als spoelen, weerstanden en antenne's, dat betekent dat er vervorming optreedt. Op de pagina worden veel zaken uitgelegd, ook “Schmitt Trigger” ingangen en ook het koppelen van verschillende logische families.
level shifters
Level shifting is het proces van het vertalen van logische niveaus tussen verschillende spanningsdomeinen, wat vaak nodig is bij het aansluiten van componenten of IC's die op verschillende voedingsspanningen werken. Er zijn verschillende gangbare methoden voor level shifting, en hier zijn enkele van de meest gebruikelijke:
- Spanningsdeler: Een eenvoudige manier om een hoger logisch niveau naar een lager niveau te vertalen, is door een spanningsdeler te gebruiken, die bestaat uit twee weerstanden in serie. Dit is echter een unidirectionele oplossing en werkt niet goed voor bidirectionele communicatie of bij hoge frequenties.
- Diode met pull-up weerstand: Een diode in combinatie met een pull-up weerstand kan worden gebruikt om unidirectionele level shifting te bereiken. Dit werkt goed voor het vertalen van logische niveaus van lager naar hoger, maar niet in de tegenovergestelde richting.
- MOSFET: Een enkele MOSFET (n-channel of p-channel) kan worden gebruikt om bidirectionele level shifting te bereiken, wat handig is voor communicatieprotocollen zoals I2C en SPI. Dit werkt goed voor zowel hoge als lage frequenties, maar het juiste type MOSFET en een geschikte pull-up weerstand zijn belangrijk voor de goede werking van de schakeling.
- Speciale level shifter IC's: Er zijn veel commercieel verkrijgbare level shifter IC's die specifiek zijn ontworpen voor het vertalen van logische niveaus tussen verschillende spanningsdomeinen. Deze IC's bieden meestal bidirectionele level shifting, zijn ontworpen voor hoge frequenties en hebben ingebouwde bescherming tegen ESD (elektrostatische ontlading) en andere elektrische problemen. Enkele populaire level shifter IC's zijn de TXS010x-serie (bijvoorbeeld de TXS0102 of TXS0104) van Texas Instruments en de PCA9306 van NXP Semiconductors. https://www.tinytronics.nl/shop/en/communication-and-signals/level-converters/txs0108e-spi-i2c-uart-bi-directionele-logic-level-converter-8-channel
Bij het kiezen van een level shifting-methode is het belangrijk om rekening te houden met de vereisten van uw specifieke toepassing, zoals de communicatierichting (unidirectioneel of bidirectioneel), frequentie, voedingsspanningen en het aantal kanalen dat moet worden vertaald. Ook is het essentieel om de datasheets van de betrokken componenten te raadplegen om ervoor te zorgen dat de gekozen methode compatibel is met hun elektrische eigenschappen.
Gebruikelijke oplossingen :
- 3V3 MCU naar 5V output :
SN74AHCT125N 4-channel Level Converter - 3.3V to 5V - 14-pin DIP (zie tinytronics) om bijvoorbeeld een ESP32 output naar Arduino (5V) input te koppelen.
- BSS138 mosfet met pull ups :
Geschikt voor lage snelheid en ook voor I2C koppeling van bijv Arduino met 3V3 sensor.
Deze kun je http://cdn.sparkfun.com/datasheets/BreakoutBoards/Logic_Level_Bidirectional.pdf hier vinden en
bouwen van digitale systemen : logica en registers
Combinatorische logica en registers zijn belangrijke bouwstenen in digitale systemen en hebben een directe relatie met eindige toestandsmachines (Finite State Machines, FSM's). Hier is een uitleg van elk concept en hun onderlinge relatie:
- Combinatorische logica: Combinatorische logica is een soort digitale logica waarbij de uitgangen van een schakeling uitsluitend afhankelijk zijn van de huidige ingangen. Er is geen geheugen of opslag van eerdere toestanden in de schakeling. Enkele voorbeelden van combinatorische logica zijn basislogische poorten (AND, OR, NOT, XOR, enz.), multiplexers, decoders en vergelijkers.
- Registers: Registers zijn digitale schakelingen die gegevens kunnen opslaan en bevatten geheugenelementen, zoals flip-flops. Ze hebben de mogelijkheid om hun uitgangstoestand te behouden, zelfs als de ingangen veranderen. Dit maakt registers geschikt voor het opslaan van gegevens en het behouden van de toestand in digitale systemen.
- D-flipflop: Een D-flipflop (Data flipflop) is een veelgebruikt type flipflop dat fungeert als een 1-bit geheugenelement. Het heeft een D-ingang (data) en een klok-ingang (clock). Wanneer de klok een stijgende of dalende flank detecteert (afhankelijk van het ontwerp), wordt de waarde van de D-ingang opgeslagen in de flipflop en weergegeven op de uitgang (Q). D-flipflops worden vaak gebruikt in schakelingen die data opslaan, zoals registers en tellers.
- JK-flipflop: Een JK-flipflop is een ander type flipflop met twee ingangen, J en K, en een klok-ingang (clock). Afhankelijk van de waarden van J en K, kan de JK-flipflop zijn uitgang (Q) behouden, instellen, resetten of toggelen (inverteren) wanneer er een klokflank optreedt. JK-flipflops zijn veelzijdiger dan D-flipflops en worden gebruikt in een breed scala aan digitale schakelingen, zoals tellers en schuifregisters.
- Eindige toestandsmachines (FSM's): Een eindige toestandsmachine is een abstract model van een digitaal systeem dat een beperkt aantal toestanden heeft en overgangen tussen deze toestanden ondergaat op basis van de huidige toestand en ingangssignalen. FSM's kunnen worden geïmplementeerd met behulp van combinatorische logica en registers. Combinatorische logica wordt gebruikt om de logische functies en toestandsovergangen te definiëren, terwijl registers, zoals D- en JK-flipflops, worden gebruikt om de huidige toestand van de FSM op te slaan.
In een typische FSM-implementatie worden de huidige toestand en ingangssignalen gebruikt als invoer voor combinatorische logica, die vervolgens de volgende toestand en uitgangssignalen genereert. Deze volgende toestand wordt opgeslagen in registers (zoals D- of JK-flipflops) bij elke klokflank. De opgeslagen toestand wordt vervolgens gebruikt als de huidige toestand voor de volgende cyclus, waardoor de FSM door de verschillende toestanden kan overgaan op basis van de ingangssignalen en de interne logica.
Eindige toestandsmachines zijn een belangrijk concept in digitale systeemontwerpen, omdat ze helpen bij het modelleren en ontwerpen van complexe systemen met voorspelbaar en beheersbaar gedrag. Ze worden gebruikt in een breed scala aan toepassingen, zoals sequentiële logica, besturingssystemen, communicatieprotocollen, computerarchitectuur en nog veel meer.
Samenvattend, combinatorische logica, registers zoals D- en JK-flipflops, en eindige toestandsmachines zijn nauw met elkaar verbonden concepten in digitale systeemontwerpen. Combinatorische logica helpt bij het definiëren van logische functies en toestandsovergangen, terwijl registers de huidige toestand van een FSM opslaan en behouden. Eindige toestandsmachines bieden een manier om complexe digitale systemen te modelleren en te ontwerpen met behulp van deze bouwstenen.
Moore en Mealy FSM concepten
Moore- en Mealy-machines zijn twee veelvoorkomende soorten eindige toestandsmachines (Finite State Machines, FSM's) die worden gebruikt in het ontwerp van digitale systemen. Het belangrijkste verschil tussen beide typen ligt in de manier waarop ze hun uitgangen genereren:
- Moore-machine: In een Moore-machine zijn de uitgangssignalen uitsluitend afhankelijk van de huidige toestand van de machine. Dit betekent dat de uitgang alleen verandert wanneer de machine van de ene toestand naar de andere overgaat. Moore-machines hebben doorgaans een eenvoudiger ontwerp en zijn gemakkelijker te begrijpen, omdat de uitgangen alleen veranderen bij toestandsovergangen. Ze kunnen echter trager zijn, omdat de uitgangen pas veranderen nadat de machine een toestandsovergang heeft ondergaan.
- Mealy-machine: In een Mealy-machine zijn de uitgangssignalen afhankelijk van zowel de huidige toestand van de machine als de ingangssignalen. Dit betekent dat de uitgang onmiddellijk kan veranderen als reactie op veranderingen in de ingangssignalen, zelfs zonder toestandsovergangen. Mealy-machines kunnen snellere reactietijden hebben, omdat de uitgangen direct kunnen reageren op de ingangen. Ze kunnen echter complexer zijn om te ontwerpen en te analyseren, omdat de uitgangen afhankelijk zijn van zowel de toestand als de ingangen.
Het kiezen tussen een Moore- en Mealy-machine hangt af van de specifieke eisen van het digitale systeem dat u ontwerpt. Moore-machines zijn over het algemeen gemakkelijker te ontwerpen en te begrijpen, maar Mealy-machines kunnen snellere reactietijden bieden en mogelijk minder toestanden vereisen om hetzelfde gedrag te bereiken.
zie ook https://unstop.com/blog/difference-between-mealy-and-moore-machine voor uitleg.
In sommige gevallen kunnen Moore- en Mealy-machines equivalent zijn in termen van functionaliteit, maar de implementatiedetails en prestatiekenmerken kunnen variëren. Het is belangrijk om de trade-offs tussen beide typen te begrijpen en de juiste keuze te maken op basis van de behoeften van uw specifieke toepassing.
We hebben in de MakerLAB en CreateLAB diverse standaard chips liggen :
Nummer | Functie | Technologie |
---|---|---|
7400 | Quad 2-input NAND-poort | TTL |
7402 | Quad 2-input NOR-poort | TTL |
7404 | Hex inverter | TTL |
7408 | Quad 2-input AND-poort | TTL |
7410 | Triple 3-input NAND-poort | TTL |
7411 | Triple 3-input AND-poort | TTL |
7432 | Quad 2-input OR-poort | TTL |
7486 | Quad 2-input XOR-poort | TTL |
4011 | Quad 2-input NAND-poort | CMOS |
4017 | Decade Counter | CMOS |
4021 | 8-bit Shift Register | CMOS |
4030 | Quad 2-input XOR-poort | CMOS |
4066 | Quad Analog Switch | CMOS |
4071 | Quad 2-input OR-poort | CMOS |
4081 | Quad 2-input AND-poort | CMOS |
4093 | Quad 2-input NAND-poort | CMOS |
met Schmitt-trigger ingangen |
Deze tabel toont een selectie van enkele veelgebruikte logische chips uit de 7400-serie (TTL) en 4000-serie (CMOS) met hun functies en technologieën.
We hebben ook Registers, JK flip flops en D-FlipFlops.
Nummer | Functie |
---|---|
74HC595 | 8-bit Schuifregister met outputlatches |
74HC597 | 8-bit Schuifregister met inputlatches |
74HC166 | 8-bit Parallel-In/Serial-Out schuifregister |
74HC165 | 8-bit Serial-In/Parallel-Out schuifregister |
74HC194 | 4-bit bidirectioneel universeel register |
74HC299 | 8-bit universeel schuifregister |
74HC4094 | 8-stage Shift-and-Store Bus Register |
CD4014B | 8-stage Static Shift Register (CMOS) |
CD4015B | Dual 4-bit Static Shift Register (CMOS) |
CD4021B | 8-bit Static Shift Register (CMOS) |
Page owners
- Edwin van den Oetelaar
- Jan Dobbelsteen