36
1 Processor Architecture

1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

Embed Size (px)

Citation preview

Page 1: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

1

Processor Architecture

Page 2: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

2

Topics

• Write Y86 code• Basic Logic design• Hardware Control Language HCL• Suggested Reading: 4.1, 4.2

Page 3: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

Writing Y86 Code

• Try to Use C Compiler as Much as Possible– Write code in C– Compile for IA32 with gcc –O1 –S

• Newer versions of GCC do too much optimization• Use ls /usr/bin/gcc* to find what versions are available

– Transliterate into Y86

• Coding Example– Find number of elements in null-terminated list

int len1(int a[]);

5043

6125

7395

0

a

3

3

Page 4: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

Y86 Code Generation Example

•First Try– Write typical array code

– Compile with gcc –O1 -S

•Problem– Hard to do array indexing

on Y86• Since don’t have scaled

addressing modes

/* Find number of elements in

null-terminated list */

int len1(int a[])

{

int len;

for (len = 0; a[len]; len++)

;

return len;

}

L5:

incl %eax

cmpl $0, (%edx,%eax,4)

jne L5

4

Page 5: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

Y86 Code Generation Example #2

•Second Try– Write with pointer code

– Compile with gcc34 –O1 -S

•Result– Don’t need to do indexed

addressing/* Find number of elements in

null-terminated list */

int len2(int a[])

{

int len = 0;

while (*a++)

len++;

return len;

}

.L11:

incl %ecx

movl (%edx), %eax

addl $4, %edx

testl %eax, %eax

jne .L11

5

Page 6: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

Y86 Code Generation Example #3•IA32 Code

– Setup•Y86 Code

– Setup

len2:

pushl %ebp

movl %esp, %ebp

movl 8(%ebp), %edx

movl $0, %ecx

movl (%edx), %eax

addl $4, %edx

testl %eax, %eax

je .L13

len2:

pushl %ebp # Save %ebp

rrmovl %esp, %ebp # New FP

pushl %esi # Save

irmovl $4, %esi # Constant 4

pushl %edi # Save

irmovl $1, %edi # Constant 1

mrmovl 8(%ebp), %edx # Get a

irmovl $0, %ecx # len = 0

mrmovl (%edx), %eax # Get *a

addl %esi, %edx # a++

andl %eax, %eax # Test *a

je Done # If zero, goto Done Need constants 1 & 4 Store in callee-save registers Use andl to test register

6

Page 7: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

Y86 Code Generation Example #4

•IA32 Code– Loop •Y86 Code

– Loop

.L11:

incl %ecx

movl (%edx), %eax

addl $4, %edx

testl %eax, %eax

jne .L11

Loop:

addl %edi, %ecx # len++

mrmovl (%edx), %eax # Get *a

addl %esi, %edx # a++

andl %eax, %eax # Test *a

jne Loop # If !0, goto Loop

7

Page 8: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

Y86 Code Generation Example #5

•IA32 Code– Finish

•Y86 Code– Finish

.L13:

movl %ecx, %eax

leave

ret

Done:

rrmovl %ecx, %eax # return len

popl %edi # Restore %edi

popl %esi # Restore %esi

rrmovl %ebp, %esp # Restore SP

popl %ebp # Restore FP

ret

8

Page 9: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

Y86 Sample Program Structure #1

– Program starts at address 0

– Must set up stack

• Where located• Pointer values• Make sure

don’t overwrite code!

– Must initialize data

init: # Initialization

. . .

call Main

halt

.align 4 # Program data

array:

. . .

Main: # Main function

. . .

call len2

. . .

len2: # Length function

. . .

.pos 0x100 # Placement of stack

Stack:9

Page 10: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

Y86 Program Structure #2

– Program starts at address 0

– Must set up stack

– Must initialize data

– Can use symbolic names

init:

irmovl Stack, %esp # Set up SP

irmovl Stack, %ebp # Set up FP

call Main # Execute main

halt # Terminate

# Array of 4 elements + terminating 0

.align 4

array:

.long 0x000d

.long 0x00c0

.long 0x0b00

.long 0xa000

.long 010

Page 11: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

Y86 Program Structure #3

• Set up call to len2– Follow IA32 procedure conventions– Push array address as argument

