PWS: LOGISCHE SCHAKELINGEN

advertisement
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
Download