Niveauer af abstrakte maskiner



Relaterede dokumenter
Mikroarkitektur. Niels Olof Bouvin Institut for Datalogi Aarhus Universitet

Eksamen dcomnet Q2/2010. Navn

Eksamen dcomnet Q2/2012. Studiekortsnummer Navn

Eksamen dcomnet 2012Q4. Årskortsnummer Navn

Maskinarkitektur. Lars Kristensen Christian Storm dmasark 1

dcomnet-nr. 6 Talrepræsentation Computere og Netværk (dcomnet)

Computerarkitektur Eksamen 2014Q3. Niels Olof Bouvin. Studienummer Navn

Eksamen Computerarkitektur 2013Q4. Niels Olof Bouvin. Studienummer Navn

Computere og Netværk (dcomnet)

dcomnet-nr. 8 Simpel aritmetik på maskinniveau Computere og Netværk (dcomnet)

CPUer og maskinkode DM534. Rolf Fagerberg

Computerarkitektur. - en introduktion til computerarkitektur med LINDA

Introduktion til Computerarkitektur. Niels Olof Bouvin Institut for Datalogi Aarhus Universitet

Niveauer af abstrakte maskiner

Design af et ISA. Niels Olof Bouvin Institut for Datalogi Aarhus Universitet

Niveauer af abstrakte maskiner

MIPS, registerallokering og MARS

DATALOGI 1E. Skriftlig eksamen torsdag den 3. juni 2004

Project Step 7. Behavioral modeling of a dual ported register set. 1/8/ L11 Project Step 5 Copyright Joanne DeGroat, ECE, OSU 1

DATALOGI MASKINARKITEKTUR Blok 2 samt Reeksamination i DATALOGI MASKINARKITEKTUR Blok 1 og arkitekturdelen af DATALOGI 1E

PARALLELIZATION OF ATTILA SIMULATOR WITH OPENMP MIGUEL ÁNGEL MARTÍNEZ DEL AMOR MINIPROJECT OF TDT24 NTNU

Processer og tråde. dopsys 1

DATALOGI 1E. Skriftlig eksamen mandag den 23. juni 2003

// Definition af porte og funktioner

Boligsøgning / Search for accommodation!

Operativsystemer - dopsys

Peter Kellberg. Rundt om Danmarks Statistiks makroer. Design, Standardisering, Teknik

AVR MP Ingeniørhøjskolen i Århus Michael Kaalund

Grådige algoritmer. Et algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Internt interrupt - Arduino

Grundlæggende Algoritmer og Datastrukturer. Analyseværktøjer [CLRS, 1-3.1]

Pentium IA-32 Maskinarkitekturen

Planen for idag. Kontrol af ydre enheder. Systemarkitektur. Synkronisering ved aktiv venten. Multiprogrammering[1]: Ydre enheder og multiprogrammer

Programmering i C Intro og grundlæggende C 5. marts 2007

DM13-1. Obligatoriske Opgave - Kredsløbs design

Computer Literacy. En stationær bordmodel. En Bærbar Notebook, Labtop, Slæbbar, Blærebar mm.

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter Abstract

Abstrakte datatyper C#-version

Algoritmer og invarianter

DET KONGELIGE BIBLIOTEK NATIONALBIBLIOTEK OG KØBENHAVNS UNIVERSITETS- BIBLIOTEK. Index

Tilgang til data. To udbredte metoder for at tilgå data: Sekventiel tilgang Random access: tilgang via ID (også kaldet key, nøgle) for dataelementer.

Sammenlign og byt. Et eksempel på dokumentering af et program

DM507 Algoritmer og datastrukturer

3D NASAL VISTA 2.0

Algoritmer og Datastrukturer 1

DM507 Algoritmer og datastrukturer

Part 5 Leisure Time and Transport

Design by Contract. Design and Programming by Contract. Oversigt. Prædikater

Maskinsprog. Martin Zachariasen, DIKU. Programmer og ordrer. Ordretyper. Operander og deres placering. Ordreformat. Procedurekald. Andre arkitekturer

Dette korte foredrag er opdelt i 3 dele: 1. ARDUINO i flere versioner, hvad er det? 2. DEMO-video 3. Din fremtidige Oscillator, SI5351A 4.

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer

ARP og ICMP. - service protokoller, som vi ikke kan undvære! Netteknik 1

Transkript:

Mikroarkitektur

