11 August 2015IS1200 Datorteknik, föreläsning 41 IS1200 Datorteknik Föreläsning 4 Programutveckling, Intro till lab 1 Kursboken, kapitel 1, 4, 5 och 8
11 August 2015IS1200 Datorteknik, föreläsning 42 F1F2F3F4F5F7F8F9F10Ö2Ö1Ö3LAB-1Hemlab-1Ö4Ö7LAB-3Hemlab-2Ö8Hemlab-3Ö9TentamenÖ10 Assemblerkod 4 stegs pipeline Nios2time C-kod Nios2io Nios2int Cache-minnen CPU-scheduling IS1200 Datorteknik F6Ö5Ö6LAB-2
11 August 2015IS1200 Datorteknik, föreläsning 43 IS1200 Datorteknik Föreläsning 4, innehåll Programutveckling, allmänt Laboration 1: nios2time Programutveckling, denna kurs
11 August 2015IS1200 Datorteknik, föreläsning 44 Litteraturhänvisningar Kursboken avsnitt 1.5 avsnitt 4.5 och 4.6 avsnitt Exempelsamling del 3 NiosII-manual Lab-PM för laboration 1, nios2time
11 August 2015IS1200 Datorteknik, föreläsning 45 Viktiga delar i en dator CPU BUS I/OMEM program data
11 August 2015IS1200 Datorteknik, föreläsning 46 Programexekvering FETCH (update PC) (decode) EXECUTE
11 August 2015IS1200 Datorteknik, föreläsning 47 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 av Objekt-modul(er) -> Laddmodul Laddning av Laddmodul till Minne Exekvering (körning) av program Simulering av program Felsökning (debugging) av program
11 August 2015IS1200 Datorteknik, föreläsning 48 Editering Exempel på C-kod #include “minfil.c”/* inkludera filer */ #define START_TIME 0x5957 /* makrodefinition */ int current_time = START_TIME; /* global initierad variabel */ int a, b, c; /* globala oinitierade variabler */ int sum (int par1, int par2) /* function definition */ { int tmp; /* lokal variabel i sum */ tmp = par1 + par2; return (tmp); } main ()/* huvudprogram, main */ { int talA, talB, talC;/* lokala variabler i main */ /* själva programkoden i huvudprogrammmet */... talC = sum( talA, talB );/* anrop av function */... }
11 August 2015IS1200 Datorteknik, föreläsning 49 Laboration nios2time Utskrift av tid varje sekund 59:57 59:58 59:59 00:00 00:01.
11 August 2015IS1200 Datorteknik, föreläsning 410 Editering Exempel på C-kod, lab1-ide’ #include “minfil.c”/* inkludera fil */ #define START_TIME 0x5957 /* makrodefinition */ #define TRUE 1/* TRUE = 1 */ int current_time = START_TIME; /* global initierad variabel */ extern void puttime (int* time);/* underprogram, function, procedure, method */ extern void tick (int* time); extern void delay (int millisek); extern int hexasc (int hexval); main ()/* huvudprogram, main */ { while (TRUE)/* forever */ { puttime (¤t_time);/* skriv ut aktuell tid i fönster */ tick (¤t_time);/* uppdatera current_time */ delay (1000);/* vänta 1000 millisekunder */ }
11 August 2015IS1200 Datorteknik, föreläsning 411 Pekare och adress (så där i förbifarten) inta;/* reservera plats */ intb=17;/* och initiera*/ int* pek1;/* pekare till en int*/ int* pek2 = &b;/* initiera*/ /* &kalle utläses som ”adressen till kalle” */ a = *pek2; /* a tilldelas det värde som pek2 pekar på*/ /* avreferering – dereferencing*/
11 August 2015IS1200 Datorteknik, föreläsning 412 Editering Redigering av C-kod C-program Text-fil fil.c, kan redigeras med en editor
11 August 2015IS1200 Datorteknik, föreläsning 413 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.s kan redigeras med en editor Kommando: ”compile” fil.c (med debugger: ”compile -d” fil.c)
11 August 2015IS1200 Datorteknik, föreläsning 414 Editering Exempel på Assembler-kod.include”../minfil.s".data.align2# nästa adress delbar med 4 mytime:.word0x5957.text.globalmain# måste tas med (gemener) #.global behövs ej för puttime, tick, delay main:moviar4, mytime# ”main:” måste finnas med moviar16, puttime callrr16 moviar4, mytime calltick moviar4, 1000 calldelay brmain puttime:ret# tom subrutin tick:ret# tom subrutin delay:ret# tom subrutin.end# sluta översätt
11 August 2015IS1200 Datorteknik, föreläsning 415 Assemblering; översätter Ass-kod till objekt-modul Ass-program Text-fil Object-modul ”Text-fil” Assemblering / översättning fil.s fil.o (relokerbar ?) Kommando: ”assemble” fil.s (med debugger: ”assemble –d” fil.s)
11 August 2015IS1200 Datorteknik, föreläsning 416 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 att värdet finns lagrat.bssför oinitierade variabler räcker det att ange namn och storlek (Block Started by Symbol) 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
11 August 2015IS1200 Datorteknik, föreläsning 417 Länkning; sätter ihop Object-modul(er) till Laddmodul Object-modul ”Text-fil” Ladd-modul ”Text-fil” Länkning fil.o fil.elf fil.elf innehåller binär programkod som kan kopieras till minnet och köras (relokerbar?) fil.o innehåller binär programkod men alla adresser finns inte med Kommando: ”link” fil.o (med debugger: ”link -d” fil.o)
11 August 2015IS1200 Datorteknik, föreläsning 418 Länkning av Nios-program ger extrafil: fil.dump - en listning Object-modul ”Text-fil” Ladd-modul ”Text-fil” fil.o fil.elf Kommando: ”link” fil.o Object-dump Text-fil fil.objdump Man bör kunna få fram en extra fil fil.objdump
11 August 2015IS1200 Datorteknik, föreläsning 419 Exempel på Disassemble (endast vissa delar) 0x : movhi r4,128 0x : addi r4,r4, x c : movhi r8,128 0x : addi r8,r8,564 0x : callr r8 0x : movhi r4,128 0x c : addi r4,r4, x : call 0x x : movhi r4,0 0x : addi r4,r4,1000 0x c : call 0x80023c 0x : br 0x x : ret 0x : ret 0x c : ret 0x : 0x movia, r4, mytime 128 = 0b = 0x = = 0b = 0x3584 mytime =
11 August 2015IS1200 Datorteknik, föreläsning 420 Object-modul ”Text-fil” Ladd-modul ”Text-fil” fil.o fil.elf Kommando: ”link” fil.o Object-dump Text-fil Med extra flagga (-nm?) bör man kunna få fram en till extra fil fil.nm fil.objdump fil.nm Sym-table Text-fil Länkning av Nios-program ger extrafil: fil.nm - namelist
11 August 2015IS1200 Datorteknik, föreläsning 421 Exempel på fil.nm (endast vissa delar) … T main c t puttime t tick c t delay D _data d mytime
11 August 2015IS1200 Datorteknik, föreläsning 422 Länkning - kombinerar flera Object-moduler till Laddmodul Ladd-modul ”Text-fil” Länkning Object-modul ”Text-fil” fil1.o Object-modul ”Text-fil” fil2.o Object-modul ”Text-fil” fil3.o Object-modul ”Text-fil” filn.o... Kommando: ”link” fil1.o fil2.o fil3.o … filn.o fil.elf, vilket namn? fil1.elf (sista i kommandot som ska innehålla ”main:”)
11 August 2015IS1200 Datorteknik, föreläsning 423 in-länkning av biblioteksfiler Ladd-modul ”Text-fil” Länkning fil.elf, vilket namn? fil1.elf (sista i kommandot som ska innehålla ”main:”) Object-modul ”Text-fil” lib2.o Object-modul ”Text-fil” lib1.o Object-modul ”Text-fil” fil2.o Object-modul ”Text-fil” fil1.o... Biblioteksfiler Kommando: ”link” lib2.o, lib1.0,... fil2.o, fil1. o
11 August 2015IS1200 Datorteknik, föreläsning 424 Laddning Laddmodul laddas till minnet Ladd-modul ”fil.elf” Minne ”Load (and run/go)” fil.elf Var i minnet ? (nära 0x800000)
11 August 2015IS1200 Datorteknik, föreläsning 425 Minne Körning / Exekvering Programmet körs av CPU:n Körning / Exekvering Var i minnet ? Länkaren väljer Mus-kommando: Run As Nios II Hardware (utan debugger/simulator) PC +4
11 August 2015IS1200 Datorteknik, föreläsning 426 Minne Debugging Programmet körs av CPU:n Debugging Kommando:./fil.gdb PC +4 Önskemål: Starta program på vald adress (skriv till PC) Stoppa program Stegvis exekvering en instruktion i taget (S = Step Into) Exekvera en hel subrutin (Step Over) Undersöka innehåll i register och minne (och variabler) Brytpunkter; införa - ta bort Exekvera fram till nästa brytpunkt (Resume) Var i minnet ? Länkaren väljer
11 August 2015IS1200 Datorteknik, föreläsning 427 Fil-administration Alternativ 1: Många filer som kompileras separat och länkas ihop till en laddmodul Alternativ 2: Många filer som kombineras med ”include”-satser till En enda ”jättefil” som kompileras och länkas ihop till en laddmodul
11 August 2015IS1200 Datorteknik, föreläsning 428 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ördelar ? Dela upp arbetet i delar ! Snabb (del-) kompilering ! Nackdel ? Långt kommando vid länkning! Separatkompilering
11 August 2015IS1200 Datorteknik, föreläsning 429 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 ! Kort kommando vid länkning ! Nackdel ? Onödigt arbete (tid) vid kompilering !
11 August 2015IS1200 Datorteknik, föreläsning 430 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” Vår labmiljö ! Allt jobb ”döljs” bakom ”Run As...”
11 August 2015IS1200 Datorteknik, föreläsning 431 Vår labmiljö ! Programutveckling med NiosII EDS Embedded Design Suite HELT ANNORLUNDA
11 August 2015IS1200 Datorteknik, föreläsning 432 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” Separatkompilering med blandad kod
11 August 2015IS1200 Datorteknik, föreläsning 433 Blandad kod C-kod och Assembler-kod /* Function File */ int sum (int x, int y) /* ”public */ { return (x + y); } /* Main File */ int a, b, res extern int sum (int a, int b); … res = sum (a,b); # huvudprogram a:.word 0 b:.word 0 res:.word 0 ….global main.global sum main: copy reg4, a copy reg5, b call sum copy res, reg2 # subroutine.global sum … sum: add reg2, reg4, reg5 return
11 August 2015IS1200 Datorteknik, föreläsning 434 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
11 August 2015IS1200 Datorteknik, föreläsning 435 res=sum(a,b) Ass-program Text-fil Object-modul ”Text-fil” sum: push... Object-modul ”Text-fil” Ladd-modul ”Text-fil” huvudprogram subrutin Länkning Assemblering Kompilering
11 August 2015IS1200 Datorteknik, föreläsning 436 call sum 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
11 August 2015IS1200 Datorteknik, föreläsning 437 call sum... Object-modul ”Text-fil” Object-modul ”Text-fil” Ladd-modul ”Text-fil” huvudprogram Länkning Assemblering sum: push... subrutin
11 August 2015IS1200 Datorteknik, föreläsning 438 Memory Map - Minnesbild Adressrymd Hur stor är adressrymden Vilka adresser används och till vad RWM, ROM, IO etc
11 August 2015IS1200 Datorteknik, föreläsning 439 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
11 August 2015IS1200 Datorteknik, föreläsning 440 Nios-II: Kartbild av minnet Nya adresser ht 2007 ! adress 0 adress 2 n RWM data code stack 0x xFFFFFF PC +2 SP Vad finns här ?
11 August 2015IS1200 Datorteknik, föreläsning 441 Nios: Kartbild av minnet Hex-AdressMEM / IO 0 - 7FFboot_monitor_rom Fuart_ FFFFFFext_ram, 128 kByte ?
11 August 2015IS1200 Datorteknik, föreläsning 442 Assembler-direktiv, exempel.include ”fil.ext”# infogar fil.ext.data# nu kommer datareservationer.text# programkod.global main# main blir synlig globalt (”public”).align 3# nästa adress ska vara delbar med 2 3 B:.string ”hej 17”# lagra ASCII-sträng C:.ascii”tjoho”# lagra ASCII D:.asciz ”plusnul”# ASCII avslutad med NUL TAL:.byte 0x01# reservera 1 byte med värde 0x01.equ ExcBase,0x20020# def. symbol namn TIME:.word 0x5957# 32 bitar med värde KOLON:.byte ’:’#ascii för kolon lagras
11 August 2015IS1200 Datorteknik, föreläsning 443 IS1200 Datorteknik Laboration 1 Nios assembler
11 August 2015IS1200 Datorteknik, föreläsning 444 Mall för macro pseudo-instruction.macroCLR reg# case sensitive ! MOVI\reg, 0x0# not case sensitive !?.endm Effekten av detta är att man kan använda en ny instruktion, CLR rA, för att nollställa register rA Utmaning: Skriv ett macro för BTST dreg, sreg, index som gör BitTeST på en bit i register sreg dvs skriver 1 till dreg om utpekad bit är 1 eller skriver 0 till dreg om utpekad bit är 0 ”index” anger index för den bit som ska testas (0—31)
11 August 2015IS1200 Datorteknik, föreläsning 445 Var ska macro infogas? Definitionen av varje makro ska finnas i texten, innan det används. Egna makron ska stå i början av filen innan koden som använder makrona och sen kommer koden för själva programmet Egna makron är case sensitive Varning för att ”överta” andras makron
11 August 2015IS1200 Datorteknik, föreläsning 446 Huvudprogram loop:moviar4,TIME# parameter callPUTTIME# anrop, alt 1 moviar4, TIME# parameter moviar16, TICK# adress callrr16# anrop, alt 2 moviar4,1000# parameter callDELAY# anrop brloop# ovillk. hopp
11 August 2015IS1200 Datorteknik, föreläsning 447 HEXASC ? 4 bitar = en hexadecimal siffra 7 bitar = ASCII för en hexadecimal siffra IN-parameter i r4 UT-parameter i r2
11 August 2015IS1200 Datorteknik, föreläsning 448 HEXASC Bin --> ASCII = hex > = > = > = > = > = > = > = > = > = > = > = A > = B > = C > = D > = E > = F Algoritm? För dessa kan man göra så här...
11 August 2015IS1200 Datorteknik, föreläsning 449 TICK Finns nu given i C-kod 4 st NBCD-kodade siffror IN-parameter i r4 minne Adressen, TIME, till den plats i minnet där aktuell tid finns lagrad -+-+
11 August 2015IS1200 Datorteknik, föreläsning 450 TICK Exempel på räkning NBCD NBCD NBCD NBCD = TIME = 00: = 00: = 00: = 01: = 09: = 10: = 59: = 00:00
11 August 2015IS1200 Datorteknik, föreläsning 451 PUTTIME 4 st NBCD-kodade siffror IN-parameter i r4 minne 7 0 Skriv ut i ordning 1 2 : 3 4 Skriv ett tecken: plocka fram 4 bitar -> hexasc -> putchar putchar är en biblioteksrutin Adressen, mytime, till den plats i minnet där aktuell tid finns lagrad -+-+
11 August 2015IS1200 Datorteknik, föreläsning 452 DELAY förslag till flödesschema N := startN := N - 1 N <= 0 ? IN-hopp UT-hopp JA NEJ K := msekK := K - 1 K <= 0 ? IN-hopp UT-hopp JA NEJ IN-parameter i r4 inner loop outer loop tuning value
11 August 2015IS1200 Datorteknik, föreläsning 453 IS1200 Datorteknik Föreläsning 4, innehåll Programutveckling, allmänt Laboration 1: nios2time Programutveckling, denna kurs
11 August 2015IS1200 Datorteknik, föreläsning 454 Viktiga delar i en dator CPU BUS I/OMEM program data
11 August 2015IS1200 Datorteknik, föreläsning 455 Programexekvering FETCH (update PC) (decode) EXECUTE
11 August 2015IS1200 Datorteknik, föreläsning 456 Labkortet: Alteras DE2-board
11 August 2015IS1200 Datorteknik, föreläsning 457 DE2-board Innehåller zFPGA – Field Programmable Gate Array som ”konfigureras” så att den fungerar som en niosII-processor ! zMinne (som innehåller program och data) zBus-ledningar som förbinder ”CPU” med minne zIO-portar – parallell och serie zJTag-port
11 August 2015IS1200 Datorteknik, föreläsning 458 serieport parallellport MEM ”CPU” DE2-board: komponenter USB Blaster Port
11 August 2015IS1200 Datorteknik, föreläsning 459 Alteras DE2-board CPU (FPGA) ”BUS” I/O (portar) MEM (RWM) program data
11 August 2015IS1200 Datorteknik, föreläsning 460 DE2-board Konfigurera FPGA:n Genom att ”ladda ner” en speciell fil (fil.sof) genom en speciell kabel/sladd (USB/Jtag) till en speciell kontakt (JTag-port) skrivs information in i FPGA-kretsen så att den kommer att fungera som en NiosII-CPU. Detta görs med Quartus Programmer
11 August 2015IS1200 Datorteknik, föreläsning 461 Konfigurering av FPGA:n med filen DE2_N2_ C.sof FPGA NiosII-CPU BUS I/OMEM program data
11 August 2015IS1200 Datorteknik, föreläsning 462 Starta exekvering på NiosII-processorn Ladda ner binärkod till minnet Starta exekvering på rätt adress (på läget main måste det vara)
11 August 2015IS1200 Datorteknik, föreläsning 463 Nedladdning till minnet av ditt program (och data) main.elf FPGA BUS I/OMEM program data
11 August 2015IS1200 Datorteknik, föreläsning 464 Program development editering, översättning och exekvering Nästa sida visar hur det kan se ut på skärmen när man ”skriver och provkör” ett program
11 August 2015IS1200 Datorteknik, föreläsning 465
11 August 2015IS1200 Datorteknik, föreläsning 466 Debugging programs Test och felsökning Nästa sida visar hur det kan se ut på skärmen när man Testar och felsöker ett program med hjälp av stegvis exekvering och brytpunkter
11 August 2015IS1200 Datorteknik, föreläsning 467
11 August 2015IS1200 Datorteknik, föreläsning 468 Konfigurera DE2-board (programmera FPGA:n) Nästa sida visar hur det kan se ut på skärmen när man Konfigurerar FPGA-kretsen så att den fungerar som en niosII-CPU
11 August 2015IS1200 Datorteknik, föreläsning 469 Starta Quartus Programmer från NiosII IDE Kontrollera Hardware Setup ska vara USB-Blaster (USB-0) Välj rätt ”sof-fil” Klicka in en bock i rutan Program/Configure Klicka på Start Kontrollera ”Successfully performed operation(s)”
11 August 2015IS1200 Datorteknik, föreläsning 470 Quartus programvara Används för att ”konstruera” den krets som FPGA:n ska konfigureras att fungera som I Quartus kan man använda VHDL och/eller schemainmatning Quartus levererar två samhörande konfigureringsfiler, en ”sof-fil” och en ”ptf-fil” sof-filen används för att ”ladda ner” konstruktionen till FPGA-kretsen på DE2-board ptf-filen används vid skapande av en biblioteksfil som är med i ett programprojekt som utvecklas för att exekveras på DE2-board
11 August 2015IS1200 Datorteknik, föreläsning 471 Varför behövs konfigureringsfilen Nios2system_ C.ptf I dina program kan Du använda subrutinen putchar. Konfigureringsfilen innehåller information om hårdvarans adresser som krävs för att putchar ska fungera i dina program Därför måste konfigureringsfilen tas med i ditt projekt och länkas ihop med dina program För varje nytt projekt anges en ptf-fil
11 August 2015IS1200 Datorteknik, föreläsning 472