Les 7: De ALU The number of computations per joule of energy dissipated doubles approximately every 1.57 years. Koomey’s law.

Slides:



Advertisements
Verwante presentaties
Elektriciteit.
Advertisements

Aflezen van analoge en digitale meetinstrumenten
Serieel naar parallel omzetting
CODEERELEMENTEN DECODERS BCD naar 7-SEGMENT
De wisselschakeling..
Parallel naar serieel omzetting
Vervolgbijeenkomst 2 Procesfasering bij Leren Leren.
Hardware (1) SGDB Informatica.
Par. 3.1 Computers zijn overal
Hardware (1) NSG Informatica.
Jerry van den Heuvel Pim van der Lee
K3 Vectoren Na de les weet je: Wat een vector is
Practica Computerlinguistiek Tekst en uitleg:
Experimenteel onderzoek
Samenvatting Newton H2(elektr.)
bewerkingen in programmeeromgevingen
Week 2: Microarchitectuur niveau ALU en datapad
Elektriciteit 1 Les 12 Capaciteit.
automatiseringselektronica
1 Datastructuren Sorteren: alleen of niet alleen vergelijkingen College 5.
Hoofdstuk 6 Het voorspellen van prestaties Deel 2: Vermogenvoorspellingen op architectuurniveau Prof. dr. ir. Dirk Stroobandt Academiejaar
Assenstelsels en het plotten van Functies in LOGO
5JJ20: Computerarchitectuur 2M200: Inleiding Computersystemen
Geheugenbeheer ICT Infrastructuren hoofdstukken 7 en 8.1.
1Ben Bruidegom Hoe werkt een rekenmachine? Ben Bruidegom AMSTEL Instituut Universiteit van Amsterdam.
3.5 Kloppen de alcoholpercentages op de verpakkingen?
Halfgeleider.
Les 9 Gelijkstroomschakelingen
Jezelf bewegen…… De ander bewegen……
Hogere wiskunde Limieten college week 4
ribwis1 Toegepaste wiskunde – Exponentiele functies Lesweek 5
Experimenteel onderzoek
Gemaakt door Ype en Ronald
Inleiding tot Excel.
1/1/ eindhoven university of technology / faculty of Computer Science 2IC20:Computersystemen Week 2: IDaSS.
Instructieprogramma Behoort bij OPEN LEERTAAK OT 1.3.1
CMOS Technologie.
Stromen bij digitale signalen
De Beetle: een uitlees-chip voor de VELO Introductie De B-mesonen die bij de botsing van de protonenbundels in de LHC worden geproduceerd, leggen gemiddeld.
Les 3: Digitale Logica.
Code compressie in Embedded Systems Onno Kievit ET4074 Kwantitatieve aspecten van computer architectuur.
Serie/Parallel Schakelingen
6 Vaardigheden 6.1 Rekenvaardigheden Rekenen in verhouding
hoe kun je krachten grafisch ontbinden?
Gecijferdheid 2 (Meten 1 – ME144X) week 3
Tips and tricks: Vliegtuigmodus
Berekening van de Orde Van een Algoritme
ELEKTRONICA BIBBERSPIRAAL
Toelichting jaarrekening 2016
Programmeren met Reeksen
Cijferen 5de leerjaar.
Een vergadering organiseren
3 Hardware 3.1 De processor en intern geheugen
Significante cijfers © Johan Driesse © 2013 – Johan Driesse.
havo A Samenvatting Hoofdstuk 10
eenheden variabele productiefactor (arbeid) productie in aantallen
Vergadering Personeelsdienst
INGEBRUIKNAME & TESTEN
Minimodules voor de 3e klas
De grafiek van een lineair verband is ALTIJD een rechte lijn.
Bouwstenen voor computer
3 vmbo-KGT Samenvatting Hoofdstuk 10
Modderdorp UNPLUGGED Bron: csunplugged.org.
Cursus Interne auditor
Quantumcomputers en quantumcommunicatie
Deze complexe relatie wordt beïnvloed door veel factoren, waarvan beslissingen die het management wel of niet neemt, waarschijnlijk de belangrijkste zijn.
Tellen met kaarten.
Elektronische schakelingen en logische poorten
Software Development fundamentals
Transcript van de presentatie:

Les 7: De ALU The number of computations per joule of energy dissipated doubles approximately every 1.57 years. Koomey’s law

Overzicht Logische poorten Transistorniveau Combinatorische schakelingen De ALU-schakelingen Optellers Verschuivers Vermenigvuldigers Delers

Logische and-poort A B AB A 0 0 0 0 1 0 AB 1 0 0 1 1 1 B 0 0 0 0 1 0 1 0 0 1 1 1 AB B De logische and-poort voert de EN-operatie uit. Het resultaat van de EN operatie op ingangen A en B wordt genoteerd als AB, en het grafisch symbool wordt getoond in de dia. Waarheidstabel

Logische or-poort A B A+B A 0 0 0 0 1 1 A+B 1 0 1 1 1 1 B 0 0 0 0 1 1 1 0 1 1 1 1 A+B B De logische or-poort voert de OF-operatie uit. Het resultaat van de OF operatie op ingangen A en B wordt genoteerd als A+B, en het grafisch symbool wordt getoond in de dia.

Logische xor-poort A B A  B A 0 0 0 0 1 1 AB 1 0 1 1 1 0 B 0 0 0 0 1 1 1 0 1 1 1 0 AB B De logische xor-poort voert de EOF-operatie uit. Het resultaat van de XOR operatie op ingangen A en B wordt genoteerd als AB, en het grafisch symbool wordt getoond in de dia.

Buffer A A 0 0 1 1 A A Een buffer voert de identiteitsfunctie uit. Hoewel deze functie geen “logische” betekenis heeft, speelt de buffer een belangrijke rol als signaalversterker. In een logisch circuit kan het nodig zijn een signaal te versterken, b.v. om ervoor te zorgen dat het zich over een langere afstand kan bewegen, of om een signaal als ingang te laten dienen van meerdere poorten.

Invertor (not) A A A A 0 1 1 0 De invertor voert de NIET-operatie uit. 0 1 1 0 A A De invertor voert de NIET-operatie uit. Het resultaat van de NOT operatie op ingang A wordt genoteerd als “A- overstreept” of ¬A en het grafisch symbool wordt getoond in de dia. Het symbool wordt afgeleid van het buffersymbool door een bolletje aan de uitgang te tekenen. Een bolletje op een input of een output betekent dat het inverse signaal gebruikt wordt.

Logische nand-poort A B AB A 0 0 1 0 1 1 AB 1 0 1 1 1 0 B 0 0 1 0 1 1 1 0 1 1 1 0 AB B De logische nand-poort voert de NAND-operatie uit (NIET-EN). Het resultaat van de NAND operatie op ingangen A en B wordt genoteerd als “AB-overstreept” of ¬(AB) , en het grafisch symbool wordt getoond in de dia. Het bolletje wordt gebruikt om de output van de AND-poort te inverteren.

Logische nor-poort A B A+B A 0 0 1 0 1 0 A+B 1 0 0 1 1 0 B 0 0 1 0 1 0 1 0 0 1 1 0 A+B B De logische nor-poort voert de NOR-operatie uit (NIET-OF). Het resultaat van de NOR operatie op ingangen A en B wordt genoteerd als “(A+B)-overstreept” of ¬(A+B) , en het grafisch symbool wordt getoond in de dia.

Logische xnor-poort A B AB A 0 0 1 0 1 0 AB 1 0 0 1 1 1 B 0 0 1 0 1 0 1 0 0 1 1 1 AB B De logische xnor-poort voert de XNOR-operatie uit (NIET-XOR of exclusieve NOR). Het resultaat van de XNOR operatie op ingangen A en B wordt genoteerd als (AB), en het grafisch symbool wordt getoond in de dia. Een XNOR-poort is een dus een XOR-poort waarvan de uitgang geïnverteerd werd.

Voorbeeld A F A F = A A F 1 1 A B AB 0 0 0 0 1 0 1 0 0 1 1 1 0 0 0 0 1 0 1 0 0 1 1 1 = A A F Logische functies kunnen op verschillende manieren gerealiseerd worden worden. Dit voorbeeld toont hoe een buffer ook kan geconstrueerd worden door middel van een AND poort waaraan 2 maal dezelfde ingang wordt aangelegd. Dit volgt uit de waarheidstabel van de buffer en de AND-poort. 1 1

Voorbeeld A F A F = A A F 1 1 A B A+B 0 0 0 0 1 1 1 0 1 1 1 1 0 0 0 0 1 1 1 0 1 1 1 1 = A A F Dit voorbeeld toont hoe een buffer ook kan geconstrueerd worden door middel van een OR poort waaraan 2 maal dezelfde ingang wordt aangelegd. Dit volgt uit van de waarheidstabel van de buffer en de OR-poort. 1 1

Voorbeeld A F A F = A A F 1 1 A B AB 0 0 1 0 1 1 1 0 1 1 1 0 0 0 1 0 1 1 1 0 1 1 1 0 = A A F Dit voorbeeld toont hoe een invertor kan geconstrueerd worden door middel van een NAND poort waaraan 2 maal dezelfde ingang wordt aangelegd. Dit volgt duidelijk uit de waarheidstabel van de invertor en NAND-poort. 1 1

Voorbeeld A F B Poorten kunnen samengevoegd worden tot “combinatorische schakelingen”. Dit voorbeeld lijkt een ingewikkelde schakeling, maar voert eigenlijk een heel eenvoudige functie uit… Kan je al zien welke? … zie verder…

Voorbeeld A F B A B F A B AB 0 0 1 0 1 1 1 0 1 1 1 0 Als we dieper ingaan op het voorbeeld van de vorige dia, kunnen we de 2 poorten aan de linkerkant vervangen door NOT poorten. Het resultaat (F) van deze schakeling is dus de NAND van NIET-A en NIET-B. Als we hiervan de waarheidstabel neerschrijven, dan vinden we een opmerkelijk resultaat! Deze schakeling berekent niets anders dan A+B = A OR B. … zie verder… 0 0 0 1 1 0 1 1 1 1 1

