27
The Hardware/Software Interface MIPS CPU의 이해 (입문) Instruction & Overview JEONG JIN WOOK 2015. 10. 22

MIPS CPU의 이해 (입문)

Embed Size (px)

Citation preview

Page 1: MIPS CPU의 이해 (입문)

The Hardware/Software Interface

MIPS CPU의 이해 (입문)Instruction & Overview

JEONG JIN WOOK

2015. 10. 22

Page 2: MIPS CPU의 이해 (입문)

Indexn MIPS 명령어

n beq, bnen 순환문n 대소비교..

n MIPS 관련용어n Register, ALUn Word, ALUn Control Unit, Register Setn PC, Mux ..

n MIPS 개괄적 이해n 핵심명령어n CPU Overview, 피연산자, 레지스터 사용관례n MIPS 구현, R형식, I형식n MIPS의 데이터패스 예

Page 3: MIPS CPU의 이해 (입문)

MIPS 명령어 – beq, bnen Conditional Branch

n beq register, register2, L1n register, register2가 같으면 L1로 이동n beq = branch if equal

n bne register, register2, L1n register, register2가 다르면 L1로 이동n bne = branch not equal

Page 4: MIPS CPU의 이해 (입문)

MIPS 명령어 - 순환문n while(save[i]==k) i+=1;의 MIPS 어셈블리 코드 작성

n 주소계산후, 임시 레지스터에 t1의 값을 넣은후, 조건검사후, != 으면 1을 더한후, 처음으로 다시 돌아간다.

Loop : sll $t1, $t3, 2# sll은 shift left logical의약자로, 왼쪽자리이동을말함# $t3를좌측으로 2비트이동하면 4를곱한것과같음이를직관적으로표현하면, $t1 = i * 4 와같음

add $t1, $t1, $s6 # $s6의베이스주소값을더함.

lw $t0, 0($t1)# 임시레지스터에저장

bne $t0, $s5, Exit# save[i]!=k이면 순환문을빠져나감

ADDI $S3, 3, 1# I에 1을더함 I=I+1

J LoopExit:

# 순환문의끝에서맨앞의 Loop로되돌아감.

Page 5: MIPS CPU의 이해 (입문)

MIPS 명령어 – 두 변수간 대소비교n slt (set on less than)

n slt $t0, $s3, $s4n $t0=1 if $s3 < $s4

Page 6: MIPS CPU의 이해 (입문)

MIPS 명령어 – 프로시저 지원n 프로시저

n procedure에 제공되는 인수에 따라 특정 작업을 수행하는서브루틴

n jar (jump and link instruction)n jal ProcerdureAddress

n 지정된 주소로 점프후 다음 명렁어의 주소를 ra register에저장

n jr (jump register)n jr $ra

n 저장된 주소로 무조건 점프n $a0-$a3 인수레지스터에 전달할 인수값을 저장후, jal X

명령어를 이용해, 프로시저 X로 점프후, 계산결과를 $V0-$V1(반환되는 값을 가지는 레지스터2개)에 저장후 jr $ra(호출한곳의 복귀주소)명령으로 복귀

Page 7: MIPS CPU의 이해 (입문)

MIPS 명령어 - 산술명령어n MIPS의 산술명령어는 add 연산을 말하며 다음 형식을 가짐

n add a, b, c #주석n b + c를 a에 저장하는 명령어n 피연산자를 3개로 제안함으로서 간단한 설계를 유지함n 여기서, instruction(연산자)는 add이며, operand(피연산자)는 a,b,c를 말함

Page 8: MIPS CPU의 이해 (입문)

MIPS 관련용어n 레지스터

n 레지스터는 순차회로이다. CPU 명령어는 레지스터 기반으로 동작.n 32Bit로 이루어짐n $0, $1 .. $31 으로 이름지어 있음

n 순차회로는, 플립플롭이라는 메모리 소자가 있으며, 클럭 펄스가들어오기 전에는 출력단에 변화가 없다. (이런 이유로, 메모리소자라함)

n 레지스터(클럭필요)는 입력값 3이 바뀌더라도, 출력값 1이 변하지 않음

Page 9: MIPS CPU의 이해 (입문)

MIPS 관련용어n Word

n 각 기억 장소에 저장되는 데이터 단위로서, CPU에 의해 한 번에처리될 수 있는 비트들의 그룹

n ALUn 조합회로이다. 클럭이 필요없으며, 입력값이 바뀌면, 그 값이 바로

반영됨. 다음 클럭이 인가되어야만, 1의 값이 변하게됨.n 각종 산술 연산들과 논리 연산들을 수행하는 회로들로 이루어진

하드웨어 모듈로, 산술연산(+, -, ×, ÷)과 논리연산(AND, OR, NOT, XOR 등) 수행

n Control Unitn ALU에서 수행할 동작지시n 레지스터간의 데이터 전송 감시n 명령어를 해석하고 실행하기 위한 제어 신호들(control

signals)를 순차적으로 발생하는 H/W 모듈

Page 10: MIPS CPU의 이해 (입문)

