Download de presentatie
De presentatie wordt gedownload. Even geduld aub
1
Les 8: Datapad & Controle
“A man with a watch knows what time it is. A man with two watches is never sure.” Wet van Segal.
2
Inhoud Sequentiële logica Het datapad Eén-cyclus-per-instructiemachine
Meer-cycli-per-instructiemachine Microcodering RISC vs. CISC
3
Sequentiële logica i1 f1 … … Combinatorische ik functie fm … klok s1
sn Sequentiële logica werkt anders dan de combinatorische schakelingen die een pure functie uitvoeren van ingang naar uitgang. Sequentiële logica, ook wel “finite state machine” (toestandsautomaat) genoemd, neemt een ingang en huidige toestand, en vertaalt die (via een combinatorische functie) in een uitgang en nieuwe toestand. De geschiedenis van de ingangen bepaalt mee de toestand en de uitgang. De dia toont het klassieke model van een toestandsautomaat. De combinatorische functie vertaalt de (externe) ingangsbits i1-ik, samen met de (interne) toestandbits s1-sn, in nieuwe toestandsbits en in uitgangsbits f1-fm. Een speciale component bewaart de output van de combinatorische functie, en geeft deze op het gepaste ogenblik (aangegeven door de klok) door aan de input van het combinatorisch circuit. Mocht dit vertragings- en geheugenelement niet aanwezig zijn dat zou de output meteen teruggekoppeld worden naar de input waardoor een mogelijk onstabiele situatie zou ontstaan.
4
S-R Latch (NOR) S Q S R Q R Q Q A B A+B 0 0 1 0 1 0 1 0 0 1 1 0
Algemeen: een geheugencel is een collectie van logische poorten die een stabiele uitgang kan bewaren zonder dat de ingangen actief moeten zijn. De uitgang van een geheugencel wordt bepaald door de huidige ingangen en de geschiedenis van ingangen. Een geheugencel kan gebruikt worden om één enkele informatiebit op te slaan, en dient als bouwblok voor computergeheugen. Een 1 bit geheugencel wordt ook een latch genoemd. De werking van de S-R latch wordt in de dia uitgelegd. Wanneer zowel S als R inactief zijn (0), dan bewaren deze 2 kruisgekoppelde NOR-poorten de huidige uitgangen Q en NIET-Q, wat die ook zijn. Stel dat Q=0, R=S=0. Gaat nu S (Set) naar 1, dan gaat het signaal NIET-Q na een vertraging omschakelen naar 0. Na nog eens zal dan het signaal Q omschakelen naar 1. Nu kan S terug op 0 gebracht worden, en de latch bewaart de nieuwe situatie aan de uitgangen. Vanuit de situatie Q=1, R=S=0, kunnen we terug naar de oorspronkelijke situatie, door een 1-puls te geven op R (Reset) die langer dan 2 duurt - zie de dia. De situatie waarbij R=S=1 is niet toegelaten, omdat dit geen zinnig gedrag is voor de latch. Beide uitgangen zullen dan op 0 staan en bij het simultaan terug op 0 brengen van de ingangen is de uitgang Q niet voorspelbaar. A B A+B Q
5
S-R Latch Qt S R Qt+1 S Q Q De dia toont de waarheidstabel van deze S-R latch. Voor de huidige toestand Q, en ingangen S en R, wordt aangegeven wat de nieuwe toestand en uitgang Q zal zijn (S: Set, R: Reset). Vraag: zie je het verband tussen een SR latch en het aanvragen van een halte op bus of tram (Q wordt verbonden met het signaal “halte aangevraagd”). Wie bedient er dan S en R? R
6
S-R Latch (NAND) S Q S R Q R Q Q A B AB 0 0 1 0 1 1 1 0 1 1 1 0
Men kan ook een latch bouwen met nand-poorten. Die reageert dan op nul- pulsen ipv een-pulsen (zoals een latch gebaseerd op nor-poorten). A B AB Q
7
Geklokte S-R Latch S Q clk Q R
Wanneer S en R afkomstig zijn uit een ander en ingewikkeld circuit, is het mogelijk dat er een aantal ongewenste overgangen gebeuren op S of R, alvorens die de correcte waarde aannemen corresponderend bij de ingangen van dat circuit. Het fenomeen van de glitch werd reeds eerder besproken. Wanneer een glitch lang genoeg zou duren om de waarde van Q om te keren, wordt de werking van de latch verstoord. Daarom kan men een klok toevoegen aan de S-R latch, om ervoor te zorgen dat de veranderingen aan de bewaarde bit enkel kunnen gebeuren op een moment dat S en R correct en stabiel zijn. Dat doet men door ervoor te zorgen dat S en R correct en stabiel zijn telkens de klok op 1 staat. Het klokcircuit produceert een continue stroom van 1’en en 0’en, en het symbool is een blokvorm zoals aangeduid in de figuur. De tijd tussen 2 opgaande klokflanken noemt men de cyclustijd. De kloksnelheid is de inverse van de cyclustijd.
8
D-Latch D Q clk Q Een nadeel van de S-R latch is dat om een 1 of een 0 te bewaren in de latch, men een 1 moet aanleggen aan een verschillende ingangslijn (S of R). Een alternatieve configuratie is de D-latch, waarbij een 1 of 0 wordt aangelegd aan één enkele input (D komt van data). De D latch wordt geïllustreerd in de dia, en is eigenlijk niets meer dan een geklokte S-R latch waarbij S=D en R=NIET-D. Wanneer de klok omhoog gaat, wordt de waarde van D bewaard in de latch. Rechts onder in de dia is het symbool weergegeven van de geklokte D latch. D Q C Q
9
D-Latch D C Kenmerkend voor de D-latch is dat indien de klok laag staat, de uitgang stabiel blijft, en indien de klok hoog staat, de uitgang Q de ingang D volgt (met een zeker vertraging). Tijdens het hoog zijn van de klok kan de uitgang Q dus verschillende keren van waarde veranderen. Q
10
Sequentiële logica i1 f1 … … Combinatorische ik functie fm … klok
Q1 D1 s1 Qn Dn sn Een D-latch wordt vaak gebruikt in situaties waar er feedback is van een uitgang van een circuit naar een ingang. Deze feedback kan er soms voor zorgen dat de latch meer dan één keer per klokcyclus van toestand verandert. Zolang de klok hoog staat volgt de output immers de input. Om er zeker van te zijn dat de latch slechts een keer per klokpuls van toestand verandert, gebruiken we geen gewone D latch, maar een master-slave D-latch of een D-flip-flop. … zie verder …
11
Master-Slave D-Latch (D-Flip Flop)
D Q D Q C Q C Q D Q Q … vervolg van vorige dia … Een master-slave latch bestaat uit 2 D latches in cascade, waarbij de 2e de geïnverteerde klok van de eerste gebruikt. De master latch verandert zijn toestand wanneer de klok hoog is, maar de slave latch verandert pas wanneer de klok laag is. Zodoende is de data- ingang van de slave-latch gegarandeerd stabiel! De klok moet dus eerst hoog gaan en dan laag, alvorens de master-ingang D wordt opgeslagen in de slave latch en als Qslave aan de uitgang van de flip-flop verschijnt. In dit geval zal de tweede latch de waarde Q weergeven op het ogenblik van de dalende flank van de klok. Rechtsonder staat het symbool van de D-flip-flop. Het driehoekje duidt aan dat transities aan de uitgang enkel gebeuren bij stijgende of dalende klokflanken, afhankelijk van de configuratie (in dit voorbeeld bij dalende klokflank). Terminologie: men spreekt over niveaugestuurde latches (wijzigen toestand terwijl de klok hoog, of laag, is – afhankelijk van de configuratie) en flankgestuurde flip-flops (veranderen de toestand tijdens een kloktransitie: hoog-laag of laag-hoog, afhankelijk van de configuratie). Volledig analoog kan men ook een SR-latch uitbreiden tot een SR-flip-flop. Flip-flop: D
12
D-Flip-Flop D C Q setup-tijd hold tijd
Kenmerkend voor de D-flip-flop is dat de uitgang pas verandert op het ogenblik van dalende flank van de klok. Op dat ogenblik wordt er als het ware een foto genomen van het ingangssignaal D. Wat er tussendoor gebeurt, speelt geen rol. Wel is het zo dat het uiteindelijke resultaat niet noodzakelijk de waarde van het ingangsignaal op het precieze tijdstip van de dalende klok zal zijn. De reden hiervoor is dat de latches in de flipflop wat tijd nodig hebben om een stabiele toestand aan te nemen. In de praktijk spreekt men van de setup-tijd van de flipflop. Men moet ervoor zorgen dat het signaal D gedurende minstens de setup-tijd van de flipflop stabiel blijft (tot aan het ogenblik van de dalende flank). Sommige flip-flops eisen dat ook na de dalende flank het signaal D nog even bewaard wordt. Dit wordt de hold-tijd genoemd. Deze is doorgaans zeer kort. Q setup-tijd hold tijd
13
J-K Flip-Flop J Q K Q Qt J K Qt+1 0 0 0 0 0 0 1 0 0 1 0 1 0 1 1 1
J S Q R Q K Een J-K flip-flop is zeer gelijkaardig aan de S-R flip-flop. Wanneer we beide circuits vergelijken, zien we dat het enig verschil zit in de terugkoppeling van NIET-Q en Q naar de AND-poorten waar ze met J (≈S) en K (≈R) gecombineerd worden. De J-K flip-flop heeft dan ook een gedrag dat gelijkaardig is aan de S-R flip- flop, met dat verschil dat wanneer J=K=1, de toestand van de flip-flop omslaat (toggle). Deze flip-flop realiseert de vier functies die men kan uitvoeren op 1 bit (op 0 zetten, op 1 zetten, onveranderd laten, omklappen). Flip-flop: JK
14
T Flip-Flop Q T 1 S Q clk R Q 1 Flip-flop: T
Een T flip-flop (T voor toggle) is als een J-K flip-flop waarbij J=K=1. Deze zal per klokperiode 1 keer omklappen. Het effect hiervan is dat het signaal Q de halve frequentie zal hebben van het kloksignaal. Door Q op zijn beurt te verbinden met de ingang T van bijkomende T-flip- flops, men de klokfrequentie delen door een macht van 2. Flip-flop: T
15
Register d31 a31 d30 a30 d0 a0 clk w D Q D Q D Q Q Q Q
Een register is een zeer snel geheugen ter grootte van n bits. Een register bestaat uit 1 D-flip-flop per op te slaan bit. Alle flipflops delen dezelfde controlesignalen. Het schrijfsignaal van de flipflops is een combinatie van de klok en een schrijfcommando ‘w’; als het schrijfsignaal waar is, wordt de waarde op de D-bus ingeschreven in het register bij de dalende klokflank. Kenmerkend voor een register (net als voor een D-flip-flop) is dat het bij het begin van een cyclus een waarde beschikbaar kan stellen (op de A-bus), en tegelijk op het einde van diezelfde cyclus een nieuwe waarde kan opslaan. Men zegt dat een register binnen dezelfde cyclus kan gelezen en beschreven worden. Dit is zo dank zij het gebruik van flip-flops. Met latches zou dit niet mogelijk geweest zijn.
16
Registerbestand clk w Reg 1 Reg 0 Reg 1 d Dout1 decoder Reg 2
Multiplexer 1 … Din Reg n-1 Reg 2 1 schrijfpoort 2 leespoorten Dout2 Een registerbestand bestaat uit een lijst van registers. Bij een registerbestand spreekt men van schrijfpoorten en leespoorten. Hierboven staat een registerbestand getekend met 1 schrijfpoort en twee leespoorten. De ingang d is het nummer van het register dat moet beschreven worden (op het einde van de cylus). De te schrijven waarde zit in Din. De decoder zet de d-waarde om naar individuele signalen per register die in combinatie met het w-signaal zullen aangeven welk register (precies 1) er moet beschreven worden. Dit beschrijven zal dan gebeuren bij de dalende klokflank. De leespoorten werden hier geïmplementeerd door middel van een multiplexer. Alle registers sturen hun waarden permanent tot aan de multiplexers die gewoon hun keuze maken. Deze multiplexers zijn wel groot: Indien er 32 registers van 32 bits zijn hebben ze elk 1024 inputs en 32 outputs. In theorie kan men het aantal leespoorten gemakkelijk uitbreiden. Ook het aantal schrijfpoorten kan uitgebreid worden, maar dit is complexer omdat er dan ook multiplexers nodig zijn om te kiezen tussen de Din-signalen. In de praktijk zullen bijkomende poorten het registerbestand vertragen. Men probeert het aantal poorten daarom zo klein mogelijk te houden. Multiplexer 2 Registerbestand
17
Inhoud Sequentiële logica Het datapad Eén-cyclus-per-instructiemachine
Meer-cycli-per-instructiemachine Microcodering RISC vs. CISC
18
Von Neumann-machine Fysiek zicht
BUS BUS adres adres CVE Controle controle cache data data klok klok controle controle ALU ALU registers registers Geheugen:bau-cellen RAM Geheugen We concentreren ons eerst even op de controle-eenheid van de CVE. De controle-eenheid is de bron van alle activiteit in de processor. Zij activeert de andere systeemcomponenten via de controlepunten. De reeds vermelde klok geeft de ogenblikken aan waarop de controlesignalen worden gegenereerd en de registers hun nieuwe waarden opslaan. Invoer/Uitvoer Invoer/Uitvoer
19
De klok De klok geeft het tempo aan waarmee interne en externe controlesignalen worden gegenereerd. De eerste PC in 1981 werkte aan een snelheid van 4,7MHz: 4,7 miljoen klokpulsen per seconde. Hedendaagse algemene processors werken aan snelheden tot tegen de 4 GHz. Het kloksignaal van de processor wordt in de praktijk afgeleid van het kloksignaal van de processorbus (front side bus). De frequentie van deze bus is doorgaans lager dan die van de processor zelf, maar door een frequentievermenigvuldiger wordt deze opgetrokken tot de vereiste frequentie. Dit garandeert dat de klok van de processor en de bus aan elkaar gekoppeld blijven. Signalen propageren in een geleider tegen km/s (2/3 van de lichtsnelheid). Dit wil zeggen dat een signaal gedurende een klokperiode van ns (4 GHz) niet verder komt dan 5 cm. Vergeleken bij een chipoppervlakte van een paar cm2, is dit een zeer korte afstand. Bij een klokfrequentie van 4 GHz is het dus nog net mogelijk om een signaal van de ene kant naar de andere kant van de processor te sturen, meer niet. Men neemt aan dat het niet zinvol is om de klokperiode kleiner te maken van 12 FO4 omdat de D-flipflop op zich al een vertraging van 2-3 FO4 tijd vergt.
20
Voorbeelden Merk Type Freq (GHz) Intel Core i7-2600K 3,4
Core i7-2630QM 2,0 Xeon E3-1220L 2,2 AMD Phenom II X6 1090T BE 3,2 E2-3000M 1,8 Atlon 64 FX-76 IBM Power Turbo Core 4,25 ARM Cortex-A15 1-1,5 Dit lijstje geeft een aantal moderne processors en hun topsnelheid. Merk evenwel op dat de prestatie van een processor niet enkel door zijn klokfrequentie bepaald wordt. Even belangrijk is te weten hoeveel werk er precies per cyclus verricht wordt. Niettegenstaande dit, behoort de klokfrequentie tot de belangrijke marketingwapens van processorfabrikanten. De klokfrequentie werd daarom door Intel in het verleden vaak als synoniem gebruikt voor snelheid.
21
Processor Data-geheugen Datapad Controle-eenheid Instructie-geheugen
De kern van een processor bestaat uit 2 essentiële onderdelen: het datapad, met de registers en de ALU, en de controle-eenheid. De controle-eenheid regelt de aansturing van de controlepunten in het datapad, en zet dus alle bewerkingen in de processor in gang, en controleert alle processen. We gaan nu stap voor stap een datapad opbouwen. Naderhand zullen we het bijhorende controle ontwerpen. We zullen dit doen voor drie types van instructies Twee ALU-instructies: ADD en ADDI (add immediate), dit is een optelling waarbij een letterlijke operand betrokken is. Twee datatransferinstructies: LOAD en STORE Twee controletransferinstructies: JUMP (onvoorwaardelijk), en BRGE (voorwaardelijk). Deze zes instructies staan model voor alle andere instructies die men gewoonlijk in een processor aantreft. We beginnen bij het inladen van een instructie. Instructie-geheugen
22
Laden van een instructie
+ 4 PC geheugen leesadres Deze schakeling zal per klokcyclus een instructie ophalen uit het geheugen (we veronderstellen hier even dat het geheugen/de cache per cyclus 1 instructie kan aanleveren, en dat alle instructies precies 4 bytes lang zijn). Op de dalende flank van de klok krijgt de PC een nieuwe waarde die hij meteen doorstuurt naar het geheugen. Van zodra het geheugen dit nieuwe adres krijgt, produceert het aan de output de instructie die op dit adres opgeslagen ligt (we veronderstellen dat het instructiegeheugen steeds in leesmode staat; we veronderstellen hier dat het programma zijn eigen instructies niet zal veranderen, en dat instructies een vaste lengte hebben). Simultaan met de werking van het geheugen wordt de waarde van PC ook naar een ALU gestuurd die vast geconfigureerd werd om steeds vier op te tellen bij de aangeboden waarde. Het resultaat gaat terug naar PC, waar het bij de volgende dalende flank van de klok de bestaande waarde van PC zal vervangen, waarna het geheugenscenario zich herhaalt. instructie
23
ALU-instructie: RRR b.v. : add r1, r2, r3 Alu regW ra Register- rb
bestand rb rd Din De uitvoering van een ALU-instructie die haar argumenten betrekt uit het registerbestand verloopt als volgt. Uit de instructiebits worden de nummers van de twee bronregisters en het doelregister van de instructie afgezonderd en naar de twee leespoorten, resp. schrijfpoort van het registersbestand gestuurd. Het registerbestand zal via zijn twee leespoorten de argumenten ter beschikking stellen aan de ALU die het resultaat berekent. De uit te voeren operatie wordt aan de ALU meegedeeld door middel van een aantal controlebits (hier aangegeven met Alu). Het resultaat wordt aangelegd aan de poort Din van het registerbestand. De dalende klokflank zal ervoor zorgen dat de waarde weggeschreven wordt in het registerbestand, op voorwaarde dat het schrijfsignaal voor het registerbestand aangezet werd. De drie poorten van het registerbestand werken onafhankelijk zoals eerder uitgelegd. De instructie add r1,r1,r1 is dus perfect mogelijk. b.v. : add r1, r2, r3
24
ALU-instructie: RRI b.v. : addi r1, 10, r3 Alu regW ra Register- rb
bestand rb rd Din letterlijke operand De uitvoering van een ALU-instructie die een letterlijke operand gebruikt verloopt volledig analoog. Het enige verschil is dat de tweede operand nu niet uit een register komt, maar wel uit de instructie zelf betrokken wordt. In dit geval zou de ingang rb zelfs kunnen achterwege gelaten worden, want hij wordt niet gebruikt. b.v. : addi r1, 10, r3
25
MEM-instructie b.v. : ld r1, 10(r3) MemW MemR add ra Register- bestand
geheugen rd Din Een geheugentransferinstructie gebruikt de ALU voor het maken van de adresberekening (we beschouwen hier enkel basisadressering, d.i. de som van de inhoud van een register en een offset; dit is de meest voorkomende adresseermode). Dit is de som van de offset die in de instructie gecodeerd werd met de inhoud van een register (hier r3). Het resultaat van de adresberekening wordt aangelegd aan het datageheugen. Bij het lezen (ld-instructie) zal de leesingang (MemR) actief zijn, en zal het geheugen na verloop van tijd een waarde produceren die aangelegd wordt aan de Din ingang van het registerbestand. Bij het schrijven wordt simultaan met de adresberekening ook de tweede operand (verkregen via de tweede leespoort) aan het datageheugen aangelegd. Het schrijfsignaal (MemW) wordt actief gemaakt en bij de dalende flank van de klok zal de waarde in het geheugen geschreven worden. Uiteraard wordt in dit geval het registerbestand niet beschreven. regW offset b.v. : ld r1, 10(r3)
26
controletransferinstructie
cmpge ra Register- bestand conditie 1 4 b.v.: brge r1,16(pc) add PC + De controletransferinstructies die we hier zullen beschouwen voeren twee ALU-operaties uit: de eerste dient om de sprongvoorwaarde vast te stellen, en de tweede dient om het sprongadres vast te stellen. In het bovenstaande voorbeeld wordt de sprong genomen indien de waarde van register r1 groter dan of gelijk aan nul is. In het andere geval gaat de processor verder met het doorvalpad. Indien de sprong genomen wordt, dan wordt er verdergegaan op adres pc+16 waarbij pc de programmateller is van de instructie die volgt op de spronginstructie. De offset 16 wordt betrokken uit de instructie zelf, net zoals het nummer van het register dat gebruikt wordt in de vergelijking. Aangezien de nieuwe waarde van de PC nu hetzij PC+4 hetzij PC+4+offset kan zijn, moeten we een multiplexer toevoegen om een keuze uit de twee signalen te maken. Indien de voorwaarde opgaat (conditie = 1) dan wordt de bovenste ingang gekozen, anders de onderste. Voor een onvoorwaardelijke sprong (jump) kunnen we ofwel de evaluatie van de conditie gewoon achterwege laten, ofwel een voorwaarde laten evalueren die altijd waar is (soms ook ‘always’ genoemd, bra: branch always). Offset
27
Inhoud Sequentiële logica Het datapad Eén cyclus-per-instructiemachine
Meer cycli-per-instructiemachine Microcodering RISC vs. CISC
28
Eén cyclus-per-instructiemachine
Cmp Data geheugen 4 + instructie- geheugen ra PC Register- bestand rb S1 rd decoder Res Alu Din Het is mogelijk om de zonet besproken datapaden samen te voegen tot 1 datapad, dat per cyclus één instructie uitvoert. Om dit mogelijk te maken moeten er wel een aantal elementen toegevoegd worden. Zo zien we op verschillende plaatsen multiplexers om een keuze te kunnen maken uit een lijst van inputsignalen, er werd een decoder toegevoegd die de registernummers en de constanten uit de instructie isoleert (offsets en letterlijke operandi). Afhankelijk van de manier waarop instructies gecodeerd worden kan dit zeer eenvoudig (b.v. gewoon de selectie van een aantal bits) of zeer complex (b.v. bij instructies met veranderlijke lengte) zijn. Tenslotte is er ook nog de toevoeging van de controle-eenheid die – aangestuurd door de instructie – de werking van de multiplexers, de ALU’s, de geheugens en de registers controleert. Het signaal PC werd toegevoegd om ervoor te zorgen dat er enkel een sprong genomen wordt op voorwaarde dat er inderdaad en spronginstructie uitgevoerd wordt en niet indien toevallig de output van de comparator op 1 zou komen te staan. offset MemW MemR S2 RegW PC Controle-eenheid
29
Controletabel PC RegW S1 S2 Alu Cmp MemW MemR Res
add xxx addi xxx 0 0 1 load xxx 0 1 0 store xxx 1 0 x jump brge De controletabel is de tabel die gebruikt wordt om de verschillende controlepunten aan te sturen. In functie van de ingelezen instructie zullen alle signalen een waarde krijgen. Soms doet de waarde er niet toe, en wordt ze hier voorgesteld door een X (een zgn. don’t care waarde). Bij de multiplexer wordt ervan uitgegaan dat de bovenste ingang steeds de nulde ingang is, tenzij anders aangegeven door middel van cijfertjes bij de ingang. De Alu-bits zijn hier steeds dezelfde, maar dit is toeval omdat er hier bij alle instructies op de een of andere manier moet opgeteld worden.
30
Controle Add 000 0110001xxx001 Addi 001 0111001xxx001 Load 010
xxx10x Addi 001 Load 010 Store 011 Jump 100 Brge 101 De controletabel van de vorige dia kan eenvoudig geïmplementeerd worden aan de hand van een geheugen met baucellen van (in dit geval) 13 bits. Indien de instructies dan als adressen beschouwd worden, volstaat het om de betrokken bau-cel te lezen en de corresponderende bits te verbinden met de controlesignalen. Uiteraard zullen de x-symbolen nu wel moeten vervangen worden door concrete waarden. De één-cyclus-per-instructiemachine is zeer eenvoudig, maar niet zeer efficiënt. Naast het feit dat sommige onderdelen gedupliceerd voorkomen (b.v. verschillende ALU’s), is er voornamelijk het probleem dat de klokperiode niet kleiner kan gemaakt worden dan de tijd die de traagste instructie nodig heeft om uit te voeren (b.v. de deling). Alle instructies voeren dus even snel (of even traag) uit. Deze twee nadelen kunnen weggewerkt worden door het gebruik van een implementatie die toelaat dat een instructie meer dan 1 cvclus duurt.
31
Inhoud Sequentiële logica Het datapad Eén-cyclus-per-instructiemachine
Meer-cycli-per-instructiemachine Microcodering RISC vs. CISC
32
Meer-cycli-per-instructiemachine
ra PC IR geheugen Register- bestand rb A R S1 rd decoder B LMDR Din 4 offset PCSrc Alu PCW S2 Mar MemW MemR RegW IRW C Een voorbeeld van een meer-cylci-per-instructiemachine wordt hier weergegeven. Op deze figuur komen alle onderdelen maar éénmaal voor hetgeen impliceert dat sommige onderdelen tijdens de uitvoering van een instructie meer dan eens zullen moeten gebruikt worden. In deze implementatie wordt een instructie in fasen opgedeeld die dan sequentieel na elkaar uitgevoerd worden. Om dit duidelijk te maken zullen we in de volgende dia'ss voor de verschillende types van instructies aangeven welke onderdelen er gebruikt worden, en in welke volgorde. cond Controle-eenheid
33
Instructie: eerste cyclus
ra PC IR geheugen Register- bestand rb A R S1 rd decoder B LMDR Din 4 offset PCSrc Alu PCW S2 Mar MemW MemR RegW IRW C De eerste stap van de uitvoering van een instructie is identiek voor alle types van instructies. Dit hoeft ons niet te verbazen want het type van instructie is op dat ogenblik nog niet gekend. Tijdens de dalende flank van het kloksignaal wordt de PC aangelegd aan het geheugen die een instructie ophaalt en aanbiedt aan zowel het instructieregister IR als aan het ‘load memory data register’ LMDR. Simultaan hiermee wordt de PC doorgestuurd naar de ALU die er 4 bij optelt en het resultaat terugstuurt naar de PC (PCW=1 en Cond = 0). Bij de volgende dalende klokflank zullen al deze operaties uitgevoerd zijn en wordt de ingelezen instructie opgeslagen in IR en LMDR, en wordt de verhoogde instructieteller opgeslagen in PC. De waarde van de diverse controlesignalen die er nodig zijn om dit gedrag te realiseren staan vermeld in de controle-eenheid. Cond Mar=0 MemR=1 IRW=1 S1=0 S2=1 Alu=add PCSrc=1 Cond=0 PCW=1 memW=0 RegW=0 IRW=0
34
Instructie: tweede cyclus
ra PC IR geheugen Register- bestand rb A R S1 rd decoder B LMDR Din 4 offset PCSrc Alu PCW S2 Mar MemW MemR RegW IRW C Eenmaal ingeladen wordt de instructie gedecodeerd door de instructiedecoder die de verschillende registernummers en de constanten die in de instructie opgeslagen liggen genereert. De registernummers gaan reeds naar het registerbestand en geven aanleiding tot de waarden aan de ingang van de registers A en B. De instructie gaat ook naar de controle-eenheid waar ze gebruikt wordt om de controle-informatie die nodig is voor de uitvoering van de instructie op te halen. Op dit ogenblik weet de controle- eenheid echter nog niet over welke instructie het precies gaat. Om te vermijden dat de ALU ongebruikt blijft wordt de gedecodeerde offset, samen met de aangepaste instructieteller aan de ALU gegeven om speculatief (we weten immers nog niet of we deze waarde ooit zullen nodig hebben) de bestemming van een eventuele controletransfer te berekenen. De som wordt berekend en aangeboden aan de ingang van register R. Bij de dalende klokflank zijn al deze operaties uitgevoerd en worden de berekende waarden in de registers A, B, en R opgeslagen (deze register reageren bij elke klokcyclus; PC en IR doen dit enkel wanneer hun controle-ingang hoog is). De registers PC en IR behouden hun waarde uit de vorige cyclus. LMDR wordt overschreven met een waarde die door het geheugen in deze cyclus geproduceerd wordt (indien Mar=0 zal dit het bitpatroon van de volgende instructie zijn, aangewezen door de reeds verhoogde PC). Cond S1=0 S2=2 Alu=add memW=0 RegW=0 IRW=0 PCW=0
35
S1=2 S2=0 Alu=add memW=0 RegW=0 IRW=0 PCW=0
ADD: derde cyclus ra PC IR geheugen Register- bestand rb A R S1 rd decoder B LMDR Din 4 offset PCSrc Alu PCW S2 Mar MemW MemR RegW IRW C Dit is de eerste cyclus waarbij de instructies elk hun eigen pad gaan volgen. Om de ADD-instructie uit te voeren volstaat het om de registers A en B naar de ALU te sturen met de vraag om ze op te tellen. Op het einde van cyclus zal het resultaat in R opgeslagen worden. Cond S1=2 S2=0 Alu=add memW=0 RegW=0 IRW=0 PCW=0
36
S1=2 S2=2 Alu=add memW=0 RegW=0 IRW=0 PCW=0
ADDI: derde cyclus ra PC IR geheugen Register- bestand rb A R S1 rd decoder B LMDR Din 4 offset PCSrc Alu PCW S2 Mar MemW MemR RegW IRW C Bij de ADDI instructie is het verloop licht anders. Hier wordt de offset (de constante uit de instructie) –na de nodige tekenuitbreiding tot op de vereiste grootte – aangeboden aan de ALU, samen met de andere bronoperand. Het resultaat komt opnieuw in R. Cond S1=2 S2=2 Alu=add memW=0 RegW=0 IRW=0 PCW=0
37
ADD/ADDI: vierde cyclus
ra PC IR geheugen Register- bestand rb A R S1 rd decoder B LMDR Din 4 offset PCSrc Alu PCW S2 Mar MemW MemR RegW IRW C De verdere afloop van de ADD/ADDI-instructie gaat dan als volgt. Via de gepaste controlesignalen wordt de inhoud van het register R doorgestuurd naar de Din-ingang van het registerbestand. Het signaal rd staat klaar om aan te geven waar die waarde moet bewaard worden. Merk trouwens op dat het registernummer rd al heel de tijd klaarstond, maar pas nu effectief gebruikt wordt door het activeren van RegW. Ofschoon nu niet meer benadrukt, zijn ook nu de signalen ra en rb nog steeds actief waardoor A en B telkens opnieuw dezelfde waarde krijgen. Ook de multiplexers S1 en S2 hebben een bepaalde waarde waardoor de Alu telkens weer input te verwerken krijgt die jammer genoeg naderhand niet meer gebruikt zal worden. In een echte processor zal men dit trachten te vermijden, maar in dit eenvoudig model is het best bruikbaar. We gaan er wel van uit dat de onnodige operaties die door de ALU uitgevoerd worden geen fouten kunnen veroorzaken (b.v. nuldeling). Cond C=1 RegW=1 memW=0 IRW=0 PCW=0
38
LOAD/STORE: derde cyclus
ra PC IR geheugen Register- bestand rb A R S1 rd decoder B LMDR Din 4 offset PCSrc Alu PCW S2 Mar MemW MemR RegW IRW C Bij de LOAD/STORE operatie is de derde cyclus nog gemeenschappelijk. Hij bestaat uit de berekening van de adresseermode – in dit geval de som van een register en de hard gecodeerde offset in de instructie. Het effectief adres komt in R te staan. Cond S1=2 S2=2 Alu=add memW=0 RegW=0 IRW=0 PCW=0
39
Mar=1 MemW=1 RegW=0 IRW=0 PCW=0
STORE: vierde cyclus ra PC IR geheugen Register- bestand rb A R S1 rd decoder B LMDR Din 4 offset PCSrc Alu PCW S2 Mar MemW MemR RegW IRW C In de vierde cyclus verschillen de LOAD en de STORE van elkaar. De STORE zal via de gepaste controlesignalen de inhoud van het B-register (= de weg te schrijven waarde) naar de ingang van het geheugen gebracht worden. Simultaan zal het effectief adres aan de adresingang van het geheugen gelegd worden via de memory address register (Mar) multiplexer. Het MemW signaal zorgt ervoor dat de waarde bij de dalende flank van het kloksignaal netjes in het geheugen geschreven wordt. Cond Mar=1 MemW=1 RegW=0 IRW=0 PCW=0
40
Mar=1 MemR=1 memW=0 RegW=0 IRW=0 PCW=0
LOAD: vierde cyclus ra PC IR geheugen Register- bestand rb A R S1 rd decoder B LMDR Din 4 offset PCSrc Alu PCW S2 Mar MemW MemR RegW IRW C De vierde cyclus van de LOAD operatie is analoog, maar ditmaal wordt er gelezen en wordt het resultaat in het LMDR register opgeslagen. Het komt NIET in het IR register te zitten omdat het IRW signaal niet aan staat. Dit is belangrijk omdat de informatie over de instructie die aan het uitvoeren is anders zou overschreven worden. Cond Mar=1 MemR=1 memW=0 RegW=0 IRW=0 PCW=0
41
C=0 RegW=1 memW=0 IRW=0 PCW=0
LOAD: vijfde cyclus ra PC IR geheugen Register- bestand rb A R S1 rd decoder B LMDR Din 4 offset PCSrc Alu PCW S2 Mar MemW MemR RegW IRW C Bij een load-instructie hoort ook nog een vijfde cyclus: Het wegschrijven van de gelezen waarde in een register. Dit zou nu geen problemen meer mogen stellen. Cond C=0 RegW=1 memW=0 IRW=0 PCW=0
42
PCSrc=0 PCW=1 Cond=0 memW=0 RegW=0 IRW=0
JUMP: derde cyclus ra PC IR geheugen Register- bestand rb A R S1 rd decoder B LMDR Din 4 offset PCSrc Alu PCW S2 Mar MemW MemR RegW IRW C De derde cyclus van een onvoorwaardelijke sprong is eenvoudig omdat het sprongadres reeds speculatief berekend werd in de tweede cyclus. Het volstaat om de berekende waarde door te sturen naar PC. We geven aan dat het hier om een niet-conditionele sprong gaat om ervoor te zorgen dat het PC-register de nieuwe waarde aanneemt. Cond PCSrc=0 PCW=1 Cond=0 memW=0 RegW=0 IRW=0
43
S1=1 S2=0 Alu=cmpge PCSrc=0 PCW=1 Cond=1
BRGE: derde cyclus ra PC IR geheugen Register- bestand rb A R S1 rd decoder B LMDR Din 4 offset PCSrc Alu PCW S2 Mar MemW MemR RegW IRW C De voorwaardelijke sprong is iets complexer. Hij gebruikt de ALU om de vergelijkingsoperatie uit te voeren (vergelijking met 0), en gebruikt de resulterende conditiecode om het schrijfsignaal van de PC te sturen. Het signaal Cond staat nu op 1 zodat enkel indien het conditiebit waar is de en- poort het schrijfsignaal zal genereren. Cond S1=1 S2=0 Alu=cmpge PCSrc=0 PCW=1 Cond=1 memW=0 RegW=0 IRW=0
44
Samenvatting controlesignalen
Mar=0 MemR=1 IRW=1 S1=0 S2=1 Alu=add PCSrc=1 Cond=0, PCW=1 (4) Cyclus 1 S1=0 S2=2 Alu=add (1) Cyclus 2 S1=2 S2=0 Alu=add (1) S1=2 S2=2 Alu=add (1) S1=2 S2=2 Alu=add (1) PCSrc=0 PCW=1 Cond=0 (4) S1=1 S2=0 Alu=cmpge PCSrc=0 PCW=1 Cond=1 (4) Cyclus 3 C=1 RegW=1 (3) Mar=1 MemW=1 (2) Mar=1 MemR=1 (1) memW=0 RegW=0 IRW=0 PCW=0 (2) RegW=0 IRW=0 PCW=0 (3) memW=0 IRW=0 PCW=0 (4) memW=0 RegW=0 IRW=0 Cyclus 4 Dit is een overzicht van alle controlesignalen gegroepeerd per instructie en per cyclus. C=0 RegW=1 (3) Cyclus 5
45
Samenvatting controlesignalen
1 Mar=0 MemR=1 IRW=1 S1=0 S2=1 Alu=add PCSrc=1 Cond=0, PCW=1 (4) S1=0 S2=2 Alu=add (1) Load/store brge 10 S1=1 S2=0 Alu=cmpge PCSrc=0 PCW=1 Cond=1(4) addi 5 add 2 S1=2 S2=2 Alu=add (1) 3 S1=2 S2=0 Alu=add (1) S1=2 S2=2 Alu=add (1) load jump store 6 7 MemW=1 Mar=1 (2) MemR=1 Mar=1 (1) 4 C=1 RegW=1 (3) 9 PCSrc=0 PCW=1 Cond=0 (4) Dit is dezelfde informatie, maar nu voorgesteld in de vorm van een toestandsautomaat. De verschillende toestanden (genummerd van 0 tot en met 10) bevatten de controlesignalen die in die toestand moeten aangezet worden. De labels op de pijlen geven aan welke voorwaarden er moeten voldaan zijn om een bepaalde overgang te maken. Dit is uiteraard enkel nodig indien er uit 1 toestand verschillende pijlen kunnen vertrekken. Zoniet zijn de overgangen onvoorwaardelijk. 8 C=0 RegW=1 (3)
46
Controle-uitgangen uitgang bijhorende toestanden
PCW Cond Mar MemW MemR IRW C RegW S S Alu PCSrc Deze tabel geeft per controlesignaal een overzicht van de toestanden waarin het actief gebruikt wordt. Uit deze tabel blijkt dat de meeste signalen in twee tot drie toestanden van de automaat effectief gebruikt worden. De ALU is het meest gebruikte onderdeel (in 6 van de 11 toestanden).
47
Controle-uitgangen MemW MemR RegW PCW Cond PCSrc Mar IRW S1 S2 Alu C
toestand X X X X X X X X X X X X X X X XX XX 000 X X X X X X X 0 XX XX 000 X X X 0 XX XX 000 X X X XX XX 000 X X X 0 XX XX 000 0 X X Deze tabel geeft per toestand aan wat de waarden van de verschillende controlesignalen moeten zijn. De don’t care signalen worden hier vervangen door X. Bij een concrete implementatie mogen deze zodanig gekozen worden dat de te realiseren functie zo eenvoudig mogelijk wordt. Zo kan men voor het signaal Cond b.v. bit 1 (3e bit van links) van de toestand kiezen. Voor het signaal C kan men bit 2 kiezen (2e bit van links).
48
Volgende-toestanduitgangen
toestand voorwaarde volgende toestand op = add op = addi op = load/store op = jump op = brge op = store op = load Naast de controlesignalen per toestand moet er ook informatie bijgehouden worden over het verloop van de controle doorheen de automaat: die zijn de overgangen tussen de verschillende toestanden. De bovenstaande tabel geeft aan welke voorwaarden er moeten vervuld zijn om vanuit een bepaalde toestand een overgang naar een andere toestand te maken. Indien we ervan uitgaan dat de operaties ook in vier bits gecodeerd worden dan kan de begintoestand en de voorwaarde in 8 bit voorgesteld worden en kan men voor elk van deze 256 mogelijke inputcombinaties aangeven wat de resulterende toestand zal zijn.
49
Controle- eenheid PCW Cond Mar MemW MemR IRW C RegW S1 S2 Alu PCSrc
NS3 NS2 NS1 NS0 output input Op3..Op0 S3..S0 Finaal kan de controle-eenheid er dan als volgt uitzien. Vier bits die de operatie identificeren, en vier bits die de huidige toestand identificeren. Uitgaande van deze 8 bits kan men ondubbelzinnig alle controlesignalen en de volgende toestand afleiden. De generatie van al deze signalen kan gebeuren aan de hand van een tabel. IR toestand
50
ROM-Implementatie ROM1 16x16 bits ROM2 256x4 bits toestand IR
Indien de tabellen in Read-Only memory (ROM) opgeslagen worden, dan zijn de volgende aantallen vereist. Aangezien de controlesignalen enkel afhangen van de toestand, en niet van de operatiebits, is het beter om deze afzonderlijk te beschouwen. Er zijn dan 16 mogelijke toestanden (waarvan er slechts 11 effectief gebruikt worden), en in elk van deze toestanden moeten er 16 signalen gegenereerd worden. De ‘volgende toestand’ hangt ook af van de operatiebits uit het IR. Hier zullen er dus 256 mogelijke gevallen zijn, die elk een nieuwe toestand van vier bits zullen moeten genereren. toestand IR
51
Inhoud van ROM1 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 De inhoud van ROM1 kan er b.v. als volgt uitzien. Alle don’t cares werden hier door nullen vervangen. De laatste lijnen van de ROM zullen niet gebruikt worden Het splitsen in 2 ROM’s levert een geheugenbesparing op. Het gebruik van één ROM zou 256x(16+4) bits vereisen, of 5120 bit. Nu hebben we slechts =1280 bit nodig. Vervelend is wel dat de ROM die de volgende toestand berekent viermaal meer geheugen nodig heeft dan de ROM die alle controlesignalen berekent. Indien we verder naar de inhoud van die ROM kijken dan zien we dat deze ROM eigenlijk zeer inefficiënt gebruikt wordt. De eerste 16 waarden zijn allemaal dezelfde (0001) omdat de overgang van toestand (0000) naar toestand (0001) onvoorwaardelijk is, en de 16 mogelijke operatiebits dus verder geen belang spelen. Meer nog, dit is het geval voor alle toestanden behalve 1 en 5. Alle andere toestanden hebben een vaste opvolger waarbij de operatiebits niet meespelen. In deze omstandigheden bestaan er efficiëntere manieren om de volgende toestand te genereren. .
52
Inhoud Sequentiële logica Het datapad Eén cyclus-per-instructiemachine
Meer cycli-per-instructiemachine Microcodering RISC vs. CISC
53
Sequencer-implementatie
ROM1 16x18 bits 1 toestand + Indien we gebruik maken van een sequencer proberen we ervoor te zorgen dat daar waar er geen keuzen moeten gemaakt worden, de toestanden sequentieel kunnen oplopen. In dit geval volstaat een simpele opteller met 1 om de volgende toestand te berekenen. Er zijn twee gevallen waarbij dit niet mogelijk is: bij het terugspringen naar de toestand 0, en bij die toestanden waarbij er meer dan 1 opvolger is, en er dus een keuze moet gemaakt worden. Het terugspringen naar de toestand 0 kan eenvoudig opgelost worden door een speciaal signaal te genereren die de toestand reset. De gevallen met meer dan 1 opvolger zijn moeilijker, maar kunnen opgelost worden door gebruik te maken van sprongtabellen die uitgaande van de operatiebits de nieuwe toestand bepalen. Aangezien deze tabellen enkel rekening houden met de operatiebits, zal er één tabel moeten aangemaakt worden per toestand waarin men meer dan één opvolger heeft (in ons geval dus 2). Door gemeenschappelijke toestanden op te splitsen kan men het aantal dergelijke sprongtabellen reduceren (wij zouden de tweede sprongtabel kunnen vermijden door van meet af aan de load en de store gevallen afzonderlijk te behandelen; d.w.z door de toestand 5 op te splitsen). De keuze tussen al deze gevallen moet dan gemaakt worden door een multiplexer die vanuit de eerste ROM gestuurd wordt en hiervoor twee extra controlebits dient te genereren. 16x4 bits Tabel 1 Tabel 2 IR
54
Samenvatting controlesignalen
00 1 01 Mar=0 MemR=1 IRW=1 S1=0 S2=1 Alu=plus PCSrc=1 Cond=0, PCW=1 (4) S1=0 S2=2 Alu=add (1) Load/store brge 11 11 S1=1 S2=0 Alu=cmpge PCSrc=0 PCW=1 Cond=1 (4) addi 6 add 10 00 2 S1=2 S2=2 Alu=add (1) 4 S1=2 S2=0 Alu=add (1) S1=2 S2=2 Alu=add (1) load jump 00 store 7 8 Mar=1 MemW=1 (1) 00 MemR=1 Mar=1 (1) 11 3 11 5 RegW=1 C=1 (3) RegW=1 C=1 (3) 10 PCSrc=0 PCW=1 Cond=0 (4) 11 Om de vorige techniek te kunnen gebruiken moeten we de oude toestand 4 die gemeenschappelijk was voor ADD en ADDI wel opsplitsen in twee toestanden (hier 3 en 5) zodat we de sequentiële nummering in de twee gevallen kunnen aanhouden. In de groene hokjes zijn de bits vermeld die gebruikt moeten worden om naar de multiplexer te sturen. 11 9 C=0 RegW=1 (3) 11
55
Microcode controle datapad 1 ALU + μPC Registers A microcode C B
jump tabel 1 jump tabel 2 temp jump tabel 3 geheugen PC Indien we de toestand 4 niet wensen op te splitsen en indien we niet gebonden willen zijn door de sequentiële nummering van toestanden, dan kunnen we de ‘volgende toestand’ ook opnemen in de controlesignalen. Dit is eigenlijk een uitbreiding van het resetten van de toestand. In plaats van hem op nul te dwingen kunnen we hem nu eender welke waarde geven en deze waarde zal gecodeerd staan in ROM1. Dit is het model dat door de escape- simulator gebruikt wordt. Het datapad wordt bij deze gelegenheid ook wat herschikt, maar veel meer dan een cosmetische aanpassing is dit niet. De ROM1 tabel wordt nu het microcodeprogramma genoemd, en de toestandsveranderlijke de microcode-PC. Men zegt dat de controle-eenheid het microcodeprogramma uitvoert. mar mdr tekenuitb IR
56
Microcodeprogramma μPC Label ALU S1 S2 Dest ExtIR Const JCond Adr Mem MAdr MDest Regs 0000 Fetch Mbusy Fetch RW PC IR ADD PC Const PC Jump RR 0002 LdSt ADD A IR MAR Word Jump2 0003 Brge S1 A LT Fetch 0004 Jump ADD PC IR PC Word True Fetch 0005 Add ADD A B C True Fetch WF3 0007 Addi ADD A IR C Word True Wb2 0008 Load Mbusy Load RW MAR MDR S1 MDR C 000A Wb True Fetch WF2 000B Store S B MDR 000C Store Mbusy Store2 WW MAR 000D True Fetch Dit is het microcodeprogramma dat hoort bij het vorige voorbeeld. μPC is het toestandsnummer (of de microcodeprogrammateller) Label is een symbolische naam voor de toestand ALU is de functie die door de ALU moet uitgevoerd worden. S1 selecteert de S1-operand. S2 selecteert de S2-operand. Dest selecteert de bestemming van de ALU-operatie ExtIR geeft aan tot welke omvang de constante in de IR moet geëxpandeerd worden Const is een constante die gecodeerd wordt in de microinstructie JCond is de conditie waaronder er naar Adr gesprongen wordt (True = onvoorwaardelijk, Mbusy = zolang er gewacht wordt op het geheugen, Jump1/2 = via jumptabel 1/2, LT = indien de voorwaarde LT waar is), niets = ga naar de volgende lijn. Adr is het sprongadres Mem is de opdracht voor het geheugen (RW = read word; WW = write word) MAdr is de oorsprong van het geheugenadres Mdest is de bestemming van het gelezen woord Regs vertelt wat er moet gebeuren met de A, B, en C registers: RR = laadt de A en B registers met de bronoperandi, WF2 schrijf het C-register naar de tweede formele operand; WF3 = schrijf het C-register naar de derde formele operand). Opcode Jump Table 1 Jump Table 2 LD LdSt Load ST LdSt Store ADD Add ADDI Addi BRGE Brge JUMP Jump
57
Onderbrekingen en excepties
Nieuwe PC Mar=0 MemR=1 IRW=1 S1=0 S2=1 Alu=plus PCSrc=1 Cond=0, PCW=1 (4) S1=0 S2=2 Alu=add (1) S1=2 S2=0 Alu=add (1) C=1 RegW=1 (3) S1=2 S2=2 Alu=add (1) Mar=1 MemW=1 (2) MemR=1 (1) C=0 RegW=1 (3) PCSrc=0 PCW=1 Cond=0 (4) S1=1 S2=0 Alu=cmpge PCSrc=0 PCW=1 Cond=1 (4) add Load/store jump brge store load 1 2 4 5 6 7 8 9 10 S1=2 S2=2 3 addi geheugenfout ongeldig Nieuwe PC overflow De behandeling van excepties is een aspect dat de volledige controle-eenheid bezig houdt. Bij het afhandelen van een instructie moet er steeds gecontroleerd worden of er geen onderbrekingssignaal werd ontvangen. Indien dit zo is, moet de onderbreking zo snel mogelijk afgehandeld worden. Tijdens de uitvoering kunnen er excepties optreden (bij interacties met het geheugen, bij ALU-operaties, ongeldige instructies, enz.). Dit vereist bijkomende toestanden in het toestandsdiagramma. overflow onderbreking Nieuwe PC Nieuwe PC
58
Inhoud Sequentiële logica Het datapad Eén cyclus-per-instructiemachine
Meer cycli-per-instructiemachine Microcodering RISC vs. CISC
59
Evolutie van instructiesets
Single Accumulator (EDSAC 1950) Accumulator + Index Registers (Manchester Mark I, IBM 700 series 1953) Separation of Programming Model from Implementation High-level Language Based Concept of a Family (B ) (IBM ) General Purpose Register Machines Deze dia geeft een overzicht van de evolutie van computerarchitectuur. De eerste architectuur werd gedefinieerd in 1964 met de IBM-360 (een architectuur die trouwens nog steeds bestaat). Deze evolueerde in de jaren 70 tot de CISC (complex instruction set computer). In de jaren 80 kwam de reactie tegen al deze wel zeer complexe (gemicrogecodeerde) instructiesets van de jaren 70. Zij werden RISC genoemd (Reduced instruction set computer). Zij waren geïnspireerd op de architectuur van de supercomputers uit de jaren 60 en 70. De aanleiding was de vaststelling dat compilers eigenlijk maar een miniem deel van de complexe instructieset effectief gebruikten. CISC instructies waren immers in de eerste plaats ontworpen voor programmeur, niet voor compilers. Aangezien steeds minder programmeurs in assembler programmeerden werden zij geleidelijk aan overbodig. Load/Store Architecture Complex Instruction Sets (CDC 6600, Cray ) (Vax, Intel ) RISC (Mips,SPARC,HP-PA,IBM RS6000, )
60
Instructiegebruik Instructie aandeel Toewijzing 47 If 23 Call 15 Lus 6
Studies die nagaan hoe vaak verschillende soorten instructies gebruikt worden in een gemiddeld programma, hebben sterk bijgedragen tot het inzicht dat het complexer maken van een instructieset, weinig bijdraagt aan de snelheid van die processor. Een groot deel van de uitgevoerde instructies, zijn vrij eenvoudige instructies, die niet gebaat zijn bij het complexer maken van de instructieset. De tabel die hier wordt getoond, geeft de frequentie van elk instructietype in een verzameling programma’s geschreven in verschillende talen (volgens een studie van 1971). Bijna de helft van de instructies zijn toewijzingen (met inbegrip van de expressie-evaluatie). Het is duidelijk dat men de prestaties van een computer gemakkelijker kan verbeteren door aandacht te besteden aan de vaakst uitgevoerde instructies, eerder dan zich te focussen op ingewikkelde en zeldzame instructies. Goto 3 Andere 7
61
Complexiteit Toewijzing Lok. var Parameters - 22 41 1 2 80 17 19 3 4
1 2 3 4 ≥ 5 Deze tabel toont resultaten van een studie naar de complexiteit van toewijzingen en subroutine-oproepen. Voor toewijzingen geldt dat 80% van de eenvoudigste soort is (X:=Y). Bij 15% komen er 2 termen aan te pas (bv. X:=Y+Z). Onder de subroutines hebben de meeste (80%) slechts 4 of minder lokale variabelen. En bij subroutine-oproepen worden in de meeste gevallen geen, of heel weinig, parameters meegegeven. Al deze cijfers wijzen er opnieuw op dat het gros van de computerprogramma’s heel eenvoudig zijn op instructieniveau, ook al kunnen er heel complexe programma’s mee gemaakt worden. Opnieuw is de conclusie dat het weinig baat om de complexiteit van de instructieset al te veel te laten toenemen.
62
Strafverhouding uitvoeringstijd machinetaal .
uitvoeringstijd hoge-niveautaal Processor Strafverhouding Berkeley RISC II Motorola M De strafverhouding is een maat voor hoeveel beter een assemblerprogrammeur een bepaald probleem kan oplossen. In de hoogtijdagen van de CISC processors was deze verhouding zeer gunstig voor de assemblerprogrammeurs, en wel om twee redenen: De compilers was lang niet zo goed als tegenwoordig. Optimaliserende compilers waren een uitzondering. De programmeurs konden met succes gebruik maken van de particulariteiten van een processor, terwijl de compiler dit niet kon. Uitgaande van een RISC-architectuur viel het tweede voordeel weg (er waren geen particulariteiten meer die uit te buiten vielen), en door de regelmatige structuur van de instructieset kon ook de compiler verder gaan in de optimalisatie. Tegenwoordig kan men stellen dat het niet langer de moeite loont om een programma in assembler te schrijven – louter en alleen voor de snelheid. Uitzonderingen hierop zijn de binnenste kernen van spelletjes en signaalverwerkingstoepassingen waar elke extra cyclus telt. C is een alternatief voor assembler
63
Kenmerken Voornamelijk instructies die ‘echt’ nodig zijn
Vooral instructies die effectief gebruikt worden, eenvoudig decodeerbaar Groot aantal registers, RRR-machinemodel Geen complexe adresseermodes Dit zijn een aantal kenmerken waaraan men een RISC kan herkennen.
64
Eenvoudige decodering
instructies: vaste lengte + gealigneerd 31 25 20 15 opcode D S subopcode S2 opcode B S subopcode immediate opcode D/B5/M S immediate opcode B5/M S subopcode vector opcode D26 Velden hebben een nagenoeg vaste plaats in de instructiecodering en instructies hebben een vaste lengte. Dit maakt het moeilijk om grote constanten als letterlijke operandi in de instructie op te nemen (b.v. 32 bit adressen). Het maakt de instructiedecodering wel eenvoudiger. opcode D S op sfu crs/crd S2 32-bit loads minder efficiënt
65
Sparc Registervensters
%l0-%l7 %o0-%o7 %g0-%g7 Niveau 1 %g0-%g7 %l0-%l7 %o0-%o7 %i0-%i7 Niveau 2 %l0-%l7 %o0-%o7 %i0-%i7 %g0-%g7 Niveau 3 2-32 vensters registers Sommige processors hebben werkelijk een zeer groot aantal registers (zie dia). Een groot aantal registers is prima voor de compiler, maar niet goed voor de systeemsoftware die bij het optreden van een onderbreking deze registers moet bewaren. Sommige processors zorgen er daarom voor dat niet alle registers simultaan zichtbaar zijn, maar b.v. slechts 32 per keer. De SPARC architectuur werkt met registervensters van 32 registers (8 globale, 8 lokale, 8 input en 8 outputregisters). Per procedure-oproep worden er 16 registers bewaard, en komen er 16 andere in de plaats (lokale en output). Tegelijk worden de outputregisters van niveau n de inputregisters van niveau n+1. De outputregisters worden gebruikt om parameters door te geven aan een functie, de inputregisters bevatten de parameters voor de huidige functie. De lokale en globale registers spreken voor zichzelf. Een registervenster werkt prima voor toepassingen waarin de oproepgraaf niet te diep is.
66
ARM Thumb ARM State (T=0) Thumb State (T=1) 16-bit Thumb-instructies
Niet-conditioneel 8 registers RR-instructies Kleine letterlijke operandi Tijdens uitvoering geëxpandeerd naar ARM-instructies 32-bit ARM-instructies Conditionele uitvoering 16 registers RRR-instructies Default toestand bij opstarten De ARM-processor wordt vooral gebruikt in ingebedde systemen waar de omvang van de code vaak ook een bepalende rol speelt. Daarom heeft de ARM-processor een zgn. Thumb instructieset waarbij er in de plaats van 32- bit instructies gebruik gemaakt wordt van 16-bit instructies. Uiteraard heeft dit gevolgen voor de codering en zullen niet alle features van de 32-bit instructies kunnen gecodeerd worden. Zo zal men typisch meer Thumb instructies nodig hebben om dezelfde functie te realiseren, maar doordat de instructies kleiner zijn, wordt het programma toch compacter. De prijs die men betaalt is dat het ook trager uitvoert. 30% compacter dan ARM-code 40% meer instructies nodig: 40% trager Goed voor niet-kritische code
67
Processorfabrikanten
SUN: Sparc [COMPAQ (Nu Intel): Alpha-processor] HP: PA-RISC Freescale + IBM: PowerPC MIPS: MIPS Intel+HP: Itanium (VLIW) Intel: IA32 / x86-64 (CISC) AMD: IA32 / x86-64 (CISC) Dit lijstje geeft een overzicht van enkele processorfabrikanten en hun meest gekende processorfamilies. Tenzij anders vermeld, gaat het om RISC processors. ‘s Werelds meest verspreide processorfamilie is de Intel Pentium, die voortbouwt op de 8086 van meer dan 20 jaar geleden. Hoewel de instructieset nog steeds alle CISC sporen van zijn voorouders draagt, vertoont de processorimplementatie intern heel veel RISC-kenmerken.
68
Pauze
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.