Voorbeeld A F B A B F Inderdaad, de waarheidstabel van A+B is gelijk aan deze van de schakeling uit de vorige dia’s! 0 0 0 1 1 0 1 1 1 1 1

Voorbeeld A F B A B F Om de tekening van schakelingen te vereenvoudigen kan men de NOT poort vervangen door een bolletje aan de ingang van de volgende poort, zoals aangegeven in dit voorbeeld.

Wetten van De Morgan A + B = A B AB = A + B Het vorige voorbeeld brengt ons bij de belangrijke Wetten van De Morgan. A OR B = NIET-A NAND NIET-B A AND B = NIET-A NOR NIET-B Deze wetten zijn in de dia geïllustreerd, en zijn eenvoudig te bewijzen door de waarheidstabellen van de vormen links en rechts van het gelijkheidsteken neer te schrijven (wat we in de vorige dia’s reeds gedaan hebben). Bemerk de symmetrie van deze wetten wat betreft AND en OR. De ene wet is trouwens een logische herformulering van de andere wet. Men kan de wet verder ook voorstellen als volgt: A NOR B = NIET-A AND NIET-B A NAND B = NIET-A OR NIET-B AB = A + B

Boolese algebra (1) Commutativiteit AB = BA Distributiviteit A(B+C) = AB+AC Neutraal element 1A = A Complement AA = 0 Nuleigenschap 0A = 0 Idempotentie AA = A Associativiteit A(BC) = (AB)C Dubbele negatie A = A De Morgan AB = A + B Consensus AB + AC + BC = AB + AC Absorptie A(A+B) = A Deze tabel geeft een overzicht van een aantal basiseigenschappen van de Boolese algebra. Al deze eigenschappen kunnen aangetoond worden door hun waarheidstabel van het linkerlid en rechterlid neer te schrijven en te vergelijken. De correctheid van deze wetten kan ook logisch beredeneerd worden.

Bewijs Consensus A B C AB+AC+BC AB+AC 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 1 1 In dit voorbeeld wordt de consensusregel bewezen door vergelijking van de waarheidstabellen voor beide voorstelling. De consensusregel geeft aan dat de term BC overbodig is in de som AB+(NIET-A)C+BC. Immers, als BC=1 dan is zeker ook AB+(NIET-A)C=1; en als BC=0 dan wordt de waarde van de volledige som toch door AB+(NIET- A)C bepaald. 1 1

Boolese algebra (2) Commutativiteit A+B = B+A Distributiviteit A+(BC) = (A+B)(A+C) Neutraal element 0+A = A Complement A+A = 1 Eéneigenschap 1+A = 1 Idempotentie A+A = A Associativiteit A+(B+C) = (A+B)+C Dubbele negatie De Morgan A+B = AB Consensus (A+B)(A+C)(B+C) = (A+B)(A+C) Absorptie A+(AB) = A Deze tabel geeft een overzicht van een aantal basiseigenschappen van de Boolese algebra. Deze zijn de duale eigenschappen als getoond in de vorige tabel. De duale vorm wordt bekomen door AND/OR om te wisselen, net als 0/1.

Overzicht Logische poorten Transistorniveau Combinatorische schakelingen De ALU-schakelingen Optellers Verschuivers Vermenigvuldigers Delers

Transistor (transfer resistor) Bardeen, Shockley, and Brattain (1947), Bell Labs Nobelprijs: 1956 collector basis emittor De transistor werd ontdekt op 23 december 1947. Het is een schakelaar zoals het relais, maar kan in veel kleinere oppervlakte gefabriceerd worden en bevat geen “mechanische, bewegende delen”. Een transistor wordt gemaakt in halfgeleidertechnologie, en is dé basiscomponent in de digitale elektronica. Indien er stroom loopt in de basis, dan kan er stroom vloeien tussen de collector en de emittor. Deze component gedraagt zich m.a.w. als een schakelaar. halfgeleiderschakelaar

MOS-transistors NMOS PMOS Geleidt indien input hoog In nagenoeg alle chips worden tegenwoordig zogenaamde MOSFET transistors gebruikt (metal-oxide semiconductor field-effect transistor ). Daar bestaan twee varianten van: NMOS en PMOS. Een NMOS transistor geleidt indien de spanning op de gate (ingang) voldoende hoog is. Een PMOS transistor geleidt indien de spanning op de gate laag genoeg is. De symbolen maken dit duidelijk. Technologisch blijkt het zo te zijn dat NMOS bijzonder geschikt is om een verbinding met de massa en PMOS om een verbinding met de voedingsspanning tot stand te brengen. Meestal zullen ze dan ook in paren gebruikt worden. Indien de twee types van transistor op dezelfde chip voorkomen, dan spreekt men van CMOS (Complementary MOS). Geleidt indien input hoog Gebruikt om output laag te brengen Geleidt indien input laag Gebruikt om output hoog te brengen

Invertorpoort Vdd Vdd Vout Vdd Vin Vout CL Vin Vdd Hier zien we een toepassing van een PMOS/NMOS transistorpaar in een invertorschakeling. Indien de input hoog is zal de onderste transistor geleiden en de uitgang verbinden met de massa (iets waar hij goed in is). Ondertussen spert de bovenste transistor (gelukkig, zoniet hadden we een regelrechte kortsluiting). Indien de input laag is, zal de bovenste transistor geleiden en de uitgang verbinden met de voedingsspanning (Vdd). Ondertussen spert de onderste transistor. Op die manier zien we dat de voordelen van de twee transistors met elkaar gecombineerd worden om een werkende invertorpoort op te leveren. Aan de uitgang zien we een capaciteit. Deze is in werkelijkheid niet aanwezig maar modelleert de capaciteit van alle uitgaande bedrading. De ingang van een transistor in CMOS verbruikt nagenoeg geen stroom. De enige stromen die vloeien zijn deze om de parasitaire capaciteiten van de bedrading te laden en te ontladen. Eenmaal in evenwicht stopt ook deze stroom. In rust verbruikt deze schakeling dus bijna geen stroom. Bij het omschakelen echter wel. Hoe hoger de klokfrequentie, hoe mee er omgeschakeld wordt. Vin Vdd

Nand-poort A B AB 0 0 1 0 1 1 1 0 1 1 1 0 Vdd A B Vout A B 0 0 1 0 1 1 1 0 1 1 1 0 A B Deze dia toont een eenvoudige transistorschakeling voor de realisatie van een nand-poort. Enkel als zowel A als B spanning krijgen, zullen de onderste transistors geleiden en zal Vout laag worden. In alle andere gevallen zal één van de bovenste transistors geleiden, en zal de uitgang hoog worden. Dit gedrag komt dus exact overeen met dat van een NAND-poort.

Nor-poort A B A+B 0 0 1 0 1 0 1 0 0 1 1 0 Vdd A B Vout A B 0 0 1 0 1 0 1 0 0 1 1 0 Vout Deze dia toont een eenvoudige transistorschakeling voor de realisatie van een nor-poort. Enkel als zowel A als B zonder spanning staan (logische 0) zullen de twee onderste transistors niet geleiden, en zal de uitgang hoog worden. In alle andere gevallen komt de uitgang laag. Dit gedrag komt dus exact overeen met dat van een NOR-poort. A B

Xor-poort A B A  B 0 0 0 0 1 1 1 0 1 1 1 0 Vdd A A B B Vout A B A B 0 0 0 0 1 1 1 0 1 1 1 0 Vout A B Deze dia toont een transistorschakeling voor de realisatie van een xor-poort. Immers, enkel als ofwel AB ofwel AB zullen de bovenste transistors geleiden en zal de output 1 zijn. In alle andere gevallen zullen de bovenste transistors niet geleiden, en de onderste wel. Dit gedrag komt dus exact overeen met dat van een XOR-poort. Door de onderste en de bovenste inputs te verwisselen kan men een XNOR poort realiseren. Om een volledig operationele xor-poort te hebben moeten de geïnverteerde A en B ingangen ook nog wel afzonderlijk aangemaakt worden door afzonderlijke invertors. De XOR-poort is dus wel wat complexer dan de NAND of de NOR poort. A B

Tijdsgedrag van poortjes F A B B A B A+B 0 0 1 0 1 0 1 0 0 1 1 0 F Een poort voert een bepaalde logische operatie uit, bv. een NOR operatie. Er is echter altijd een zekere tijd nodig alvorens de uitgang van een poort de correcte waarde aanneemt in functie van de ingang, na een verandering aan de ingang. Net zoals alle fysieke verschijnselen hebben ook elektrische signalen aan een eindige snelheid en hebben zij dus een zekere snelheid nodig om zich door een schakeling te propageren. Nadat de ingangswaarden wisselen van (A,B)=(0,0) naar (1,0) moet de uitgang veranderen van 1 naar 0. De correcte uitgangswaarde wordt gevormd met een vertraging  (ook propagatietijd of poortvertraging genoemd). Deze vertraging kan soms onaangename gevolgen hebben. 

FO4: fan-out-of-4 A A F F  Typisch: 10-15 ps In de praktijk zal de vertraging van een poort ook afhangen van de elektrische belasting die de poort voelt aan haar uitgang. Een gangbare manier om een poortvertraging op te geven is FO4 of fan-out-of-4 dit is de vertraging die een invertor ondervindt als hij vier identieke invertoren dient aan te sturen. Deze poortvertraging hangt af van de gebruikte technologie: per technologiegeneratie neemt de poortvertraging verder af (o.a. als gevolg van de kleinere afmeting van de invertor). Als grootteorde kan men uitgaan van 10-15 ps. Voor een klokfrequentie van 4 GHz en een poortvertraging van 15 ps komt dit neer op ongeveer 16 poortvertragingen per klokcyclus. Typisch: 10-15 ps Klokperiode > 12-16 FO4 

