Vem är jag TSEA28 Datorteknik Y (och U) Föreläsning 1 Kent Palmkvist, ISY N B-huset 2:a våning Föreläsare och kursansvarig Ingång 25 Kent Palmkvist kentp@isy.liu.se Kontor 3B:502 (andra våning) Till E-huset 2 Dagens föreläsning Tillgänglighet till information Introduktion/motivation Administrativ information Historik Vad är en dator Litet exempel Ingång 27 Alla slides finns på kursens hemsida 3 http://www.isy.liu.se/edu/kurs/tsea28 Kursmaterial (förutom bok) även på kurshemsidan Anvisningar för kursen (deadlines etc) Labbmaterial Gamla tentor Material även från Andreas Ehliar, Lennar Bengtsson, Camilla Eidem, och Tomas Svensson Labanmälan via Lisam 4
5 Kursens mål Varför detta är intressant Förstå En programmeringsintresserad U:are 7 8 Förstå begränsningar hos olika datorer Hur en dator är uppbyggd och fungerar på registernivå En matematikintresserad Y:are Binär aritmetik Snabba upp beräkningsprogram/simuleringar Kunna En fysikintresserad Y:are Skriva små enkla assemblerprogram Använda sensorer för insamling av mätdata En elektronikintresserad student Hantera in/utmatning Nästan all elektronik innehåller en dator Implementera instruktioner m h a mikroprogrammering Det är roligt! Kursens mål, forts. Senare kurser Känna till För Y Principer för hur cache fungerar Elektronik kandidatprojekt Olika sätt att öka exekveringshastigheten Inbyggda DSP processorer Hur processorn påverkar operativsystemet Datorarkitektur Datorteknik ett datorsystem på ett chip För U Processprogrammering och operativsystem Kompilatorkonstruktion?
9 Fortsatt prestandautveckling? Aktuella trender inom datorstrukturer Miniatyrisering ger allt snabbare datorer Hårdvaran allt mer specialiserad Exponentiell prestandaökning Många parallellkopplade datorer Kryptering, videokodning/avkodning, DSP Ibland skapad genom att två datorer delar vissa bitar (inkl delar av processorn) Moores lag Fysiska begränsningar finns Mjukvaran måste anpassas till denna hårdvara Kräver god förståelse för datorteknik Klockfrekvensökningen har avklingat 10 Många prestandamått Beräkningshastighet Instruktioner/s Effektförbrukning Värmeutveckling ger krav på kylning Storlek Fler transistorer och längre ledare ger större kapacitans och större effektförbrukning Pris Administrativ information 11
13 Kursens innehåll Föreläsningar och lektioner Går VT1 + VT2 hp (3hp tenta, 3hp lab) Föreläsningarna bygger delvis på kursboken, men även annat material ingår 1 föreläsningar Lektioner för att hjälpa till med labbförberedelser 3 lektioner (2 under VT1) Se dom som frågestunder 5 laborationer (3 under VT1) Se till att vara förberedd innan lektion! 1 tentamen (4h) Läs igenom labbeskrivning och dokumentation innan lektion! Självstudier > 100h!! 15 Laborationsförberedelse ~ 12h per styck Varierar mellan studenter, vissa kan behöva mer! 14 Kurslitteratur Laborationer Computer Organization and Architecture Themes and Variations; Alan Clements Laborationsanvisningar (finns på kurshemsidan) Notering: Tidigare års kurslitteratur går att använda, men saknar många detaljer Grundläggande Datorteknik (Roos) Fem laborationer uppdelat på 2 x 2h (totalt 4h/lab) Kompendium i Datorteknik (Wiklund) Lab1: Kodlås (introduktion till assembler) Lab2: Avbrott Lab3: Digitalur Lab4: Mikroprogrammering Lab5: Bussar/Cache Laborationsgrupper 2 personer per grupp Max 30 personer i labbet 1
17 Laborationsanmälan Laborationslokal Elektronisk anmälan via Lisam Labbanmälningssystemet begränsar inte antal grupper! Max 1 grupper per gång (om alla maskiner fungerar...) Labbanmälan stänger dagen innan första labbtillfället Bara anmälda studenter får delta i laborationen Mail till kurslistan när anmälan kan börja göras Laborationsförberedelser Endast ingång från väster! Viktigt! Förberedelse inför laborationsuppgiften Läsa labbkompendiet och annat material Lösa uppgifter/skriva kod innan laborationstillfället Ingång 25 B-huset, 2:a våning, mellan ingång 25 och 27 Kontrollera att labbtillfället passar (schemats indelning endast en rekommendation) Ingång 27 Korridor C 18 Förändringar från tidigare år Ej förbered student kan tvingas lämna labblokal! Ny laborationshårdvara (ARM-baserad) för laboration 1-3 Kursboken fokuserar mer på ARM Liknande laborationsuppgifter som för gamla systemet Förra året användes 8000-systemet (tutor) Förhoppningsvis är referenser till tutor borta ur årets material Tenta/omtenta kommer under närmaste året kunna lösas med antingen ARM eller 8000 kod För dom som missat tentan tidigare 21 N B-huset 2:a våning Mux1 15 grupper per lab, 2 personer per grupp 22
23 Nya Laborationshårdvaran: Darma System med mikrokontroller baserad på Cortex-M4 processor Tillverkare: Texas Instruments (röda kortet och svarta kretsen) Processordesign: ARM Gröna kortet: Darma, lokalt LiU Instruktionsuppsättning annorlunda mot gamla 8000 (tutor) Lite datorhistoria Namn, typ, funktioner 24 Nya Laborationshårdvaran: Darma, forts. Processorkort (röda Ti Launchpad) tillgängligt för intresserade 150-200 kr Sök efter EK-TM4C123GXL site:.se för att hitta återförsäljare Ex 180110: mouser.se, 12 SEK, frakt 170 SEK! men fraktfritt för > 400 SEK => Köp 4 kort, betala bara 12 SEK/kort Fungerar på windows, mac, linux I laborationsuppgifterna används lite extra extern hårdvara 2 Lite datorhistoria Frakt + ev. tull kan kosta. Billigare gå ihop några stycken Mjukvaran laddas ned gratis från ti.com (kan kräva registrering på site) Analytic engine (1837, Charles Babbage) Ritningar men ingen fungerande maskin Ca 3 minuter för multiplikation av två 20-siffriga tal https://commons.wikimedia.org/wiki/file:babbage_difference_engine.jpg Z3 (1941, Konrad Zuse) Elektromekanisk (relä) 3 sekunder för multiplikation https://commons.wikimedia.org/wiki/file:z3_deutsches_museum.jpg
27 Lite datorhistoria, forts. Lite datorhistoria, forts. Eniac, 194 IBM PC, 1981 Radiorör, 150 kw effektförbrukning 5000 additioner/subtraktioner per sekund 1-bitars 8088 processor, 29000 transistorer 4.77 MHz klockfrekvens, max 40 KB RAM Intel 4004, 1971 2300 transistorer Första enchips mikroprocessorn 740 khz klockfrekvens (0.095 MIPS) 28 Lite datorhistoria, forts. 32-bitars RISC processor, 25000 transistorer Acorn Archimedes ARM Ltd startat av Apple och Acorn 1990 Superdator, vektormaskin, 80 MHz, 10 MIPS Apple II, 1977, resp. VIC20, 1981 (tidiga hemdatorer) 8-bitars 502 processor 1 MHz klockfrekvens, 3500 transistorer 48 Kbyte RAM minne (max) https://commons.wikimedia.org/wiki/file:acornarchimedeswiki.jpg#/media/file:acornarchimedes-wiki.jpg 30 Lite datorhistoria, forts. Cray-I, 1975 http://www.oldcomputers.net/ibm5150.html ARM, 1985 https://commons.wikimedia.org/wiki/file:legendary_chip_designer_betting_on_hu man_mind.jpg#/media/file:legendary_chip_designer_betting_on_human_mind.jpg 29 https://commons.wikimedia.org/wiki/file:imb_pcimg_7271.jpg#/media/file:imb_pc-img_7271.jpg https://commons.wikimedia.org/wiki/file:eniac_penn1.jpg#/media/file:eniac_penn1.jpg "Cray-1-p1010221" by Rama - Own work. Licensed under CC BY-SA 2.0 fr via Wikimedia Commons https://commons.wikimedia.org/wiki/file:cray-1-p1010221.jpg#/media/file:cray-1-p1010221.jpg AMD4, 2003 4-bitars 808 kompatibel 1 miljon transistorer 1 GHz klockfrekvens Intel Haswell (i3, i5, i7), 2013 https://commons.wikimedia.org/wiki/file:commodorevic-20-fl.jpg#/media/file:commodore-vic-20-fl.jpg Inklusive grafikprocessor, 1.4 miljarder transistorer, 3 GHz Intel Xeon, 2015 18 kärnor, 5.7 miljarder transistorer, 10W Effektutveckling blir en viktig begränsning för person-datorer runt år 2000
Lite datorhistoria, summering Hastigheten (instruktioner per sekund) ökar exponentiellt Priset går ned trots ökad prestanda Moores lag Antal transistorer på ett chip dubbleras vartannat år Generellt: prestanda ökar också exponentiellt Olika exponenter => differenser ökar också exponentiellt (t ex hastighet minne jämfört med cpu) 31 En programmerares vy av en dator Högnivåspråk Interpreterande (tolka kod under körning, t ex JAVA) Kompilerande (översätt innan körning till maskinkod, t ex C) Assemblerspråk Datorns egna interna språk Alla högnivåspråk måste översättas till detta Mikroprogrammering (inget en vanlig användare ser) Styrning av interna funktioner i datorns inre Översiktsbeskrivning av en dator Indata En dators inre uppbyggnad 33 Switchar, sensorer, kommunikationsmoduler Utdata lysdioder, reläer, video, etc. In och utdata i digital form (binära tal) Datorsystem Indata Buss Utdata Processor (CPU) Minne Data Buss Program 34
35 Översiktsbeskrivning av en dator, forts Typer av byggblock i processorn Minnet innehåller två typer av information Indata Buss Utdata Processor (CPU) Minne Data Buss Datavärden som sparas i datorn Program 3 Register Lagrar ett värde tillfälligt En eller flera bitars värde Större vektor av registervärden Minnescell väljs via adress Ibland samma buss för data in och data ut Styrsignaler väljer om data sparas eller läses Processorn läser instruktioner från minnet och utför dessa operationer på värden från indata och minne. En instruktion åt gången Resultat hamnar i minne och som utsignaler Datorsystem Utdata Processor (CPU) Minne Data Buss Data in 1234 578 Program Aritmetikenhet för enklare beräkningar Adress Data in A Addition, subtraktion, and, or etc. Data in B Resultat analyseras (addition ger nollresultat, minnessiffra från addition etc.) Y = f(a,b) Styrsignaler väljer vilken funktion som ska beräknas Data ut : Byggblock, forts. Buss Data ut Minne Översiktsbeskrivning av en dator, forts Indata Data in 1234 Instruktioner som beskriver vilka operationer som utföras Datorsystem 37 38 Resultat Y ALU Flaggor där f kan vara AND, OR, XOR, NOT, ADD,SUB,SHIFT,ROTATE, Flaggor anger egenskaper hos resultat, t ex =0, minnessiffra, etc.
Byggblock, forts. 39 Endast en källa aktiv åt gången Bussar Skickar vidare värden från ett block till många andra Hämta nästa instruktion från minnet Avkoda instruktionen, styr vilka värden som skickas vart, påverkas ibland av flaggorna värde Klocka styr hur ofta styrsignaler ändras Styrsignaler Styrenhet Flaggor : Klocka Exekvering av program kräver minst Programräknare (PC) Aritmetikenhet (ALU) Beräknar addition etc. Z: flagga = 1 om resultat = 0 In Adress Lagra mellanresultat Styrenhet (CU) Argument xxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 4 Binärt data Två delar Vilken typ av operation (4 bit => 1 olika) Argument till operation (32 bit) I detta exempel: 3 bitars ord i minnet 32 Typkod Förklaring 0000 (0) 0001 (1) 0010 (2) Ladda in argument i D Addera argument till D Jämför argument med D, Z=1 om D=argument,Z=0 annars Sätt PC till argument om Z=0 Sätt PC till argument om Z=1 Sätt PC till argument om argument = 2000 skicka D till display om argument = 2100 hämta aktuellt displayvärde till D om argument = 2200 hämta sensorvärde till D, D=1 om någon står i dörren, D=0 annars 0011 (3) 0100 (4) 0101 (5) 0110 () 0110 () 0110 () 42 Svårt komma ihåg och läsa binärmönster Använd så kallade mnemonics istället Data PC CU ALU D 40 Typ Assemblerinstruktioner Minne Tillfälliga register (D) Håller reda på position för aktuell instruktion i programminnet Lagrad i en minnescell Instruktion 41 Maskininstruktionens utseende Styrenhet Z Ut Typkod Assemblerinstruktion Föklaring 0000 (0) 0001 (1) 0010 (2) 0011 (3) 0100 (4) 0101 (5) 0110 () 0110 () 0110 () load D,#värde add D,#värde comp D,#värde bne adress beq adress jump adress jsr 2100 Ladda in argument i D Addera argument till D Jämför D med argument, Z=1 om D=argument, Z=0 annars Sätt PC till argument om Z=0 Sätt PC till argument om Z=1 Sätt PC till argument om argument = 2000 skicka D till display om argument = 2100 hämta aktuellt displayvärde till D om argument = 2200 hämta sensorvärde till D, D=1 om någon står i dörren, D=0 annars
43 Litet exempel: Räkna studenter Sätt en sensor i dörren och en sifferdisplay En dator får räkna Y:are: ni vet hur man bygger detta med två räknare, 7segmentsavkodare, enpulsare etc. Detta byggsätt saknar flexibilitet när nya funktioner ska läggas till Första steget: definiera en algoritm Varje gång sensorvärdet ändras från 0 till 1 ska displayvärdet ökas med 1 Dela upp i steg Initiering när strömmen slås på Hitta sensorvärdesändring 0 till 1 Öka displayvärde Hitta sensorvärdesändring 1 till 0 Börja om att leta efter sensor=1 45 Implementering i exempeldatorn Jag vill räkna antal studenter som besöker mig på kontoret under en dag Nollställ displayvärde sensorvärde = 1 Öka displayvärde med 1 sensorvärde = 0 44 Adress Maskinkod Assemblerinstruktion Förklaring 0 1 2 3 4 5 7 8 9 10 11 load D,#0 comp D,#1 bne 2 jsr 2100 add D,#1 comp D,#0 bne 8 jump 2 ; Nollställ D ; sätt display till 00 ; Står någon i dörren? ; nej, gör om ; hämta displayvärdet ; öka displayvärdet ; visa det nya värdet ; Är dörren tom? ; nej, kontrollera igen ; börja om Nollställ displayvärde sensorvärde = 1 Öka displayvärde med 1 sensorvärde = 0 Implementering i exempeldatorn, forts. Adress Maskinkod Typ Arg. Assemblerinstruktion Förklaring 0 1 2 3 4 5 7 8 9 10 11 load D,#0 comp D,#1 bne 2 jsr 2100 add D,#1 comp D,#0 bne 8 jump 2 ; Nollställ D ; sätt display till 00 ; Står någon i dörren? ; nej, gör om ; hämta displayvärdet ; öka displayvärdet ; visa det nya värdet ; Är dörren tom? ; nej, kontrollera igen ; börja om 0 2 3 1 2 3 5 0 2000 2200 1 2 2100 1 2000 2200 0 8 2 Nollställ displayvärde sensorvärde = 1 Öka displayvärde med 1 sensorvärde = 0 4
47 Assembler Ytterligare funktion: fördröjning Översätter assemblerinstruktion till maskinkod Varje besökare kan ge flera pulser Skriv en textfil med assemblerinstruktioner Två ben, väska, kläder. Håller även reda på adresser Lösning: vänta en stund efter display räknat upp Ange bara symboliska namn på platser i programmet (kallas label) En loop i programmet som bara tar tid att utföra Adress Maskinkod Typ Arg. wait0: label comp D,#0 bne wait0 ; Är dörren tom? ; nej, kontrollera igen 8 9 10 2200 2 0 3 8 Assemblerversion av programmet Label Assemblerinstruktion Förklaring start: load D,#0 comp D,#1 bne wait1 jsr 2100 add D,#1 comp D,#0 bne wait0 jump wait1 ; Nollställ D ; sätt display till 00 ; Står någon i dörren? ; nej, gör om ; hämta displayvärdet ; öka displayvärdet ; visa det nya värdet ; Är dörren tom? ; nej, kontrollera igen ; börja om wait1: wait0: Nollställ displayvärde 48 Assemblerinstruktion Förklaring start: load D,#0 comp D,#1 bne wait1 jsr 2100 add D,#1 load D,#0 add D,#1 comp D,#10000 bne delay comp D,#0 bne wait0 jump wait1 ; Nollställ D ; sätt display till 00 ; Står någon i dörren? ; nej, gör om ; hämta displayvärdet ; öka displayvärdet ; visa det nya värdet ; starta timer på 0 ; öka timer med 1 ; lämpligt antal klockcykler? ; inte tillräckligt många varv ; Är dörren tom? ; nej, kontrollera igen ; börja om wait1: sensorvärde = 0 delay: wait0: 49 Nollställ displayvärde sensorvärde = 1 Öka displayvärde med 1 Vänta 0.5s sensorvärde = 0 Ytterligare funktion: fördröjning, forts. Label sensorvärde = 1 Öka displayvärde med 1 Nollställ displayvärde sensorvärde = 1 Öka displayvärde med 1 Vänta 0.5s sensorvärde = 0 50
51 Billigare system: Förenkla display 53 Skillnad mellan instruktionstyp 0 och 7 Enklare display => billigare system Viktig skillnad mellan instruktion 0 och 7 Ta bort möjlighet att läsa av värdet 0 load D,#värde t ex load D,#1 Placera värdet 1 i D Kan bara skriva värde => behöver lagra värdet i datorn också 7 load D,adress t ex load D,1 D-registrets värde förstörs när sensor läses, kan inte användas Läs adress 1 och placera dess värde i D. Två alternativ: Fler register eller lagring i minnet Motsvarande maskinkod (binärt) move D,#1 => 000000000000000000000000000000000001 move D,1 => 011100000000000000000000000000000001 En uppsättning operationer för varje register Lagra i minnet => Två nya instruktion för att läsa och skriva i minnet Instruktioner för läsa och skriva i minnet Lägg till instruktioner för att spara och hämta ett värde i minnet Kod Assemblerinstr. Förklaring 7 load D,adress Läs värdet på angiven adress i minnet och placera det i D 8 load adress,d Skriv värdet i D på angiven adress i minnet Minne D adress load D,adress Minne : adress load adress,d 52 Skillnad indikeras i detta fall med tecknet # framför argumentet Exempel med displayvärdet i minnet start: wait1: delay: wait0: : Dvs samma argument i maskinkoden, men olika innebörd pga olika operationstyp Välj adress som inte används till annat (t ex i exemplet: 100 ) D Fler register => fler operationstyper load D,#0 load 100,D comp D,#1 bne wait1 load D,100 add D,#1 load 100,D load D,#0 add D,#1 comp D,#10000 bne delay comp D,#0 bne wait0 jump wait1 ; Nollställ D ; spara displayvärde adress 100 ; sätt display till 00 ; Står någon i dörren? ; nej, gör om ; hämta displayvärdet ; öka displayvärdet ; visa det nya värdet ; spara nya värdet i minnet ; starta timer på 0 ; öka timer med 1 ; lämpligt antal klockcykler? ; inte tillräckligt många varv ; Är dörren tom? ; nej, kontrollera igen ; börja om Nollställ displayvärde sensorvärde = 1 Öka displayvärde med 1 Vänta 0.5s sensorvärde = 0 54
www.liu.se