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
에 수행할 연산을 지정할 수 있다.