본문 바로가기
Computer Architecture/Processor

Processor의 구조 - 2. Control Signal 과 Data path

by FastBench 2024. 11. 9.
반응형

- 프로세서 시리즈 모아보기 -

https://microelectronics.tistory.com/112

 

기본적인 ISA 동작 방식을 모르면 이해하기 어렵습니다.

Control Signals

1. ALU 소스에서의 Control Signals

1.1 Immediate 명령어를 위한 ALU 소스

  • 명령어 예시: add immediate (addi 즉시 덧셈)
    • 작동 방식: 이 명령어는 첫 번째 피연산자를 레지스터 파일에서 가져오고, 두 번째 피연산자를 sign-extended immediate (확장된 즉시 값) 필드에서 가져온다. (즉시값은 상수 값으로, 명령어 자체에 포함된 상수 값을 의미한다)
    • 제어 신호: 이 경우, Multiplexer (MUX)가 input 1을 선택하도록 설정된다.
    • 설명: add immediate와 같은 명령어는 하나의 입력이 레지스터 파일에서 오고, 다른 입력은 sign-extended된 immediate 값을 사용하여 ALU에 전달된다. 이때, MX는 해당 입력들을 올바르게 선택하여 ALU가 계산을 수행할 수 있도록 한다.

1.2 레지스터 명령어를 위한 ALU 소스

  • 명령어 예시: add (레지스터 덧셈 명령어)
    • 작동 방식: 이 명령어는 두 개의 피연산자를 모두 레지스터 파일에서 가져온다.
    • 제어 신호: MX의 신호가 1로 설정되어, 레지스터 파일에서 가져온 두 입력 모두를 ALU에 전달한다.
    • 설명: 일반적인 add 명령어는 두 개의 레지스터 값을 사용하여 연산을 수행하며, 따라서 두 입력을 모두 레지스터 파일에서 가져와야 한다. MX는 두 레지스터의 값을 직접 ALU로 전달하여 연산이 가능하도록 한다.

2. 브랜치(Branch) 유닛 구성

2.1 기본 프로그램 카운터(PC) 증가

  • 작동 방식: 일반적인 명령어의 경우, PC는 단순히 4만큼 증가하여 다음 명령어를 가리킨다.
  • 구성 요소: 4를 더하는 Adder를 사용해 현재 PC에 4를 더해 다음 PC 값을 계산한다.
  • 흐름:
    • 현재 PC → Adder (4를 더함) → 다음 PC

2.2 조건부 브랜치의 로직

  • 필요성: 조건부 브랜치 명령어가 실행되면, PC는 계산된 오프셋을 더해 분기된 주소로 이동해야 한다.
  • 단계: MIPS 명령어의 분기 절차
    1. Sign-Extension: 명령어로부터 가져온 immediate 값을 sign-extended(부호 확장)한다. 이는 음수와 양수를 정확하게 표현하기 위해 필요하다.
    2. Shift: 확장된 immediate 값을 2비트 왼쪽으로 시프트하여 정렬을 맞춘다. 이는 명령어 주소가 4의 배수로 정렬되어 있어야 하기 때문이다.
    3. 덧셈: 시프트된 immediate 값을 PC + 4에 더하여 실제 브랜치 주소를 계산한다.

위 그림은 RISC-V 아키텍처에 기반한 그림이다.
본문의 게시글(Reference 링크 참조)은 MIPS 명령어를 기반으로 한 구현인데, branch 구현 부분이 다르다.
본문의 경우 PC 의 상태변화는 아래와 같다.
1. Default :   PC = PC+4
2. Conditional : PC = PC + 4 + [Sign extended immediate << 2] if branch 

하지만 RISC-V 의 경우 'b <label, 주소>' 와 같이 'immediate' 값이 다이렉트로 적용 된다.
따라서 MIPS 와 같이 shifting 시키는 부분이 존재하지 않는다.

현재 교육 용도인 만큼 세부적인 차이에 힘을 쏟을 필요는 없으니, 그냥 읽고 넘기자.

 

짚고 넘어가야할 점은, 이미 core 에 ALU 가 존재하는데, 왜 또 다른 Adder 를 넣느냐는 것이다.

메인 Adder 는 해당 시점에 '분기 조건 계산'을 해야한다. (예를들어 레지스터 값들의 비교)

추가된 Adder 는 '분기 주소 계산'을 해야한다. 이 둘은 동시에 일어나야 하기에 ALU 와 Adder 가 굳이 따로 존재하는 것이다.

