Logische schakelingen René Dohmen eerste versie: 12 september 2007 laatste versie: 28 september 2010 2 Begin Bij de onderstaande opdrachten maak je schakelingen met het programma MM Logic. Bewaar de bestanden en zet ze samen met dit Word-bestand (met ingevulde tabellen) op je website! Inleiding Je hebt tot nu toe gezien dat de computer met slechts twee cijfers werkt: 0 en 1. Je hebt ook met binaire getallen leren rekenen. Maar in werkelijkheid zijn het geen getallen waar de computer mee werkt, maar stroompjes, electrische ladingen en spanningen. Er zijn loopt bijvoorbeekd wel of geen stroom. Of er is wel of geen electrscihe lading (electronen). Er zijn dus twee mogelijkheden, er is geen tussenweg. De stroom kan bijvoorbeeld een lampje laten branden. Loopt er geen stroom op, dan brandt het lampje niet. In een chip zitten ook schakelaars die met elektrische stroompjes te sturen zijn. We noemen dat transistors. In combinatie met andere schakelingen die op een transistor lijken zijn logische schakelingen te maken. Zo een logische schakeling noemen we een poort. Deze poorten zijn tot zinvolle schakelingen te combineren. Een heel eenvoudig voorbeeld is de binaire representatie van de hoofdletter A. Deze heeft een ASCIIwaarde van 65, welke vertaald naar het binaire stelsel de volgende bitreeks oplevert: 1000001. Hieronder zie je dat vertaald naar stroompjes en lampjes (LED = Light Emitting Diode = Licht uitzendende diode). 2 1. De letter A weergeven met schakelaartjes in MM Logic. We gaan de schakelingen in de computer simuleren met een programma dat Multimedia Logic heet. Als je het programma opstart zie je de onderstaande interface: In het Palette venster, dat hiernaast staat, vind je allerlei componenten waarmee je een schakeling kunt bouwen. OPDRACHT 1 Bouw het scherm van de vorige pagina na. Gebruik daarvoor schakelaars, verbindingen en LEDs. Als je het scherm hebt nagebouwd, kun je de constructie laten werken door op het start-pictogram te klikken (zie hieronder). Je kunt een onderdeel verschuiven door in het palet voor de pijl (muisaanwijzer) te kiezen: Daarna klik je op het onderdeel en kun je het verschuiven. Je kunt een draad laten vertakken door een verbindingspunt op het werkblad te leggen: en daar de draden mee te verbinden. 2 Je kunt, als het programma 'loopt', de schakelaartjes omzetten. Als je de schakelaars met de waarden 1 en 64 aan zet zullen twee ledjes gaan branden. Maar dit is natuurlijk nog een beetje flauw. We willen de letter die we binair hebben gecodeerd met behulp van de schakelaars natuurlijk op een beeldscherm zien. Dat gaan we nu doen. Bouw daartoe het onderstaande schema na. Werk nauwkeurig! Als alles klaar is, start je de applicatie, zet je de schakelaartjes om zodat je de binaire code bekend maakt van een karakter. Vervolgens druk je op PUSH en wordt de letter op het beeldscherm gezet een PUSH-schakelaar maak je als volgt: zet een schakelaar op het werkblad kies als gereedschap de selectiepijl. klik met de rechter muisknop op de schakelaar kies in het menu voor Properties Verander daarna het Type van Troggle in Momentary ter veranderen.). OPDRACHT 2 Op dezelfde manier kun je ook een toetsenbord in het geheel verwerken. Maak een schakeling die het volgende doet: Je tikt op het toetsenbord (van de PC) een letter in; dit leidt ertoe dat de juist LED’s gaan branden (de schakelaartjes kun je weghalen); Vervolgens wordt de letter op het beeldschermpje geplaatst (na een muisklik op de PUSHknop). 2 2. De computer opdrachten laten uitvoeren Een computer kan opdrachten uitvoeren. Dat gebeurd door een combinatie van eenvoudige schakelingen. In de computer zitten schakelingen die op basis van ontvangen stroompjes ook op een bepaalde manier reageren. We noemen ze poorten. In je boek worden ze vergeleken met lichtschakelaars. De EN-poort (AND) Heronder zie je een EN-poort. OPDRACHT 3 Bouw bovenstaande poort na en vul dan het onderstaande schema in (gebruik de waarden 0 en 1). P 0 0 1 1 Q 0 1 0 1 P AND Q 2 De OF-poort (OR) Hieronder zie je een schakeling met een OF-poort. OPDRACHT 4 Bouw ook deze poort weer na en vul het schema in: P 0 0 1 1 Q 0 1 0 1 P OR Q De XOF-poort (XOR) Hieronder zie je een schakeling met een Exclusieve OF-poort. OPDRACHT 5 Bouw schakeling met de XOR-poort na en vul de tabel in. P 0 0 1 1 Q 0 1 0 1 P XOR Q 2 De NIET-poort (NOT) OPDRACHT 6 Bouw onderstaande poort na en vul de tabel in. P onwaar (0) waar (1) NOT P Je hebt nu een aantal schakelingen bekeken. Deze schakelingen zijn ook te combineren. 2 OPDRACHT 7 Bekijk de onderstaande schakeling. Wanneer zal het lampje branden? Je kunt de schakeling natuurlijk nabouwen, daarna kun je alle mogelijk combinaties van de schakelaars proberen. Op hoeveel verschillende manieren kun je de schakelaars instellen? Er zijn drie schakelaar. Elke schakelaar heeft twee standen (0 en 1). Er zijn dus 2x2x2=8 mogelijke combinaties. Je kunt die op de volgende manier overzichtelijk in een tabel schrijven. A 0 0 0 0 1 1 1 1 B 0 0 1 1 0 0 1 1 C 0 1 0 1 0 1 0 1 UIT Als je de bits van de opeenvolgende regels achter elkaar schrijft valt je misschien iets op: 000,001,010,011,…, 1111 Dit zijn de getallen 0 tot en met 7 (en dat zijn acht getallen) Vul nu de tabel in door alle mogelijkheden één voor één te proberen. Hoe groot is de tabel? Hieronder kun je aflezen hoeveel regels een tabel heeft voor een schakeling met een bepaald aantal schakelaars (De kopregel telt voor dit aantal niet mee). Aantal schakelaars Aantal regels 1 2 2 4 3 8 4 16 2 BEREDENEREN VAN LINKS NAAR RECHTS LET OP: Je moet dit ook kunnen zonder het programma te gebruiken. Dat gaat als volgt. We gaan uit van A=0, B=1, C=0. De OR-poort heeft een 0 en een 1 op de ingang staan. De uitgang is dus 1. De AND-Poort heeft een 1 (van de OR-poort) en een 0 (van schakelaar C) op de ingang staan. De uitgang is dus 0. Op deze manier moet je alle acht de regels nalopen. BEREDENEREN VAN RECHTS NAAR LINKS Bekijk nogmaals de schakeling. Had je ook kunnen beredeneren in welke stand de schakelaars kunnen staan als het lampje brandt? Bekijk de schakeling vanuit het lampje. Het lampje brand als de AND-poort op de uitgang 1 heeft staan. Dat is alleen zo als de beide ingangen van de AND-poort 1 zijn. Schakelaar C moet dus op 1 staan. De andere 1 moet van de OR-poort komen. Die is 1 als op minst 1 van de ingangen een 1 staat. Schakelaar A, of schakelaar B of A én B moeten op 1 staan. Anders gezegd. Het lampje is uit als C op 0 staat en als A en B beide nul zijn Na deze redenering kun je de tabel in één keer invullen. Probeer dat! 2 OPDRACHT 8 Bekijk de onderstaande schakeling. Bij welke stand van de schakelaars zal het lampje branden? Probeer dit eerst te beredeneren zonder gebruik te maken van het programma. Bouw de schakeling daarna na en controleer je antwoord. OPDRACHT 9 Bekijk de onderstaande schakeling. Welke waarden moeten de schakelaars hebben om het lampje te laten branden? Controleer je antwoord door de schakeling na te bouwen. 2 OPDRACHT 10 Bouw de onderstaande schakeling na. In de onderstaand tabel staan de eerste vier regel met mogelijk waarden van P, Q, R en S al ingevuld. Vul de tabel aan. Hoeveel regels heb je nodig? Leg uit waarom. Vul daarna met behulp van het programma de kolom uitgang in. P 0 0 0 0 Q 0 0 0 0 R 0 0 1 1 S 0 1 0 1 Uitgang 2 OPDRACHT 11 Met de onderstaande schakeling kun je met behulp van adresleiding 1 en 2 bepalen bij welke van de 4 uitgangen het lampje gaat branden. Voor de ingang zijn vier mogelijk waarden 00, 01, 10 en 11. Voor de uitgang worden die waarden omgezet in 1000, 0100, 0010 en 0001. Bouw de schakeling na en controleer de werking. Vul daarvoor de volgende tabel in: A 0 0 1 1 B 0 1 0 1 C D E F Na deze opdracht moet je begrepen hebben dat je met TWEE schakelaar VIER lampen/apparaten/stroompjes aan of uit kunt zetten. Hoeveel lampjes kun je maximaal aan/uit schakelen met drie schakelaars? En met vier? 2 OPDRACHT 12 In de schakeling hieronder herken je wellicht de halfadder. Bouw de schakeling na en controleer dat ze twee bits optelt en de carry juist berekent. S is de som van de bits A en B. C is de carry (‘onthouden’). De opteltabel voor twee bits ziet er zo uit: A 0 0 1 1 B 0 1 0 1 S 0 1 1 0 C 0 0 0 1 Onder de S herken je waarschijnlijk wel de tabel van de Exclusieve OF-poort (XOR). Onder de C herken je de tabel van de AND-poort. Je moet deze schakeling van buiten kennen! Vermeldt bij een toets altijd duidelijk de S en de C 2 OPDRACHT 13 Hieronder staat de fulladder. Met deze schakeling kun je twee bits en een carry (Carry In)optellen (in totaal dus drie bits). Bouw de schakeling na en controleer dat ze drie bits optelt en de carry (Carry Out) juist weergeeft. S is de som van de bits A en B. Cin is de carry In (De carry die je in de vorige optelling ‘onthouden’ hebt). Cout is de carry die je moet onthouden voor de volgende berekening. De opteltabel voor drie bits (twee bits en een carry) ziet er zo uit: A 0 0 0 0 1 1 1 1 B 0 0 1 1 0 0 1 1 Cin 0 1 0 1 0 1 0 1 S 0 1 1 0 1 0 0 1 Cout 0 0 0 1 0 1 1 1 Je kunt deze schakeling misschien wat beter onthouden als je in de tekening twee halfadders herkend. Je moet deze schakeling van buiten kennen! Optellen in een CPU De CPU is het hart van een moderne computer. De CPU (Central Processsing Unit, in hett Nederlands ook wel CVE – Centrale VerwerkingsEenheid – genoemd). Doet bijna alle bewerkingen in de computer. Veel berekeningen worden in de CPU gedaan. Hieronder zie je twee bytes zie bij elkaar geteld moeten worden. 1 1 0 0 1 0 0 1 0 1 0 1 0 0 1 1 FA FA FA FA FA FA FA HA Voor het meeste rechtse bit gebruikt de CPU een halfadder (HA), omdat er nog geen Carry van een vorige berekening kan zijn. Van het tweede bit van recht moet er een Fulladder (FA) gebruikt worden. Als er een Carry was, moeten er namelijk 3 bits bij elkaar geteld kunnen worden. Hoeveel Fulladders zijn er nodig bij een moderne 64bits CPU? 2 In een moderne computer worden ook veel berekeningen door een grafische kaart gedaan. Berekeningen voor 3D-spellen worden door de grafische kaart zelfs sneller gedaan dan een CPU dat kan. Intermezzo Op internet zijn mooie grafieken te vinden over het aantal transistoren (daar worden logische poorten o.a. van gebouwd) dat op een CPU (Pentium, Athlon, etc) te vinden is: Deze grafiek hoort bij de wet van Moore die zegt dat elk jaar het aantal transistoren in een chip verdubbeld. http://nl.wikipedia.org/wiki/Transistor http://nl.wikipedia.org/wiki/Computerchip http://nl.wikipedia.org/wiki/Wet_van_Moore Let op: langs de horizontale as staan jaren op gelijke afstand, maar langs de verticale as staat het aantal niet met gelijke afstanden vermeldt. In de meeste ingewikkelde chips zitten tegenwoordig (2009) ruim 2 miljard transistoren. http://en.wikipedia.org/wiki/Transistor_count Dat computers echter niet sneller worden werd in 1995 door Wirth beschreven: http://nl.wikipedia.org/wiki/Wet_van_Wirth 2 OPDRACHT 14 De figuur laat een schakeling zien die opgebouwd is uit twee OF-poorten en twee NIET-poorten. Deze schakeling heet een flip-flop. Er zijn twee ingangen: SET en RESET. A en B zijn de uitgangen. RESET OF NIET A OF NIET B SET Er is hier sprake van een zogenaamde kruislingse terugkoppeling. Dit betekent dat de uitgang van de bovenste NIET-poort is verbonden met een ingang van de onderste OF-poort en dat de uitgang van de onderste NIET-poort teruggekoppeld wordt met de bovenste OF-poort. Bouw de schakeling na. Gebruik voor SET en RESET een PUSH-schakelaar. Als je de schakeling laat ‘lopen’, zien de lampjes er wat vreemd uit: ze zijn gestreept. Dat komt omdat de schakeling niet weet of ze aan of uit zijn. De flipflop is een geheugen van 1 bit. Er kan dus een 0 of een 1 in het geheugen staan, dat is alles. Met de SET schakelaar zet je het geheugen op 1. Als je de schakelaar los laat blijft het geheugen op 1 staan. Als je meteen daarna nog een keer op SET drukt veranderd er niets, het geheugen staat immers al op 1. Met RESET zet je het geheugen op 0. Als je de schakelaar los laat blijft het geheugen op 0 staan. Meteen daarna weer resetten veranderd niets. Als je achtereenvolgens op SET en RESET drukt kun je het geheugen van 0 in 1 en omgekeerd veranderen. 2 OPDRACHT 15 - Een geheugen van 2 bits Door twee flipflops te gebruiken kun je een geheugen van twee bits maken. Allereerst moet je deze schakeling nabouwen: Begin met de twee flipflops (die binnen de groene rechthoeken). Voor de RESET-ingang bouw je een AND-poort en een NOT-poort (gele rechthoeken). Voor de SET-ingang bouw je een AND-poort (blauwe rechthoeken) Daarna verbind je de NOT-poorten en de AND-poorten met de twee schakelaars en de PUSH-schakelaar. De AND-poorten zijn er, om er voor te zorgen dat er alleen een signaal doorgegeven wordt als je op de PUSH-schakelaar drukt. De NOT-poort zorgt ervoor dat het signaal van de twee normale schakelaars omgekeer bij de resetingang van de flip-flop komt. Zo komt er steeds een 1 bij de ene ingang vande flip-flop en een 0 bij de andere. Je ziet dat er behalve de 8 poort in de twee flipflops nog 6 andere poorten nodig zijn om alles in goede banen te leiden. Als je nu met de twee schakelaars een getal van twee bits instelt, wordt deze pas overgenomen als je op de push-schakelaar drukt. De lampjes laten dan zien dat de twee flipflops het getal onthouden, ook nadat je de push-schakelaar losgelaten hebt. In elke computer zit een systeemklok. Die geeft heel vaak (bijvoorbeeld 2 miljard keer bij een 2 GHz processor) de opdracht om een bewerking uit te voeren. In onze schakeling is dat de push-schakelaar. Telkens als de systeemklok tikt, is dat een druk op de knop. In een echte processor stelt het getal dat je met de schakelaars instelt (bijvoorbeeld) een uitkomst van een berekening voor. Dit wordt met deze schakeling in een geheugen opgeslagen. Je hebt nu dus geleerd hoe je twee bits in een geheugen kunt opslaan. In een echte computer is het natuurlijk allemaal wat ingewikkelder. Op een usb-Stick met 16Gb moeten 16x1000.000.000x8=128.000.000.000 bits bewaard worden. 2 Andere soorten geheugen Tegenwoordig worden er ook andere soorten geheugens gebruikt. Bij Flash-geheugen bijvoorbeeld (dat zit op je USB-Stick) blijft het geheugen ook bewaard als je er geen elektrische spanning meer op staat. Bij een flipflop is het geheugen weg als je de stroom uitschakelt. Op een harddisk wordt iets onthouden door plekjes op een schijf magnetisch te maken. Het geheugen in een PC zit op een zogenaamd reepje. Daarop zitten 8 (soms 9) chips die samen 1GB geheugen hebben. Op 1 chip zitten dit 1 miljard bits, dat is natuurlijk enorm. Hoe zit dat dan met onze hersenen? 2 Oefenen voor het proefwerk Er staan in deze uitleg nogal wat dingen die je van buiten moet leren. Maar vooral met opgave 8 t/m 10 kun je ook gewoon goed oefenen. Vandaar de volgende opgave. Ook deze opgave moet je op je website zetten. Zet de uitwerking in een Word-bestand (screenshot van de schakeling en de tabel). Daarnaast moet je het .lgi-bestand erbij zetten. OPDRACHT 16 (HAVO) Bouw een schakeling met minimaal 3 schakelaars, minimaal 3 logische poorten en minimaal 1 lampje Maak de tabel bij jouw schakeling en controleer deze eventueel met het programma. OPDRACHT 16 (VWO) Bouw een schakeling met minimaal 4 schakelaars, minimaal 4 logische poorten en minimaal 2 lampjes. De lampjes mogen niet rechtstreeks met een schakelaar verbonden zijn. Maak de tabel bij jouw schakeling en controleer deze eventueel met het programma. 2 MASTEROPDRACHTEN Hieronder staan masteropdrachten. Je moet uit de twee opdrachten één kiezen om uit te werken. Ook deze opgave moet je op je website zetten. Zet de uitwerking in een Word-bestand (schermafdruk van de schakeling en de tabel). Daarnaast moet je het .lgi-bestand erbij zetten. OPDRACHT 17A Bouw met behulp van een half adder en drie full adders een schakeling die twee 4 bits getallen (twee nibbles) bij elkaar kan tellen Schematisch ziet dat er als volgt uit. Om het eerste (achterste) bits op te tellen heb je een halfadder (ha) nodig. Voor het tweede tot en vierde bits bij elkaar te tellen heb je een fulladder (fa) nodig, omdat het kan zijn dat je een carry van de vorige optelling moet meetellen. fa 4 fa 3 fa 2 ha 1 Gebruik 2x4 schakelaars om de twee vier bits getallen te maken. Gebruik 4 lampjes voor de uitkomst. i i i i F A F A F A H A u i u i u i c u i OPDRACHT 17B Bouw een schakeling die van een vier bits getal (een nibble) de negatieve waarde maakt volgens de two’s complement methode (bits omkeren en er daarna 1 bij optellen). Schematisch ziet dat er als volgt uit: met vier schakelaars maak je het getal van 4 bits met vier not-poorten draai je deze vier bits om met nog vier schakelaars maak het de 1 (de 3 linkse bits staan altijd op 0, het rechtse bit steeds op 1) met 1 halfadder en 3 fulladders tel je de beide getallen op In totaal heb je dan 4 (not-poorten) + 2 (halfadder) + 15 (3 fulladders) = 21 poorten nodig. Je kun hierop bezuinigen als je ziet dat de fulladders door halfadders te vervangen zijn (leg uit waarom!). Nu zijn er nog maar 12 poorten nodig. J, Offermans is het in 2009 gelukt deze schakeling om na lang nadenken met slechts 8 poorten te maken! Dat lukte doordat hij het algoritme om een getal negatief te maken slimmer beschrijft: Bekijk de bits van rechts naar links Zoek de eerste 1 (van rechts gezien). 2 Draai alle bits links van deze 1 om. Let wel op: het moet natuurlijk wel een positief getal zijn, dus het meest linkse bit moet een 0 zijn. Bijvoorbeeld: 0001 → 1111 0010 → 1110 0111 → 1001 i i i i F A F A F A H A 0 u 0 u 0 u c u 1 OPDRACHT 17C Met behulp van een 4 bit addes (opdracht 17b) kun je vrij gemakkelijk een 2x2 bit vermenigvuldiger maken. Behalve de 2x2 schakelaars voor de invoer heb je ook 1 schakelaar nodig die permanent op 0 staat. Voor de uitvoer gebruik je 4 LED's. 2 2 TENSLOTTE 0 Je hebt nu niet alleen wat logische poorten, maar ook een aantal basisschakelingen van een processor bestudeerd. Je kunt een kleine processor maken door deze te combineren. Je zou bijvoorbeeld de volgende onderdelen kunnen combineren: Push-schakelaar voor de klok. Schakelaar(s) die het getal 1 maken. Schakelaar(s) om tussen een twee of vier geheugens te kunnen kiezen (opdracht 11). Schakelaar die bepaald of er wordt gelezen uit het geheugen, of dat erin wordt geschreven. Schakelaar die bepaald wat in het geheugen geschreven wordt (het getal 1 of de uitkomst van een optelling). Schakeling om twee kleine getallen bij elkaar te kunnen tellen (opgave 17) TENSLOTTE 1 Maak de volgende schakeling. Hiermee kun je het liedje ‘Mieke heeft een lammetje’ spelen met de toetsen 1,2 en 4. In deze volgorde: 4-2-1-2-4-4-4-2-2-2-4-4-4-4-2-1-2-4-4-4-4-2-2-1-2-1 Dubbelklik op de luidsprekers om de juiste frequentie in te stellen. Op deze website kun je de frequentie van noten opzoeken. Kies bijvoorbeeld 4=B, 2=A en 1=G. Met de groeten van Bo. 2 TENSLOTTE 2 Bouw de volgende schakeling en geef de tabel die hier bij hoort (met de groeten van D. Derikx) 2 BIJLAGE Bij de NOT-Poort is het je misschien opgevallen dat de schakeling vreemd is. Hoe kan een lampje nu gaan branden als er geen stroom door de schakelaar komt? De waarheid is dat de schakelingen die we tekenen niet compleet is. Op de eerste plaats ontbreekt er natuurlijk een spanningsbron (batterij). In de onderstaande afbeelding kun je de complete tekening zien. Via de schakelaar komt een kleine stroom die bepaald of de poort wel of geen stroom naar de LED doorlaat. Ook bij de andere poorten kun je de schakeling met de ontbrekende draden en componenten aanvullen 2 End. 2