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:
© Copyright 2024