Tentamen i EIT070 Datorteknik

Relevanta dokument
Lösningar till tentamen i EIT070 Datorteknik

Lösningar till tentamen i EIT070 Datorteknik

Lösningar till tentamen i EIT070 Datorteknik

Tentamen i EIT070 Datorteknik

Datorsystemteknik Föreläsning 7DAVA14

Polling (cyklisk avfrågning) Avbrott

Mål. Datorteknik. Introduktion. Innehåll. Verklig situation - pappaledighet. Introduktion (forts)

Institutionen för elektro- och informationsteknologi, LTH

Datorteknik. Föreläsning 4. Polling och avbrott. Institutionen för elektro- och informationsteknologi, LTH. Mål

Tentamen i Digitala system - EITA15 15hp varav denna tentamen 4,5hp

Datorarkitektur I. Tentamen Lördag 10 April Ekonomikum, B:154, klockan 09:00 14:00. Följande gäller: Skrivningstid: Fråga

Institutionen för elektro- och informationsteknologi, LTH

Datorteknik. Föreläsning 5. Realtidssystem och realtidsprogrammering. Institutionen för elektro- och informationsteknologi, LTH.

Övningsuppgifter STYRNING - i Mikrodatorteknik för U2 2010

Mål. Datorteknik. Innehåll. Innehåll (forts) Hur ser ett program ut? Hur skapas maskinkoden?

Stack och subrutiner Programmeringskonventionen

Datorteknik. Föreläsning 3. Assembler, stack och subrutiner, programmeringskonventionen. Institutionen för elektro- och informationsteknologi, LTH

Institutionen för elektro- och informationsteknologi, LTH

LABORATION. Datorteknik Y

F8: Undantagshantering

TENTAMEN. Datorteknik. D1/E1/Mek1/Ö Hjälpmedel: Häfte "ARM-instruktioner", A4-format, 17 sidor. Maxpoäng:

Tentamen i Digitala system - EDI610 15hp varav denna tentamen 4,5hp

Datorsystemteknik DVGA03 Föreläsning 5

Tentamen i Digitala system - EITA15 15hp varav denna tentamen 4,5hp

CE_O3. Nios II. Inför lab nios2time

LABORATION. Datorteknik Y

Datorteknik. Föreläsning 6. Processorns uppbyggnad, pipelining. Institutionen för elektro- och informationsteknologi, LTH. Mål

TSEA28 Datorteknik Y (och U)

Datorsystemteknik DVGA03 Föreläsning 8

Tentamen. Datorteknik Y, TSEA28

TENTAMEN Datorteknik (DO2005) D1/E1/Mek1/Ö1

Datorsystemteknik D. Lösningar till tentamen i kursen EDA330 14/1 2000

Digitalteknik och Datorarkitektur

Tentamen den 18 mars svar Datorteknik, EIT070

Mål. Datorteknik. Repetition av avbrott. Innehåll. Mätning och styrning. Datorer för mätning och styrning. timer. Datorsystem A/D. Analog insignal D/A

Innehållsförteckning. Figur- och tabellförteckning. Figure 1 Blockschema över hårdvaran...4 Figure 2 Blockschema över programet...

Program kan beskrivas på olika abstrak3onsnivåer. Högnivåprogram: läsbart (för människor), hög abstrak3onsnivå, enkelt a> porta (fly>a 3ll en annan ar

Ansvarig lärare: Olof Andersson, Telefon (besöker skrivsalen)

TSEA28 Datorteknik Y (och U)

TSEA28 Datorteknik Y (och U)

Provmoment: Ladokkod: Tentamen ges för: Tentamen TE111B El3. Namn: Personnummer: Tentamensdatum: Tid: 14:00-18:00.

AVR 3 - datorteknik. Avbrott. Digitala system 15 hp. Förberedelser

c a OP b Digitalteknik och Datorarkitektur 5hp ALU Design Principle 1 - Simplicity favors regularity add $15, $8, $11

Svar till tentamen den 16 december 2013 Datorarkitekturer med operativsystem, EDT621, 7,5 poäng

Tentamen i Digitalteknik, EITF65

Övningsuppgifterna i kapitel F avser FLIS-processorn, vars instruktioner och motsvarande koder definieras i INSTRUKTIONSLISTA FÖR FLISP.

7) Beskriv tre sätt att överföra parametrar mellan huvudprogram och subrutin.

