3 Praktiska kommentarer TSEA28 Datorteknik Y (och U) Föreläsning 4 Kent Palmkvist, ISY Labanmälan öppnar Må 22/1 kl 12.3 Logga in på Lisam, kursens kursrum TSEA28-218VT Välj länk Anmälan (längst ned till vänster) Ange 6 olika tillfällen (A och B för lab 1-3) Labbar genomförs i grupper om 2 personer/grupp Kom i tid, inget insläpp efer labbstart Tillträde till labbet utanför labbtid startar 1/2 Dagens föreläsning Resultat från operationer 2 Flaggor Labbuppgifen görs på Linux-maskiner (finns ett par windowslab på ISY, men det är mindre intressant) Samma användarnamn och passord som på IDA och ISYs vanliga datorlabb Labbet öppet dygnet runt (mha passerkort) under VT1 med start 1 Februari Rotation, skif Vanliga programkonstruktioner Introduktion ARM Cortex M (nya labbdatorn) 4 Datoraccess (MUX1 och ixtab.edu.isy.liu.se) Villkorliga hopp Praktiska kommentarer, forts. Andra operationer För eget arbete, ingen handledning eller redovisning Eventuellt extratillfälle för handledning/redovisning kräver deltagande på både labbtillfälle A och B! Ingen hårdvara ansluten till ixtab.edu.isy.liu.se Separat hembibliotek (inte kopplat till IDA/ISY vanliga datorlabb) Ej bokad tid är det tillgängligt (INGEN MAT, håll labb snyggt och rent) Datoraccess i ISYs och IDAs vanliga datorlabb Separat hembibliotek (inte kopplat till det som används i MUX1 och ixtab.edu.isy.liu.se) Samma användarnamn och passord som i MUX1/ixtab.edu.isy.liu.se Labben öppna dygnet runt (mha passerkort) Ej bokad tid är dom tillgängliga (INGEN MAT, håll labb snyggt och rent)
6 Praktiska kommentarer, forts. Bra att vara förberedd innan 1a lektionen Vi räknar inte med att ni kan processorbeskrivningen utantill, men att ni vet var man hittar den informationen i manualen Manual till labbmaterial (Introduktion till Darma) uppdateras allt efersom Information för att kunna genomföra lab1 finns redan i materialet Saknad information finns i länkade dokument (ARM och Ti manualer) Addition och subtraktion Ingen skillnad hur det går till, kan använda samma instruktion för både positiva heltal och 2-komplement Resultat tolkas olika beroende på talrepresentation Implementeras i ALU Tvåkomplementsrepresentation För ett n-bitar binärt tvåkomplementstal gäller n-1 bitar viktade precis som för positiva binära tal MSB-biten har vikt -2(n-1) I ett 3-bitars tal är MSB vikt -4 (se tabell) Positiva tal måste ha som teckenbit 7 Två olika instruktioner för positiva heltal respektive 2-komplement Dubbel längd på resultatet n 2 (n 1) + ai 2 i= i Generellt m-bitars tal gånger n-bitars tal ger produkt med m+n bitar Exempel multiplikation 11 3 1 2 1 1 111-1 11-2 11-3 1-4 Vad händer med multiplikation av de mest negativa värdena? Antag 3 bitars tal. => minsta värde är -4 (1) 1 *1 --------För få bitar + (-4)*(-4)=16 + teckenförläng -1 ---------1-16! Generellt ett n bitars binärt tvåkomplementstal på formen an-1an-2...a1a har representerar värdet Värde= a(n 1) 2 Samma ordlängd på indata och utdata Multiplikation 8 Aritmetiska beräkningar Tips Börja läsa igenom labbmaterial redan nu 1 *1 ------ -11 ----------1 NxM bitars multiplikation => N+M bitars svar 9
1 Kommentar om subtraktion Resultat? Lagras i Z-flaggan (Z=1 om resultat = ) Resultat negativt? Lagras i N-flaggan (=MSB i resultatet) Resultat gav minnessiffra, carry? Lagras i C-flaggan Byt tecken på talet som subtraheras Addera Detta är ett vanligt sätt att bygga en ALU som kan addera och subtrahera Intressanta beräkningsresultat I tidigare exempel jämfördes likhet mellan tal Beräknas genom subtraktion (A-B) och kontrollera om resultat = Indikera resultat i Z-registret (1-bit) där Z=1 om result =, Z= annars 11 A=B A>B Dessutom kan A och B vara tvåkomplement eller positiva heltal Resultat utanför talområdet för 2-komplement? Minnessiffra (carry/borrow) från beräkning? Samma som i modelldatorn om comp ersätts med subtraktion Kan även ses som overflow om positiva heltal in (inte för 2-komplement) Resultat gav spill (engelska overflow) för 2-komplement? Lagras i V-flaggan Antar indata och utdata i 2-komplements form. Detekteras mha minnessiffra in till och ut från teckenbitens position är olika 13 Exempel på genererade flaggor 8-bitars addition (antag D-register i dator är 8 bitar) load D,#127 add D,#3 1111111 +11 --------------11 Jämför med vad som kan göras i vanliga programmeringsspråk med två tal A och B 12 Efer aritmetisk operation (Addition, subtraktion) indikerar flaggor egenskaper hos resultat/beräkning Gör om subtraktion till addition A-B = A + (-B) Behöver veta mer om resultatet Om man tycker det är svårt att räkna subtraktion av binära tal Z = (resultat inte noll) N = 1 (MSB i resultat är ett) C = (fick ingen minnessiffra ut från MSB) V = 1 (13 går inte plats i 8 bitar tvåkomplement) Vissa instruktioner kan även addera C, dvs om C=1 läggs även 1 till, adc -1+3 Instruktion som sätter C flaggan load D,#-1 adc D,#3 1 111111 +11 --------------111111 Z = (resultat inte noll) N = 1 (MSB i resultat) C = (ingen minnessiffra) V = (-6 går plats inom 8 bitar)
14 Varning ang. flaggor Subtraktionens interaktion med C-flaggan skiljer sig mellan ARM och t ex 68 $ABCD+$7654 (två hexadecimala tal) Kan bara addera 8 bitar per instruktion Addera först minst signifikant byte Addera sedan mest signifikant byte plus C flaggan Användning av flaggor Två huvudsakliga användningsområden Skicka bitvärde mellan beräkningar Exempel addera två 64-bitars tal i en dator som bara kan addera 32bitars tal Addera först minst signifikant 32-bitars del (påverkar även C-flagga) Addera därefer mest signifikant 32-bitars del inkl. C-flaggan 15 T ex välj en annan programdel om två värden olika (jämför studenträknarexemplet) Villkorliga hopp (conditional branching) $AB + $76 + 1 = $22 samt C=1 Eventuell overflow kontrolleras bara efer andra additionen 17 Villkorliga hopp Beroende på indata kan vissa hopp betyda olika saker Tvåkomplements data ger annan betydelse hos jämförelse 11 > 1 för positiva heltal, 11 < 1 för 2-komplement (samma värden i flaggorna i båda fall) Villkorliga hopp ofa kombinationer av flaggor BLT (branch less than) antar A-B beräknats, testar om tecken (N) skiljer sig från 2komplements spill (V) (dvs (N= och V=1) eller (N=1 och V = 1) ) Styr exekveringsflödet mha resultat $CD+$54 = $21 samt C=1 Svar $ABCD+$7654 = $2221 samt C=1 16 Antag två 16-bitars tal ska adderas i en 8-bitars dator Läs alltid manual för aktuell processor innan programmering Exempel på flaggor för långa additioner Hur flaggor sätts och hur de används kan variera mellan processorfamiljer Om A-B beräknats så tas hoppet om A < B (dvs svar korrekt negativt eller spill med positivt svar) ARM har 14 möjliga villkorliga hopp (se manual) Ibland kan flera namn finnas på samma operation (ger läsbar kod) Datorn testar bara flaggor, den kommer inte ihåg vilken operation det var som påverkade flaggorna
18 Villkorliga hopp, exempel /* Antag variabel A i register r */ /* båda är i 2-komplements form */ start ; cmp beräknar r-42, dvs A-42 cmp r,#42 ble notlarger sekvens1 bra done notlarger sekvens2 done ; instruktioner i sekvens1 (ingen riktig assemblerinstruktion) ; hoppa till efer if-satsen ; Början på sekvens2 AND D,#value 19 x42 = hexadecimalt (4*16+2) Bit för bit or (1 om någon eller båda är 1) EOR D,#value (Exlusiv OR) switches Minnesinnehåll switches 7 6 5 4 3 2 1 1 = x4 Bit för bit xor ( om båda eller båda 1) load D,#x23 eor D,#x42 111 ^ 11 = 111 21 Sätt specifik bit load D,led or D,#$1 load led,d ; läs nuvarande tända lysdioder ; tänd lysdiod utan att ; påverka övriga lysdioder 1 2 7 Nollställ specifik bit load D,led ; läs nuvarande tända lysdioder and D,#$FD ; släck lysdiod 1 utan att load led,d ; påverka övriga lysdioder load D,#x23 or D,#x42 111 11 = 1111 2 7 Användning av logiska operationer, forts. Bit för bit and (1 om båda är 1) OR D,#value 1 ; plats för 1a instruktion efer if-sats load D,#x23 and D,#x42 111 & 11 = 1 ; (ingen riktig assemblerinstruktion) Logiska operationer Kontrollera om specifik bit i indata är =1 load D,switchar ; läs av många switchar ; där varje switch går till ; en bit and D,#x4 ; Kontrollera switch ; kopplad till bit 2 ; Z-flaggan visar resultat ; Z= om bit = 1 bne switchpressed ; knappen tryckt (=1), ;gör något ; kan även göra sub r,#42 med då förstörs r efersom ; resultatet från subtraktionen sparas i r (Beräknar r-42) ; ble är motsats till bgt, alltså hoppa om B-A gav ett positivt svar 2 Användning av logiska operationer Implementera motsvarande pseudokod if (A > 42) then sekvens1 else sekvens2 Toggla (->1 eller 1->) specifik bit load D,led ; läs nuvarande tända lysdioder eor D,#$6 ; ändra lysdiod 1 och 2 load led,d ; uppdatera utsignalen led Minnesinnehåll led 7 6 5 4 3 2 1
22 Skifoperationer Skifa D åt vänster (fyll på med till höger) Motsvarar multiplikation med 2 LSR, Logical Shif Right Skifa D åt höger (fyll på med till vänster) Motsvarar division med 2 (för positiva heltal) Blir inte rätt för tvåkomplement! ASR, Arithmetic Shif Right Skifa D åt höger, kopiera MSB (teckenbit!) Motsvarar division med 2 (för 2-komplement) d7 LSL D,#1 => D = 1111 LSL D,#2 => D = 111 Kopierar ibland in data även i C-flaggan Rotation vänster ARM saknar separat ROL instruktion d7 d6 d5 d4 d3 d2 d1 Rotation vänster kan fås genom högerrotation 8-n steg för ett 8-bitars register Ex ROR D,#7 => samma som ROL D,#1 d d7 d6 d5 d4 d3 d2 d1 ROR d7 d6 d5 d4 d3 d 2 d1 d d6 d5 d4 d3 d2 d1 d d7 ROL 23 Andra möjliga instruktioner d6 d5 d4 d3 d2 d1 d LSL Multiplikation, division LSR d7 d7 d7 d6 d5 d4 d3 d2 d1 ASR I många enklare processorer saknas division Bitmanipulering d7 d6 d5 d4 d3 d2 d1 LSR D,#1 => D = 1111 ASR D,#1 => D = 11111 24 d7 d7 d6 d5 d4 d3 d2 d1 Argument till shifinstruktioner anger antal steg Antag D = 11111 Rotation (ROR) Exempel på skifoperationer d6 d5 d4 d3 d2 d1 d Rotation LSL, Logical shif lef Testa och sätt/nollställ enskilda bitar Kan implementeras med vanlig and/or istället Se kapitel i Introduktion till Darma eller ARMs manual Många fler som jag inte kommer presentera nu Vissa kommer diskuteras i samband med metoder för snabbare exekvering av program 25
26 ARM processorer Cortex-M för styrning och liknande (mikrocontroller) Standard ARM Cortex-R för säkerhetsapplikationer (router, etc.) Thumb (Detta används i Cortex-M) för kompaktare kod (mindre programminne) Samma grundläggande instruktionsuppsättning Varje instruktion 32-bitar lång Vissa modeller har även utökade instruktionsuppsättningar Flyttal 16 generella register R-R15, varav flera har speciell funktion DSP (signalbehanding) R15 = programräknare, R14 = stackpekare, R13 = länkregister SIMD (samma operation på många data samtidigt) 27 Operation rd, rn, operand Om 2 operander anges antas rd = rn 29 THUMB instruktionsuppsättning 3 operander! Destination, källa1, källa2 32-bitars instruktionsuppsättning, finns även en 64-bitars version av Cortex-A (t ex RPi3) Instruktionsbeskrivning 28 2 typer av instruktionsuppsättningar hos ARM processorer Cortex-A för applikationer (t ex i mobiltelefoner, Rpi etc.) ARM processorer, forts. ARM instruktionsuppsättning Flertal processorversioner utvecklade under många år Exempel Kompaktare kod Varje instruktion är 16 eller 32 bitar lång (vanlig ARM alltid 32 bitar lång) Vissa instruktioner i orginal-arm inte inkluderade i Standard ARM Cortex-A kan växla mellan Thumb och ARM instruktionsuppsättning Add r3, r4, #3 ; beräkna r4+3, spara resultat i r3 Välj mha LSB (minst signikant bit) i hoppadress Add r4,#3 ; beräkna r4+3, spara resultat i r4 Instruktionerna startar i alla fall på jämn adress Cortex-M kan bara köra Thumb instruktionsuppsättning
3 ARM Cortex M familjen Kod för en processor kan köras direkt i en annan processor (om specialfunktioner/specialinstruktioner undviks) M minimal M7 Snabb Olika extra funktioner Labbutrustningen har en Cortex M4F, dvs medelsnabb med flyttal Register i Cortex M familjen R till R15 32-bitars dataregister R13 = SP (stackpekare) R14 = LR (länkregister) Enhet för flyttalsberäkningar, support för signalbehandlingsinstruktioner R15 = PC (programräknare) 31 32-bitars statusregister med flaggor (+ statusbitar) Röda kretskortet längst upp innehåller processorn (Tiva C LaunchPad) Resten är strömförsörjning och möjligheter att koppla in andra enheter, samt indikering av värde på anslutningarna 33 Ansluts via USB-port till linuxdator Både programmering och styrning Även en seriekommunikationskanal Laborationssystemet Darma, mikrokontrollern TM4C123G CPU ARM Cortex M4 processor PSR 32 Fysisk vy Olika prestanda (snabbare men större och mer effektförbrukning) Samma maskinkod Laborationssystemet Darma Flera versioner finns tillgängliga (M, M1,... M7) 32 bitar databuss, 32 bitars addressbuss 8 MHz klocka (ca 2-5 ggr långsammare än en smartphone) Minne på kretsen RAM (läs och skrivbart) 32 Kbyte FLASH (endast läsbart) 256 KByte Darma Launchpad Microcontroller CPU Minne Seriell (via USB) I/O I/O-enheter Parallellport, programmerbara anslutningar (val av in eller ut) Serieport (många...) Många fler (I2C, USB, timers, PWM etc.) Portar B D E F Bredd 8 2+2 6 5... 3 LED 2 switch 1 LED per bit i portarna
34 Darma minneskarta x - x3ffff programmeras från PC Innehåller programkod x2 - x21ff stack x22 - x27fff plats för variabler etc. x4c - x4cfff Serieport x44 - x45fff GPIO (parallellport) Port B x425 - x425fff GPIO (parallellport) Port F De flesta adresser används inte Vissa adresser kan skada hårdvara? 35 Code Composer Studio Programmering och debug görs i programmeringsmiljön Code Composer Studio Samlar ihop nödvändiga filer och definitionsfiler Håller ordning på vilka filer som ändrats och vad som behöver assembleras/kompileras eller länkas. Lämpligen ett projekt för varje deluppgif, t ex lab1_grundversion och lab1_utbyggd Editering av källkod Kompilering/assemblering/länkning av program Programmering av minnet i Darma Kommunikation med seriell anslutning över USB Debugstöd, t ex stega genom kod, undersöka registervärden etc. Bygger på eclipse 37 Assembler, länkare, programmerare Komplett IDE (Integrated Development Environment) Inte i denna design, men möjligt i andra Var filer ska hamna i filsystemet Varje program som ska skrivas placeras i ett projekt I/O-kretsar, data och konfiguration 36 Vid start väljs ett workspace 32 KB RAM (CPU kan läsa och skriva) Code Composer Studio, forts. 256 KB FLASH-minne (CPU kan bara läsa) Översättning av assemblerkod sker i flera steg innan Darma programmeras Varje steg producerar meddelanden i loggfönster Programkod läggs automatiskt till för att initiera darma (t ex sätter stackpekare) tm4c123gh6pm_startup_ccs.c, boot.asm Assemblering/kompilering Översätt källkodstext från.asm fil respektive.c fil till objektformat (ett mellanformat utan absoluta adresser) Flera olika.asm-filer och.c-filer kan assembleras/kompileras Länkning Kombinera ihop alla assemblerade filer, bestäm på vilka adresser allt ska hamna Kan även inkludera kompilerad C-kod etc.
217-1-2 38 Assemblerfilens uppbyggnad Olika mallfil beroende på vilken labb Laddas ned och importeras sedan in i aktuella projektet Inituart sätt igång seriekommunikation så utskrif kan fås InitGPIOF, initgpiob initiera portar så data kan hämtas och skickas En definitioner av adresser till I/O-enheter etc finns också GPIOF_GPIODATA port F dataregister 217-1-2 Styrkommandon till assemblern Instruktioner i.asm-filen som inte motsvarar instruktioner till processorn Mallen innehåller sedan en del subrutiner som ni behöver anropa 39 Starta på en jämn adress.text.align 2 Ange att platsen main definieras i denna fil så man från andra filer hittar den vid länkning.global main Beskriver allt som behövs för att använda Darma Labbarna fortsätter utvecklas, nya versioner av dokumentet kommer läggas ut under kursens gång. Dator i MUX1 labbet Strömförsörjning Skicka gärna mail med frågor/kommentarer Logga in, öppna terminalfönster Ladda modulen ti Starta med ccstudio Hemma/annat labb (utan Darmakort) Kan editera och kompilera, men inte simulera/köra Du behöver först logga in på ixtab.edu.isy.liu.se (behöver X11-stöd, dvs linux, mobaxterm på windows, eller extra paket till MacOS) 217-1-2 41 Programmering av Darma.thumb Placera assemblerad kod i Flash-minnet (ROM) Beskriv förväntad form av kod (Thumb) På laborationshemsidan finns dokumentet Introduktion till Darma Assemblerprogrammet förväntas startas på platsen main Måste läggas till projektet ni ska jobba med 4 Att komma igång Till alla labbar finns en mallfil som innehåller definitioner och initiering 217-1-2 Darma Programmering av Flashminnet görs varje gång övergång till debugläge görs Kompilering/assemblering/länkning görs automatiskt om det behövs Programmet ligger kvar i Darma tills nytt program laddas in Exekvering av program Gå först till main Kör sedan med Resume (F8, eller grön playknapp) Körning kan stoppas när som helst med Suspend (Alt-F8, eller paussymbol) Lämna körning med Terminate (röd stoppknapp), återgår till editering och kompilering/assemblering/länkning Initieringsrutinerna från boot.asm kan inte stegas igenom
217-1-2 42 Felsökning i ccstudio (med Darmakort) Logga in module load ti ccstudio öppna tidigare projekt Starta debugläge Go main Kör programmet Undersök register Undersök minne Ändra register Stega igenom Sätt brytpunkt Lägg till olika vyer mha Window->Show view Kan stega instruktion för instruktion (step into) Live demo av Darma (med kort) Kan ändra minne, register etc Kan även stega subrutin för subrutin (step over) Sätt brytpunkter för att automatiskt stanna när den instruktionen ska utföras Dubbelklicka på radnumret i kodfönstret Kommentar Måste köra initiering av port innan porten kan läsas/skrivas 43 Live demo av ccstudio via ssh Ssh -X ixtab.edu.isy.liu.se module load ti ccstudio Skapa tomt ccsproject Ladda ned och lägg till lab1.asm Editera lab1.asm Assemblera lab1.asm www.liu.se 44