Glitch A F A A A F 0 0 1 0 A F Pulsgenerator! 0 0 1 0 A A Deze dia toont een mogelijk ongewenst effect van de propagatietijd van de poorten. De getoonde schakeling berekent F = A EN NIET-A. Logischerwijs is F=0 onder alle omstandigheden. De uitgang van de schakeling kan echter soms een glitch vertonen: een ongewenste toestand of uitgang, veroorzaakt door het tijdsgedrag van de poorten. In dit voorbeeld kan zich een glitch voordoen wanneer A wisselt van 0 naar 1. Wanneer de AND poort voldoende snel reageert, kan er een korte puls optreden aan de uitgang, omdat gedurende een korte tijd, beide ingangen van de AND poort op 1 staan. Deze schakeling kan eventueel als pulsgenerator gebruikt worden - als men het “ongewenst” gedrag als “gewenste functionaliteit” wenst. F Pulsgenerator!

Tri-state F A C F C A F 0 0 0 0 1 1 1 0  1 1  A C C A F 0 0  0 1  0 0 0 0 1 1 1 0  1 1  A C C A F 0 0  0 1  1 0 0 1 1 1 Een tri-state-buffer gedraagt zich als een normale buffer, zoals we die eerder zagen. Het verschil is de extra controle-ingang die toelaat de buffer af te koppelen. Zodoende zijn er 3 uitgangswaarden: 0, 1 of afgekoppeld. In de afgekoppelde toestand is de uitgang elektrisch afgekoppeld, en is er geen uitgangswaarde; het uitgangssignaal is afwezig. In elektrische termen zegt men dat de uitgang hoog-impedant is. De tri-state-buffer bestaat typisch in 2 versies: met direct controle (links op de dia) en geïnverteerde controle (rechts). Een elektrisch afgekoppelde uitgang is verschillend van een uitgang die 0 produceert, in de zin dat de elektrisch afgekoppelde uitgang zich gedraagt alsof er geen uitgangsverbinding is, terwijl een logische 0-uitgang nog steeds elektrisch verbonden is aan het circuit. “elektrisch afkoppelen”

Voorbeeld A F B Vermijden van kortsluiting! C De tri-state buffers laten toe de uitgangen van een aantal logische poorten aan te sluiten aan een gemeenschappelijke lijn (bus), zonder elektrische kortsluitingen te riskeren, zolang er slechts 1 buffer tegelijk is aangesloten. Dit wordt in de dia geïllustreerd: A en B zijn als ingang verbonden aan de bus waarvan F de uitgang is. Een complementair controlesignaal zorgt ervoor dat er steeds slechts 1 van de 2 buffers is aangeschakeld. Mochten de beide uitgangen elektrisch aan elkaar gekoppeld worden, dan zou zelfs een klein verschil in uitgangsspanning een grote stroom kunnen doen vloeien in de verbindingsdraad (die als geleider een zeer lage weerstand heeft). Dergelijke grote stromen kunnen de schakeling beschadigen en moeten dus vermeden worden. C

Connecties Connectie Geen connectie Deze dia illustreert hoe in een tekening wordt aangeduid of er al dan niet een connectie bestaat tussen 2 draden. Twee draden die gewoon kruisen (of als er een bruggetje is getekend), zijn niet geconnecteerd (rechts). Als de kruising tussen 2 draden is gemerkt met een bolletje, of als het een T- kruising betreft, dan zijn de draden wel geconnecteerd.

Wafer & Die Intel Sandy bridge 32 nm 2010 20 cm 30 cm Een wafer is een platte siliciumplaat waarin de halfgeleidercircuits of chips worden gefabriceerd. Per plaat kunnen enkele tot vele tientallen circuits (elke individueel circuit op de wafer noemt men “die”) gefabriceerd worden. Een wafer is typisch 30 cm diameter diameter.

Technologie: die Intel Ivy Bridge, 22 nm, 2012 (1480 mio Transistors) Een die is het volledige elektronische circuit dat in halfgeleidertechnologie wordt gefabriceerd. Het wordt uit de wafer waarin het werd gemaakt, uitgesneden, en dan in een chipverpakking gestoken. Op deze figuur wordt de Ivy Bridge die getoond, een 22 nm quad core processor van Intel (2012). Je kan duidelijk de caches herkennen (onderaan de foto). Je kan ook zien dat de quad core eigenlijk uit vier naast elkaar geplaatste processors bestaat. De GPU is de grafische processor. De system agent staat in voor de communicatie met het geheugen en de randapparatuur. Intel Ivy Bridge, 22 nm, 2012 (1480 mio Transistors)

CMOS Proces 90 nm lithografie: 22-25 maskers De chip bestaat uit vele miljoenen transistors die onderling verbonden worden door middel van metaalbaantjes in verschillende niveaus. 90 nm lithografie: 22-25 maskers [Source: Rabay et al, Digital Integrated Circuits] http://www.youtube.com/watch?v=35jWSQXku74&feature=related

Oxidelaag De oxidelaag tussen de gate en het kanaal waardoor de stroom loopt is bij een transistor van 130 nm ongeveer 5 atomen dik. In een latere generatie is dit maar drie atomen meer. 5 atomen!

Tri-gate transistor Om het schakelgedrag van de transistor te verbeteren gebruikt men tegenwoordig gates die om het 3D-source-drain kanaal heen liggen. Hierdoor vergroot de contactoppervlakte en kan de transistor sneller schakelen en kunnen de lekstromen beter gecontroleerd worden.

Grootte-orden menselijke cel Haar Papier Plantencel 100 µm 1971 10 µm 1989 1 µm bacterie . 2006 65 nm virus Ter vergelijking staan hier een aantal elementen uit de biologie vergeleken met verschillende generaties transistors. De transistors uit 1971 (eerste processor van Intel, de 4004) waren zo groot als een menselijke cel. In 1989 waren ze 10x kleiner en nog zo groot als een bacterie. In 2004 is een transistor nog even groot als een virus, en nog ongeveer een kleine 500 atomen groot. Men schat dat men de transistor nog ongeveer 10 keer kleiner kan maken alvorens tegen de limieten van de fysica te botsen. atoom 0.2 nm

Metaallagen Moderne processors: 7 metaallagen en meer Courtesy IBM Via bijkomende metaallagen (b.v. 6) worden de verbindingen tussen de transistors tot stand gebracht. Moderne processors: 7 metaallagen en meer

Wet van Moore Gordon Moore [Source: Intel] Deze dia toont de historische groei van het aantal transistors per chip. Dit fenomeen wordt de wet van Moore genoemd die stelt dat het aantal transistors per chip nagenoeg verdubbelt om de twee jaar. De wet van Moore werd geformuleerd in 1965 op basis van slechts een paar datapunten. In 1975 werd hij bijgesteld. De geheugenchips liggen steeds een stukje voor op de processors omwille van hun eenvoudiger structuur. [Source: Intel]

Het aantal transistors per chip neemt nog steeds exponentieel toe Het aantal transistors per chip neemt nog steeds exponentieel toe. De prijs per individuele transistor neemt echter niet langer af. Dat betekent dat de nieuwste technologienode niet langer de beste keuze is voor (goedkope) consumentenelektronica. Ze blijft wel nog de beste keuze voor die toepassingen die veel rekenkracht vergen (de transistor is niet goedkoper, maar hij heeft uiteraard wel betere eigenschappen: sneller, zuiniger).

Processorspecificaties Product ADM A8-3870K Intel Sandy Bridge Intel Itanium Tukwila Cores 4 Proces 32 nm 65 nm Klok 3 GHz 3.6 GHz 1.73 GHz Die 228mm2 216 mm2 700 mm2 Transistors 1450 M 1160 M 2050 M Vermogen 100 W 95 W 185 W Deze dia toont een overzicht van enkele processors. Het aantal cores geeft aan hoeveel processorkernen er op 1 chip geïntegreerd werden. Het aantal draden correspondeert met het maximaal aantal processen waarvan er zich simultaan instructies in de processor kunnen bevinden. Het proces geeft aan in welke “generatie” van halfgeleidertechnologie de processor gemaakt is. De kloksnelheid is recent niet veel meer gestegen. De grootte van de die kan men niet zomaar laten groeien, omdat die een grote invloed heeft op de kost van de processor, en de risico’s in het fabricageproces. We zagen al eerder dat het aantal transistors zeer sterk groeit bij nieuwe processorgeneraties. Dit komt onder andere door het integreren van allerhande geheugens (vnl. cache), en meerdere cores op een chip. Het vermogen van processors hangt af van het design - het minimaliseren van vermogen is in bepaalde omstandigheden een designparameter. Men kan het vermogen ook niet zomaar laten toenemen, wegens de warmte- ontwikkeling die ermee gepaard gaat in de chip! http://www.techpowerup.com/cpudb/ http://cpudb.stanford.edu/

Overzicht Logische poorten Transistorniveau Combinatorische schakelingen De ALU-schakelingen Optellers Verschuivers Vermenigvuldigers Delers Combinatorische schakelingen combineren een aantal ingangen in een aantal uitgangen, volgens een bepaalde functie. De uitgangen zijn strikte functies van de ingangen, en de uitgangen worden onmiddellijk (d.w.z. na de propagatietijd) aangepast na een wijziging aan de ingangen. Er is géén feedback van de uitgangen naar de ingangen.

Realisatie van boolese functies A B C F A B C ABC 0 0 0 0 0 0 1 0 0 1 0 1 0 1 1 0 1 0 0 0 1 0 1 1 1 1 0 1 1 1 1 1 ABC ABC ABC F Een meer ingewikkelde boolese functie implementeren in digitale logica, kan vrij eenvoudig via de som van producten. Een som van producten implementatie is (zoals de naam al aangeeft), het OR-en van een aantal AND-resultaten. Men kan de producten in deze som gemakkelijk halen uit de waarheidstabel. Voor elke rij in de waarheidstabel die als resultaat 1 heeft, stelt men de minterm op. Een minterm is een productterm die elke variabele precies een keer bevat (direct of gecomplementeerd; vb. de minterm voor de rij (A,B,C)=(1,0,1) is A(NIET-B)C). De som van alle mintermen levert een algebraïsche vorm op, die ook snel in digitale logica kan geïmplementeerd worden, met NIET-poorten, multi-input-EN-poorten en multi-input-OF-poorten. Noot: de waarheidstabel van een minterm heeft slechts één rij met resultaat 1. Dus, slechts één inputcombinatie per minterm maakt de functie waar. F = ABC + ABC + ABC + ABC som van producten (mintermen)