MIPS 관련용어n Register Set

n 명령어 수행 동안 발생하는 임시 데이터 저장

n PC (Program Counter)n 현재 명령어의 주소나 다음에 인출할 명령어를 가짐n 명령어를 저장하고 주소가 주어지면 해당 명령어를 목적지 주소로 갱신

n PC를 다음 명령어 주소로 증가n ALU를 통해 다음 명령어 주소로 증가하는 덧셈기 구현가능

Page 11: MIPS CPU의 이해 (입문)

MIPS 관련용어n MUX

n 레지스터 선택 및 선택된 레지스터 정보를 ALU로 출력하는 선택논리회로

Page 12: MIPS CPU의 이해 (입문)

MIPS 관련용어n 인스트럭션

n CPU가 해야할 작업을 지시하는 정형화된 언어n C프로그램은 컴파일을 거쳐 Intruction 형태로 바뀜n CPU는 일련의 매커니즘에 의해 메모리에서 순서대로 Instruction을

읽어오며, 이 과정을 Instruction Patch라고 함n Instruction은 연산종류를 의미하는 Operation 입력값과 대상이 되는

값인 Operand를 지정하며, Operation 입력은 Operation Code (OP Code, 연산자)라고 부름

n I-타입 Instructionn 연산결과가 레지스터에 저장되며, 연산의 입력값인 두 Operand는

Instruction에 직접 상수형태로 기록될 수 있다.

n R-타입 Instructionn Operand값이 임의의 레지스터에 저장되고 Instruction에는 이

Register를 지정하는 값이 들어갈 수 있다.

Page 13: MIPS CPU의 이해 (입문)

MIPS - 개요

n MIPSn Microprocessor without Interlocked Pipeline Stages

n 밉스 테크놀로지에서 개발한 RISC ISAn RISC : Reduced Instruction Set Computer

n RISC는 CPU 명령어수를 줄여 H/W구조를 간단히 만드는 방식이다.n ISA : Instruction Set Architecture)

n 컴퓨터 프로그램과 H/W간 인터페이스에 대한 완전한 명세

도시바에서생산한MIPS R4400 프로세서.

Page 14: MIPS CPU의 이해 (입문)

n 여러 기능 유닛과 그들 사이의 연결에 초점n multiplexor 추가 필요 (근원지중 하나를 선택하여 목적지로 보내는

구성요소)

MIPS - CPU Overview

Page 15: MIPS CPU의 이해 (입문)

MIPS - 핵심 명령어n Memory reference: lw, swn Arithmetic/logical: add, sub, and, or, sltn Control transfer: beq, j

Page 16: MIPS CPU의 이해 (입문)

MIPS - 피연산자n MIPS에서 Register

n 32 bit를 word단위로 처리n 산술명령어는 32bit register중 하나여야함n 레지스터 개수는 32개로 제한함으로서,전 전기 신호 거리를 짧게

함으로서, 클럭 사이클 시간을 단축시키기 위함

n 레지스터 사용예n C 코드로, f = (g + h) - (i + j); 을 하는 프로그램이 있을때,n f,g,h,i,j가 레지스터 $s0, $s1, $s2, $s3, $s4 에 할당되었다는 전제하에

MIPS code로 다음과 같이 나타낼 수 있음n add $t0, $s1, $s2 #g + h을 t0에 저장

add $t1, $s3, $s4 #i + j을 t1에 저장sub $s0, $t0, $t1 #t0 t1을 합해 s0에 저장

Page 17: MIPS CPU의 이해 (입문)

MIPS - 피연산자n LW (Load)

n 메모리를 레지스터에 적재

n SW (Store word)n 레지스터에서 메모리로 데이터를 보내는 명령n SW의 예

n lw $t0, 32($s3)n lw $t0, 32($s3)는, 시작주소 S3에 32를 더하고 그 값을 t0에 할당

n add $t0, $s2, $t0n sw $t0, 48($s3)

n 상수지원n lw $t0, AddConstant4($s1) #$t0=constant 4n add $s3, $s3, $t0 #$s3 = $s3 + $t0

Page 18: MIPS CPU의 이해 (입문)

MIPS - 레지스터 사용관례

MIPS 레지스터사용관례

1번 :어셈블러전용으로예약되어있음

26,27 : 운영체제전용으로예약되어있음.

Page 19: MIPS CPU의 이해 (입문)

MIPS - 구현n MIPS에서의 명령어 실행

n 클럭이 뛴후 레지스터를 읽음, ALU는 바로 출력n PC를 메모리로 보내고, Memory로부터 명령어 가져온 후,

명령어 필드를 보고, 두개의 레지스터를 읽음

n 레지스터 읽은후, 명령어가 ALU를 사용하는 이유n 주소계산 : 참조명령어는 주소계산위해 ALU 사용n 연산 : 산술/논리 명령어는 연산을 위해 ALU 사용n 비교 : 분기명령어는 비교하기 위해 ALU 사용

n ALU 사용후 명령어 실행을 끝내기 위한 행동n 참조명령어 : 메모리에 접근한후n 저장명령어 : 메모리에 접근한후 (데이터저장)

