전반적인 step을 한 번 살펴보자!
Instruction Fetch
Instruction Decode and Register Fetch
Execution, Memory Address Computation, or Branch Completion
Memory Access or R-type instruction completion
Write-back step
PC에서 데이터를 읽어서 IR에 저장한다.
그리고 PC+4를 미리 해 둔다.
A register와 B register에 필요한 값을 미리 읽어와서 저장해 둔다.
그리고 Branch 명령어를 대비하여 ALUOut에 branch target 주소를 미리 계산해 둔다.
여기까지는 공통적으로 일어나는 부분이다.
여기서부터는 명령어에 따라 달라지는데 lw,sw의 경우는 주소 계산 부터 진행하게 된다.
rs field에서 나온 값과 sign-extend(IR)의 값을 더하여 생성한다.
R-type의 명령어는 add, sub, and 등에 따라 계산 후 저장한다.
Branch명령어의 경우는 A와 B를 비교하여 같으면 실행하고 그렇지 않으면 실행하지 않는다.
lw의 경우 메모리에서 데이터를 읽어서 메모리 데이터 레지스터에 저장한다.
즉, ALUOut에서 나온 것이 메모리의 주소가 되며, 이것은 명령어가 아니기에 memory data register로 가게 되어 memory data register를 업데이트 한다.
sw의 경우 rt에서 나온 값 또한 같이 들어가게 된다.
R format의 경우 rd가 가리키는 곳에 수행한 값을 write로 저장하게 된다.
마지막 사이클은 lw밖에 없다.
마지막에 내부 레지스터에 저장해 주는 작업을 진행한다.
memory data register에 있는 값이 register file에 저장되고, mux가 rt field에서 어디에 저장하는 지 알려주며 그곳에 저장하면 되는 것이다.