2G1502 Datorteknik allmän kurs Föreläsning 4 Programutveckling Något om bussar
Litteraturhänvisningar Kursboken avsnitt 1.5 avsnitt 4.4, 4.6 delar av avsnitt 5.2 avsnitt
Steg i programutveckling ● Editering av program i C-kod (liknande) ● Kompilering av C-kod till Assemlerkod ● Editering av programkod i assembler ● Assemblering av Ass.kod till Objekt-modul ● Länkning:Objekt-modul(er) -> Laddmodul ● Laddning av Laddmodul till Minne ● Exekvering (körning) av program
Editering Exempel på C-kod #include #define START_TIME 0x5959 /* makrodefinition */ int current_time = START_TIME; /* global initierad variabel */ int a, b, c; /* globala oinitierade variabler */ int sum (int par1, int par2) /* functions definition */ { int tmp; /* lokal variabel */ tmp = par1 + par2; return (tmp); } main () { int talA, talB, talC; /* lokala variabler i main */ /* själva programkoden i huvudprogrammmet /* talC = sum( talA, talB ) /* anrop av function */ }
Editering Redigering av C-kod C-program Text-fil fil.c, kan redigeras med en editor
Kompilering; översätter C-kod till Assembler-kod C-program Text-fil Ass-program Text-fil kompilering / översättning fil.c, kan redigeras med en editor fil.asm, kan redigeras med en editor (fil.s) Kommando: icomp fil.c
Editering Exempel på Assembler-kod.include "nios.s".data TIME:.word0x5959.text.globalmain.globalputtime, tick, delay main: start:movia%o0, TIME bsrputtime nop movia%o0, TIME bsrtick nop movia%o0, 1000 bsrdelay nop brstart nop puttime:lret nop tick:lret nop delay:lret nop.end
Assemblering; översätter Ass-kod till objekt-modul Ass-program Text-fil Object-modul ”Text-fil” Assemblering / översättning fil.asm fil.obj, relokerbar ? Kommando: iasm fil.asm
Exempel på objekt-modul fil.obj Detta är en binär fil. Den är obegriplig om man öppnar den med en vanlig editor. Information i filen:.textVarje instruktion kodas i maskinkod, det vill säga binär kod Varje symbolisk adress ges ett värde. Symboliska namn som ej kan ges värde lokalt bokförs i en symboltabell som används och kompletteras vid länkningen..datainformation om vilka variabelplatser som ska reserveras för initierade variabler krävs värdet.bssför oinitierade variabler räcker det att ange namn och storlek Påminnelse om.global som stod i assembler-filen: De symboler som deklararerats som global vet man ska användas vid länkningen, och man förbereder arbetet genom att placera dessa i symboltabellen
Länkning; ”knådar” Object-modul(er) till Laddmodul Object-modul ”Text-fil” Ladd-modul ”Text-fil” Länkning fil.obj fil.load Kommando: ilink fil.obj fil.load innehåller binär programkod som kan kopieras till minnet och köras fil.obj innehåller binär programkod men alla adresser finns inte med fil.exe
Länkning av Nios-program ger extrafil: fil.dump – en listning Object-modul ”Text-fil” Ladd-modul ”Text-fil” fil.obj fil.load Kommando: ilink fil.obj Object-dump Text-fil Extra fil fil.dump
Exempel på fil.dump F4OH.load: file format elf32-nios Disassembly of section.text: : 40000:01 98 pfx %hi(0x20) 40002:88 36 movi %o0,0x :00 98 pfx %hi(0x0) 40006:88 6c movhi %o0,0x :0f 88 bsr a:00 30 nop 4000c:01 98 pfx %hi(0x20) 4000e:88 36 movi %o0,0x :00 98 pfx %hi(0x0) 40012:88 6c movhi %o0,0x :0b 88 bsr 4002c 40016:00 30 nop 40018:1f 98 pfx %hi(0x3e0) 4001a:08 35 movi %o0,0x8 4001c:00 98 pfx %hi(0x0) 4001e:08 6c movhi %o0,0x :07 88 bsr :00 30 nop 40024:ed 87 br :00 30 nop (forts.) : 40028:cf 7f lret 4002a:00 30 nop c : 4002c:cf 7f lret 4002e:00 30 nop : 40030:cf 7f lret 40032:00 30 nop Disassembly of section.data: : 40034:59 59 ld %i1,[%o2]...
Länkning av Nios-program ger extrafil: fil.srec, sänds till labbdator Object-modul ”Text-fil” Ladd-modul ”Text-fil” fil.obj fil.load Kommando: ilink fil.obj Object-dump Text-fil En till Extra fil fil.srec srec-dump Text-fil fil.dump
Fil i srec-format lämplig att dumpa via serieport till måldator. Exempel på fil i srec-format S00C F482E S C0F C0B4A S F C ED870030CF7F64 S20E04002A0030CF7F0030CF7F S D S F7
Exempel på srec-format taget från fil.srec S00C F482E S C0F C0B4A S F C ED870030CF7F64 S20E04002A0030CF7F0030CF7F S D S F7 5 fält Record Type: S0, S2, S8 Record Length: 2 char (1 byte) tells number of char on line excluding type and length Address:2-, 3-, or 4-byte spec of address (type tells size of address) Data: Checksum: 8-bit field: 1’s complement of sum of all except Type S0: Header S2: data with 3-byte address S8: Termination of S2-records Checksumman F7 kan fås ur inversen av =08 inv blir F =
Länkning av Nios-program ger extrafil: namelist, fil.nm Object-modul ”Text-fil” Ladd-modul ”Text-fil” fil.obj fil.load Kommando: ilink fil.obj Object-dump Text-fil En till Extra fil fil.srec srec-dump Text-fil fil.dump fil.nm Sym-table Text-fil
Exempel på fil.nm (endast vissa rader) … A na_ext_ram A nasys_data_mem A nasys_program_mem T main t start T puttime c T tick T delay … D _data d TIME...
Kompilering+länkning av Nios-prog med flagga –d ger extrafil: fil.gdb Object-modul ”Text-fil” Ladd-modul ”Text-fil” fil.obj fil.load Kommando: ilink -d fil.obj Object-dump Text-fil En till Extra fil fil.srec srec-dump Text-fil fil.dumpfil.nm Sym-table Text-fil Debugger Script-fil fil.gdb
Länkning - kombinerar flera Object-moduler till Laddmodul Ladd-modul ”Text-fil” Länkning fil.load, vilket namn? fil1.load Object-modul ”Text-fil” fil1.obj Object-modul ”Text-fil” fil2.obj Object-modul ”Text-fil” fil3.obj Object-modul ”Text-fil” filn.obj... Kommando: ilink fil1.obj fil2.obj fil3.obj … filn.obj
in-länkning av biblioteksfiler Ladd-modul ”Text-fil” Länkning fil.load, vilket namn? fil1.load eller filn.load eller ??? Object-modul ”Text-fil” fil1.obj Object-modul ”Text-fil” fil2.obj Object-modul ”Text-fil” lib1.obj Object-modul ”Text-fil” lib2.obj... Biblioteksfiler Kommando: ilink fil1.obj … filn.obj, lib1.obj, lib2.obj
Ladd-modul ”Text-fil” Länkning fil1.load Object-modul ”Text-fil” fil1.obj Object-modul ”Text-fil” fil2.obj Object-modul ”Text-fil” fil3.obj Object-modul ”Text-fil” filn.obj... Ladd-modul ”fil.srec” fil1.srec
Laddning Laddmodul laddas till minnet Ladd-modul ”fil.srec” på PC Minne i labbdator Laddning via serieport fil.srec Var i minnet ? Kommando: iloadrun fil.srec
Minne Körning / Exekvering Programmet körs av CPU:n Körning / Exekvering Var i minnet ? Kommando: iloadrun fil.srec PC +2
Minne Debugging Programmet körs av CPU:n Debugging Var i minnet ? Kommandon: ? PC +2 Starta program på viss adress Stoppa program Stegvis exekvering en instruktion i taget Undersöka innehåll i register och minne (och variabler) Brytpunkter; införa - ta bort RESET medför nollställ PC (och sudda RWM !!!) CLEAR medför nollställ PC (RWM suddas ej)
Fil-administration ● Alternativ 1: Många filer som separatkompileras och länkas ihop till en laddmodul ● Alternativ 2: Många filer som kombineras med ”include”-satser till En enda jättefil som kompileras
C-program Text-fil Ass-program Text-fil Object-modul ”Text-fil” C-program Text-fil Ass-program Text-fil Object-modul ”Text-fil” Ladd-modul ”Text-fil” C-program Text-fil Ass-program Text-fil Object-modul ”Text-fil” C-program Text-fil Ass-program Text-fil Object-modul ”Text-fil” Fördel? Dela upp arbetet i delar Snabb (del-) kompilering Nackdel? Långa kommandon Separatkompilering
C-program Text-fil Ass-program Text-fil Object-modul ”Text-fil” C-program Text-fil Ladd-modul ”Text-fil” C-program Text-fil C-program Text-fil ”include” Fördel? Dela upp arbetet i delar Nackdel? Onödigt arbete (tid) vid kompilering
Ass-program Text-fil Object-modul ”Text-fil” Ladd-modul ”Text-fil” ”include” Ass-program Text-fil Ass-program Text-fil Ass-program Text-fil
JAVA-program Text-fil Ass-program Text-fil Object-modul ”Text-fil” C-program Text-fil Ass-program Text-fil Object-modul ”Text-fil” Ladd-modul ”Text-fil” Ass-program Text-fil Object-modul ”Text-fil” Pascal-program Text-fil Ass-program Text-fil Object-modul ”Text-fil”
Blandad kod C-kod och Assembler-kod /* Function File */ int sum (int x, int y) external { return x + y; } /* Main File */ int a, b, res; int sum (int a, int b); external; /* mera kod... */ res = sum (a,b); ; huvudprogram a:.word 0 b:.word 0 res:.word 0 ….global main.global sum main: copy reg0, a copy reg1, b bsr sum nop copy res, reg ; subroutine.global sum … sum: add reg0, reg1 return
res=sum(a,b) Ass-program Text-fil Object-modul ”Text-fil” int sum(x,y) Ass-program Text-fil Object-modul ”Text-fil” Ladd-modul ”Text-fil” huvudprogram function Länkning Assemblering Kompilering
res=sum(a,b) Ass-program Text-fil Object-modul ”Text-fil” sum: save... Object-modul ”Text-fil” Ladd-modul ”Text-fil” huvudprogram subrutin Länkning Assemblering Kompilering
bsr sum nop Object-modul ”Text-fil” int sum(x,y) Ass-program Text-fil Object-modul ”Text-fil” Ladd-modul ”Text-fil” huvudprogram function Länkning Assemblering Kompilering
bsr sum nop Object-modul ”Text-fil” Object-modul ”Text-fil” Ladd-modul ”Text-fil” huvudprogram Länkning Assemblering sum: save... subrutin
Memory Map - Minnesbild ● Adressrymd ● Hur stor är adressrymden ● Vilka adresser används och till vad ● RWM, ROM, IO etc
RWM-minne (RAM-minnet) ● Hur stort (fysiskt) RWM-minne finns det ● På vilka adresser finns RWM ● Var finns det egna programmet ● Var finns de egna data ● Var finns den egna stacken ● Finns det något mer i RWM, och vad
Kartbild av minnet adress 0 adress 2 n RWM data code stack 0x x7FFFF PC +2 SP Vad finns här ?
Kartbild av minnet ● AdressMEM / IO ● 0 - 3FFboot_monitor_rom ● Fuart_0 ● FFFFext_ram, 256 kByte All information finns i nios.s
Assembler-direktiv ●.include ”fil.ext”;infogar fil.ext ●.data;nu kommer datareservationer ●.text;programkod ●.global main;main blir synlig globalt ●.align 2;nästa adress ska vara delbar med 2 ●.align 4;nästa adress ska vara delbar med 4 ● B:.string ”hej 17”;här lagras ASCII ● TAL:.byte 0x01;reservera 1 byte och lägg värde 0x01 i den ●.equ VecBase (0x0007FF00);definiera symbolnamn
Föreläsning 4 Innehåll, rubriker del 2 ● Bus Data Transfer, Read och Write ● Memory Read, Memory Write ● Adressering, adressavkodare ● I/O-enheter ● Parallellport ● Serieport
Viktiga delar i en dator CPU MEM BUS I/O
Viktiga delar vid Bus Data Transfer MASTER SLAVE BUS
Bus Data Transfer Memory Read ● Master – till exempel CPU ● Slave – till exempel minnet ● Master levererar Adress ● Master levererar läsbegäran (Read Request) ● Slave levererar Data ● Slave levererar kvittens (Acknowledge)
Bus Data Transfer Memory Read Address Read Data Ack
Bus Data Transfer Memory Read Address Read Vad händer om Ack uteblir ? 1 2 Data Ack 3 4
Bus Data Transfer Memory Write ● Master – till exempel CPU ● Slave – till exempel minnet ● Master levererar Adress ● Master levererar Data ● Master ger skrivbegäran (Write Request) ● Slave levererar kvittens (Acknowledge)
Bus Data Transfer Memory Write Address Wr Data Ack Vad händer om Ack uteblir ?
Flera SLAVE fungerar bra – på olika adresser! MASTER BUS SLAVE
Flera minnen – på olika adresser! CPU MEM BUS MEM Adress dittenAdress datten ?? Adress-avkodare
Flera Slave – på olika adresser! CPU MEM BUS I/O Adress dittenAdress datten ?? Adress-avkodare
Flera Master fungerar – en Arbiter behövs för att välja mellan dem Master MEM BUS I/O Adress dittenAdress datten ?? Adress-avkodare Master Arbiter
Bussledningar ● Adressledningar – 8-64 stycken, för att kunna peka ut varje byte ● Dataledningar, – minst 8 bitar, upp till 128 bitar eller mer ● Kontrolledningar – Read + Write, eller RD/WR och DS – Ack, kan vara gemensam – Bus Request, Bus Grant – vid flera Masters ● Övrigt – jord, matningsspänning, Reset och liknande.
Bussledningar (forts.) Långsam Slave kan bromsa läsning/skrivning fördröj Acknowledge, eller inför speciell Hold-signal Tidövervakning, Time-Out om Acknowledge aldrig kommer Bus Error – ingen Acknowledge kom
Bussledningar (forts.) Om det finns fler än en Master krävs Bus Arbiter (bus-fördelare) Varje Slave måste ha adressavkodare så att högst en enhet svarar på request Referens av oanvänd adress medför... ... Time-Out eftersom ingen enhet ger Acknowledge
Två typer av adressering ● Memory Mapped ● Memory och I/O har olika adresser ● Samma kontroll- signaler för minne och I/O ● Vanliga Load och Store används för I/O ● I/O Mapped ● Memory och I/O kan ha samma adresser ● Olika kontroll-signaler för minne och I/O ● Speciella instruktioner används för I/O – IN R1,117 – OUT R2,118
Parallell-port ● Parallellport brukar ha en multipel av 8 signaler/anslutningar ● Signalriktning kan vara programmerbar separat för varje signal/anslutning ● Inport består normalt av grindar ● Utport består normalt av register ● Handskakningssignaler kan finnas
Parallell-port (forts.) Handskakningssignaler IBF - Input Buffer Full OBE - Outport Buffer Empty IBF och OBE är tillgängliga för program IBF och OBE är tillgängliga för hårdvara
Parallell-port (forts.) Handskakningssignaler IBF - Input Buffer Full OBE - Outport Buffer Empty Aktiv signal IBF (full inport) begäran om åtgärd, från omvärlden till CPU/program betyder: jag har nya indata till dig Aktiv signal OBE (tom utport) begäran om åtgärd, från omvärlden till CPU/program betyder: jag vill ha mera utdata från dig
Parallell-port (forts.) Handskakningssignaler IBF, Input Buffer Full IBF ettställs normalt då omgivningen levererar nya data till inporten IBF nollställs/kvitteras av program, t.ex. vid läsning av inport
Parallell-port (forts.) Handskakningssignaler OBE, Output Buffer Empty OBE ettställs normalt då omgivningen har tagit hand om utdata OBE nollställs/kvitteras av program, t.ex. vid skrivning av utport