n 적재명령어 : 메모리에 접근한후 (데이터읽기)

n 산술논리 명령어 / 적재명령어 : ALU나 메모리에 온 데이터를레지스터에 쓰고난후

n 분기명령어 : 다음 명령어의 주소를 갖게한후

Page 20: MIPS CPU의 이해 (입문)

MIPS 구현종류 명령어 예 의미 설명

산술

add add $s1, $s2, $s3 $s1 = $s2 + $s3 피연산자 3개; 오버플로우탐지

subtract sub $s1, $s2, $s3 $s1 = $s2 - $s3

add immediate addi $s1, $s2, 100 $s1 = $s2 + 100 + 상수; 오버플로우탐지

add unsigned addu $s1, $s2, $s3 $s1 = $s2 +$s3 피연산자 3개; 오버플로우무시

subtract unsigned subu $s1, $s2, $s3 $s1 = $s2 - $s3

add immediate unsigned addiu $s1, $s2, 100 $s1 = $s2 + 100 + 상수; 오버플로우

무시

move from coprocessor register mfc0 $s1, $epc $s1 = $epc 예외 PC와다른특수

레지스터의복사

논리연산

and and $s1, $s2, $s3 $1 = $2 & $3 피연사자 3개; bitwise-AND

or or $s1, $s2, $s3 $1 = $2 | $3 피연산자 3개; bitwise-OR

and immediate andi $s1, $s2, 100 $1 = $2 & 100 상수와 bitwise-AND

or immediate ori $s1, $s2, 100 $1 = $2 | 100 상수와 bitwise-OR

shift left logical sll $s1, $s2, 10 $1 = $2 << 10 상수만큼좌측이동

shift right logical srl $s1, $s2, 10 $1 = $2 >> 10 상수만큼우측이동

Page 21: MIPS CPU의 이해 (입문)

MIPS - R형식n R형식 특징

n 명령어의 길이를 같게 하되, 명령어 종류에 따라 형식을 다르게 함

n 명령어 필드n op : 연산자(opcode)n rs : 첫번째 근원지(source) 레지스터n rs : 두번째 근원지 피연산자 레지스터n rd : 목적지 레지스터n shamt : 자리이동량n funct : 기능, op 필드에서 연산 종류를 구체적으로 지정함

op rs rt rd shamt funct6 bits 6 bits5 bits 5 bits 5 bits 5 bits

MIPS의명령어필드

Page 22: MIPS CPU의 이해 (입문)

MIPS - R형식

add $t0, $s1, $s2

special $s1 $s2 $t0 0 add

0 17 18 8 0 32

000000 10001 10010 01000 00000 100000

000000100011001001000000001000002 = 0232402016

십진수

이진수

Page 23: MIPS CPU의 이해 (입문)

MIPS - I형식n I 형식 추가

n R형식만으로 명령어를 표현하기 어려워서 I형식이 추가됨n 수치연산과 데이터 전송명령어에 사용됨n 16비트 주소를 사용하므로, rs

op rs rt constant or address6 bits 5 bits 5 bits 16 bits

Page 24: MIPS CPU의 이해 (입문)

MIPS – 데이터패스 요소n 조합소자(조합회로)

n 입력에 대한 출력을 냄n 예 : ALU

n 상태소자(순차회로)n 2개의 입력과 1개의 출력을 가짐.

n 상태(state)를 갖는다.

n 예: 메모리, 데이터 메모리 및 레지스터

Page 25: MIPS CPU의 이해 (입문)

MIPS - R형식 명령의 데이터패스 동작

add $t1, $t2, $t3 명령어후활성화된제어선의모습

Page 26: MIPS CPU의 이해 (입문)

MIPS - R형식 명령의 데이터패스 설명n 명령어 실행은 한클럭 사이클에 일어나며, 4단계로 나눌 수 있음n 예 : add $t1, $t2, $t3의 R형식 명령어의 데이터패스 동작

n 1. Instruction을 Instruction Memory에서 가져오고 PC값을 증가시킨다.

n 2. 두 레지스터 $t2, $t3를, Register file(접근할 레지스터 번호를

지정함으로서 읽고 쓸 수 있는 레지스터들의 집합)로 부터 읽는다.

n 3. ALU가 연산을 하게 되는데, 연산된 결과를 저장하기 위한 $t1 선택을

위한 과정으로, 명령어의 funct 필드(비트 5:0)의 기능코드를 참조해 ALU

의 제어신호를 만든다.

n 4. Control의 ALUOp 제어유닛의 입력 유닛인 OPCODE(31:26)를 보고

RegDst라고 하는, 멀티플렉스 제어 신호를 출력으로 보낸다. RegDst를

보고, 명령어 비트 15:11인 (ALU의 결과 값이 레지스터 파일에

기록되는데) 목적지 레지스터에 해당되는 $t1를 선택하고 $t2, $t3의

결과값을 $ t1에 저장함

Page 27: MIPS CPU의 이해 (입문)

Referencesn Computer Architecture A Quantitative Approach (5th edition)