Niveauer af abstrakte maskiner Spørgsmål... Hvordan realiseres IJVM maskinen (lev. 2), eller hvordan ser en IJVM-CPU ud? Opbygning (mikroarkitekturen Mic-1) Anvendelse (mikroprogrammet IJVM)

Maskinniveau Vores fokus er på IJVM maskinen

IJVM instruktioner Afvikles i en fetch-decode-execute cyklen af CPU'en

Fetch-decode-execute 1. Fetch the next instruction from memory into the instruction register. 2. Change the program counter to point to the following instruction. 3. Determine the type of the instruction just fetched. 4. If the instruction uses a word in memory, determine where it is. 5. Fetch the word, if needed, into a CPU register. 6. Execute the instruction. 7. Go to step 1 to begin executing the following instruction. Se SCO side 54

Mikroarkitektur: Mic-1

Mikroarkitektur: Mic-1 CPU registre kontrolenhed fetch- decode- Execute af IJVM instruktioner beregningsenhed

Registre: MAR: Memory Address Register. MDR: Memory Data Register. PC: Program Counter MBR: Memory Byte/Buffer Register SP: Stack Pointer LV: Local Variable Frame CPP: Constant Pool Pointer TOS: Top Of Stack OPC: Old Program Counter H: Help register

Kontrol af beregningsenheden Shifter kontrol: SLL8 (shift left logical 8) SRA1 (shift right arithmetic 1)

Timing af beregningsenheden

Eksempel: PC=PC+1 1 1 110101 00

Eksempel: PC=PC+1 1 1 110101 00

Eksempel: PC=PC+1 1 1 110101 00

Eksempel: PC=PC+1 1 1 110101 00

Eksempel: PC=PC+1 1 1 110101 00

Lager tilgang Stack Constant Pool Method Area 4.294.967.296 bytes (32 bit) / 1.073.741.824 words (30 bit) PC/MBR bruges til at tilgå Method Area ved brug af byte adresser. MAR/MDR bruges til at tilgå Stack og Constant Pool ved brug af word adresser. Timing: hvis PC (MAR) sættes i cycle k indeholder MBR (MDR) indholdet af lagercellen i starten af cycle k+2.

Timing ved lager tilgang MDR/MBR kan læses Cykel k Cykel k+1 Cykel k+2 MAR/PC sættes Bus/lager opererer PC/MBR bruges til at tilgå Method Area ved brug af byte adresser. MAR/MDR bruges til at tilgå Stack og Constant Pool ved brug af word adresser. Timing: hvis PC (MAR) sættes i cycle k indeholder MBR (MDR) indholdet af lagercellen i starten af cycle k+2.

Timing ved lager tilgang Mulighed for back-to-back reads jvf. SCO 240 MDR/MBR kan læses Cykel k Cykel k+1 Cykel k+2 MAR/PC sættes Bus/lager opererer PC/MBR bruges til at tilgå Method Area ved brug af byte adresser. MAR/MDR bruges til at tilgå Stack og Constant Pool ved brug af word adresser. Timing: hvis PC (MAR) sættes i cycle k indeholder MBR (MDR) indholdet af lagercellen i starten af cycle k+2.

Tolkning af MAR adresse MAR indeholde word-adressen [0, 1.073.741.824] på det maskinord der skal indlæses. Dette skal oversættes til en byte-adresse i et 4 Gb lager... Dette gøres ved at gange med 4, dvs. skifte to plads til venstre

Udlæsning af MBR til B-bus MBR (en byte) kan udlæses til B-bus, som 1) unsigned, hvis fx argument til iload 2) signed, hvis fx argument til bipush unsigned: w 7 w 6 w 5 w 4 w 3 w 2 w 1 w 0 00... 00w 7 w 6 w 5 w 4 w 3 w 2 w 1 w 0 signed: w 7 w 6 w 5 w 4 w 3 w 2 w 1 w 0 w 7 w 7... w 7 w 7 w 7 w 6 w 5 w 4 w 3 w 2 w 1 w 0 Sign extension

Mikroarkitektur: Mic-1 CPU registre kontrolenhed fetch- decode- Execute af IJVM instruktioner beregningsenhed

Mikroinstruktions format 8 1

Mikroinstruktion: PC=PC+1 1 1 110101 00

Mikroinstruktion: PC=PC+1 1 1????????? 000 00110101 000000100 000 0001 110101 00