Realisatie van boolese functies A B C F F = ABC + ABC + ABC + ABC 0 0 0 0 0 0 1 0 0 1 0 1 0 1 1 0 1 0 0 0 1 0 1 1 1 1 0 1 1 1 1 1 F = ABC + ABC + ABC + ABC De Morgan F = (ABC)(ABC)(ABC)(ABC) De Morgan & dubbele negatie Een boolese functie kan evenzo geconstrueerd worden als een product van sommen. Een product van sommen implementatie is (zoals de naam al zegt), het AND- en van een aantal OR-resultaten. Men kan de sommen in dit product gemakkelijk halen uit de waarheidstabel, of uit het eerder besproken product van sommen. Vertrekt men van de complementaire sommen (ttz. men noteert de mintermen voor de rijen in de waarheidstabel die als resultaat 0 hebben) dan hebben we NIET-F voorgesteld. Door toepassing van de Wet van De Morgan zoals getoond in de dia, komt men al snel bij het product van sommen. De sommen die we vinden, zijn maxtermen. Een maxterm is een som waarin elke variabele precies een keer voorkomt. De maxterm voor de rij (A,B,C)=(1,0,0) is (NIET-A)+B+C. Noot: de waarheidstabel van een maxterm heeft slechts één rij met resultaat 0. Dus, slechts één inputcombinatie per maxterm maakt de functie vals. F = (A+B+C)(A+B+C)(A+B+C)(A+B+C) product van sommen (maxtermen)

Realisatie van boolese functies A B C F A B C 0 0 0 0 0 0 1 0 0 1 0 1 0 1 1 0 1 0 0 0 1 0 1 1 1 1 0 1 1 1 1 1 A+B+C A+B+C F A+B+C A+B+C Deze dia illustreert wat reeds werd besproken bij de vorige dia: het product van sommen kan gemakkelijk in digitale logica geïmplementeerd worden, met NIET-poorten, multi-input-OF-poorten en multi-input-EN-poorten. De keuze tussen een implementatie aan de hand van product van sommen, dan wel via som van producten, kan men maken door de complexiteit van de 2 implementaties te vergelijken. F = (A+B+C)(A+B+C)(A+B+C)(A+B+C) product van sommen (maxtermen)

Minimalisatie Een realisatie als som van producten of product van sommen is vaak niet optimaal. F = ABC + ABC + ABC + ABC F = ABC + BAC + ABC + BAC F = ABC + ABC + BAC + BAC F = (A+A)BC + (B+B)AC Een realisatie als som van producten of product van sommen kan vaak onnodig complex zijn. Het voorbeeld van deze dia illustreert dat men door algebraïsche uitwerking soms tot veel eenvoudiger algebraïsche termen kan komen. Het proces van minimalisatie gaat op zoek naar de eenvoudigste implementatievorm. F = 1BC + 1AC F = BC + AC

Minimale realisatie A C F B A B C BC F AC Deze dia toont de minimale realisatie (links) met behulp van NOT/AND/OR poorten. Rechts wordt een nog eenvoudigere realisatie voorgesteld die gebruik maakt van tri-state-buffers.

Karnaugh kaarten F = 0 F = AB F = B F = A F = AB+AB

Karnaugh kaarten F = A F = B F = A+B F = AB+AB F = 1

F = AC + BC F = A + BC

A B C F A 0 1 0 0 0 0 0 0 1 0 0 1 0 1 0 1 1 0 1 0 0 0 1 0 1 1 1 1 0 1 1 1 1 1 BC 00 01 11 10 1 F = BC + AC

A B C D F 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 1 0 0 1 0 0 0 0 1 0 1 0 0 1 1 0 1 0 1 1 1 0 1 0 0 0 1 1 0 0 1 1 1 0 1 0 1 1 0 1 1 1 1 1 0 0 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 x

Complexiteit van realisatie Aantal poortjes: 8 (4) Aantal inputs: 19 (7) Maximale fan-out: 4 (2) Maximale fan-in: 4 (2) Fan in Fan out De complexiteit van een realisatie kan kwantitatief uitgedrukt worden door een telling van het totaal aantal poorten, het totaal aantal inputs, de maximale fan-out (aantal uitgaande verbindingen) en maximale fan-in (aantal inkomende verbindingen). De nummers in de dia geven de vergelijking tussen de som-van-producten- realisatie en de minimale realisatie. We zien duidelijk een belangrijk verschil in de complexiteit van beide realisaties. …

Computationele compleetheid Een willekeurige combinatorische functie kan gerealiseerd worden met slechts 3 poortjes: and, or, not. Niet alle poorten die tot hiertoe werden besproken, zijn echter nodig om een willekeurige combinatorische functie te implementeren (= computationele compleetheid). Bijvoorbeeld de set {AND, OR, NOT} is computationeel compleet. Ook {NAND} en {NOR} zijn computationeel complete sets. Deze dia toont hoe met een NAND poort zowel NOT, OR en AND kunnen geïmplementeerd worden, wat aantoont dat ook NAND computationeel compleet is. nand (en nor) is ook computationeel compleet!

Computationele compleetheid B C A B C F F Door in de realisatie van een boolese functie als som van mintermen de AND- poortjes en het OR-poortje te vervangen door hun NAND-realisatie, en de dubbele invertors weg te laten, krijgt men de realisatie aan de hand van louter NAND-poortjes.

Digitale componenten Multiplexer Demultiplexer Decoder Prioriteitscodeerder Hoog-niveau digitale circuits worden normaal opgebouwd gebruik makende van “componenten”, eerder dan van individuele poorten. Componenten zijn verzamelingen van poorten met een specifiek en vaak gebruikt gedrag. Verderop bespreken we de multiplexer, demultiplexer, de decoder, en de prioriteitsdoceerder.

Multiplexer D0 D1 F D2 D3 A B F 0 0 D0 0 1 D1 1 0 D2 1 1 D3 A B Een multiplexer (MUX) is een component die een aantal ingangen omzet tot één enkele uitgang. De figuur in de dia toont een 4-naar-1 MUX en de bijhorende waarheidstabel. De uitgang F neemt de waarde van de data- ingang die wordt geselecteerd door de controlelijnen A en B. Men kan multiplexers gebruiken om boolese functies te implementeren: door de inputs aan te leggen aan de controlelijnen, en de resultaten uit de waarheidstabel (als constanten) aan te leggen aan de data-ingangen, bekomt men op eenvoudige wijze de functie-implementatie. Hoewel deze vorm van implementatie vaak niet de meest efficiënte is, wordt ze toch gebruikt, omwille van de eenvoud en algemeenheid. A B

Demultiplexer F0 D F1 F2 A B F0 F1 F2 F3 0 0 D 0 0 0 0 1 0 D 0 0 Een demultiplexer (DEMUX) maakt de omgekeerde bewerking van de MUX: één data-ingang wordt, gestuurd door controle-ingangen, doorgegeven aan één van de data-uitgangen. De figuur in de dia toont een 1-naar-4 DEMUX en de bijhorende waarheidstabel. Een toepassing voor de DEMUX is het zenden van data van één enkele bron naar één bestemming uit een groep van mogelijke bestemmingen. A B

Decoder F0 A F1 B F2 F3 A B F0 F1 F2 F3 0 0 1 0 0 0 0 1 0 1 0 0 1 0 0 0 1 0 1 1 0 0 0 1 Een decoder vertaalt een “code” in een spatiale locatie. Steeds is er één uitgang van de decoder gelijk aan 1, de andere zijn 0. Welke uitgang op 1 staat, wordt aangegeven door de (code aan) de ingang. Zie ook de waarheidstabel die het gedrag illustreert, voor een 2-naar-4 decoder. Merk ook de gelijkenis tussen de decoder met (A,B) als ingang en een DEMUX met (A,B) als controle en een constante 1 als data-ingang. Een decoder kan bv. gebruikt worden om andere circuits aan te sturen.

Prioriteitscodeerder A0 A1 A2 A3 F0 F1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 1 0 0 0 1 1 1 0 0 1 0 0 0 1 0 1 0 1 0 1 0 1 1 0 0 1 0 1 1 1 0 1 1 0 0 0 0 0 1 0 0 1 0 0 1 0 1 0 0 0 1 0 1 1 0 0 1 1 0 0 0 0 1 1 0 1 0 0 1 1 1 0 0 0 1 1 1 1 0 0 A0 F0 A1 A2 F1 A3 Een codeerder vertaalt een aantal inputs in een binaire codering, en kan gezien worden als de inverse van de decoder. Een prioriteitscodeerder is een bepaald type codeerder, die een rangorde of prioriteit oplegt aan de ingangen. De uitgang geeft de “code” weer van de ingang met hoogste prioriteit, die is aangeschakeld. De dia geeft het voorbeeld van een 4-naar-2 prioriteitscodeerder. In dit voorbeeld heeft ingang Ai voorrang over Ai+1. De 2-bit uitgang geeft de binaire waarde van i als Ai de ingang is met hoogste prioriteit die is aangeschakeld. Wanneer geen enkele ingang is aangeschakeld, gedraagt de codeerder zich alsof A0 is aangeschakeld. Prioriteitscodeerders worden gebruikt om na te gaan wie er als eerste van een bepaald apparaat gebruik mag maken.

Overzicht Logische poorten Transistorniveau Combinatorische schakelingen De ALU-schakelingen Optellers Verschuivers Vermenigvuldigers Delers

Von Neumann-machine Fysiek zicht BUS CVE adres Controle ALU data klok controle registers Geheugen:bau-cellen RAM In een eerdere les bespraken we reeds de Von Neumann machine, en het fysiek zicht erop. We concentreren ons nu op de ALU in de CVE (centrale verwerkingseenheid). Invoer/Uitvoer

