프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수...

42
프로세서 08. 04. 17()

Upload: others

Post on 09-Mar-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

프로세서08. 04. 17(목)

Page 2: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

데이터패스 만들기

• 메모리 유닛(Memory Unit)

• 프로그램 카운터(Program Counter)

• 덧셈기(Adder)

Page 3: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

메모리 유닛

• 명령어를 저장

• 입력된 주소에서 명령어를 가져온다.

• 읽기 접근만 제공

• 출력은 항상 주소입력에의해 지정된 위치의 내용.

Page 4: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

프로그램 카운터

• 현재 명령어의 주소를 기억

• 32비트 특수 레지스터

• 매 클럭 사이클의 끝에서쓰기가 행해진다.

• 별도의 쓰기 제어신호는필요없다.

Page 5: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

덧셈기

• PC값을 다음 명령어 주소로 증가시키기 위해서 사용

Page 6: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

명령어 가져오기

Page 7: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

R-Type 명령어

• 모든 R-Type 명령어들은 두 개의 레지스터를 읽고 레지스터 내용에 ALU 연산을 수행하며 그 결과를 레지스터에 쓴다.

• R-Type 명령어 또는 산술/논리 명령어

• add $1, $2, $3

Page 8: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

레지스터 파일

• 레지스터의 집합

• 어떤 레지스터도 읽고쓸 수가 있다.

• 레지스터의 상태를 포함

• 모서리 구동 방식으로 동작

Page 9: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

ALU

• 산술/논리 연산을 수행

• 4개의 ALU 연산신호에 의해 연산의 종류가 결정

• 분기를 구현하는 데 필요한 Zero 검출 출력을 가짐

Page 10: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

메모리 참조 명령어

• 워드적재(lw), 워드저장(sw) 명령어

• 접근할 메모리 주소의 계산이 필요함

• 읽거나 쓸 데이터를 저장하기 위한데이터 메모리가 필요하다.

Page 11: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

데이터 메모리

• 읽기 제어신호 혹은 쓰기 제어신호, 주소입력, 쓰기 명령어인 경우 쓸 데이터 입력

• 메모리로부터 읽어온 데이터를 출력

Page 12: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

부호확장 유닛

• 16비트로 이루어진 offset 주소를 32비트로 확장하기 위해서 사용되는 요소

Page 13: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

분기 명령어

• 세 개의 피연산자를 갖는데 같은지 비교하게 될 두 개의 레지스터와 16비트 변위

• 변위는 분기 명령어 주소에 대한 분기목적지주소의 상대적 값이다.

• PC = 분기 명령어 주소 + 4 + 변위

Page 14: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

주의할 점!!

• 분기 주소 계산에서 기준주소는 분기 명령어 다음에 나오는 명령어의 주소이다.

• 변위필드는 워드변위를 나타내므로 2비트만큼 왼쪽 자리이동시켜 사용한다.

Page 15: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

분기를 위한 데이터패스

Page 16: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

점프 명령어

• 프로그램의 흐름을 무조건적으로 변경

• 명령어의 하위 26비트를 2비트만큼 왼쪽으로 자리이동한 값으로 PC의 하위 28비트를 대체한다.

• 자리이동은 점프변위 뒤에다 00을 덧붙이는 것으로 완료된다.

Page 17: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

단일 데이터 패스로 합치기

Page 18: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

MIPS 데이터 패스

Page 19: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

ALU 제어

Page 20: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

ALU 제어

Page 21: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

주요 제어유닛 설계

Page 22: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

주요 제어유닛 설계

Page 23: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의
Page 24: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

단일 사이클을 사용하지 않는 이유

• 한 마디로 비효율적이다!!

• 모든 명령어가 같은 클럭 사이클을 가짐

• CPI값은 항상 1이다.

• 클럭 사이클 동안에 시간이 낭비됨

Page 25: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

다중 사이클 구현

• 하나의 명령어 실행을 단계별로 구성

• 각 단계에 하나의 클럭 사이클을 사용

• 명령어마다 다른 클럭 사이클 수를 가짐

• 명령어 실행 내에서 기능 유닛을 공유

Page 26: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

추상적 다중 사이클

Page 27: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

단일 사이클과 차이점

• 명령어와 데이터용으로 하나의 메모리 유닛을 사용한다.

• 하나의 ALU와 두 개의 덧셈기 대신에 하나의 ALU가 쓰인다.

• 출력 값이 다음 클럭 사이클에 쓰일 때까지 그 유닛의 출력을 유지하도록 한다.

Page 28: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의
Page 29: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

명령어의 단계

• 명령어 인출 단계

• 명령어 해독 및 레지스터 읽기 단계

• 실행, 메모리 주소 계산 또는 분기

• 메모리 접근 또는 R-Type 명령어 완료

• 메모리 읽기 완료 단계

Page 30: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

명령어 인출 단계

• IR <= Memory[PC];

• PC <= PC + 4;

Page 31: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

명령어 해독 및 레지스터 읽기

• A <= Reg[IR[25:21]];

• B <= Reg[IR[20:16]];

• ALUOut <= PC + (sign-extend (IR[15:0]) << 2);

Page 32: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

실행 단계

• 메모리 참조 명령어

• ALUOut <= A + sign-extend (IR[15:0]);

• 산술-논리 명령어

• ALUOut <= A op B;

Page 33: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

분기 완료

• 분기 명령어

• if (A == B) PC <= ALUOut;

• 점프 명령어

• PC <= {PC [31:28], ( IR[25:0]] << 2)};

Page 34: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

메모리 접근

• 메모리 참조

• MDR <= Memory[ALUOut];

• Memory[ALUOut] <= B;

Page 35: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

R-Type 명령어 완료

• 산술-논리 명령어

• Reg[IR[15:11]] <= ALUOut;

Page 36: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

메모리 읽기 완료

• Reg[IR[20:16]] <= MDR;

Page 37: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

명령어 단계 표

Page 38: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

제어를 정의하기

• 유한상태기 제어

• 마이크로 프로그래밍 기법

Page 39: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

유한상태기 제어

Page 40: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

예외, 인터럽트?

• 명령어 실행의 정상적인 흐름을 바꾸는 사건을 예외와 인터럽트라고 한다.

• 예외는 프로세서 내부에서 발생

• 인터럽트는 프로세서 외부에서 발생

Page 41: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

예외는 어떻게 처리?

• 문제를 일으킨 명령어의 주소를 예외 프로그램 카운터(EPC)에 저장하고 운영체제로 제어를 넘김

• 벡터 인터럽트를 이용하여 예외의 원인에 의해서 제어가 옮겨질 주소가 결정되어지고 벡터화된 예외처리에 의해 처리

Page 42: 프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수 레지스터 • 매 클럭 사이클의 끝에서 쓰기가 행해진다. • 별도의

Q & A