Der afvikles een mikroinstruktion per clock-cycle, timing er vigtig...

Der afvikles een mikroinstruktion per clock-cycle, timing er vigtig... T = 0

Der afvikles een mikroinstruktion per clock-cycle, timing er vigtig... T = [0, w]

Der afvikles een mikroinstruktion per clock-cycle, timing er vigtig... T = [ w, w+ x]

Der afvikles een mikroinstruktion per clock-cycle, timing er vigtig... T = [ w+ x, w+ x+ y]

Der afvikles een mikroinstruktion per clock-cycle, timing er vigtig... T = [ w+ x+ y, w+ x+ y+ z]

Der afvikles een mikroinstruktion per clock-cycle, timing er vigtig... T = end of cycle

Der afvikles een mikroinstruktion per clock-cycle, timing er vigtig... T = end of cycle Hvorfor 1-bit flip-flops?

Bestemmelse af næste mikroinstruktion N Z JAMN JAMZ Addr MBR JMPC resultat fra ALU er Negativt resultat fra ALU er 0 (Zero) angiver om N/Z skal bruges ved beregning af næste mikroinstruktion 9 bit fra aktuel mikroinstruktion 8 bit fra MBR register angiver om MBR skal bruges ved beregning af næste mikroinstruktion

Bestemmelse af næste mikroinstruktion N Z JAMN JAMZ Addr MBR JMPC resultat fra ALU er Negativt resultat fra ALU er 0 (Zero) angiver om N/Z skal bruges ved beregning af næste mikroinstruktion 9 bit fra aktuel mikroinstruktion 8 bit fra MBR register angiver om MBR skal bruges ved beregning af næste mikroinstruktion w 8 w 7 w 6 w 5 w 4 w 3 w 2 w 1 w 0 or N or Z? w 7 w 6 w 5 w 4 w 3 w 2 w 1 w 0 or u 7 u 6 u 5 u 4 u 3 u 2 u 1 u 0 fra Addr hvis JAMN=1 hvis JAMZ=1 fra MBR hvis JMPC=1

Eksempel: JAMZ=1 Et betinget hop på Z (indikeret ved JAMZ=1) kan kun hoppe til adresse x (ved Z=0) eller adresse x+256 (Z=1). I eksempelt ovenfor er x = 0x92.

Ordreafkodning.method main // int main.args 3 // (int a, int b).define a = 1.define b = 2 iload a iload b isub ireturn main index: 0 method area: 10 bytes 00 03 00 00 15 01 15 02 64 ac constant pool: 1 words 00000000 goto(mbr), Addr=000000000, JMPN=0, JMPZ=0, JMPC=1

Ordreafkodning Første mikroinstruktion for iload Første mikroinstruktion for isub 0x15 0x64.method main // int main.args 3 // (int a, int b).define a = 1.define b = 2 iload a iload b isub ireturn main index: 0 method area: 10 bytes 00 03 00 00 15 01 15 02 64 ac constant pool: 1 words 00000000 Hvis 0x15 er indlæst i MBR (via læsning fra adresse PC i lageret), så vil goto(mbr) hoppen til celle 0x15 i mikrolageret... goto(mbr), Addr=000000000, JMPN=0, JMPZ=0, JMPC=1

Mikroarkitektur: Mic-1 CPU registre kontrolenhed fetch- decode- Execute af IJVM instruktioner beregningsenhed

Mikroprogrammering

Mikroprogrammering Skal have et mikroprogram, dvs. et indhold af mikrolageret der realiserer IJVMs instruktionssæt Fetch-Decode-Execute...

Fetch-decode-execute 1. Fetch the next instruction from memory into the instruction register. 2. Change the program counter to point to the following instruction. 3. Determine the type of the instruction just fetched. 4. If the instruction uses a word in memory, determine where it is. 5. Fetch the word, if needed, into a CPU register. 6. Execute the instruction. 7. Go to step 1 to begin executing the following instruction. Se SCO side 54

Fetch Stack Constant Pool Method Area 4.294.967.296 bytes (32 bit) / 1.073.741.824 words (30 bit) PC/MBR bruges til at tilgå Method Area ved brug af byte adresser. MAR/MDR bruges til at tilgå Stack og Constant Pool ved brug af word adresser. Timing: hvis PC (MAR) sættes i cycle k indeholder MBR (MDR) indholdet af lagercellen i starten af cycle k+2.