Laboration 2 i Datorteknik- Assemblerprogrammering II

CPU. Carry/Borrow IX. Programräknare

Digital- och datorteknik

Tentamen. TSEA22 Digitalteknik 5 juni, 2015, kl

Övning2 Datorteknik, HH vt12 - Programmering

Föreläsningsanteckningar 3. Mikroprogrammering II

Tentamen. Datorteknik Y, TSEA28

Digitala projekt rapport

Tentamen den 12 januari 2017 Datorarkitektur med operativsystem, EDT621

Tentamen PC-teknik 5 p

A-del motsvarande KS1

Digital- och datorteknik

Övningsuppgifter i Mikrodatorteknik 4p/5p

General Purpose registers ALU I T H S V N Z C SREG. Antag att vi behöver skriva in talet 25 till register R18

Institutionen för elektro- och informationsteknologi, LTH

Datorteknik. Föreläsning 2. Programmering i C och assembler MIPS instruktionsarkitektur. Institutionen för elektro- och informationsteknologi, LTH

Programexempel för FLEX

OBS!! Detta är DEL 2 av tentan. För att få ut denna måste du ha lämnat in del 1. Om du inte fått ut del 1 bör du meddela skrivningsvakten. OBS!!

Datorsystem. Tentamen

Högskolan i Halmstad Digital- och Mikrodatorteknik 7.5p. Lista på registeruppsättningen i PIC16F877A Datablad TTL-kretsar 74-serien

Laboration 4: Knappstuds Drivrutiner för att eliminera störningar.

Elektronisk timer. Ställa in aktuell tid. Inställning av vinter-/sommartid. Använda klockan tillsammans med ugnen. Ställa in tillagningstiden

Tentamen. Datorteknik Y, TSEA28

Tentamen i Digitalteknik, EIT020

Laboration Datorteknik TSIU02/TSEA28 3. Digitalur

Mål. Datorteknik. Innehåll. Vad händer med en add-instruktion? Vad händer med en add-instruktion. Instruktioner som bitmönster i minnet

Instruktion Basketboll

En något mer detaljerad bild av en processor. De tre delarna i processorn är: Nere 3ll vänster finns e' antal register som används för a' lagra data.

En något mer detaljerad bild av en processor. De tre delarna i processorn är: Nere 3ll vänster finns e' antal register som används för a' lagra data.

12 VDC LED (RGB) Färgpalett (FP) 8 färger. Färgsekvensmotor (FSM) 11 färgscheman 2 justerbara tider

TENTAMEN. Datorteknik. D1/E1/Mek1/Ö Hjälpmedel: Häfte" ARM-instruktioner", A4-format, 17 sidor. Maxpoäng: 60p

REV 3. Användarmanual

Tentamen PC-teknik 5 p Lösningar och kommentarer

Dataminne I/O Stack 0x005D 0x3D SP low byte 0x005E 0x3E SP high byte

SOC7-128 SOC7-M2 SOC7-R1

Datorteknik 2 (AVR 2)

Tentamen PC-teknik 5 p

Fö 5+6 TSEA81. Real-time kernel + Real-time OS

IT för personligt arbete F5

Labyrintspelet EDI021 Grupp 5

Tentamen TEN1 HI

Övning1 Datorteknik, HH vt12 - Talsystem, logik, minne, instruktioner, assembler

Tentamen. Datorteknik Y, TSEA28

Tentamen den 17 mars 2016 Datorteknik, EIT070

Föreläsningsanteckningar till Konstruktionsmetoder

F5: Högnivåprogrammering

Rapport Digitala Projekt EITF11 Grupp 4 Axel Sundberg, Jakob Wennerström Gille Handledare: Bertil Lindvall

F5: Högnivåprogrammering

