Building a Datapath
- Datapath : Elements that process data and addressees in the CPU
- Register, ALU, MUX, Memory, ...
- add rd, rs, rt
- sub rd, rs, rt
- lw rt, rs, imm
- sw rt, rs, imm
- beq rs, rt, imm
- ori rt, rs, imm
- Branch uses PC relative addressing
: PC + 4 + (4 * imm)
- Use pseudodirect addressing(target * 4) to allow addressing 228 bits directly
- Uses top 4 bits from PC
- Read two register operands,
- Perform arithmetic/logical operation,
- Write register result
- 레지스터 번호용 : (Read register1, 2, Write register) - 5bits
(32개의 레지스터 중 하나)
- 데이터용 : (Write data, Read data1, 2) - 32 bits
2개의 MUX와 1개의 Sign Extension이 추가된다.
- 1st MUX : 만약 R-format이면(by RegDst), Rd를 선택한다
- 2st MUX : 만약 R-format이면(by ALUsrc), register에서 data를 선택한다.
Load / Store Instruction
- Read register operands,
- Calculate address(to read/write) using 16-bit offset,
- Use ALU, but sign-extend offset
- (Load) Read memory and update register
- (Store) Write register value to memory
Load
Sign Extension logic이 추가된다.
- lw $t1, offset_value($t2)
- offset_value은 양수, 음수 둘 다 가능하다
- Read register 1에는 rs($r2)가 들어간다.
- Read register 2에는 아무것도 안들어간다.
- Write register에는 rt($r1)이 들어간다.
- Sign extend에 100이 들어간다.
- ALU의 윗부분에는 $r2, 아래부분에는 100이 들어가서 이를 더한다.
- 이 결과값을 이용해, data memory를 읽는다.
Store
register에서 memory로 가는 path가 추가된다.
Branch Instruction
- Read register operands,
- Compare operands
- Use ALU, subtract and check Zero output
- Calculate target address
- Sign-extend displacement
- Shift left 2 places (word displacement)
- 명령어 집합 구조는 변위 필드가 2비트만큼 left shift해서 워드 변위가 된다고 서술한다.
- 이를 통해 변위 필드의 유효 범위를 4배 증가시킨다.
- Add to PC + 4
- 명령어 집합 구조는 분기 주소 계산의 베이스 주소가 분기 명령어 다음 명령어의 주소라고 서술하고 있다.
Jump Instruction
- instruction의 하위 26비트를 2비트만큼 왼족으로 자리이동한 값으로
PC의 하위 28비트를 대체한다. (점프 offset 뒤에 00을 덧붙이면 된다)
Full Datapath