Fetch MDR/MBR kan læses Cykel k Cykel k+1 Cykel k+2 MAR/PC sættes Bus/lager opererer PC/MBR bruges til at tilgå Method Area ved brug af byte adresser. MAR/MDR bruges til at tilgå Stack og Constant Pool ved brug af word adresser. Timing: hvis PC (MAR) sættes i cycle k indeholder MBR (MDR) indholdet af lagercellen i starten af cycle k+2.

Decode.method main // int main.args 3 // (int a, int b).define a = 1.define b = 2 iload a iload b isub ireturn main index: 0 method area: 10 bytes 00 03 00 00 15 01 15 02 64 ac constant pool: 1 words 00000000 goto(mbr), Addr=000000000, JMPN=0, JMPZ=0, JMPC=1

Decode Første mikroinstruktion for iload Første mikroinstruktion for isub 0x15 0x64.method main // int main.args 3 // (int a, int b).define a = 1.define b = 2 iload a iload b isub ireturn main index: 0 method area: 10 bytes 00 03 00 00 15 01 15 02 64 ac constant pool: 1 words 00000000 Hvis 0x15 er indlæst i MBR (via læsning fra adresse PC i lageret), så vil goto(mbr) hoppen til celle 0x15 i mikrolageret... goto(mbr), Addr=000000000, JMPN=0, JMPZ=0, JMPC=1

Execute Sekvens af mikroinstruktioner der implementerer Meaning...

Symbolsk mikroprogrammering (Absolut) Mikroprogram 000: 0048148005 001: 0058148005 002: 0018118400 003: 00203d8404 004: 00283d8404 005: 00303c0804 006: 0038370805 007: 0040148005 008: 00013f0004 009: 000a3f0004 00a: 00603f0805 00b: 00603f0404 00c: 0038000000 00d: 0000000000 100: 0800000000 101: 0050148004 1ff: 0000000000 Behov for et symbolsk mikroprogrammeringssprog med tilhørende mikroassembler Micro Assembly Language (MAL) Mikroassembler: mic1-asm

Symbolsk mikroprogrammering Behov for at specificere: ALU input registre, ALU og skifter operationer, output registre. Lager operationer (rd,wr,fetch). Ubetingede hop: ifm. næste mikroinstruktion og JMPC bit. Betingede hop: JAMN og JAMZ bits

ALU og skifter operationer i MAL Skifter operationer: 1 bit aritmetisk højreskift: >> 1 8 bit logisk venstre skift: << 8

Lager operationer Læsning/skrivning af ord (words) i stakområdet: Specificeres ved brug af rd og wr. Ord der læses/skrives udpeges af MAR. Læsning af ord i Constant Pool: Specificeres ved brug af rd. Ord der læses/skrives udpeges af MAR. Læsning af byte i Method Area: Specificeres ved brug af fetch. Byte der læses udpeges af PC.

Hop instruktioner Ubetingede hop: goto L På indholdet af MBR (JMPC=1): goto MBR Betingede hop: På N (JAMN = 1) ALU output negativt: if N goto L1; else goto L2 På Z (JAMZ = 1) ALU output 0 (Zero): if Z goto L1; else goto L2

Mikroassembler Oversætte symbolsk mikrokode til absolut mikrokode Problem: beregne absolutte adresser for labels under hensyntagen til: Mikroinstruktioner hvis placering er absolut (ordreafkodning). Betingede hop på N og Z. Resultat af oversættelse (512 x 36 bit) lægges ind i kontrollageret.

IJVM mikroprogrammet SCO figur 4.17

IJVM mikroprogrammet Fetch Decode Execute SCO figur 4.17

Invariant ved main1 PC udpeger den byte i Method Area, som indeholder instruktionskoden for den IJVM instruktion der skal afvikles MBR indeholder instruktionskoden for den IJVM instruktion, der skal afvikles, MBR=m[PC] SP udpeger det øverste ord på stakken LV udpeger det første ord i det aktuelle stakafsnit CPP udpeger det første ord i Constant Pool TOS indeholder det øverste ord på stakken, TOS=m[SP]

Eksempel: iadd Method Area: 0x60 0x10 0x2a 0x64 PC Opkode for næste instruktion Invariant: MBR=0x60, TOS=m[SP] Ønsker: SP b a SP a+b PC=PC+1 MBR=0x10 SP=SP-1 TOS=a+b