LEU240 Mikrodatorsystem

Tentamen. Datorteknik Y, TSEA28

Laboration Datorteknik D 3. Digitalur

Laboration 5. Temperaturmätning med analog givare. Tekniska gränssnitt 7,5 p. Förutsättningar: Uppgift: Temperatur:+22 C

Transkript:

Tentamen i EIT070 Datorteknik Institutionen för Informationsteknologi, LTH Lördagen den 11 mars 2006, klockan 08.00 13.00 i MA:10 Tillåtna hjälpmedel: på tentan utdelad formelsamling, miniräknare. Skriv lösningar till varje uppgift på separata ark och använd endast ena sidan på varje ark. Ange namn, program och startår på varje ark. Motivera dina svar tydligt, kommentera all kod du skriver, samt redogör för alla antaganden du gör. Skriv tydligt och läsbart. Betygsgränserna är normalt 20 p för betyg 3, 30 p för betyg 4, och 40 p för betyg 5, av totalt 50 möjliga poäng på tentamen. Uppgift 1 En gul mikrovågsugn för köksanvändning hemma innehåller följande komponenter: Tre kombinerade knappar och lysdioder för att välja effekt (låg, mellan, hög). När man trycker på en knapp tänds motsvarande lysdiod för att visa vilket val som gjorts. En LCD-display där tid i minuter visas med två siffror, samt tre knappar, varav en stegar tiden uppåt med en minut, en stegar nedåt med 1 minut, och en nollställer tiden. En startknapp kombinerad med en lysdiod som lyser så länge tillagningen pågår. En avkännare som ger signal om luckan är öppen. En mikrovågsgenerator med tillhörande relä. Så länge en insignal till reläet är +5 V körs generatorn. En fläkt som blåser luft genom ugnen, med tillhörande relä. En motor som vrider plattan inne i ugnen, med tillhörande relä. En ljudgenerator som kan avge en plingande ljud. En förenklad MIPS-processor med PROM-minne, åtta bitars in- och utportar, samt fem ben som kan anslutas till externa avbrott. En separat klockkrets som avger en klocksignal 100 gånger per sekund. Mikrovågsugnen skall fungera på vanligt sätt: Man väljer en av tre effektnivåer samt en tillagningstid, och startar ugnen med startknappen. När ugnen går skall mikrovågsgeneratorn, fläkten och plattvridningen köra. När tillagningen är färdig skall ugnen stanna och avge ett plingande ljud. Om luckan öppnas ska ugnen stanna, och starta igen om den stängs. Under öppettiden skall tidtagningen stoppas. Observera att dessa villkor betyder att ugnen skall fungera exakt som en vanlig mikrovågsugn. Beskriv med en tydlig och enkel skiss samtliga komponenter, och vilka insignaler och utsignaler som finns och mellan vilka komponenter de skall kopplas. Ange tydligt vilka signaler som bör gå till processorns avbrottsingångar respektive till in- och utportar, (5 p). Beskriv vilka olika processer som bör pågå samtidigt i ugnen och föreslå hur dessa skall implementeras. Du ska inte skriva någon kod utan bara enkelt och tydligt förklara hur mikrons hård- och mjukvara skall designas och fungera. Rita även ett flödesschema för varje separat process, samt förklara vilka processer som skall kunna avbryta varandra, (5 p). 1 (8)