ALU ontwerp + - multiplexer … * / OR AND Een ALU bestaat essentieel uit de parallelle berekening van de ALU-functies, en dan de selectie van het gewenste resultaat door de multiplexer op het einde. We gaan nu over tot de bespreking van de implementatie van een aantal elementaire bouwblokken van de ALU. AND …

Overzicht Logische poorten Transistorniveau Combinatorische schakelingen De ALU-schakelingen Optellers Verschuivers Vermenigvuldigers Delers Vlottende-kommabewerkingen

Halve opteller A S B C A B C S A S 0 0 0 0 halve 0 1 0 1 opteller 0 0 0 0 0 1 0 1 1 0 0 1 1 1 1 0 Een halve opteller (half adder) berekent de som van 2 bits, en stelt het resultaat voor door 2 bits: S (som) en C (carry). We zien in de circuitrealisatie en de waarheidstabel dat dit een heel eenvoudige bewerking is en dus snel kan uitgevoerd worden. Zowel de som als de overdracht worden in dit geval geproduceerd na één poortvertraging. halve opteller A B S C

Volle Opteller Volle Opteller A B Cin S Cout Cin S A Cout B 1 2 S A Cout B Volle Opteller A B Cin S Cout Cin A B Cout S 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 0 1 1 0 1 1 0 1 1 0 1 0 1 1 1 1 1 Een volle opteller (full adder, afgekort FA) maakt de som van 3 bits: 2 operandi bits en 1 inkomend carry bit. Het resultaat wordt andermaal voorgesteld door 2 bits: S (som) en C (carry). Een volle opteller is wat trager dan een halve opteller omdat het langste pad dat een signaal moet afleggen langer is en de poorten complexer zijn. Het resultaat van de optelling wordt nu geproduceerd na één poortvertraging (ervan uitgaande dat alle poorten dezelfde vertraging hebben, ook de complexere xor poort), terwijl de overdracht twee poortvertragingen op zich laat wachten.

Doorsijpelopteller a3 b3 c3 s3 c4 Volle Opteller a2 b2 c2 s2 Volle Opteller 1 2 3 5 7 4 6 8 s0 Door een aantal (m) volle optellers in cascade te plaatsen, kunnen we eenvoudig een m-bit optelling realiseren. Deze implementatie noemen we een doorsijpelopteller (ripple carry adder). De carry propageert hierbij langzaam doorheen het hele circuit. Als nadeel geldt dat deze implementatie een significante vertraging opdringt. De rekentijd voor een optelling is recht evenredig met de lengte van de op te tellen bitpatronen. Terminologie: LSB (least significant bit); MSB (most significant bit)

4-bit opteller a3 a2 a1 a0 b3 b2 b1 b0 c4 4 bit opteller c0 s3 s2 s1 c4 4 bit opteller c0 8 De dia toont het symbool voor een 4-bit opteller, die b.v. kan opgebouwd zijn uit volle optellers zoals getoond in de vorige dia. De opteller heeft als uitgangen de 4 sommatiebits, alsook de overdracht uit de meest beduidende bit. s3 s2 s1 s0 7 5 3 1

Cascade van 4-bit optellers … 32 8 1010 1010 +0100 1010 1111 0100 10101010 +01001010 11110100 Door een aantal 4-bit optellers in cascade te plaatsen, breiden we de optelling uit naar nog grotere getallen. In de dia is een 16-bit opteller geïllustreerd. De carry-keten strekt zich uit over de hele lengte van de opteller. Enkel de overdracht uit bit 3 (c4) is echter zichtbaar. De andere overdrachten blijven verborgen in de vier-bit opteller. 1010 1010 +0100 1010 1111 0100

Halve aftrekker B D A Bout (A-B) A B Bout D B D 0 0 0 0 halve 0 1 1 1 0 0 0 0 0 1 1 1 1 0 0 1 1 1 0 0 (A-B) Een halve aftrekker (half subtractor) berekent het verschil van 2 bits (A-B), en stelt het resultaat voor door 2 bits: D (difference) en Bout (borrow). We zien in de circuitrealisatie (kader rechts boven) dat dit een eenvoudige bewerking is. halve aftrekker B A D Bout

Volle Aftrekker Volle Aftrekker A B Bin D Bout A B Bin Bout D 0 0 0 0 0 0 0 1 1 1 0 1 0 1 1 0 1 1 1 0 1 0 0 0 1 1 0 1 0 0 1 1 0 0 0 1 1 1 1 1 Een volle aftrekker (full subtractor) berekent het verschil A-B-Bin: 2 “operandi bits” en 1 inkomende borrow bit. Het resultaat wordt andermaal voorgesteld door 2 bits: D en Bout. Merk op dat < Bout:D> het 2-bits 2-complement resultaat is van A-B-Bin. 2 1

Doorsijpelaftrekker b3 a3 b2 a2 b1 a1 b0 a0 d3 d2 d1 d0 bor3 bor2 bor1 Volle Aftrekker Volle Aftrekker Volle Aftrekker Volle Aftrekker bor4 1 2 3 5 7 4 6 8 d3 d2 d1 d0 Door een aantal (m) volle aftrekkers in cascade te plaatsen, kunnen we eenvoudig een m-bit aftrekking realiseren. Deze implementatie noemen we een doorsijpelaftrekker (ripple borrow subtractor). Deze implementatie heeft dezelfde prestatiekenmerken als de doorsijpelopteller.

Opteller/aftrekker a0 b0 a1 b1 a2 b2 a3 b3 add/sub c0 4 bit opteller Uiteraard kan men A-B ook berekenen als A+(-B). Het circuit dat wordt getoond in de dia voert op dergelijke wijze optellingen en aftrekkingen uit op 4-bits getallen. De (NIET-add)/sub controlelijn geeft aan of het om een optelling of aftrekking gaat. De overige ingangen van de (overigens gewone) doorsijpelopteller zijn A en B of (-B). Als de controlelijn (NIET-add)/sub=1, dan zullen de XOR poorten en de c0=1 ingang ervoor zorgen dat -B berekend wordt (invertering van alle bits; plus 1 die via c0 gerealiseerd wordt) alvorens de bits van B de opteller bereiken. Aldus berekent de opteller A+(-B). Als de controlelijn (NIET-add)/sub=0, dan bereiken de bits van B de opteller onveranderd en is c0 gelijk aan 0. Aldus berekent de opteller A+B. 9 s3 s2 s1 s0 A - B = A + (-B) = A + (B+1) = A + B + 1

Volle Opteller G=AB P=A+B S = ABCin+ABCin+ABCin+ABCin Cin A B Cout S S = ABCin+ABCin+ABCin+ABCin 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 0 1 1 0 1 1 0 1 1 0 1 0 1 1 1 1 1 Cout=ABCin+ABCin+ABCin+ABCin Cout= ABCin+ ABCin+ ABCin+ ABCin+ ABCin+ ABCin Cout= AB(Cin+Cin)+(A+A)BCin+ A(B+B) Cin Cout= AB + BCin+ ACin De doorsijpelopteller die we eerder zagen kan tot al te lange vertragingen leiden, omwille van de lange keten van carry-bits die gaat van de volle opteller voor het LSB tot de volle opteller voor het MSB. We gaan dus op zoek naar een methode om de carry-propagatie te versnellen. Als een eerste stap, herberekenen we de formule voor de Cout van de volle opteller. Na wat rekenen komen we tot Cout = AB + (A+B)Cin. G=AB noemt men de generate functie omdat G=1 een uitgaande carry genereert. P=(A+B) noemt de propagate functie omdat P=1 een inkomende carry propageert (doorgeeft). G=AB P=A+B Cout= AB + (B+A)Cin Cout= AB + (A+B)Cin Cout= G + P Cin

4-bit opteller C4=G3+P3C3 C3=G2+P2C2 C2=G1+P1C1 C1=G0+P0C0 C4=G3+P3G2+P3 P2G1+P3 P2 P1 G0+P3P2P1P0C0 C3=G2+P2G1+P2P1G0+P2P1P0C0 C2=G1+P1G0+P1P0C0 C1=G0+P0C0 Dit laat ons toe om in een 4-bit opteller alle inkomende carry-bits van de volle optellers rechtstreeks te berekenen uit de bits van de operandi. In de dia worden de verschillende carry-bits berekend uitgaande van de Pi en Gi termen, die uit de operandi worden berekend.

“Carry lookahead” opteller b3 a3 b2 a2 b1 a1 b0 a0 c0 G3 P3 G2 P2 G1 P1 G0 P0 c4 Volle Opteller Volle Opteller Volle Opteller Volle Opteller De implementatie van de voorgaande berekeningen leidt tot de carry lookahead opteller. Hierin worden de uitgaande/inkomende carry-bits rechtstreeks berekend uit de operandi, en er is dus geen keten meer tussen de “volle optellers” (de aanwezige volle optellers berekenen nu geen carry-bit meer). Hoewel er een meerniveau-poortnetwerk nodig is om de carry lookahead-bits te berekenen, kan men er toch van uitgaan dat deze constructie in de praktijk sneller is, een voordeel dat nog meer tot uiting komt voor een optelling van bredere operandi. Dit proces is trouwens in de praktijk begrensd tot ongeveer 8-bit optellers, omwille van fan-in-beperkingen. Voor optellingen van nog bredere operandi, kan men dan de carry-lookahead-circuits in cascade plaatsen. s3 s2 s1 s0 3 4 4 4 1

Overzicht Logische poorten Transistorniveau Combinatorische schakelingen De ALU-schakelingen Optellers Verschuivers Vermenigvuldigers Delers

