Instruction의 종류와 구조

opcode 0 : R-format (Arithmetic/Logic Operations)
opcode 35 : Load Operation
opcode 43 : Store Operation
opcode 4 : Branch Operation
Data path에서 각 multiplexer들이 하는 역할

(1) R-format (산술/논리)의 데이터패스 동작

add $t1, $t2, $t3
1. 명령어를 인출하고 PC를 증가시킨다.
2. 레지스터 파일에서 두 레지스터 $t1, $t2를 읽는다. 동시에 주 제어 유닛은 제어선의 값들을 결정한다.
3. ALU는 레시스터 파일에서 읽어들인 값들에 대해 연산을 하는데, 기능코드(instruction 필드인 비트 5:0)를 사용하여 ALU 제어 신호를 만든다.
4. ALU의 결과값을 레지스터 파일에 쓰되, 명령어의 비트 15:11을 이용하여 목적지 레지스터($t1)를 선택한다.
(2) 적재 명령어의 데이터 패스 동작

lw $t1, offset($t2)
1. 명령어를 명령어 메모리에서 인출하고 PC 값을 증가시킨다.
2. 레지스터 파일에서 레지스터 $t2를 읽는다.
3. ALU는 레지스터 파일에서 읽어 들인 값(rs)과 명령어의 하위 16비트(offset)를 부호확장한(sign-extended) 값의 합을 구한다
4. 이 합을 데이터 메모리 접근을 위한 주소로 사용한다.
5. 메모리 유닛에서 가져온 데이터를 레지스터 파일에 쓴다. 목적지 레지스터 ($t1)는 명령어의 비트 20:16이 지정한다.
(3) 분기 명령어의 데이터 패스 동작

beq $t1, $t2, offset
1. 명령어를 명령어 메모리에서 인출하고 PC 값을 증가시킨다.
2. 레지스터 파일에서 두 레지스터 $t1과 $t2를 읽는다.
3. ALU는 레지스터 파일에서 읽어 들인 값들에 대해 뺄셈은 한다. 명령어의 하위 16비트(offset)를 부호확장한 후 2비트 왼쪽 쉬프트한 값에다 PC+4 값을 더한다. 이 값이 분기 목적지 주소이다.
4. 어떤 덧셈기의 결과를 PC에 저장할지 ALU의 Zero 출력을 이용하여 결정한다.
(4) 점프 명령어이 데이터 패스 동작

분기 주소처럼 점프 주소의 하위 2비트는 항상 00이다.
다음 3개의 값을 concatenate해서 PC에 저장하면 점프 명령어를 구현할 수 있다.
- (현재 PC + 4)의 상위 4비트 (다음 명령어 주소의 비트 31:28)
- 점프 명령어의 26비트 수치 필드
- 비트 00