Uppgift 2 Teknolog Nisse Hult, D86, har 7 som lyckotal och 3 som olyckstal. När han, 19 år för sent, läser datorteknik vill han skriva dessa två tal som 32-bitars bitmönster, nämligen som positiva heltal, i tvåkomplement, samt flyttal i IEEE-standard. Men han kan inte. Hjälp honom genom att ange de olika bitmönstren för talen -3, +7 och +19, (10 p). Uppgift 3 En datorgrafikbild består av 16000 * 800 punkter, där varje bildpunkt (pixel) i sin tur består av ett 32-bitars ord. Man vill exekvera en algoritm för att ge bilden ett dimmigare utseende. Det finns en subrutin dimpixel som avläser en kvadrat om nio intilliggande bildpunkter och räknar ut en ny bildpunkt (den mittersta). Denna algoritm skall appliceras på samtliga bildpunkter i hela bilden. Det är viktigt att exekveringen är så effektiv som möjligt. Subrutinen dimpixel är definierad på följande vis: int dimpixel (int p1, int p2, int p3, int p4, int p5, int p6, int p7, int p8, int p9) {... return newpixelvalue; Betrakta följande två metoder för att applicera dimpixel på bilden: Metod A int p[1000] [800];... for (x = 0; x < 1000; x++) { for (y = 0; y < 800; y++) { newpict [x] [y] = dimpixel (p[x 1] [y 1], p[x 1] [y], p[x 1] [y+1], p[x] [y 1], p[x] [y], p[x] [y+1], p[x+1] [y 1], p[x+1] [y], p[x+1] [y+1]); Metod B int p[800000];... for (n = 0; n < 800000; n++) { newpict [n] = dimpixel (p[n 801], p[n 800], p[n 799], p[n 1], p[n], p[n+1], p[n+7991], p[n+800], p[n+801]); Vilken lösning är bäst? Förklara och analysera noggrant och jämför de två lösningarna, (5 p). Skriv kod i MIPS-assembler som motsvarar C-koden inne i Metod A, (5 p). Du behöver inte ta hänsyn till kanteffekter i någon av deluppgifterna. 2 (8)

Uppgift 4 Förklara noggrant vad som händer vid ett externt avbrott, från att den yttre händelsen kommer som en signal till ett av processorns ben, tills att avbrottet är hanterat och det avbrutna programmet fortsätter sin exekvering. Förklara vad som händer i så väl hårdvara som mjukvara, (5 p). Vilka register måste sparas i en avbrottsrutin? Varför? Förklara under vilka omständigheter det inte är nödvändigt att spara vissa register, (5 p). Uppgift 5 En djupt assemblerintresserad teknolog har skrivit följande programsnutt i MIPS-assembler: ins: beq t0, t1, quickexit... start: t0, ins(zero) # ladda instruktionen srl t0, t0, 16 # skifta höger addi t0, t0, 1 # öka med 1 och rätta till registret sll t0, t0, 16 # skifta tillbaks t0, ins(zero) # instruktionen fixad Vad tror du teknologen ville åstadkomma med koden som börjar vid labeln start? Förklara så kort och klart som möjligt (max 15 ord) vad han ville göra, (4 p). Koden fungerar dock inte korrekt. Skriv om den så att det blir rätt, (6 p). Lycka till! 3 (8)

Lösning uppgift 1 A) Input: Knappar för tidsinställning (3st) Knappar för effektinställning (3st) Startknapp Avkännare för lucka Output: Dioder för vald effekt (3st) Diod för startknappen LCD-skärm Motor till plattan Mikrovågsgenerator Fläkt Ljudgenerator Avbrott: Klocka Avkännare för lucka 4 (8)

B) Systemet måste ha stöd för hårdvaruavbrott. Systemet bör lämpligen ha en huvudrutin som cykliskt läser av knapparna för effekt, tid och start. Om en annan effekt har valts ska effektinställningen ändras samt motsvarande diod tändas. Dessutom måste man släcka den diod som tidigare varit tänd. Om någon av knapparna för tidsinställning har tryckts in ska tidsinställningen samt LCD-skärmen uppdateras. Då startknappen trycks kontrollerar man att luckan är stängd samt att tiden är inställd (effekten antas alltid ha ett värde). Om allt är OK tänds startdioden. Därefter aktiveras avbrotten för klockan samt luckan. Huvudtråden fortsätter sedan med att starta mikrovågsgeneratorn, fläkten och motorn till plattan. När allt är startat loopar huvudtråden tills det att den kvarvarande tiden är 0. Vid varje iteration jämförs den kvarvarande tiden med tiden från förra iterationen. Har tiden ändrats ska LCD-skärmen uppdateras. När loopen väl bryts stänger man av avbrott, mikrovågsgeneratorn, fläkten och motorn till plattan. Därefter släcks startdioden. En signal skickas nu till ljudgeneratorn och därefter återgår huvudrutinen till start. För avbrottshanteringen gäller att den först måste kontrollera vilken typ av avbrott det är. Kommer avbrottet från klockan ska en räknare inkrementeras med 1. Därefter kontrollerar man om räknaren har nått värdet 6000. Om så är fallet ska den kvarvarande tiden minskas med 1 (minut). Kommer avbrottet från luckan, dvs. luckan har öppnats, så ska man hoppa till en annan rutin som stänger av avbrott, mikrovågsgeneratorn, fläkten, motorn till plattan samt startdioden. Den nya rutinen kontrollerar därefter cykliskt knapparna för tidsinställning och effekt samt luckan. Om en ny effekt har valts ska dioderna samt effektinställningen ändras. Om någon av tidsknapparna (+1 och -1) trycks in ska tidsinställningen samt LCD-skärmen uppdateras. Om reset-knappen trycks in ska tiden nollställas varpå man hoppar till start. Om luckan stängs kontrollerar man att tiden inte har nollställts. Är den kvarvarande tiden större än 0 aktiverar man åter avbrott samt startar mikrovågsgeneratorn, fläkten och motorn till plattan. Därefter tänder man startdioden och hoppar tillbaka till huvudrutinen. Skulle användaren ha minskat ner tiden till noll hoppar man instället till start. Uppgift 2 Positiva heltal 3 00000000000000000000000000000011-7 Går inte att skriva som ett positivt heltal 19 00000000000000000000000000010011 Tvåkomplement 3 00000000000000000000000000000011-7 11111111111111111111111111111001 19 00000000000000000000000000010011 Flyttal 3 0 10000000 10000000000000000000000-7 1 10000001 11000000000000000000000 19 0 10000011 00110000000000000000000 5 (8)

Uppgift 3 3.a 3.b A bäst, med motivering att den är enklare att läsa för människor ger max 2.5p. B bäst, omotiverat ger max 1p. B bäst, med motivering att den innehåller två for-loopar el. dyl. ger max 3.5p. B bäst, med bra motivering, som framhäver problemet med tyngre index-beräkningar i A ger max 5p. Innan man skriver någon kod, måste man fastslå hur matriser ska representeras i minnet. Ett förslag (som använts här) är att en 3x4 matris med word-element och början på adress 0 har sina element på adresser enl. tabellen nedan (talen i elementen motsvarar elementens adresser). 0 16 32 4 20 36 8 24 40 12 28 44.data pict:.space 3200000 #matriserna finns i minnet newpict:.space 3200000.text.globl metoda # Här har vi valt att skriva metoda....ent metoda #... som en subrutin.... metoda: #... Detta är dock inget krav....set reorder la t6, pict # adress till pict la t7, newpict # adress till newpict addi t0, zero, -1 # initiera x-räknare addi t2, zero, 1000 # xmax addi t3, zero, 800 # ymax xloop: yloop: addi t0, t0, 1 # inkrementera x-räknare bge t0, t2, done # traverserat i x-led? addi t1, zero, -1 # initiera y-räknare addi t1, t1, 1 # inkrementera y-räknare bge t1, t3, xloop # travrserat i y-led? mulo t4, t0, t3 # 800*x-räknare add t4, t4, t1 # offset från matrisens början sll t4, t4, 2 # 1 word == 4byte add t4, t4, t6 # adress till p[x][y] #observera att vi bortser från randeffekter! a0, -3204(t4) # p[x-1][y-1] ((-800)+(-1))*4 a1, -3200(t4) # p[x-1][y] 6 (8)

a2, -3196(t4) # p[x-1][y+1] a3, -4(t4) # p[x][y-1] subu sp, sp, 56 # aktiveringsblock t5, 0(t4) # p[x][y] t5, 16(sp) # t5, 4(t4) # p[x][y+1] t5, 12(sp) # t5, 3196(t4) # p[x+1][y-1] t5, 8(sp) # t5, 3200(t4) # p[x+1][y] t5, 4(sp) # t5, 3204(t4) # p[x+1][y+1] t5, 0(sp) # t0, 20(sp) # spara på stacken enl. konv.... t1, 24(sp) #... (behövs ej om vi använt s0-s7... t2, 28(sp) #... istället för t0-t7 ovan) t3, 32(sp) t4, 36(sp) t5, 40(sp) t6, 44(sp) t7, 48(sp) jal dimpixel # subrutinanrop t0, 20(sp) # Återställ t0-t7 från stacken t1, 24(sp) t2, 28(sp) t3, 32(sp) t4, 36(sp) t5, 40(sp) t6, 44(sp) t7, 48(sp) addu sp, sp, 56 # Återställ stackpekaren done:.end subu t4, t4, t6 #adressoffset från matrisens början add t4, t4, t7 # här ska resultatet sparas v0, 0(t4) # spara resultatet b yloop metoda Uppgift 4 a) MIPS-processorn har sex avbrottsingångar som är dedikerade för just avbrott ( int0,int1.. int5). Deras enda uppgift är att ligga och vänt på ett avbrott. När en spänning (~5V) kommer på något av dessa ben så vet processorn att ett avbrott har genererats. När detta sker stoppas all pågående exekvering. Det första som händer nu är att processorn tittar i STATUS-registret för att se om avbrott ens är tillåtet. Om dem är tillåtna kontrollerar den om just det avbrottet är tillåtet. Då avbrottet inte skulle vara tillåtet så läggs det i en avbrottskö som är sorterad i prioritetsordning för att bli omhändertaget senare. Nu stänger man av avbrott genom att sätta en bit i STATUS-registret och sätter processorn i ett så kallat privilegierat systemtillstånd. Efter detta så uppdateras CAUSE-registret med information om avbrottet. Nu sätts EPC-registret till värdet av PC, detta för att processorn ska kunna hoppa tillbaka till där den avbröts. Nu när PC är undansparat så sätts den till en fördefinierad adress (0x80000080) och börjar exekvera där. Här finns ofta endast ett hopp till den avbrottsrutin som motsvarar det avbrottet som finns beskrivet i CAUSE. När hoppet till korrekt 7 (8)

avbrottsrutin skett så sparas alla register (inklusive specialregister) undan. De enda som utelämnas är k0,k1 och zero. Nu kan rutinen göra det den ska och efter det återställa registerna. Avbrottet kvitteras och avbrottskön kontrolleras efter fler avbrott. När allt är färdigt så sätts PC till EPC och man hoppar tillbaka till rutinen där avbrottet inträffade och kan fortsätta exekvera. b) I en avbrottsrutin måste alla register (inklusive specialregister) sparas. Anledningen till att man måste spara alla register är att det är ytterst viktigt att registerna kan återställas till precis det dom var innan avbrottet. Programmet kan ju omöjligen veta när ett avbrott kommer och räknar därför med att samtliga register är oförändrade medan det körs. Dock gäller ju givetvis att om man inte använder ett register behöver det inte sparas. Så om man har skrivit en rutin eller ett avbrott själv så att man vet precis vilka register som används så räcker det ju att man sparar dem. De enda som inte behöver sparas är k0,k1 och zero. Detta eftersom k0, k1 är till för just avbrott och får ändras fritt där och zero är alltid noll. Lösningssvar 5a Teknologen vill modifiera instruktionen beq t0, t1, quickexit vid labeln ins så att den blir beq t0, t2, quickexit Lösningssvar 5b Vid shiftoperationen försvinner konstantfältet i instruktionen då de 16 minst signifikanta bitarna shiftas ut och nollor skiftas in från höger. Man kan tänka sig olika lösningar på det här problemet. Utgå från att syntetiska instruktioner är tillåtna. En enkel metod för att addera 1 till rt fältet. (snyggast enligt mig, använder dock syntetiska instruktioner) en annan: t0, ins(zero) add t0, t0, 0x10000 t0, ins(zero) t0, ins(zero) ror t0, t0, 16 addi t0, t0, 1 rol t0, t0, 16 to, ins(zero) 8 (8)