Datorsystem

Datorsystem
Laboration 2: Minnesmappade bussar
Senast uppdaterad: 14 oktober 2012
Version 1.2
Student:
L¨arare:
Underskrift:
Underskrift:
Datum:
Datorsystem
Laboration 2
1
Inneh˚
all
1 Inledning
1.1 Introduktion . . . . . . . . . . . . .
1.2 Labbens syfte . . . . . . . . . . . .
1.3 Innan ni b¨orjar arbeta med labben
1.4 Innan ni kommer till labbpasset ska
2 F¨
orberedelseuppgifter
2.1 F¨orberedelseuppgifter
2.2 Programstruktur . .
2.3 Makron f¨or stacken .
2.4 Subrutiner . . . . . .
. . . .
. . . .
. . . .
ni ha:
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2
2
2
2
2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
3
3
4
4
3 Labbuppgifter
3.1 Kommunikation o¨ver JTAG . . . .
3.1.1 Saker att t¨anka p˚
a . . . . .
3.2 Kommunikation ¨over serieporten . .
3.3 En mindre ¨andring av programmet
3.4 N¨ar labben ¨ar klar . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
5
5
6
6
6
online
. . . .
. . . .
. . . .
.
.
.
.
.
.
.
.
.
.
.
.
Datorsystem
1
Laboration 2
2
Inledning
1.1
Introduktion
I ett datorsystem beh¨over processorn kommunicera med prim¨arminnet, systemets ¨ovriga
I/O-enheter och andra datorsystem. I stort sett alla datorsystem anv¨ander bussar f¨or
kommunikation, d¨ar flera av datorns enheter ¨ar inkopplade till samma buss. N¨ar man
programmerar ett Altera-kort kan man som programmerare komma˚
at dessa bussar genom
att skriva till en minnesadress som ¨ar associerad med den buss man vill anv¨anda. I den
h¨ar labben ska vi skriva ett litet program som kom l˚
ater tv˚
a DE2-kort kommunicera o¨ver
serieporten.
Efter att ni har klarat av den h¨ar labben ska ni ha en st¨orre f¨orst˚
aelse f¨or hur kommunikation ¨over minnesmappade bussar fungerar i ett datorsystem.
1.2
Labbens syfte
1. Du ska ha f˚
att praktisk erfarenhet av att programmera mot minnesmappade bussar.
2. Du ska ha f˚
att f¨orst˚
aelse f¨or hur bussar anv¨ands i ett datorsystem.
1.3
Innan ni b¨
orjar arbeta med labben
L¨as f¨oljande delar i kursboken:
• Sektion 4.5 och stycket Memory-Mapped I/O p˚
a sidan 377.
L¨as a¨ven f¨oljande manualer fr˚
an Altera:
• DE2 Media Computer, sektion 2.4 och 2.5
1
• Nios II Processor Reference Handbook (anv¨and vid behov)
1.4
2
Innan ni kommer till labbpasset ska ni ha:
• L¨ast igenom hela detta lab-PM
• L¨ost alla f¨orberedelseuppgifter
• L¨ast igenom de rekommenderade delarna ur kursboken.
• L¨ast igenom de rekommenderade delarna ur DE2-manualen.
1
2
http://people.dsv.su.se/~ahn/da-VT12/DE2_MediaComp_manual.pdf
http://people.dsv.su.se/~ahn/da-VT12/niosii_ref.pdf
Datorsystem
2
Laboration 2
3
Fo
¨rberedelseuppgifter
2.1
F¨
orberedelseuppgifter online
Innan labbpasset i datorsal p˚
ab¨orjas ska f¨orberedelseuppgifterna som finns p˚
a kurshemsidan vara l¨osta med godk¨ant resultat. Som godk¨ant resultat r¨aknas alla r¨att.
Det finns dock delar av laborationsuppgifterna som b¨or t¨ankas igenom i f¨orv¨ag,s˚
a till
den h¨ar laborationen finns f¨orberedelseuppgifter som inte ska l¨osas p˚
a kurshemsidan.
2.2
Programstruktur
Koden nedan inneh˚
aller en struktur f¨or den kod som ni ska skriva under laborationen.
Tv˚
a anrop finns redan i den givna strukturen; b˚
ade READ JTAG och READ SERIAL
anropas i huvudloopen. Observera att anropet p˚
a READ SERIAL a¨r utkommenterat
eftersom serieporten inte kommer anv¨andas f¨orr¨an i del 3.2 av laborationsuppgifterna.
• G˚
a igenom kodstrukturen nedan och t¨ank igenom hur subrutinerna b¨or implementeras for att fungera enligt programbeskrivningarna som finns i sektion 3.
. text
. global
start
start :
# Code t o s e t up r e g i s t e r s with r e l e v a n t a d r e s s e s t o t h e I /O−u n i t s
MAIN LOOP :
call
#c a l l
br
READ JTAG
READ SERIAL
MAIN LOOP
READ JTAG:
# Read data from t h e JTAG p o r t
# ...
ret
WRITE JTAG :
# Write data t o t h e JTAG p o r t
# ...
ret
READ SERIAL :
# Read data from t h e s e r i a l p o r t
# ...
ret
WRITE SERIAL :
# Write data t o t h e s e r i a l p o r t
# ...
ret
. end
Listing 1: Programstruktur f¨or laboration 2
Datorsystem
2.3
Laboration 2
4
Makron fo
¨r stacken
N¨ar man ger bort kontrollen ¨over exekveringen till en annan subrutin beh¨over man ofta
skydda vissa register mot f¨or¨andringar. Registrena r8 till r15 a¨r caller-saved, vilket betyder
att den som anropar en subrutin ¨ar ansvarig f¨or att skydda den data som finns i i r815. Registrena r16 till r23 ¨ar callee-saved, vilket betyder att den anropade subrutinen ¨ar
ansvarig f¨or att antingen inte ¨andra v¨ardena i r16-r23 eller f¨orst spara undan inneh˚
allet
i dem och sedan ˚
aterst¨alla innan man returnerar.
Det enklaste s¨attet att spara inneh˚
allet i ett register ¨ar att kopiera inneh˚
allet till ett
annat register, men det g˚
ar snabbt ˚
at v¨aldigt m˚
anga register bara f¨or att spara inneh˚
allet
i andra register. Ett b¨attre s¨att ¨ar att ist¨allet anv¨anda stacken genom att pusha dit det
eller de register man vill spara och sedan poppa tillbaka dem n¨ar den anropade subrutinen
¨ar klar.
Stacken anv¨ander man enklast genom att skapa ett makro f¨or att l¨agga till data ¨overst
p˚
a stacken och ett makro for att h¨amta ut det som ligger p˚
a toppen av stacken. F¨or att
skapa ett makro v¨aljer man ett namn, eventuella parametrar och anger sedan de instruktioner som bygger upp makrot. P˚
a s˚
a vis kan man sedan anv¨anda flera instruktioner
genom att bara ange makronamnet.
Nedan finns tv˚
a makron for anv¨andning av stacken. PUSH l¨agger inneh˚
allet i ett
register p˚
a stacken och POP h¨amtar informationen ¨overst i stacken och l¨agger i ett
register. L¨agg in makrona i programmet under labben och anv¨and dem vid anv¨andning
av stacken.
. macro PUSH r e g
s u b i sp , sp , 4
stw \ reg , 0 ( sp )
. endm
. macro POP r e g
ldw \ reg , 0 ( sp )
a d d i sp , sp , 4
. endm
• Fundera p˚
a hur makrona fungerar. Varf¨or ¨okas och minskas stackpekaren med 4?
• Vi anv¨ander namnet sp f¨or stackpekaren, men vilket nummer har registret egentligen?
2.4
Subrutiner
Viktigt att t¨anka p˚
a n¨ar man anropar en subrutin fr˚
an en annan subrutin ¨ar att man
m˚
aste spara undan ˚
aterhoppsadressen innan man anropar n¨asta subrutin. Om man inte
g¨or det finns inte l¨angre r¨att ˚
aterhoppsadress n¨ar man ska returnera. Enklaste s¨attet
att g¨ora detta p˚
a ¨ar att ta ett ledigt register och kopiera inneh˚
allet i r31 till det innan
man anropar den n¨astlade subrutinen. N¨ar den n¨astlade subrutinen returnerar kan man
˚
aterst¨alla ˚
aterhoppsadressen genom att kopiera tillbaka den undansparade adressen till
r31.
Exempel p˚
a programfl¨ode d¨ar man beh¨over spara undan ˚
aterhoppsadressen:
Datorsystem
MAIN LOOP :
call
br
Laboration 2
5
READ SOME DATA
MAIN LOOP
READ SOME DATA:
# Read some data , not i n t e r e s t i n g f o r t h i s example
push
call
pop
r31
PUT SOME DATA ON LEDS
r31
# Protect the return address
# Some o t h e r s u b r o u t i n e
# Restore the return address
ret
F¨or att kunna anv¨anda stacken beh¨over man tala om f¨or kortet var den finns (eftersom
man sj¨alv kan st¨alla in det). Det g¨or man genom att l¨agga in r¨att minnesadress i register
sp: 0x007FFFC.
• I sektion 2.2 ombads ni t¨anka igenom hur ert program ska konstrueras. Finns det
ett behov av att anv¨anda stacken f¨or att spara undan ˚
aterhoppsadressen?
3
Labbuppgifter
3.1
Kommunikation o
¨ver JTAG
I labbens f¨orsta del ska ni f˚
a kommunikationen mellan datorn som k¨or Monitor Program
och Altera-kortet att fungera. Utg˚
a fr˚
an den struktur ni f˚
att i kodexempel 1 och som ni
f¨orberett i uppgift 2.2. Skriv ett program i Assembly som l¨aser fr˚
an JTAG-porten och
sedan skickar tillbaka samma data till JTAG-porten.
N¨ar programmet fungerar som det ska kommer de tecken som skrivs in i terminalen
i Monitor Program att synas i terminalen. Om man inte skickar tillbaka tecknen fr˚
an
terminalen kommer inget att synas i terminalf¨onstret.
Att man inte ser n˚
agra tecken i terminalen n¨
ar man skriver dem ¨
ar inte
fel, det betyder bara att ert program inte fungerar ordentligt ¨
an!
3.1.1
Saker att t¨
anka p˚
a
• L¨agg projektet p˚
a den lokala disken D: ist¨allet f¨or filservern Goofy.
• Anv¨and DE2 Media Computer n¨ar projektet skapas.
• Ingen kod finns given f¨or denna laboration, s˚
a gl¨om inte .text och liknande delar.
Visa era resultat f¨or en labbassistent innan ni g˚
ar vidare.
Klart:
Datorsystem
3.2
Laboration 2
6
Kommunikation o
¨ver serieporten
N¨ar programmet kan skriva ut tecken i terminalen via JTAG g˚
ar n¨asta del av labben ut
p˚
a att ocks˚
a skicka de tecken som skrivs in i terminalen till serieporten s˚
a att ett annat
DE2-kort kan ta emot de tecken som skickas. Programmet ska ocks˚
a lyssna p˚
a serieporten
efter data som skickas till kortet och sedan visa mottaget data i terminalen.
Bygg vidare p˚
a det program ni skrev i uppgift 3.1 och l¨agg till funktionalitet f¨or
att l¨asa och skriva till serieporten. Varje g˚
ang ett tecken kommer in till JTAG ska ni
inte bara skicka tillbaka det till terminalen utan ocks˚
a skicka det till serieporten. Ut¨over
att lyssna efter data p˚
a JTAG-porten m˚
aste programmet ocks˚
a lyssna efter data p˚
a
serieporten. Data som kommer in p˚
a serieporten ska skickas ocks˚
a synas i terminalen
f¨or det mottagande kortet. P˚
a s˚
as vis kommer ni att skriva ett litet chattprogram f¨or
kommunikation mellan tv˚
a DE2-kort.
Meddela en labbassistent att ni ¨ar klara, ni kommer d˚
a att bli tilldelade en annan
grupp som ocks˚
a ¨ar klar med JTAG-delen. Om gruppen inte sitter inom l¨ampligt avst˚
and
f˚
ar ni flytta ihop och arbeta vid en dator. Det g˚
ar att koppla tv˚
a DE2-kort till en dator
och anv¨anda tv˚
a instanser av Monitor Program f¨or att styra varsitt kort. Observera att
det d˚
a beh¨ovs tv˚
a projekt, ett f¨or varje kort som ska styras.
Visa era resultat f¨or en labbassistent innan ni g˚
ar vidare.
Klart:
3.3
En mindre ¨
andring av programmet
N¨ar ni har tv˚
a kort som kan chatta via serieporten kommer ni f˚
a en mindre extrauppgift
att g¨ora.
Visa era resultat f¨or en labbassistent innan ni g˚
ar vidare.
Klart:
3.4
N¨
ar labben ¨
ar klar
• Gl¨om inte att rensa undan projektet fr˚
an D: s˚
a att inte n˚
agra andra studenter kan
r˚
aka ta fel projekt.
• Spara undan ert projekt i Goofy eller skicka assemblerfilerna till er mail om ni vill
ha koden kvar.
• Packa ihop och l¨amna tillbaka labbkortet.
Klart: