본문으로 바로가기

CPU: Pipeline Register란?

Kade Kang
Kade Kang
조회수 80

파이프라인 레지스터(Pipeline Register)는 컴퓨터 아키텍처에서 명령어 파이프라인의 각 단계(stage) 사이에 위치하여, 이전 단계의 결과를 저장하고 다음 단계로 전달하는 역할을 하는 특별한 레지스터입니다. 이를 통해 여러 명령어가 동시에 파이프라인의 다른 단계에 걸쳐 실행될 수 있도록 하여 CPU의 처리량(throughput)을 크게 향상시킵니다.

쉽게 비유하자면, 세탁, 건조, 다림질의 세 단계로 이루어진 세탁 과정을 생각해보세요. 파이프라인이 없다면 한 세탁물이 세 단계를 모두 마친 후에야 다음 세탁물이 세탁을 시작할 수 있습니다. 하지만 파이프라인이 있다면, 첫 번째 세탁물이 건조 중일 때 두 번째 세탁물은 세탁을 시작할 수 있고, 세 번째 세탁물은 다림질을 할 수 있습니다. 이 경우 각 세탁물 사이에는 바구니(파이프라인 레지스터)가 있어서 한 단계가 끝난 옷을 다음 단계로 넘겨주는 역할을 합니다.

CPU 파이프라인의 일반적인 5단계(MIPS 아키텍처 기준)와 각 파이프라인 레지스터에 저장되는 값은 다음과 같습니다.

CPU: Pipeline Register란?  image 1

각 파이프라인 레지스터에 저장되는 값

각 단계의 출력이 다음 단계의 입력으로 사용될 때, 이 값들이 파이프라인 레지스터에 저장됩니다. 파이프라인 레지스터의 이름은 일반적으로 연결하는 두 단계의 이름을 따서 명명됩니다 (예: IF/ID).

파이프라인 레지스터에 저장되기 전에는 명령어에 따라 유용한 값인지, 쓸모없는 값인지 판단할 수 없기 때문에 파이프라인 레지스터에는 모든 값이 모두 저장됩니다.

  1. IF/ID (Instruction Fetch / Instruction Decode) Register

    • 저장되는 값:

      • 현재 클록 사이클에서 인출된 명령어 (Instruction)

      • 다음 명령어를 가리키는 PC + 4 값 (프로그램 카운터 + 4): 분기 명령어 처리, 예외 발생 시 PC 복구 등에 사용될 수 있습니다.

    • 역할: IF 단계에서 가져온 명령어와 다음 PC 값을 ID 단계로 전달하여 명령어 해독 및 레지스터 읽기에 사용되도록 합니다.

  2. ID/EX (Instruction Decode / Execute) Register

    • 저장되는 값:

      • 제어 신호 (Control Signals): EX, MEM, WB 단계에서 필요한 모든 제어 신호들 (예: RegWrite, MemRead, MemWrite, ALUSrc, ALUOp 등)이 이 단계에서 확정되어 이후 단계로 전달됩니다.

      • 레지스터 파일에서 읽어온 두 개의 소스 피연산자 값 (Read Data 1, Read Data 2): 명령어의 rs, rt 필드에 해당하는 레지스터 값입니다.

      • 부호 확장된 즉시 값 (Sign-extended Immediate Value): I-type 명령어(예: lw, sw, addi)에서 사용되는 즉시 값입니다.

      • PC + 4 값: 다음 명령어의 주소로, 분기 주소 계산이나 예외 처리 시 사용될 수 있습니다.

      • 쓰기 레지스터 번호 (Destination Register Number): R-type 명령어의 rd 필드 값과 I-type 명령어의 rt 필드 값 (목적지 레지스터 번호). 이는 WB 단계에서 어떤 레지스터에 결과를 쓸지 결정하는 데 사용됩니다.

    • 역할: ID 단계에서 해독된 명령어 정보와 레지스터 값을 EX 단계로 전달하여 연산 실행 및 주소 계산에 사용되도록 합니다.

  3. EX/MEM (Execute / Memory Access) Register

    • 저장되는 값:

      • 제어 신호 (Control Signals): MEM, WB 단계에서 필요한 제어 신호들 (예: MemRead, MemWrite, MemtoReg, RegWrite 등)이 전달됩니다.

      • ALU 결과 (ALU Result): 연산 명령어의 결과값, 또는 메모리 접근 명령어의 유효 주소입니다.

      • 레지스터 파일에서 읽어온 두 번째 소스 피연산자 값 (Read Data 2): store 명령어의 경우 메모리에 쓸 데이터 값으로 사용됩니다.

      • 쓰기 레지스터 번호 (Destination Register Number): WB 단계에서 결과를 쓸 레지스터 번호입니다.

      • Zero 플래그 (Zero Flag): 분기 명령어에서 ALU 연산 결과가 0인지 여부를 나타내며, 조건부 분기에 사용됩니다.

      • 분기 대상 주소 (Branch Target Address): 분기 명령어인 경우 점프할 주소입니다.

    • 역할: EX 단계의 연산 결과와 메모리 접근에 필요한 정보를 MEM 단계로 전달하여 메모리 읽기/쓰기 작업에 사용되도록 합니다.

  4. MEM/WB (Memory Access / Write Back) Register

    • 저장되는 값:

      • 제어 신호 (Control Signals): WB 단계에서 필요한 제어 신호들 (예: MemtoReg, RegWrite 등)이 전달됩니다.

      • ALU 결과 (ALU Result): 연산 명령어의 최종 결과 또는 load 명령어에서 읽어온 메모리 데이터의 주소입니다.

      • 메모리에서 읽어온 데이터 (Read Data from Memory): load 명령어의 경우 메모리에서 읽은 실제 데이터 값입니다.

      • 쓰기 레지스터 번호 (Destination Register Number): WB 단계에서 최종 결과를 쓸 레지스터 번호입니다.

    • 역할: MEM 단계의 메모리 접근 결과(또는 EX 단계의 ALU 결과)를 WB 단계로 전달하여 최종적으로 레지스터 파일에 쓰여지도록 합니다.

Control Signal 전달

CPU: Pipeline Register란?  image 2

CPU: Pipeline Register란?  image 3

이러한 파이프라인 레지스터들은 각 단계가 다음 클럭 사이클에 필요한 모든 정보를 저장하고 전달함으로써, 파이프라인이 중단 없이 연속적으로 동작할 수 있게 해줍니다. 이는 데이터 해저드(data hazard)나 제어 해저드(control hazard)와 같은 문제를 해결하는 데 중요한 역할을 합니다.