23.09.12 최초 작성

Datapath : 데이터가 움직이는 경로를 나타낸 것

read에 입력되면 해당하는 명령어를 반환한다.ADD연산기에 상수 4를 넣어두고 PC+4 값을 만든다. 해당 결과는 다음 클락 구동때(rising & falling edge...) PC에 반영된다.

Rm, Rn로 지정할 레지스터를 Read Register 1, 2에 입력한 값으로 결정한다. Read Register 1, 2에 저장된 값은 Read Data 1, 2로 나온다.Rd로 지정할 레지스터를 Write Register에 입력한 값으로 결정한다.Write Data는 ALU result의 값을 받아 저장한다.ALU Operation은 수행할 연산의 종류를 지정한다.
Address로 들어온 메모리의 주소 안에 있는 값을 레지스터에 저장한다. (MemRead 신호)Write Data로 들어온 레지스터 값을 Address로 들어온 메모리 주소에 저장한다.(MemWrite 신호)Sign Extend은 32비트 을 64비트로 변환해준다. (Address는 32비트 offset값이기 때문에)
Read Register 1, 2에 저장된 값이 Read Data 1, 2로 나오고 ALU에서 뺄셈을 한다.ALU에 입력된 Read Data1과 Read Data2 의 값이 같으면 0이 아닌 값이 세팅되고 이 경우 PC+4 값이 다음 분기 목적지 주소가 된다.
Datapath가 겹칠 경우 Multiplexer를 사용해 여러개의 입력 값 중 하나를 선택한다.
PCSrc : 분기를 다음 명령어(PC+4)로 할지, 다른 목적지 주소로 할지 결정하는 MuxALUSrc : ALU의 Operand를 레지스터에 저장된 값으로 할지, 상수로 할지 결정하는 MuxMemtoReg : ALU에서 나온 값이 다시 레지스터로 쓰여질지, 메모리에서 나온 값이 레지스터로 쓰여질지 결정하는 MuxALU는 ALU control의 값에 따라 정해진 연산을 수행한다.


명령어의 Opcode에서 2비트의 ALUOp를 얻을 수 있고 이에 따라 ALU control에 수행할 연산을 지정할 수 있다.
