CS/Computer Architecture

[컴퓨터구조] 5-5.1. Instruction Cycle

F12:) 2023. 9. 27. 12:22

오늘은 Instruction cycle에 대해서 다뤄보겠습니다.

 

Instruction cycle은 아래와 같은 subcycle로 나누어집니다.

  1. 메모리로부터 instruciton을 fetch
  2. instruction을 decode
  3. indirect addressing mode일 때는 메모리로부터 유효한 주소를 read
  4. instruction을 execute

 

이번 글에서는 fetch와 decode에 대해서 조금 더 자세히 알아보고자 합니다.

 

Fetch and Decode

이전 글에서 우리는 Timing에 대한 이야기를 한 적이 있습니다. 실제로, 이 Timing에 수행되는 연산은 어느정도 정해져있고, 특히나 fetch와 decode 부분에서는 더욱 그렇습니다.

 

Fetch

fetch는 기능을 수행하는데에 총 2 clock이 소모됩니다. 다음과 같은 기능들을 수행합니다.

 

T0 에서는 PC 레지스터의 값을 AR에 Load합니다.

T1에서는 메모리에서 AR에 있는 주소에 가서 값을 읽어와 IR에 넣습니다. 또한 PC를 1 증가시킵니다.

 

즉, 

T0는 다음 실행할 주소를 이제 진짜 수행한다는 뜻

T1은 주소에 가서 instruction을 읽어오고, PC를 증가시켜, 다음 실행시킬 부분을 가리키도록 한 것입니다.

 

이것이 fetch입니다. 내가 실행할 명령어를 세팅하는 과정이라고 봐도 무방하죠.

 

Decode

말 그대로, 해석하는 부분입니다. 우리가 읽어온 instruction에 의해서 어떠한 연산을 수행할 지 결정해야하므로, 해당 과정을 통해서 해독합니다. decode 부분은 총 1 clock이 소모됩니다.

IR에 있는 12-14비트 (Opcode)에 대한 값을 읽어오고 D0부터 D7까지로 매핑합니다. 여기서 D0 - D6는 memory-reference instruction을 의미하고 D7이라면 그것이 아님을 알 수 있죠.

 

또한 0번지부터 11번지까지는 memory-reference instruction이라면 operand의 주소가 있을 것이고, 그렇지 않다면 어떠한 세부 연산을 수행해야할 지를 알려줄 것입니다. 마지막으로 15번째 비트에서는 addressing mode를 파악하기 위한 것입니다.

 

즉, insturction register에 있는 값들에 대응하여 어떠한 작동을 해야할지를 결정하는 부분이라고 할 수 있습니다.

 

 

 

앞서 설명드린 Fetch와 Decode는 총 3 clock이 소요되며, 이는 어떠한 모든 instruction에 대해서도 공통적으로 작용합니다. 즉, 우리가 어떠한 instruction을 수행하기 위해서는 무조건 T3에서, 실행이 되어야한다는 뜻이 되겠죠??

 

 


 

 

Instruction Cycles - Fetch

이제, 진짜 Instruction Cycle에 대해서 공부해봅시다. 그 중 우리는 오늘 fetch cycle에 대해서 다뤄보겠습니다.

파란색 -> 빨간색 -> 주황색 -> 보라색 순서로 읽으시면 조금 더 편합니다.

천천히 그림과 함께 설명을 진행해보겠습니다. 가장 먼저 T0일 때를 확인합시다. 그렇다면 T0=1, T1=0이 될 것입니다. 그렇게 되면 BUS에는 010이 들어가게 되어 2가 선택될 것입니다. 즉, PC 레지스터의 데이터가 Bus에 실리고, PC가 bus master가 되겠죠.

 

한편, T0와 연결되어 있는 AR의 LD control signal이 enable 될 것입니다. 그 외의 다른 control signal들은 disable입니다.

이제 clock이 뜹니다. clock 신호가 켜지게 되면, bus에 있던 PC의 데이터 값이 AR로 LD되는 것입니다. 이와 동시에 AR의 주소값이 Memory unit에 들어가게 되겠죠.

 

정리해보면 T0일 때는 PC가 bus master이고, 그렇게 버스에 실린 PC의 데이터를 control signal이 enable인 AR이 받게 되는 것입니다. 이와 동시에 AR에 LD된 PC의 값이 Memory에 담겨지게 되겠죠.

 

 

