Processor

cpu time으로 cpu의 performance를 측정한다.

cpu time = instruction count * cpi * clock cycle time

Instruction Execution

모든 instruction에 대해서 두가지 step은 항상 동일하다.

  1. 코드를 포함하는 program counter를 메모리로 보내고 instruction을 메모리에서 가져온다. pc의 주소값에 있는 코드를 읽어서 수행한다는 뜻
  2. instruction을 읽으면 세 개의 operand들이 있는데, 그 값을 읽어서 레지스터를 세팅한다.

Instruction class

ALU를 사용하는 경우는

  1. lw, sw명령으로 주소를 계산할때 사용
  2. branch명령으로 beq등을 수행할 때 크기를 비교하기 위해서 뺄셈에 사용
  3. pc가 target address로 가거나 pc+4를 위해서 사용

MIPS CPU Implementation

pc는 현재 실행해야하는 코드의 주소를 가리키고 있다. 그 주소를 instruction memory에 보내주면 주소에 해당하는 코드를 로드해서 Registers로 보낸다.

add를 예로 들면 rs와 rt를 ALU의 입력으로 넣어주고 ALU는 덧셈을 수행한 다음 메모리에 접근할 필요 없으므로 바로 Data에 저장된다. pc는 Adder에서 +4가 되어서 다음 코드의 위치를 가리키고 branch인 경우에는 Adder를 한 번 더거쳐서 pc+4 +8과 같은 연산을 한다. 그 과정에서 sll을 통해서 word address를 byte address로 바꾸는 과정도 포함된다.

R-Foramt 명령어는 연산 수행 결과를 rd레지스터에 저장한다.

라인이 겹치는 부분에 MUX(multiplexer)를 달아준다. 값에 따라서 방향을 결정해주는 스위치이다.