Main:

pushl %ebp

rrmovl %esp,%ebp

irmovl array,%edx

pushl %edx # Push array

call len2 # Call len2(array)

rrmovl %ebp,%esp

popl %ebp

ret

11

Page 12: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

Assembling Y86 Program

– Generates “object code” file len.yo• Actually looks like disassembler output

unix> yas len.ys

0x000: | .pos 0

0x000: 30f400010000 | init: irmovl Stack, %esp # Set up stack pointer

0x006: 30f500010000 | irmovl Stack, %ebp # Set up base pointer

0x00c: 8028000000 | call Main # Execute main program

0x011: 00 | halt # Terminate program

|

| # Array of 4 elements + terminating 0

0x014: | .align 4

0x014: | array:

0x014: 0d000000 | .long 0x000d

0x018: c0000000 | .long 0x00c0

0x01c: 000b0000 | .long 0x0b00

0x020: 00a00000 | .long 0xa000

0x024: 00000000 | .long 012

Page 13: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

Simulating Y86 Program

– Instruction set simulator• Computes effect of each instruction on processor

state• Prints changes in state from original

unix> yis len.yo

Stopped in 50 steps at PC = 0x11. Status 'HLT', CC Z=1 S=0 O=0

Changes to registers:

%eax: 0x00000000 0x00000004

%ecx: 0x00000000 0x00000004

%edx: 0x00000000 0x00000028

%esp: 0x00000000 0x00000100

%ebp: 0x00000000 0x00000100

Changes to memory:

0x00ec: 0x00000000 0x000000f8

0x00f0: 0x00000000 0x00000039

0x00f4: 0x00000000 0x00000014

0x00f8: 0x00000000 0x00000100

0x00fc: 0x00000000 0x0000001113

Page 14: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

Logic Design

• Digital circuit– What is digital circuit?– Know what a CPU will base on?

• Hardware Control Language (HCL)– A simple and functional language to describe

our CPU implementation– Syntax like C

14

Page 15: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

Overview of Logic Design

• Fundamental Hardware Requirements– Communication

• How to get values from one place to another

– Computation– Storage (Memory)– Clock Signal

15

Page 16: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

Overview of Logic Design

• Bits are Our Friends– Everything expressed in terms of values 0 and

1– Communication

• Low or high voltage on wire

– Computation• Compute Boolean functions

– Storage• Store bits of information

16

Page 17: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

Digital Signals

– Use voltage thresholds to extract discrete values from continuous signal

– Simplest version: 1-bit signal• Either high range (1) or low range (0)• With guard range between them

– Not strongly affected by noise or low quality circuit elements

• Can make circuits simple, small, and fast

Voltage

Time

0 1 0

17

Page 18: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

Category of Circuit

• Analog Circuit– Use all the range of Signal– Most part is amplifier– Hard to model and automatic design– Use transistor and capacitance as basis– We will not discuss it here

18

Page 19: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

Category of Circuit

• Digital Circuit– Has only two values, 0 and 1– Easy to model and design– Use truth table and other tools to analyze– Use gate as the basis– The voltage of 1 differs in different kind circuits.

• E.g. TTL circuit using 5 voltage as 1

19

Page 20: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

Category of Digital Circuit

• Combinational Circuit– Without memory. So the circuit is stateless.

The same input always gets the same output at any time.

– Needn’t clock signal– Typical application: ALU

20

Page 21: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

Category of Digital Circuit

• Sequential Circuit– Combinational circuit + memory and clock

signal– Have state. Two same inputs may not generate

the same output.– Use clock signal to control the run of circuit.– Typical application: CPU

21

Page 22: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

Computing with Logic Gates

– Outputs are Boolean functions of inputs– Not an assignment operation, just give the circuit a name – Respond continuously to changes in inputs

• With some, small delay

ab out

ab out a out

out = a && b out = a || b out = !a

And Or Not

•Voltage

•Time

a

ba && b

Rising Delay Falling Delay

22

Page 23: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

Combinational Circuits

• Acyclic Network of Logic Gates– Continously responds to changes on inputs– Outputs become (after some delay) Boolean

functions of inputs

Acyclic Network

Inputs Outputs

23

Page 24: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

Bit Equality

– Generate 1 if a and b are equal

