프로세서프로그램 카운터 • 현재 명령어의 주소를 기억 • 32비트 특수...
TRANSCRIPT
프로세서08. 04. 17(목)
데이터패스 만들기
• 메모리 유닛(Memory Unit)
• 프로그램 카운터(Program Counter)
• 덧셈기(Adder)
메모리 유닛
• 명령어를 저장
• 입력된 주소에서 명령어를 가져온다.
• 읽기 접근만 제공
• 출력은 항상 주소입력에의해 지정된 위치의 내용.
프로그램 카운터
• 현재 명령어의 주소를 기억
• 32비트 특수 레지스터
• 매 클럭 사이클의 끝에서쓰기가 행해진다.
• 별도의 쓰기 제어신호는필요없다.
덧셈기
• PC값을 다음 명령어 주소로 증가시키기 위해서 사용
명령어 가져오기
R-Type 명령어
• 모든 R-Type 명령어들은 두 개의 레지스터를 읽고 레지스터 내용에 ALU 연산을 수행하며 그 결과를 레지스터에 쓴다.
• R-Type 명령어 또는 산술/논리 명령어
• add $1, $2, $3
레지스터 파일
• 레지스터의 집합
• 어떤 레지스터도 읽고쓸 수가 있다.
• 레지스터의 상태를 포함
• 모서리 구동 방식으로 동작
ALU
• 산술/논리 연산을 수행
• 4개의 ALU 연산신호에 의해 연산의 종류가 결정
• 분기를 구현하는 데 필요한 Zero 검출 출력을 가짐
메모리 참조 명령어
• 워드적재(lw), 워드저장(sw) 명령어
• 접근할 메모리 주소의 계산이 필요함
• 읽거나 쓸 데이터를 저장하기 위한데이터 메모리가 필요하다.
데이터 메모리
• 읽기 제어신호 혹은 쓰기 제어신호, 주소입력, 쓰기 명령어인 경우 쓸 데이터 입력
• 메모리로부터 읽어온 데이터를 출력
부호확장 유닛
• 16비트로 이루어진 offset 주소를 32비트로 확장하기 위해서 사용되는 요소
분기 명령어
• 세 개의 피연산자를 갖는데 같은지 비교하게 될 두 개의 레지스터와 16비트 변위
• 변위는 분기 명령어 주소에 대한 분기목적지주소의 상대적 값이다.
• PC = 분기 명령어 주소 + 4 + 변위
주의할 점!!
• 분기 주소 계산에서 기준주소는 분기 명령어 다음에 나오는 명령어의 주소이다.
• 변위필드는 워드변위를 나타내므로 2비트만큼 왼쪽 자리이동시켜 사용한다.
분기를 위한 데이터패스
점프 명령어
• 프로그램의 흐름을 무조건적으로 변경
• 명령어의 하위 26비트를 2비트만큼 왼쪽으로 자리이동한 값으로 PC의 하위 28비트를 대체한다.
• 자리이동은 점프변위 뒤에다 00을 덧붙이는 것으로 완료된다.
단일 데이터 패스로 합치기
MIPS 데이터 패스
ALU 제어
ALU 제어
주요 제어유닛 설계
주요 제어유닛 설계
단일 사이클을 사용하지 않는 이유
• 한 마디로 비효율적이다!!
• 모든 명령어가 같은 클럭 사이클을 가짐
• CPI값은 항상 1이다.
• 클럭 사이클 동안에 시간이 낭비됨
다중 사이클 구현
• 하나의 명령어 실행을 단계별로 구성
• 각 단계에 하나의 클럭 사이클을 사용
• 명령어마다 다른 클럭 사이클 수를 가짐
• 명령어 실행 내에서 기능 유닛을 공유
추상적 다중 사이클
단일 사이클과 차이점
• 명령어와 데이터용으로 하나의 메모리 유닛을 사용한다.
• 하나의 ALU와 두 개의 덧셈기 대신에 하나의 ALU가 쓰인다.
• 출력 값이 다음 클럭 사이클에 쓰일 때까지 그 유닛의 출력을 유지하도록 한다.
명령어의 단계
• 명령어 인출 단계
• 명령어 해독 및 레지스터 읽기 단계
• 실행, 메모리 주소 계산 또는 분기
• 메모리 접근 또는 R-Type 명령어 완료
• 메모리 읽기 완료 단계
명령어 인출 단계
• IR <= Memory[PC];
• PC <= PC + 4;
명령어 해독 및 레지스터 읽기
• A <= Reg[IR[25:21]];
• B <= Reg[IR[20:16]];
• ALUOut <= PC + (sign-extend (IR[15:0]) << 2);
실행 단계
• 메모리 참조 명령어
• ALUOut <= A + sign-extend (IR[15:0]);
• 산술-논리 명령어
• ALUOut <= A op B;
분기 완료
• 분기 명령어
• if (A == B) PC <= ALUOut;
• 점프 명령어
• PC <= {PC [31:28], ( IR[25:0]] << 2)};
메모리 접근
• 메모리 참조
• MDR <= Memory[ALUOut];
• Memory[ALUOut] <= B;
R-Type 명령어 완료
• 산술-논리 명령어
• Reg[IR[15:11]] <= ALUOut;
메모리 읽기 완료
• Reg[IR[20:16]] <= MDR;
명령어 단계 표
제어를 정의하기
• 유한상태기 제어
• 마이크로 프로그래밍 기법
유한상태기 제어
예외, 인터럽트?
• 명령어 실행의 정상적인 흐름을 바꾸는 사건을 예외와 인터럽트라고 한다.
• 예외는 프로세서 내부에서 발생
• 인터럽트는 프로세서 외부에서 발생
예외는 어떻게 처리?
• 문제를 일으킨 명령어의 주소를 예외 프로그램 카운터(EPC)에 저장하고 운영체제로 제어를 넘김
• 벡터 인터럽트를 이용하여 예외의 원인에 의해서 제어가 옮겨질 주소가 결정되어지고 벡터화된 예외처리에 의해 처리
Q & A