Barrel Shifter A3 A2 A1 A0 B0 B1 3 B2 2 B3 1 -1 -2 -3 Een barrel shifter is in staat om in 1 poortvertraging en bitpatroon over n willekeurige bits voorwaarts of achterwaarts te verschuiven. Daartoe volstaat het om de correcte tri-state buffers aan te sturen. Om een correcte verschuiving mogelijk te maken moet de schakeling nog verder uitgebreid worden om ook links en rechts de gepaste bits in te schuiven (al dan niet met tekenreplicatie). Dit verandert echter conceptueel niets aan de schakeling. Dit is prima voor het verschuiven van kleine bitpatronen. Voor grote bitpatronen loopt het aantal buffers sterk op, en bovendien wordt de fan-out van Ai zeer groot. Verder heeft deze shifter een verborgen kost. Er zal een decoder nodig zijn om de signalen 3, 2, 1, 0, -1, -2, -3 te produceren uitgaande van de 2- complementvoorstelling van de verschuiving. Deze zal ook een aantal poortvertragingen veroorzaken. Vaak wordt dan ook de logaritmische shifter gekozen. B3 1 -1 -2 -3

Logaritmische shifter <<4 == 4>> <<2 == 2>> <<1 == 1>> Een logaritmische shifter is een circuit dat een woord (bv. 32-bit) aan de ingang kan verschuiven over een willekeurige afstand (bv. van 0 tot 31 bit), afhankelijk van de controle-ingangen. De shifter voert de verschuiving uit in verschillende stappen, waarbij in elke stap een ander bit van de schuifafstand wordt bekeken. M.a.w. in een stap wordt eventueel over 1 positie verschoven, in een andere stap wordt eventueel over 2 posities verschoven, over 4 posities, 8, 16 enz.

Log shifter 6 (110) posities rechts 1 1 1 1 Hier wordt getoond hoe over 6 (610=1102) posities naar rechts wordt verschoven: eerst wordt over 4 posities verschoven, dan over 2 posities. In de laatste stap (over 1 positie) wordt niet geschoven (omwille van de 0 in 1102).

Log shifter cel ai+n ai ai-n links/rechts == bi 3 Hier wordt een basiscel getoond die in elke laag of stap van de shifter wordt gebruikt om per bitpositie de nieuwe bitwaarde te berekenen. Dit gebeurt door combinatie van drie data-bits: ai+n, ai ai-n. Dit zijn dus de bits van de positie zelf, en de bits van de positie n-bits naar links en naar rechts. Voor de verschillende stappen van de shifter is n dan 1, 2, 4, … Daarnaast zijn er nog de controlesignalen die aangeven of er al dan niet geschoven wordt, en indien zo, of het naar links of naar rechts is. 3 bi

Overzicht Logische poorten Transistorniveau Combinatorische schakelingen De ALU-schakelingen Optellers Verschuivers Vermenigvuldigers Delers

Vermenigvuldiging 1101 13 x 1101 13 1101 0000 +1101 Een vermenigvuldiging van positieve binaire getallen wordt uitgevoerd op een wijze die volledig gelijkaardig is aan de vermenigvuldiging “met de hand” van decimale getallen. Elke bit van het “onderste” getal (vermenigvuldiger) bepaalt of het “bovenste” getal (vermenigvuldigtal) – naar links verschoven naargelang de positie van de bit – bij het product wordt opgeteld. Vermenigvuldigen hoeft hier niet meer (ofwel is de bit van de vermenigvuldiger 0 en dan hoeft er niets te gebeuren, ofwel is het 1, en dan verschuift men het getal, en telt men het op). Dit wordt in de dia geïllustreerd. Het product van 2 n-bit positieve getallen kan maximaal een getal van (2n)-bit opleveren. 10101001 169

Seriële vermenigvuldiging 1101 0000 +1101 x 1101 10101001 Seriële vermenigvuldiging 1 1 1 Vermenigvuldigtal 4 shift & add control 4-bit Opteller 4 4 Een hardware-implementatie van de gehele vermenigvuldiging werkt op gelijkaardige wijze als de manuele methode. Deze en de volgende dia’s illustreren de lay-out van de vermenigvuldigeenheid, en het gevolgde proces. We herkennen volgende componenten in de vermenigvuldigeenheid: 4-bit opteller, controlelogica, drie 4-bit registers (vermenigvuldigtal, vermenigvuldiger & product) en een 1-bit carryregister. Het proces wordt in de volgende dia’s stap voor stap geïllustreerd. We vatten het hier al eens samen: Bij het begin worden de vermenigvuldiger en het vermenigvuldigtal in de gepaste registers gestopt, en de andere registers worden op 0 gezet. (zie deze dia) 1 1 1 Carry Vermenigvuldiger

Vermenigvuldiging 1 1 1 Vermenigvuldigtal shift & add control 1101 0000 +1101 x 1101 10101001 Vermenigvuldiging 1 1 1 Vermenigvuldigtal 4 shift & add control 4-bit Opteller 4 4 Gedurende het proces van vermenigvuldiging bepaalt de meest rechtse bit in het register van de vermenigvuldiger of het vermenigvuldigtal bij het (in opbouw zijnde) product wordt opgeteld – en dit voor elke stap. Nadat het vermenigvuldigtal (al dan niet) bij het product werd opgeteld, eindigt elke stap van het proces met de 1-bit naar rechts schuiven van carry, product en vermenigvuldiger (merk: het opschuiven van het product naar rechts is equivalent aan het naar links verschuiven van het vermenigvuldigtal in het manuele procédé). Het proces eindigt wanneer alle bits van de vermenigvuldiger uit het betreffende register zijn weggeschoven. Het product is dan in 2 delen te vinden: in het product- en vermenigvuldigerregister. 1 1 1 Carry Vermenigvuldiger

Vermenigvuldiging 1 1 1 Vermenigvuldigtal shift & add control 1101 0000 +1101 x 1101 10101001 Vermenigvuldiging 1 1 1 Vermenigvuldigtal 4 shift & add control 4-bit Opteller 4 4 De controle-eenheid geeft opdracht tot de optelling van product en vermenigvuldigtal. 1 1 1 Carry Vermenigvuldiger

Vermenigvuldiging 1 1 1 Vermenigvuldigtal shift & add control 1101 0000 +1101 x 1101 10101001 Vermenigvuldiging 1 1 1 Vermenigvuldigtal 4 shift & add control 4-bit Opteller 4 4 Het resultaat van de som wordt in het productregister geschreven. Er is geen carry. 1 1 1 1 1 1 Carry Vermenigvuldiger

Vermenigvuldiging 1 1 1 Vermenigvuldigtal shift & add control 1101 0000 +1101 x 1101 10101001 Vermenigvuldiging 1 1 1 Vermenigvuldigtal 4 shift & add control 4-bit Opteller 4 4 De controle-eenheid geeft opdracht aan de carry, product en vermenigvuldiger om 1 bit naar rechts te schuiven. 1 1 1 1 1 1 Carry Vermenigvuldiger

Vermenigvuldiging 1 1 1 Vermenigvuldigtal shift & add control 1101 0000 +1101 x 1101 10101001 Vermenigvuldiging 1 1 1 Vermenigvuldigtal 4 shift & add control 4-bit Opteller 4 4 Als resultaat van de schuifoperatie komt de eerst berekende bit van het product terecht in de vermenigvuldiger. Ondertussen wordt de volgende minst-beduidende bit van de vermenigvuldiger aan de controle-eenheid aangeboden. Omdat die bit 0 is, is er geen optelling van product en vermenigvuldigtal in deze stap. 1 1 1 1 1 Carry Vermenigvuldiger

Vermenigvuldiging 1 1 1 Vermenigvuldigtal shift & add control 1101 0000 +1101 x 1101 10101001 Vermenigvuldiging 1 1 1 Vermenigvuldigtal 4 shift & add control 4-bit Opteller 4 4 De controle-eenheid geeft opdracht aan de carry, product en vermenigvuldiger om 1 bit naar rechts te schuiven. 1 1 1 1 1 Carry Vermenigvuldiger

Vermenigvuldiging 1 1 1 Vermenigvuldigtal shift & add control 1101 0000 +1101 x 1101 10101001 Vermenigvuldiging 1 1 1 Vermenigvuldigtal 4 shift & add control 4-bit Opteller 4 4 Als resultaat van de schuifoperatie komt de tweede berekende bit van het product terecht in de vermenigvuldiger. Ondertussen wordt de volgende minst-beduidende bit van de vermenigvuldiger aan de controle-eenheid aangeboden. Omdat die bit 1 is, is er wel een optelling van product en vermenigvuldigtal in deze stap. 1 1 1 1 1 Carry Vermenigvuldiger

Vermenigvuldiging 1 1 1 Vermenigvuldigtal shift & add control 1101 0000 +1101 x 1101 10101001 Vermenigvuldiging 1 1 1 Vermenigvuldigtal 4 shift & add control 4-bit Opteller 4 4 De controle-eenheid geeft opdracht tot de optelling van product en vermenigvuldigtal. 1 1 1 1 1 Carry Vermenigvuldiger

Vermenigvuldiging 1 1 1 Vermenigvuldigtal shift & add control 1101 0000 +1101 x 1101 10101001 Vermenigvuldiging 1 1 1 Vermenigvuldigtal 4 shift & add control 4-bit Opteller 4 4 Het resultaat van de som wordt in het productregister geschreven. Er is wel carry. 1 1 1 1 Carry Vermenigvuldiger

Vermenigvuldiging 1 1 1 Vermenigvuldigtal shift & add control 1101 0000 +1101 x 1101 10101001 Vermenigvuldiging 1 1 1 Vermenigvuldigtal 4 shift & add control 4-bit Opteller 4 4 De controle-eenheid geeft opdracht aan de carry, product en vermenigvuldiger om 1 bit naar rechts te schuiven. 1 1 1 1 Carry Vermenigvuldiger

Vermenigvuldiging 1 1 1 Vermenigvuldigtal shift & add control 1101 0000 +1101 x 1101 10101001 Vermenigvuldiging 1 1 1 Vermenigvuldigtal 4 shift & add control 4-bit Opteller 4 4 Als resultaat van de schuifoperatie komt de derde berekende bit van het product terecht in de vermenigvuldiger. Ondertussen wordt de volgende minst-beduidende bit van de vermenigvuldiger aan de controle-eenheid aangeboden. Omdat die bit 1 is, is er wel een optelling van product en vermenigvuldigtal in deze stap. 1 1 1 Carry Vermenigvuldiger