2.3 브랜치 선택 메커니즘

  • Multiplexer (MUX): 브랜치 주소와 PC + 4 중 다음 PC로 사용할 값을 선택한다.
  • 결정 조건:
    • 브랜치 조건이 충족되면 브랜치 주소가 선택된다.
    • 브랜치 조건이 충족되지 않으면, PC + 4가 다음 PC 값으로 선택된다.

3. PC 소스 신호 결정 로직

3.1 브랜치 조건 만족 여부

  • Branch Equal 명령어:
    • 조건: ALU의 결과가 0이면 (두 값이 동일) 브랜치가 수행된다.
    • MUX 선택: ALU의 결과가 0일 때, 브랜치 주소가 선택되어 분기된 주소로 PC가 설정된다.
  • Branch Not Equal 명령어:
    • 조건: ALU의 결과가 0이 아닐 경우 (두 값이 다름) 브랜치가 수행된다.
    • MUX 선택: ALU의 결과가 0이 아닐 때, 브랜치 주소가 선택되어 분기된 주소로 PC가 설정된다.

이 로직은 각 명령어의 동작 방식에 따라 브랜치를 수행할지 또는 다음 명령어로 이동할지를 결정하는 핵심 메커니즘이다.

 

Data Path

1. Data Path 개요

Data Path는 프로세서 내에서 데이터가 흐르고 연산이 이루어지는 경로로, 명령어 실행을 위해 메모리, 레지스터 파일, ALU, 브랜치 로직, 사인 익스텐션, 그리고 MUX 등 다양한 요소들이 결합되어 작동하는 구성요소를 의미한다.

이번 부분에서는 데이터가 어디에서 오고, 어디로 가며, 제어 신호가 어떻게 설정되는지에 대해 자세히 알아본다.

 

1.1 상태 저장 장치 (메모리 요소)

  • 프로그램 카운터 (PC): 현재 실행 중인 명령어의 주소를 저장하며, 다음 명령어의 주소를 계산할 때 사용된다.
  • 명령어 메모리: 실행할 명령어를 저장하고 제공하는 메모리.
  • 레지스터 파일: 연산에 필요한 데이터(피연산자)를 저장하는 곳으로, 두 개의 출력 포트가 있어 ALU로 데이터를 보낼 수 있다.
  • 데이터 메모리: 명령어의 결과를 저장하거나 읽어올 때 사용되는 메모리.

이들 모두는 상태를 저장하는 역할을 하며, 프로세서가 연산 중에도 필요한 데이터와 명령어의 상태를 유지할 수 있도록 한다.

 

1.2 제어 신호 (Control Signals)

제어 신호는 데이터의 흐름과 연산을 결정하는 중요한 요소이다. 각 명령어가 어떤 작업을 수행할지 결정하기 위해 필요한 신호들이 설정된다.

  • PC Source: 브랜치 명령어의 경우만 활성화되어 브랜치 주소로 이동할지, 다음 명령어로 진행할지를 결정한다.
  • ALU Source: ALU에 어떤 값을 보낼지를 결정하며, 두 피연산자 중 어느 것을 선택할지 정한다.
  • ALU Operation: ALU가 수행할 연산을 설정하며, 덧셈(add)이나 OR와 같은 연산을 선택하도록 한다.
  • Memory ReadMemory Write: 메모리에 데이터를 읽거나 쓸 때 설정되는 신호이다.
  • Register Write: ALU 또는 메모리의 결과를 레지스터 파일에 쓰기 위해 설정되는 신호.
  • Memory to Register: 메모리에서 레지스터로 데이터를 전송할 때 필요한 신호.

이러한 제어 신호는 명령어를 **디코딩(Decoding)**하여 각 신호에 필요한 값을 설정함으로써 각 명령어가 정확히 수행되도록 한다.

2. Data Source 와 데이터 목적지

Data Path에서 데이터가 어디서 오고 어디로 가는지 이해하는 것은 매우 중요하다.

 

2.1 데이터 소스 (data source)

  1. 레지스터 파일:
    • 두 개의 출력 포트를 통해 ALU로 직접 데이터가 전달된다.
    • 각 명령어의 피연산자가 레지스터 파일에서 출력되어 ALU로 들어간다.
  2. 명령어의 Immediate 필드:
    • 즉시 값이 필요한 경우, 명령어에서 Immediate 필드를 가져와 사인 익스텐션을 거쳐 ALU로 입력된다.
  3. 데이터 메모리:
    • 메모리에서 데이터를 읽어와 레지스터 파일에 쓰거나, ALU의 입력으로 사용할 수 있다.