이제, T1을 봅시다.

 

마찬가지로 파란색 -> 빨간색 -> 주황색 -> 보라색 순서입니다.

T1일 때는 꽤나 과정이 많아서 복잡할 수 있습니다. 순서대로 확인해보면 쉽게 알 수 있습니다. 

우선 T1이므로 Bus에는 111의 값이 전달되고, bus master는 7이 됩니다. 즉, Memory가 되겠죠. Memory에 있는 값은 CPU 내부에 있지 않습니다. 그래서 Read control signal이 떠야 값을 읽어올 수 있죠. 반면 다른 레지스터들은 CPU 내에 있기 때문에 Read 문이 필요하지 않습니다. 따라서, 현재 버스 내에는 데이터가 없습니다. 

 

그 상태에서 clock이 뜨게 되면, Memory에 read control signal이 enable이므로, memory의 Address에 해당하는 데이터가 버스에 실리게 되고, 그러한 데이터들이 IR에 Load됩니다. 또한 PC의 INR도 enable이므로 PC +1을 수행하게 되는 것이죠.

 

그렇게 fetch의 역할을 수행하게 되는 것입니다.

 

 

 

 

Instruction Cycles

앞전에 설명한 것처럼, 우리는 T2까지 고정되어 있는 작업이 있습니다. 따라서 T3부터 우리는 각 instruction에 맞게 처리를 해야할 필요가 있습니다. 이러한 과정을 아래와 같은 flow chart로 설명할 수 있습니다.

 

Instruction Cycle의 flow chart

이 그림에서 지금까지 배운 것을 모두 확인할 수 있습니다. 가장 먼저 SC(sequence counter)를 0으로 세팅합니다. 즉, Clear를 의미하죠. 그렇게 되면 T0부터 시작하는 것을 우리는 이전 글에서 배웠습니다. 

 

이제 T0, T1에서는 fetch를 수행합니다. 그리고, T2에서 decode를 수행하죠.

 

이제부터 핵심입니다. decode가 끝나면, instruction 중에서 어떤 instruction인지를 찾아야합니다.

다시 복기해보면 instruction은 memory-reference instruciton, register-reference instruciton, Input-output Instruction이 있었죠.

기억나지 않는다면 이전 글 참고!!

 

어떤 instruction인지를 구분하는 것은 Opcode를 보고 찾아냅니다. Opcode가 D7 즉, 111이라면 이는 memory-reference instruction이 아님을 의미합니다. 즉, register 아니면 I/O가 되겠죠.

 

그래서 이 플로우차트에서는 D7이 1인지 아닌지를 확인합니다. 그러면 왼쪽에는 register 또는 I/O가 오게되고, 우측에는 memory-reference가 오게 되겠죠.

 

다음 단계는 동일합니다. 좌측에서도, 우측에서도 I 부분을 확인합니다. I에는 memory일 때, Addressing mode를 결정하고, memory가 아니면 register인지 I/O 인지를 결정하게 됩니다.

 

따라서, I 부분을 확인했다면, 4가지로 나뉠 것입니다.

 

Indirect mode memory, Direct mode memory, register, Input/output

 

따라서 이제, 이 4개에 대해서 실행을 해주면 됩니다. 실행을 하는 자세한 과정은 다음 글에서 더욱 다루겠습니다.

만약 해당 IR에 있는 명령을 모두 수행했다면 SC를 0으로 초기화 시켜주고 다시 fetch 부분으로 돌아갑니다.

 

여기서 우측의 memory 부분은 과정이 조금 다릅니다. Indirect일 때는 주소지로 한번 이동후에 실행을 해야하지만, direct일 때는 그러하지 않습니다. AR이 가르키는 주소에 바로 데이터가 있죠. 따라서 indirect와 실행 주기를 맞추기 위해서 한턴 쉽니다. 따라서 direct 모드일 때는 T3에 아무 동작을 수행하지 않는 것이 큰 특징입니다.

 

 

이것이 Instruction Cycle의 전부입니다. 이제, 각 명령어마다 어떻게 동작을 수행하는지를 알아보면 됩니다.

 


오늘은 Control Unit에서 Instruction 을 수행하는 과정에 대해 다뤘습니다. 간단한 도입부이니 다음 글에서 더욱 심화되게 다뤄보겠습니다. 감사합니다.