Vermenigvuldiging 1 1 1 Vermenigvuldigtal shift & add control 1101 0000 +1101 x 1101 10101001 Vermenigvuldiging 1 1 1 Vermenigvuldigtal 4 shift & add control 4-bit Opteller 4 4 De controle-eenheid geeft opdracht tot de optelling van product en vermenigvuldigtal. 1 1 1 Carry Vermenigvuldiger

Vermenigvuldiging 1 1 1 Vermenigvuldigtal shift & add control 1101 0000 +1101 x 1101 10101001 Vermenigvuldiging 1 1 1 Vermenigvuldigtal 4 shift & add control 4-bit Opteller 4 4 Het resultaat van de som wordt in het productregister geschreven. Er is wel carry. 1 1 1 1 1 Carry Vermenigvuldiger

Vermenigvuldiging 1 1 1 Vermenigvuldigtal shift & add control 1101 0000 +1101 x 1101 10101001 Vermenigvuldiging 1 1 1 Vermenigvuldigtal 4 shift & add control 4-bit Opteller 4 4 De controle-eenheid geeft opdracht aan de carry, product en vermenigvuldiger om 1 bit naar rechts te schuiven. 1 1 1 1 1 Carry Vermenigvuldiger

Vermenigvuldiging 1 1 1 Vermenigvuldigtal shift & add control 1101 0000 +1101 x 1101 10101001 Vermenigvuldiging 1 1 1 Vermenigvuldigtal 4 shift & add control 4-bit Opteller 4 4 169 Product Het vermenigvuldigingsproces is beëindigd. Het product is te vinden als combinatie van het product- en vermenigvuldigerregister. 1 1 1 1 Carry Vermenigvuldiger

Algoritme van Booth M x 00011110 = M x (16 + 8 + 4 + 2) = M x 30 Bij een overgang van 0 → 1 : verschil Bij een overgang van 1 → 0 : som Indien we in de plaats van een opteller in de hardware een opteller/aftrekker gebruiken, dan kunnen we het product in sommige gevallen aanzienlijk versnellen door gebruik te maken van het algoritme van Booth. Het idee is dat indien de vermenigvuldiger uit een opeenvolging van 1-bitjes bestaat, deze kunnen gegroepeerd worden en kunnen uitgedrukt worden als een verschil. Concreet zal men bij het uitvoeren van de vermenigvuldiging niet enkel moeten kijken naar het bit waarmee men moet vermenigvuldigen, maar ook naar de bit waarmee men net vermenigvuldigd heeft (door dit bij het naar rechts schuiven nog ergens bij te houden). Bij een overgang van 0 naar 1 begint een rij van 1 of meer 1-tjes. Op dat ogenblik moet men het verschil maken ipv. de som. Op het einde van de rij 1-tjes, bij de overgang van 1 naar 0 moet men dan de som maken. Op die manier zal men hetzelfde product berekenen. Om het algoritme goed te initialiseren moet men vertrekken met een 0 (alsof er een 0 na de komma stond), en moet men een leidende nul toevoegen (ervan uitgaande dat er enkel positieve getallen vermenigvuldigd worden). Initialisatie = 0, leidende 0 in het begin.

Vermenigvuldiging 1101 13 x 1101 13 1101 0000 +1101 De seriële implementatie van het manuele proces voor vermenigvuldiging vereist weinig hardware, maar is wel erg traag. De benodigde tijd voor vermenigvuldiging van 2 n-bit getallen groeit als n2 indien we van een doorsijpelopteller gebruik maken. Door het proces in parallel uit te voeren, kan men het proces in 2n stappen uitvoeren. Daarbij worden de (4) producttermen die tussen de 2 horizontale lijntjes in de dia staan, afzonderlijk en in parallel berekend, en daarna in cascade opgeteld. … zie verder… 10101001 169

Carry Save Vermenigvuldiger 1 1 1 1 PP PP PP PP PP PP PP PP 1 PP PP PP PP 1 PP PP PP PP Deze dia toont de carry save vermenigvuldiger. De volgende dia toont elk PP- element (partieel product) in detail. In deze vermenigvuldiger maken we 1-bit producten van elke bit in vermenigvuldigtal en elke bit in vermenigvuldiger, en dan wordt de som gemaakt van elke rij van partiële productelementen. De 4 rijen van PP- elementen komen overeen met de 4 producttermen besproken bij de vorige dia. De producttermen zijn letterlijk terug te vinden als de uitgangen van de AND-poort in de PP-elementen. De volle optellers in de PP-elementen zorgen voor de optelling in cascade van de verschillende producttermen. Men noemt deze vermenigvuldiger een carry save vermenigvuldiger omdat de carry niet naar links maar naar links onder wordt doorgegeven. Hij wordt als het ware doorgegeven naar de volgende partiële som. De onderste rij van optellers in deze vermenigvuldiger, maakt de optelling in cascade compleet. FA FA FA HA p7 p6 p5 p4 p3 p2 p1 p0

Partieel product vermenigvuldigtal som carry in vermenigvuldiger FA -1 1 2 som carry in vermenigvuldiger FA Deze dia toont het PP-element in detail. Elk element vermenigvuldigt 1 bit van de vermenigvuldiger met 1 bit van het vermenigvuldigtal. Het resultaat wordt dan opgeteld bij de andere bits in dezelfde kolom (=bitpositie) en bij de inkomende carry uit de naburige rechtse kolom. De carry-out wordt doorgegeven naar de naburige linkse kolom (in de onderliggende rij). Het resultaat van de som wordt doorgegeven naar onder, om verder opgeteld te worden bij andere bits in dezelfde kolom. Een negatieve poortvertraging wordt hier gebruikt om aan te geven dat het signaal reeds minstens 1 poortvertraging aanwezig is. Het is in de praktijk de aankomst van het signaal op tijdstip 0 dat bepalend zal zijn wanneer de output van het PP-element beschikbaar zal zijn. In dit geval is dat de carry-in. Op de vorige dia is het niet nodig om overal in full adders te voorzien. Alle PP-elementen met een ontbrekende input, of met een input die steeds op 0 staat mogen intern een half adder bevatten. Het betreft de vier PP-elementen in de hoeken, en de volledige linkerzijde en de bovenzijde (omwille van de binnenkomende nullen via de blauwe input). som carry out

Carry save Vermenigvuldiger 1 1 1 1 PP PP PP PP 13 11 9 PP PP PP PP 2 1 PP PP PP PP 4 1 PP PP PP PP De poortvertragingen voor dit netwerk staan hier aangegeven. Het blijkt dat er per bijkomend bit op een extra vertraging van twee poortvertragingen moet gerekend worden (vergelijk dit met de resultaten voor de doorsijpelopteller). Deze oplossing is reeds heel wat efficiënter dan de eerder geziene sequentiële oplossing voor de vermenigvuldiging. Ze kan echter nog versneld worden door i.p.v. de overdracht als een golf doorheen het netwerk te laten gaan (zwarte lijnen in de onderste rij full adderss), het carry lookahead principe voor de carry toe te passen. 6 HA FA FA HA 8 p7 p6 p5 p4 p3 p2 p1 p0 14 12 10 9 7 5 3 1

Overzicht Logische poorten Transistorniveau Combinatorische schakelingen De ALU-schakelingen Optellers Verschuivers Vermenigvuldigers Delers

Deling 00111 11 00 1 001 00 011 11 001 00 001 Een deling van positieve binaire getallen wordt uitgevoerd op een wijze die volledig gelijkaardig is aan de deling “met de hand” van decimale getallen. In elke stap proberen we de deler (11) af te trekken van het deeltal (00111), waarbij we in elke stap 1 bit meer (vanaf links te beginnen) van het deeltal in aanmerking nemen. Lukt dat niet, dan plaatsen we een 0 bij het resultaat; lukt het wel, dan plaatsen we een 1 bij het resultaat, en doen we de aftrekking. Aldus wordt het resultaat van links naar rechts opgebouwd. Het quotiënt van 2 n-bit positieve getallen kan maximaal een getal van n-bit opleveren.

Restoring deling 1 1 Deler add/sub shift & add/sub control 00111 11 00 001 011 1 1 1 Deler add/sub 5 shift & add/sub control 5-bit opteller 5 5 Een seriële hardware-implementatie van de gehele deling werkt op gelijkaardige wijze als de manuele methode. Deze en de volgende dia’s illustreren de lay-out van de delingeenheid, en het gevolgde proces dat restoring deling genoemd wordt. We herkennen volgende componenten in de delingeenheid: 5-bit opteller/aftrekker, controlelogica en drie registers (deeltal, deler & rest). Het proces wordt in de volgende dia’s stap voor stap geïllustreerd. We vatten het hier al eens samen: Bij het begin worden de deler en het deeltal in de gepaste registers gestopt, en de andere registers worden op 0 gezet. (zie deze dia). In elke stap worden restregister en deeltalregister gezamenlijk naar links geschoven (en dus komt het MSB van het deeltalregister in het restregister terecht). Het restregister bevat dan dat deel van het deeltal dat men tot dusver in aanmerking neemt om er de deler van af te trekken. Om te achterhalen of het verschil positief is, kan men niet anders dan het verschil effectief te berekenen en de tekenbit te onderzoeken. Zie volgende transparant 1 1 1 Deeltal

Restoring deling 1 1 Deler add/sub shift & add/sub control 00111 11 00 001 011 1 1 1 Deler add/sub 5 shift & add/sub control 5-bit opteller 5 5 Het quotiënt wordt opgebouwd in het register met het deeltal. Als het verschil van het restregister en de deler positief is, wordt in de rechtse bit van het deeltalregister een 1 ingevoerd; is het verschil negatief, dan wordt daar een 0 ingevoerd, en wordt ook de waarde in het restregister hersteld door de som te maken met het deeltal. Het proces eindigt wanneer alle bits van het deeltal uit het betreffende register zijn weggeschoven. Het quotiënt is dan te vinden in het deeltalregister, de rest in het restregister. Op deze transparant De controle-eenheid geeft opdracht aan de rest- en deeltalregister om 1 bit naar links te schuiven. 1 1 1 Deeltal