2.2 데이터 목적지 (data destination)

  1. 레지스터 파일:
    • ALU 결과나 메모리에서 가져온 데이터가 레지스터 파일에 쓰여 저장된다.
  2. 데이터 메모리:
    • 레지스터 파일에서 읽어온 데이터를 데이터 메모리에 쓰기 위해 사용될 수 있다.
  3. 데이터 주소:
    • 데이터 메모리에 접근할 주소를 설정할 때에도 데이터를 사용할 수 있다. 이를 통해 원하는 메모리 위치에 접근할 수 있게 된다.

3. 예시: add immediate 명령어의 data flow

add immediate 명령어를 통해 데이터가 어떻게 흐르고, 제어 신호가 어떻게 설정되는지를 살펴보자.

3.1 데이터 입력

  1. 첫 번째 입력:
    • 항상 레지스터 파일에서 가져온다. add immediate 명령어에서는 이 첫 번째 입력이 레지스터 파일에서 ALU로 직접 전달된다.
  2. 두 번째 입력 (Immediate 값):
    • 명령어의 Immediate 필드에서 가져오며, ALU로 보내기 전에 sign-extended 과정을 거쳐 MUX를 통과하여 전달된다.

3.2 데이터 출력

  • 출력 처리:
    • add immediate 명령어의 결과는 레지스터 파일로 다시 쓰여 저장된다. 따라서 ALU의 출력은 레지스터 파일의 적절한 위치에 기록된다.

3.3 제어신호

  • PC Source:
    • add immediate는 브랜치 명령어가 아니므로, 다음 명령어로 진행하기 위해 PC + 4가 선택된다. 이는 브랜치가 아닌 명령어의 경우 항상 다음 명령어로 이동하도록 하기 위함이다.
  • ALU Source: 
    • Sign-extended 즉시값을 받도록 설정된다.
  • MemtoReg:
    • Memory Read 데이터가 아닌 ALU 의 연산결과를 받도록 설정된다.

이러한 과정을 통해 add immediate 명령어의 각 부분이 올바르게 동작하도록 설정된다.

 

4. 예시: Load Word 명령어의 data flow

Load Word 명령어에서는 메모리에서 데이터를 읽어오는 과정에서 ALU 소스와 연산이 중요한 역할을 한다.

lw R2, 12(R3)

 

이번 부분에서는 Load Word 명령어를 예로 들어 ALU가 주소를 계산하는 방식을 알아본다.

 

4.1 데이터 입력 

  • 작동 방식:
    • ALU는 메모리 주소를 계산하기 위해 레지스터 파일에서 가져온 값과 immediate 값을 더한다.
    • 예를 들어, Load Word 명령어가 R2에 값을 저장하고, 주소는 R3에 저장된 값에 12라는 오프셋을 더해 계산한다고 가정한다.
    • 이때 R3의 값이 주소의 기반이 되고, 이 값에 sign-extended된 immediate 값 12를 더해 최종 주소를 계산한다.

4.2 데이터 출력

  • 출력 처리:
    • lw 명령어의 결과는 레지스터 파일로 다시 쓰여 저장된다. 따라서 ALU의 출력은 메모리의 주소로 향하고, 이 주소를 통해 메모리에서 데이터를 가져와 레지스터 파일에 쓸 수 있게 한다.
  •  

결론

  1. Data Path는 프로세서 내에서 데이터가 이동하고 연산이 이루어지는 경로로, 레지스터 파일, 메모리, ALU, 브랜치 로직, MUX 등의 구성 요소를 통해 명령어가 어떻게 실행되는지를 결정한다.
  2. 제어 신호는 데이터 흐름과 연산을 제어하는 핵심적인 역할을 하며, 명령어에 따라 PC Source, ALU Source, ALU Operation, Memory Read/Write 등의 신호들이 적절하게 설정되어야 한다. 이는 명령어의 종류에 따라 필요한 연산과 데이터 흐름을 정확히 제어하기 위해 필수적이다.
  3. 브랜치 유닛 구성에서는 PC가 기본적으로 다음 명령어로 이동하기 위해 PC + 4를 설정하지만, 브랜치 조건을 만족할 경우 새로운 브랜치 주소로 이동하도록 설정된다. 이는 RISC-V와 MIPS에서 구현 방식에 차이가 있으나, 둘 모두 명령어의 작동방식에 맞춰 설계되었을 뿐이다.

 

Reference

반응형

댓글