Chapter 4 Micro Architecture Overview IJVM ISA Mic1

  • Slides: 25
Download presentation
Chapter 4 - Micro. Architecture • • Overview IJVM ISA Mic-1 Mic 2 -4

Chapter 4 - Micro. Architecture • • Overview IJVM ISA Mic-1 Mic 2 -4 Further Speedup Examples Homework: – Chapter 4 #1, 2, 7, 11, 12, 17, 24, 27 (Due 5/5)

The Micro. Architecture level

The Micro. Architecture level

Java -> IJVM

Java -> IJVM

MIC-1

MIC-1

MIC-1 datapath

MIC-1 datapath

Data. Path Timing

Data. Path Timing

MPC Control

MPC Control

MPC logic Instruction decode: if (instr == x 1) goto y 1; else if

MPC logic Instruction decode: if (instr == x 1) goto y 1; else if (instr == x 2) goto y 2; else … Goto y 2 == MPC = y 2 What if x 1 == y 1 x 2 == y 2 … ? Then just: MPC = instr; • if (!JMPC) { – MPC 0 -7 = ADDR 0 -7 – MPC 8 = (JAMZ & Z) + (JAMN & N) • } • else { – MPC = MBR – MPC 8 = (JAMZ & Z) + (JAMN & N) • } Micro. Arch: PC = MPC IR = MIR IJVM: PC = OPC IR = MBR

IJVM • Stack Architecture • Memory Model • The ISA – Basic instructions –

IJVM • Stack Architecture • Memory Model • The ISA – Basic instructions – Procedure invocation

IJVM - a stack architecture Public int funny. Func(int m, int n) { int

IJVM - a stack architecture Public int funny. Func(int m, int n) { int a; if (n == 0) return 1; else a = funny. Func(m, n-1); return m*a + n; } m. Power. N(3, 2); ? 3*funny. Func(3, 1)+2 3*(3*funny. Func(3, 0)+1)+2 3*(3*1+1)+2 14 A N M

IJVM - a stack architecture II m*a + n; 3 *4 + 2 Load

IJVM - a stack architecture II m*a + n; 3 *4 + 2 Load m Load a Multiply Load n Add

IJVM Stack Architecture III Public int funny. Func(int m, int n) { int a;

IJVM Stack Architecture III Public int funny. Func(int m, int n) { int a; if (n == 0) return 1; else a = funny. Func(m, n-1); return m*a + n; } m*a + n; 3 *4 + 2 Load m Load a Multiply Load n Add

IJVM Memory Model Public int funny. Func(int m, int n) { int a; if

IJVM Memory Model Public int funny. Func(int m, int n) { int a; if (n == 0) return 1; else a = funny. Func(m, n-1); return m*a + n; } … Load m Load a Multiply Load n Add … 1 0

Java -> IJVM Example

Java -> IJVM Example

IJVM Procedure Invocation Public int funny. Func(int m, int n) { int a; if

IJVM Procedure Invocation Public int funny. Func(int m, int n) { int a; if (n == 0) return 1; else a = funny. Func(m, n-1); return m*a + n; } 0 x 0002 // parms 0 X 0001 // locals BIPUSH 0 ILOAD N IF_ICMPEQ L 2 BIPUSH 1 RETURN L 2: BIPUSH 0 ILOAD M ILOAD N BIPUSH 1 ISUB INVOKEVIRTUAL ILOAD M IMULT PUSH N IADD ISTORE 0 RETURN

IJVM Procedure Invocation Caller LV Caller PC A N M 1 3 SP LV

IJVM Procedure Invocation Caller LV Caller PC A N M 1 3 SP LV RETURN ISTORE 0 IADD ILOAD 1 IMULT ILOAD 0 INVOKEVIRTUAL ISUB BIPUSH 1 ILOAD 0 L 2: BIPUSH 0 RETURN BIPUSH 1 IF_CMPEQ L 2 ILOAD 1 BIPUSH 0 0 x 0001 0 x 0003

MAL • SP = SP+1; rd – – – B=0100 (4) Mem = 010

MAL • SP = SP+1; rd – – – B=0100 (4) Mem = 010 (rd) C=000001000 (SP) ALU = 00110101 (F 0+F 1+ENB+INC) JAM = 000 (0) ADDR = ?

MAL • MDR = SP – – – B=0100 (SP) Mem = 000 (no

MAL • MDR = SP – – – B=0100 (SP) Mem = 000 (no operation) C=000000010 (MDR) ALU = 00110100 (F 0+F 1+ENB+INC) JAM = 000 (don’t jump) ADDR = ?

MAL • MDR = H+SP – – – B=0100 (SP) Mem = 000 (no

MAL • MDR = H+SP – – – B=0100 (SP) Mem = 000 (no operation) C=000000010 (MDR) ALU = 00111100 (F 0+F 1+ENA+ENB) JAM = 000 (don’t jump) ADDR = ?

MAL • MDR = MDR+SP? – – – B=0100 (SP) Mem = 000 (no

MAL • MDR = MDR+SP? – – – B=0100 (SP) Mem = 000 (no operation) C=000000010 (MDR) ALU = 00111100 (F 0+F 1+ENA+ENB) ? ? ? JAM = 000 (don’t jump) ADDR = ?

Legal arithmetic ops • Source, dest, can be: – – – – MAR MDR

Legal arithmetic ops • Source, dest, can be: – – – – MAR MDR PC MBR SP LV TOS OPC • Dest can also be H

Branches • If (Z) goto L 1; else goto L 2 – Sets JAMZ

Branches • If (Z) goto L 1; else goto L 2 – Sets JAMZ bit • If (N)… – Sets JAMN bit • goto (MBR or value) – Sets JMPC bit • Note L 1 and L 2 must be 256 bytes apart – Assembler problem • goto (MBR); fetch

Mic-1 Microcode - Main Loop Quiz: instr = program[PC]; PC = PC+1; execute(instr); How

Mic-1 Microcode - Main Loop Quiz: instr = program[PC]; PC = PC+1; execute(instr); How about: PC = PC+1; next. Instr = program[PC]; execute(instr); • Main Loop Microcode – – B=0001 (PC) Mem = 001 (fetch) C=000000101 (PC+MAR) ALU = 00110101 (F 0+F 1+ENB+INC) – JAM = 100 (JMPC) – ADDR = 0000

ILOAD 0 H = LV MAR = MBRU+H; rd MAR = SP + 1

ILOAD 0 H = LV MAR = MBRU+H; rd MAR = SP + 1 PC = PC + 1; fetch; wr TOS = MDR; goto Main 1

ISUB MAR = SP-1; rd H = TOS MDR = TOS = MDR -

ISUB MAR = SP-1; rd H = TOS MDR = TOS = MDR - H; wr; goto Main 1 1 4