Eksempel: bipush Method Area: 0x60 0x10 0x2a 0x64 PC Opkode for næste instruktion Invariant: MBR=0x10, TOS=m[SP] Ønsker: SP a+b SP 0x2a a+b PC=PC+2 MBR=0x64 SP=SP+1 TOS=0x2a

Mic-1 værktøjer Beskrevet i Mic-1 Tools Manual MAL Mikroassembler Oversætte MAL programmer til absolut mikrokode: $ mic1-asm ijvm.mal ijvm.mic1 Mic-1 Simulator Afvikle IJVM programmer i bytekode format: $ mic1 ijvm.mic1 min.bc 53 174 IJVM instruktioner fortolkes nu af mikroprogrammet.

IJVM mikroprogrammet Tilgængelig i filen ijvm.mal main: PC = PC + 1; fetch; goto (MBR) nop = 0x00: goto main iadd = 0x60: MAR = SP = SP - 1; rd H = TOS MDR = TOS = MDR + H; wr; goto main

Oversættelse til absolut mikrokode $ mic1-asm ijvm.mal ijvm.mic1 entry: 003 000: 0010000000 goto 0x002; 001: 0208350201 PC = PC + 1; goto 0x041; 002: 0004350211 PC = PC + 1; fetch; goto (MBR); 003: 0228000000 goto 0x045; 004: 0028148007 H = TOS; goto 0x005; 005: 00103c2140 MDR = TOS = H + MDR; wr; goto 0x002; 006: 0038148007 H = TOS; goto 0x007; 007: 00103f2140 MDR = TOS = MDR - H; wr; goto 0x002; 008: 0048148007 H = TOS; goto 0x009; 009: 00100c2140 MDR = TOS = H and MDR; wr; goto 0x002;

Eksempel IJVM program.method main.args 3.define a = 1.define b = 2 bipush 88 iload a iload b invokevirtual min ireturn $ ijvm-asm min.j min.bc main index: 0 method area: 40 bytes 00 03 00 00 10 58 15 01 15 02 b6 00 01 ac 00 03 00 01 15 01 15 02 64 9b 00 0a 15 02 36 03 a7 00 07 15 01 36 03 15 03 ac constant pool: 2 words 00000000 0000000e

Mic-1 simulator $ mic1 ijvm.mic1 min.bc 53 174 Mic1 Trace of ijvm.mic1 with min.bc stack = 0, 1, 174, 53, 15 bipush 88 [10 58] stack = 88, 0, 1, 174, 53, 15 iload 1 [15 01] stack = 53, 88, 0, 1, 174, 53, 15 iload 2 [15 02] stack = 174, 53, 88, 0, 1, 174, 53, 15 invokevirtual 1 [b6 00 01] stack = 12, 13, 0, 174, 53, 21, 0, 1 iload 1 [15 01] stack = 53, 12, 13, 0, 174, 53, 21, 0 iload 2 [15 02] stack = 174, 53, 12, 13, 0, 174, 53, 21 isub [64] stack = -121, 12, 13, 0, 174, 53, 21, 0 iflt 10 [9b 00 0a] stack = 12, 13, 0, 174, 53, 21, 0, 1 return value: 53

Mic-1 simulator %>mic1 b istore ijvm.mic1 min.bc 53 174 Mic1 Trace of ijvm.mic1 with min.bc stack = 0, 1, 174, 53, 15 bipush 88 [10 58] stack = 88, 0, 1, 174, 53, 15 iload 1 [15 01] stack = 53, 88, 0, 1, 174, 53, 15 iload 1 [15 01] stack = 53, 12, 13, 0, 174, 53, 21, 0 istore 3 [36 03] MAR=23 MDR=53 PC=35 MBR=54 MBRU=54 SP=23 LV=17 CPP=10 TOS=53 OPC=23 H=17 0x002: PC = PC + 1; fetch; goto (MBR); MAR=23 MDR=53 PC=36 MBR=54 MBRU=54 SP=23 LV=17 CPP=10 TOS=53 OPC=23 H=17 0x036: H = LV; goto 0x01d; MAR=23 MDR=53 PC=36 MBR=3 MBRU=3 SP=23 LV=17 CPP=10 TOS=53 OPC=23 H=17 iload 3 [15 03] stack = 53, 12, 13, 53, 174, 53, 21, 0

Mikroarkitektur: Mic-1 CPU registre kontrolenhed fetch- decode- Execute af IJVM instruktioner beregningsenhed