• Hardware Control Language (HCL)– Very simple hardware description language

• Boolean operations have syntax similar to C logical operations

– We’ll use it to describe control logic for processors

Bit equala

b

eq

bool eq = (a&&b)||(!a&&!b)

HCL Expression

24

Page 25: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

Word Equality

– 32-bit word size– HCL representation

• Equality operation• Generates Boolean value

b31Bit equal

a31

eq31

b30Bit equal

a30

eq30

b1Bit equal

a1

eq1

b0Bit equal

a0

eq0

Eq

==B

A

Eq

Word-Level Representation

bool Eq = (A == B)

HCL Representation

25

Page 26: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

Bit-Level Multiplexor

– Control signal s– Data signals a and b– Output a when s=1, b when s=0– Its name: MUX– Usage: Select one signal from a couple of signals

Bit MUX

b

s

a

out

bool out = (s&&a)||(!s&&b)

HCL Expression

26

Page 27: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

Word Multiplexor

• Word-Level Representation

s

B

AOutMUX

b31

s

a31

out31

b30

a30

out30

b0

a0

out0

27

int out = (s&&A)||(!s&&B)

Page 28: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

Word Multiplexor

• HCL Representation– Select input word A or B depending on control

signal s– HCL representation

• Case expression• Series of test : value pairs• Output value for first successful test

int Out = [ s : A; 1 : B;];

28

Page 29: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

HCL Word-Level Examples

• Find minimum of three input words• HCL case expression• Final case guarantees match

AMin3MIN3B

C int Min3 = [ A < B && A < C : A; B < A && B < C : B; 1 : C;];

Minimum of 3 Words

29

Page 30: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

HCL Word-Level Examples

D0

D3

Out4

s0s1

MUX4D2D1

Select one of 4 inputs based on two control bits

HCL case expression Simplify tests by assuming sequential

matching

int Out4 = [ !s1&&!s0: D0; !s1 : D1; !s0 : D2; 1 : D3;];

4-Way Multiplexor

30

Page 31: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

Storage

• Random-access memories– Hold multiple words– E.g. register file, memory– Possible multiple read or write ports– Read word when address input changes– Write word as clock rises

31

Page 32: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

Random-Access Memory

• Stores multiple words of memory– Address input specifies which word to read or write

• Register file– Holds values of program registers– %eax, %esp, etc.– Register identifier serves as address

• ID 0xF implies no read or write performed

• Multiple Ports– Can read and/or write multiple words in one cycle

• Each has separate address and data input/output

RegisterfileRegisterfile

A

B

W dstW

srcAvalA

srcBvalB

valWRead ports Write port

Clock

32

Page 33: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

Register File Timing

• Reading– Like combinational logic– Output data generated based

on input address• After some delay

• Writing– Like register– Update only as clock rises

Registerfile

Registerfile

A

B

srcAvalA

srcBvalB

y2

Registerfile

Registerfile

W dstW

valW

Clock

x2 Rising clock Register

file

Registerfile

W dstWvalW

Clock

y2

x2

x

2

33

Page 34: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

Hardware Control Language

– Very simple hardware description language– Can only express limited aspects of hardware operation

• Parts we want to explore and modify

• Data Types– bool: Boolean

• a, b, c, …

– int: words• A, B, C, …• Does not specify word size---bytes, 32-bit words, …

• Statements– bool a = bool-expr ;– int A = int-expr ;

34

Page 35: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

HCL Operations

– Classify by type of value returned

• Boolean Expressions– Logic Operations

• a && b, a || b, !a

– Word Comparisons• A == B, A != B, A < B, A <= B, A >= B, A > B

– Set Membership• A in { B, C, D }

– Same as A == B || A == C || A == D

• Word Expressions– Case expressions

• [ a : A; b : B; c : C ]• Evaluate test expressions a, b, c, … in sequence• Return word expression A, B, C, … for first successful test

35

Page 36: 1 Processor Architecture. 2 Topics Write Y86 code Basic Logic design Hardware Control Language HCL Suggested Reading: 4.1, 4.2

Summary

• Writing Y86 code– Translate from x86 assembly code

• Computation– Performed by combinational logic– Computes Boolean functions– Continuously reacts to input changes

36