PWS: LOGISCHE SCHAKELINGEN Door Bart de Heij Betreffende Natuurkunde Begeleid door: Dhr Kramer 12-02-2009 ID College Groen van Prinster Singel 52 2805TE Gouda Inhoudsopgave Inleiding in digitale systemen 3 Het onderzoek 3 Ontwerp van de rekenmachine 4 Decimale en binaire getallen 4 Binair rekenen 5 Binair uitdrukken in schakelaars 7 Berekeningen uitvoeren in schakelingen 8 Reflectie 9 Literatuurlijst 10 Internet 10 2 Inleiding in digitale systemen Tegenwoordig zijn er erg veel systemen beschikbaar, die op digitale techniek zijn gebaseerd. Veel gebruikte apparaten bevatten een (micro-)processor om bepaalde functionaliteit te bieden. Dit kan een senseo apparaat zijn die moet bepalen hoelang het water moet opwarmen, hoelang de koffie met welke druk moet doorstromen, maar ook een complexer systeem zoals een computer (met teveel mogelijkheden om op te noemen) of een mobiele telefoon, die tegenwoordig ook “alles” kan. Elk systeem heeft een verzameling symbolen (bijvoorbeeld een alfabet) die alle mogelijkheden bevatten om een taal of nummer te vormen. Het westers alfabet maakt gebruik van 26 symbolen (letters) waarmee woorden te maken zijn waar de hele taal uit opgebouwd is. Digitale systemen hebben een veel simpeler alfabet bestaande uit twee tekens: 1 of 0 en wordt ook wel het binaire systeem genoemd. Het binaire systeem is ontstaan uit de manier waarop schakelingen zijn opgebouwd. Simpel gezien zijn ze opgebouwd uit een hoeveelheid blokken waarvan elk blok 1 schakelaar is. Een schakelaar heeft 2 standen: Aan (1) of Uit (0). In digitale systemen worden deze schakelingen gedaan door een onderdeel genaamd een transistor. Het onderzoek Ik wil onderzoeken hoe een schakeling met alleen een aan- of uit- functie op kan schalen tot een volledig complex systeem en hoe je zelf dan zo’n systeem kan bouwen. Ik maak zelf erg veel gebruik van computers zowel voor school, werk als entertainment doeleinden en wilde daarom eens dieper bekijken hoe het precies in zijn werk gaat. In het vak natuurkunde word ook aandacht besteed aan logische schakelingen. Dit is beperkt tot de grotere componenten (je zal zelf geen pulsenteller hoeven opbouwen uit transistors), maar er wordt wel aandacht besteed aan de basis van het binaire systeem. Hierdoor sluit mijn profielwerkstuk goed aan op het vak; het gaat in op de behandelde materie maar met een andere danwel diepere toepassing. Een groot deel van het onderzoek is gebaseerd op de lecturen van de universiteit van Leiden. Voor de opleiding (technische) informatica besteden zij aandacht aan Digitale Techniek. Hierin word de basis van de techniek uitgelegd beginnend bij schakelingen zelf en daarna uitgebreid naar complexere systemen. Om niet puur een lectuur studie te doen ga ik ook zelf een digitaal systeem te bouwen. Dit gaat om een beperkte rekenmachine met optel- en aftrekmogelijkheden. Omdat het in fysieke componenten maken van zo’n apparaat onmogelijk is zonder dure machines om chips te maken zal ik daarvoor een simulatie maken. Hiervoor maak ik gebruik van de programmeer taal PHP, omdat ik hier de meeste programmeer ervaring in heb. Indien dit niet lukt kan ik terugvallen op Xilinx ISE Design Suite, een software pakket wat ook in de industrie gebruikt wordt voor het ontwerpen van complexe schakelingen. Dit wordt onder andere ook gebruikt voor microprocessors, maar dat is een stap te hoog voor dit onderzoek. 3 Ontwerp van de rekenmachine Decimale en binaire getallen Aangezien alle digitale systemen gebruik maken van het binaire systeem, moeten we eerst bekijken hoe we een decimaal getal (0 t/m 9) om zetten naar een binair getal. Een binair getal bestaat uit bits, elke bit is 1 cijfer en heeft de waarde 1 of 0. Een combinatie van bits maakt een getal. De positie van een bit in het getal bepaald de waarde, er wordt van rechts naar links gewerkt met machten van 2 voor de waarde van het getal. Om er achter te komen welke decimaal getal een bit voorstelt tel je van rechts naar links en begin je bij 0, daarna kan je de formule n = 2n toepassen, de 4e bit heeft dus de waarde 24=16 Positie van bit 8 7 6 5 4 3 2 1 0 n = 2n 28 27 26 25 24 23 22 21 20 Waarde 256 128 64 32 16 8 4 2 1 Tabel 1, binaire waardes Ik zou eerst een getal uitwerken. (al moet ik zeggen dat ik de tabel andersom geleerd heb, omdat je als eerst de grootste waarde eruit gaat halen) Bijvoorbeeld het getal 150. Daar pas het getal 128 volledig in. Bit nummer 7 is dus ‘gebruikt’en daarom een 1. Dan houdt men nog 22 over. Dit is veel kleiner dan 64 en 32. Bit 6 en 5 zijn niet gebruikt en dus 0. 16 kan men wel uit 22 halen en bit 4 is ook een 1. Nu is nog 6 over. Bit 3 is 0. Bit 2 is 1 en er blijft nog 2 over. Bit 1 is ook 1 en bit 0 is 0. Nu krijgen we de code: 010010110 Een aantal voorbeelden: Binair getal 1010 101101 1000000 Bit waardes 8+0+2+0 32+0+8+4+0+1 64+0+0+0+0+0+0 Decimale getal 10 45 64 Tabel 2: binair naar decimaal voorbeelden Om alle bewerking, zoals optellen en aftrekken, uit te kunnen voeren in de schakelingen moeten alle getallen binair gemaakt worden. Het omzetten hiervan zal buiten de simulatie gebeuren om het geheel niet te complex te maken. 4 Binair rekenen Om het binair rekenen goed te begrijpen zou je terug moeten gaan naar de manier waarop optellen en aftrekken op de basis school werd aangeleerd, door de methode van 2 getallen boven elkaar zetten en als een getal hoger dan 10 is een 1 optellen bij het volgende getal in de reeks. Hier wordt een getal opgedeeld in eenheden, tientallen, honderdtallen enzovoorts. Bij binair rekenen gaat het op dezelfde manier, maar dan met andere waarden van één getal. Bijvoorbeeld de getallen 99 en 915 opgeteld: Decimaal 99 915 + 1014 90 + 9 Eenheden: 9 + 5 = 10 + 4 900 + 10 + 5 Tientallen: 9(0) + 1(0) + 1(0) = 10(0) + 1(0) Honderdtallen: 9(00) + 1(00) = 10(00) Duizendtallen: 1(000) Voorbeeld Decimaal rekenen op de basis manier Voor binair rekenen gelden dezelfde regels, als eerste worden de 1-tallen opgeteld, daarna de 2tallen enzovoorts. Ter voorbeeld tellen we 10001 (17) en 01011(11) = 28 op: Binair 10001 01011 + 24 + 2 0 23 + 2 1 + 2 0 11100 20: 1 + 1 = (21)1 + (20) 0 21: 0 + 1 + 1 = (22)1 + (20)0 22: 0 + 0 + 1 = 1 23: 0 + 1 = 1 24: 1 + 0 = 1 Voorbeeld 1: Binair rekenen Hierbij gaat alles op dezelfde manier als bij decimaal rekenen alleen in plaats van 0 t/m 9 worden alleen de 1 en de 0 gebruikt. De manier van overerven naar het volgende getal (tien naar honderdtallen of 20 naar 21-tallen) ???. Zodra iets boven de 1 + 1 uitkomt, wordt die waarde 0 en de 2n+1 krijgt een 1 erbij. Dit gaat ook voor grotere getallen. In de computerbranche wordt standaard gebruikt gemaakt van bytes, waar 1 byte bestaat uit 8 bits. Binair 01001001 01010001 + 26 + 2 3 + 2 0 26 + 24 + 2 0 10011010 20: 1 + 1 = (21) 1 + (20) 0 21: 0 + 0 + 1 = 1 22: 0 + 0 = 0 23: 1 + 0 = 1 24: 0 + 1 = 1 25: 0 + 0 = 0 26: 1 + 1 = (27) 1 + (20) 0 27: 0 + 0 + 1 = 1 Voorbeeld 2: Binair rekenen met 8 bits 5 In het slechtste geval kan het voorkomen dat je 1 + 1 heb en ook nog een + 1 vanuit het vorige getal, hierbij krijg je dan een + 1 bij het volgende getal (2n+1) en een 1 bij het huidige getal (2n) hieronder nog een derde voorbeeld: Binair 10011001 01011011 + 01110100 27 + 24 + 2 3 + 2 0 26 + 24+ 23 + 21 + 20 20: 1 + 1 = (21) 1 + (20) 0 21: 0 + 1 + 1 = (22) + (21) 0 22: 0 + 0 + 1 = 1 23: 1 + 1 = (24) 1 + (23) 0 24: 1+ 1 + 1 = (25) 1 + (26) 1 25: 0 + 0 + 1 = 1 26: 0 + 1 = 1 27: 1 + 0 = 1 Voorbeeld 3: Binair rekenen met getalsovererving 6 Binair uitdrukken in schakelaars 7 Berekeningen uitvoeren in schakelingen 8 Reflectie Zoals duidelijk zichtbaar is, is dit profielwerkstuk nog niet af. Dit heeft 2 oorzaken: - Te laat beginnen; ik heb de omvang en de vereisten van het werkstuk onderschat waardoor ik het te ver vooruit heb geschoven. Ook gebrek aan tijd, voornamelijk door nevenactiviteiten, heeft meegespeeld in het vooruit schuiven van het daadwerkelijk werk. - Onderschatting complexiteit. De deelonderwerpen “Binair uitdrukken in schakelaars” en “Berekeningen uitvoeren in schakelingen” zijn op dit moment nog leeg. De voornaamste oorzaak hiervan is dat ik het pas volledig in kan gaan vullen als ik ook daadwerkelijk ervaring heb opgedaan met het maken van de schakelingen. Mijn eerste plan was om dit uit te voeren in de programmeer taal PHP, maar na meerdere pogingen en drie verschillende aanpakken lijkt dit niet te lukken. De complexiteit en de hoeveelheid onderdelen en tussenliggende verbindingen, voor een 8 bits optelfunctie zijn ruim 24 verbindingen nodig, en dit zou handmatig in de code aangegeven moeten worden. Dat is ten eerste een ramp qua hoeveelheid verwijzingen en ten tweede veel te fout gevoelig. Een ander probleem waar ik tegen aan liep bij het programmeren was de grafische presentatie. Het bleek onmogelijk te zijn om de verbindingen te “tekenen” zonder daar meer tijd in kwijt te zijn dan het daadwerkelijk programmeren. Dit leek mij niet de bedoeling. Daarom ben ik van het idee van zelf programmeren afgestapt en opzoek gegaan naar een alternatief. Hierbij kwam ik uit op de software “Xilinx ISE” een programma dat ook in de chipindustrie gebruikt word en speciaal gemaakt is voor het ontwerpen van schakelingen. De resultaten hiervan zijn er op het moment van schrijven nog niet, ik ben nog bezig met de (vrij stijle) leercurve van het programma te overwinnen. Ik hoop door middel van Xilinx ISE toch op korte termijn de gewenste proef resultaten te kunnen bereiken en mijn profiel werkstuk af ronden. 9 Literatuurlijst Internet http://www.allaboutcircuits.com/vol_4/index.html - All About Circuits http://www.liacs.nl/~stefanov/courses/DITE/ - Digital Technique, Fall 2008 10