이제는 Single Cycle을 다루기 위한 제어부들을 한 번 살펴보자.
control 신호들이 있는데, 우선 1) 레지스터에 필요한 읽기 쓰기 신호가 있고 2) Mux의 select 신호 3) 메모리의 읽기 쓰기 신호 4) ALU의 연산 5) branch여부에 대한 beq 등이 있다.
이러한 제어부들을 포함하여 그리면 아래와 같이 그려진다.
모두 op code 6비트로 알 수 있는 것이다!
추가적으로 ALU control이 있는데, 여기서 나오는 출력 값이 ALU를 직접 제어하는 신호로 4비트 짜리 신호이다. ALUOp에서 나와 들어오는 input은 2비트 짜리이다. 이 2비트 짜리 신호는 1)sw,lw 인지 2)beq 인지 3)나머지 산술 논리 연산자 인지 세 가지를 알려주는 신호이다.
1)sw,lw : 주소 계산을 위한 뎃셈연산
2)beq : branch여부를 판단하기 위해 뺄셈 연산
3)나머지 산술 논리 연산자 : op code 6비트 이외의 funct코드를 추가적으로 보아 어떤 연산을 할지 정해야 한다.
3)나머지 산술 논리 연산자 : op code 6비트 이외의 funct코드를 추가적으로 보아 어떤 연산을 할지 정해야 한다.
ALUOp에서 이 부분을 한 번 살펴보자. 이 부분은 function field를 잘 살피고 진행해야 한다.
"ALUOp from control component"
00 : lw, sw
01 : beq
=> 이 둘의 경우 function field와 상관없이 ALU operation이 진행
10 : arithmetic
=> function field를 보고 진행
이와 같이 Simple(Single) Cycle로 간단한 CPU 구현을 살펴봤다!
instruction memory와 data memory가 나뉘어 있고, 한 사이클 내에 모든 것을 수행하기 위해 ALU가 있지만 add 연산기를 몇 개 추가한 점이 특징이라고 볼 수 있다.