Restoring deling 1 1 Deler add/sub shift & add/sub control 00111 11 00 001 011 1 1 1 Deler add/sub 5 shift & add/sub control 5-bit opteller 5 5 De controle-eenheid geeft opdracht om het verschil van restregister en deler te berekenen. 1 1 1 ? Deeltal

Restoring deling 1 1 Deler add/sub shift & add/sub control 00111 11 00 001 011 1 1 1 Deler add/sub 5 shift & add/sub control 5-bit opteller 5 5 Het resultaat van de aftrekking wordt in het restregister geschreven. 1 1 1 1 1 1 1 ? Deeltal

Restoring deling 1 1 Deler add/sub shift & add/sub control 00111 11 00 001 011 1 1 1 Deler add/sub 5 shift & add/sub control 5-bit opteller 5 5 Het resultaat van de aftrekking is negatief, zo blijkt uit de tekenbit van het resultaat. 1 1 1 1 1 1 1 ? Deeltal

Restoring deling 1 1 Deler add/sub shift & add/sub control 00111 11 00 001 011 1 1 1 Deler add/sub 5 shift & add/sub control 5-bit opteller 5 5 Omdat het resultaat van de aftrekking negatief was, wordt een nul ingeschreven bij het quotiënt, en wordt het restregister hersteld tot de vorige waarde, door er de deler bij op te tellen. 1 1 1 1 1 1 1 Deeltal

Restoring deling 1 1 Deler add/sub shift & add/sub control 00111 11 00 001 011 1 1 1 Deler add/sub 5 shift & add/sub control 5-bit opteller 5 5 Het resultaat van de optelling wordt in het restregister geschreven. 1 1 1 Deeltal

Restoring deling 1 1 Deler add/sub shift & add/sub control 00111 11 00 001 011 1 1 1 Deler add/sub 5 shift & add/sub control 5-bit opteller 5 5 De controle-eenheid geeft opdracht aan de rest- en deeltalregister om 1 bit naar links te schuiven. 1 1 1 Deeltal

Restoring deling 1 1 Deler add/sub shift & add/sub control 00111 11 00 001 011 1 1 1 Deler add/sub 5 shift & add/sub control 5-bit opteller 5 5 De controle-eenheid geeft opdracht om het verschil van restregister en deler te berekenen. 1 1 1 ? Deeltal

Restoring deling 1 1 Deler add/sub shift & add/sub control 00111 11 00 001 011 1 1 1 Deler add/sub 5 shift & add/sub control 5-bit opteller 5 5 Het resultaat van de aftrekking wordt in het restregister geschreven. 1 1 1 1 1 1 ? Deeltal

Restoring deling 1 1 Deler add/sub shift & add/sub control 00111 11 00 001 011 1 1 1 Deler add/sub 5 shift & add/sub control 5-bit opteller 5 5 Het resultaat van de aftrekking is negatief, zo blijkt uit de tekenbit van het resultaat. 1 1 1 1 1 1 ? Deeltal

Restoring deling 1 1 Deler add/sub shift & add/sub control 00111 11 00 001 011 1 1 1 Deler add/sub 5 shift & add/sub control 5-bit opteller 5 5 Omdat het resultaat van de aftrekking negatief was, wordt een nul ingeschreven bij het quotiënt, en wordt het restregister hersteld tot de vorige waarde, door er de deler bij op te tellen. 1 1 1 1 1 1 Deeltal

Restoring deling 1 1 Deler add/sub shift & add/sub control 00111 11 00 001 011 1 1 1 Deler add/sub 5 shift & add/sub control 5-bit opteller 5 5 Het resultaat van de optelling wordt in het restregister geschreven. 1 1 1 Deeltal

Restoring deling 1 1 Deler add/sub shift & add/sub control 00111 11 00 001 011 1 1 1 Deler add/sub 5 shift & add/sub control 5-bit opteller 5 5 De controle-eenheid geeft opdracht aan de rest- en deeltalregister om 1 bit naar links te schuiven. 1 1 1 Deeltal

Restoring deling 1 1 Deler add/sub shift & add/sub control 00111 11 00 001 011 1 1 1 Deler add/sub 5 shift & add/sub control 5-bit opteller 5 5 De controle-eenheid geeft opdracht om het verschil van restregister en deler te berekenen. 1 1 1 ? Deeltal

Restoring deling 1 1 Deler add/sub shift & add/sub control 00111 11 00 001 011 1 1 1 Deler add/sub 5 shift & add/sub control 5-bit opteller 5 5 Het resultaat van de aftrekking wordt in het restregister geschreven. 1 ? Deeltal

Restoring deling 1 1 Deler add/sub shift & add/sub control 00111 11 00 001 011 1 1 1 Deler add/sub 5 shift & add/sub control 5-bit opteller 5 5 Het resultaat van de aftrekking is positief, zo blijkt uit de tekenbit van het resultaat. 1 ? Deeltal

Restoring deling 1 1 Deler add/sub shift & add/sub control 00111 11 00 001 011 1 1 1 Deler add/sub 5 shift & add/sub control 5-bit opteller 5 5 Omdat het resultaat van de aftrekking positief was, wordt een één ingeschreven bij het quotiënt. Het restregister moet niet hersteld worden tot de vorige waarde, aangezien de aftrekking terecht werd uitgevoerd. 1 1 Deeltal

Restoring deling 1 1 Deler add/sub shift & add/sub control 00111 11 00 001 011 1 1 1 Deler add/sub 5 shift & add/sub control 5-bit opteller 5 5 De controle-eenheid geeft opdracht aan de rest- en deeltalregister om 1 bit naar links te schuiven. 1 1 Deeltal

Restoring deling 1 1 Deler add/sub shift & add/sub control 00111 11 00 001 011 1 1 1 Deler add/sub 5 shift & add/sub control 5-bit opteller 5 5 De controle-eenheid geeft opdracht om het verschil van restregister en deler te berekenen. 1 1 ? Deeltal

Restoring deling 1 1 Deler add/sub shift & add/sub control 00111 11 00 001 011 1 1 1 Deler add/sub 5 shift & add/sub control 5-bit opteller 5 5 Het resultaat van de aftrekking wordt in het restregister geschreven. 1 1 1 1 1 ? Deeltal

Restoring deling 1 1 Deler add/sub shift & add/sub control 00111 11 00 001 011 1 1 1 Deler add/sub 5 shift & add/sub control 5-bit opteller 5 5 Het resultaat van de aftrekking is negatief, zo blijkt uit de tekenbit van het resultaat. 1 1 1 1 1 ? Deeltal

Restoring deling 1 1 Deler add/sub shift & add/sub control 00111 11 00 001 011 1 1 1 Deler add/sub 5 shift & add/sub control 5-bit opteller 5 5 Omdat het resultaat van de aftrekking negatief was, wordt een nul ingeschreven bij het quotiënt, en wordt het restregister hersteld tot de vorige waarde, door er de deler bij op te tellen. 1 1 1 1 1 Deeltal

Restoring deling Rest Quotiënt 1 1 Deler add/sub 1 1 Deler add/sub 5 shift & add/sub control 5-bit opteller 5 5 Het resultaat van de optelling wordt in het restregister geschreven. Het algoritme is afgelopen. We vinden het quotiënt en de rest van de deling terug in de betreffende registers. In de plaats van bij een onnodig verschil (negatief resultaat) telkens opnieuw de optelling uit te voeren kan men ook beslissen om het verschil te laten voor wat het is, en in een volgende stap de optelling te gebruiken. 1 1 Deeltal

Non-restoring deling (Deeltal-Deler + Deler) * 2 + b - Deler = Deeltal * 2 - Deler + b (Deeltal-Deler) * 2 + b + Deler = Het idee is dat indien (Deeltal-Deler) < 0 is, het resultaat van (Deeltal-Deler + Deler) * 2 + b - Deler = Deeltal * 2 - Deler +b (b = ingeschoven b) wat hetzelfde is als: (Deeltal-Deler) * 2 + b + Deler = Deeltal * 2 - Deler +b Door te onthouden dat het vorige verschil < 0 was, en in een volgende stap de optelling uit te voeren, en dan de test te doen, bereikt men hetzelfde resultaat, zij het met minder operaties. Men noemt dit een non-restoring deler. Merk op dat de hardware nodig om te delen en te vermenigvuldigen nagenoeg dezelfde is.

Iteratieve deling xi+1 = xi(2-xib) Benadering van 1/b: Convergeert snel: aantal correcte bits verdubbelt per iteratie. 32 bit = 5 iteraties indien x0 voldoende dicht bij de oplossing! De berekening van 1/b kan iteratief gebeuren (gebruik makend van “Newtons iteratiemethode voor het vinden van de wortels van polynomen”) De iteratieformule hiervoor is: xi+1 = xi (2-xib). Zodoende zijn enkel vermenigvuldiging en aftrekking nodig voor deling. Deze methode convergeert snel, aangezien het aantal correcte bits verdubbelt per iteratie (we gaan hier uit van een vaste-kommavoorstelling of “binaire fracties”). Door look-up tabellen te gebruiken die op basis van b een x0 voorstellen die voldoende dicht in de buurt liggen (bv. 1 bit correcte precisie), vindt men 32 bit precisie in 5 iteraties.

1/5 x0 x1 x2 x0 0.27 0.1 x1 0.1755 0.15 x2 0.19699875 0.1875 x3 0.199954962 0.19921875 x4 0.19999999 0.199996948 x5 0.2 0.2 Deze dia illustreert de werkwijze van deze iteratieve deling. In elke iteratiestap wordt het snijpunt van de X-as en de raaklijn in xi aan curve y = 1/x - b berekend als xi+1.

Pauze Met dominosteentjes: https://www.youtube.com/watch?v=OpLU__bhu2w&feature=youtu.be