IF·ID·EX·MEM·WB의 5단계, 단계당 1사이클입니다. 단계 레지스터는 사이클 끝 에지에서 갱신합니다.
LOAD 주소는 EX에서 계산하고 값은 MEM 끝에 준비합니다. ADD는 EX 시작에 값을 요구합니다.
MEM/WB → EX 전달을 허용합니다. MEM에서 아직 준비하지 않은 값은 전달할 수 없습니다.
명령·데이터 메모리는 분리합니다. 캐시 실패·가변 지연·분기는 없으며 일반 ALU 결과 전달을 허용합니다.
ID의 ADD와 EX의 LOAD가 의존하면 PC·IF/ID를 한 에지 유지하고 ID/EX에 bubble을 넣습니다. 먼저 들어간 LOAD는 계속 진행합니다.
IR이라는 이름을 쓰더라도 어떤 단계의 명령 레지스터인지 정해야 합니다. 여기서 유지하는 것은 IF/ID에 있는 ADD이며 모든 단계의 IR을 멈추는 동작이 아닙니다. bubble은 유효 비트 0인 빈 슬롯으로 쓰기·저장 부작용이 없습니다. 실제 NOP 명령을 메모리에서 인출한 것과 구분합니다.
I1=LOAD R1,[R4], I2=ADD R2,R1,R3, I3=ADD R5,R6,R7입니다. R3=5, LOAD 데이터=7이면 I2는 12를 계산해야 합니다. I3는 I1·I2의 결과를 사용하지 않습니다. 전체 시간표에서 유지는 이미 들고 있는 명령을 다시 진행시키지 않는 상태입니다.
load-use: 같은 칸에서 한 사이클씩 따라가기
I1 = LOAD R1,[R4], I2 = ADD R2,R1,R3, I3 = ADD R5,R6,R7. R3 = 5, LOAD 데이터 = 7. 단계 칸은 현재 사이클, PC·IF/ID는 사이클 시작값입니다.
이 예의 조건
IF·ID·EX·MEM·WB의 5단계, 단계당 1사이클입니다. 단계 레지스터는 사이클 끝 에지에서 갱신합니다.
LOAD 주소는 EX에서 계산하고 값은 MEM 끝에 준비합니다. ADD는 EX 시작에 값을 요구합니다.
MEM/WB → EX 전달을 허용합니다. MEM에서 아직 준비하지 않은 값은 전달할 수 없습니다.
명령·데이터 메모리는 분리합니다. 캐시 실패·가변 지연·분기는 없으며 일반 ALU 결과 전달을 허용합니다.
ID의 ADD와 EX의 LOAD가 의존하면 PC·IF/ID를 한 에지 유지하고 ID/EX에 bubble을 넣습니다. 먼저 들어간 LOAD는 계속 진행합니다.
세 명령과 bubble의 전체 시간표 · C1~C8
명령 / 사이클
1
2
3
4
5
6
7
8
명령 / 사이클I1 LOAD
1IF
2ID
3EX
4MEM, 끝에 7 준비
5WB
6—
7—
8—
명령 / 사이클I2 ADD
1—
2IF
3ID, 위험 검출
4ID 유지
5EX, 전달값 7 사용
6MEM
7WB
8—
명령 / 사이클I3 독립 ADD
1—
2—
3IF, 보류
4IF 보류 유지
5ID
6EX
7MEM
8WB
명령 / 사이클빈 슬롯
1—
2—
3—
4EX bubble
5MEM bubble
6WB bubble
7—
8—
PC·IF/ID·ID/EX · 사이클 끝 에지 후
사이클 끝
PC
IF/ID 내용
ID/EX 내용
이유
사이클 끝1
PC104
IF/ID 내용I1
ID/EX 내용빈 슬롯
이유첫 인출
사이클 끝2
PC108
IF/ID 내용I2
ID/EX 내용I1
이유정상 진행
사이클 끝3
PC108
IF/ID 내용I2 유지
ID/EX 내용bubble
이유I1이 EX인 동안 I2 위험 검출; I3를 아직 확정하지 않음
사이클 끝4
PC112
IF/ID 내용I3
ID/EX 내용I2
이유LOAD 값이 끝에 준비; 다음 EX에서 쓸 수 있음
사이클 끝5
PC116
IF/ID 내용다음 명령
ID/EX 내용I3
이유정상 진행 재개
1 / 4
C2 · 정상 진행
LOAD는 ID, ADD는 IF에 있습니다. 명령들이 한 단계씩 진행하며 아직 LOAD 값이 필요한 EX에 도착하지 않았습니다.
C2의 다섯 단계
상자 안의 대상과 화살표의 조건을 함께 읽으세요. 좁은 화면에서는 같은 관계를 세로로 재배치한 도식을 보여 줍니다.
IF·ID·EX·MEM·WB의 칸 위치는 고정입니다. 각 칸은 현재 사이클의 명령을 나타내며, 화살표는 단계 순서입니다.
직전 단계와 현재 단계
상태
직전 단계 없음
현재: C2 · 정상 진행
상태PC · 시작값
직전 단계 없음—
현재: C2 · 정상 진행104
상태IF/ID · 시작값
직전 단계 없음—
현재: C2 · 정상 진행I1
상태끝 에지 후
직전 단계 없음—
현재: C2 · 정상 진행PC 108 · IF/ID I2 · ID/EX I1
상태값 준비·소비
직전 단계 없음—
현재: C2 · 정상 진행LOAD 값은 아직 준비되지 않았습니다.
변화와 이유
I1: IF → ID. I2가 IF에 들어옵니다.
빈 슬롯에는 유효한 명령이 없으며 쓰기·저장 부작용도 없습니다.
다음 C3에서 I2와 I1의 R1 의존성을 확인합니다.
C3 · 의존성 검출
ID의 ADD는 EX의 LOAD 결과 R1을 사용합니다. 이 사이클 끝에는 PC·IF/ID를 유지하고 ID/EX에 bubble을 넣습니다.
C3의 다섯 단계
상자 안의 대상과 화살표의 조건을 함께 읽으세요. 좁은 화면에서는 같은 관계를 세로로 재배치한 도식을 보여 줍니다.
IF·ID·EX·MEM·WB의 칸 위치는 고정입니다. 각 칸은 현재 사이클의 명령을 나타내며, 화살표는 단계 순서입니다.
직전 단계와 현재 단계
상태
직전: C2 · 정상 진행
현재: C3 · 의존성 검출
상태PC · 시작값
직전: C2 · 정상 진행104
현재: C3 · 의존성 검출108
상태IF/ID · 시작값
직전: C2 · 정상 진행I1
현재: C3 · 의존성 검출I2
상태끝 에지 후
직전: C2 · 정상 진행PC 108 · IF/ID I2 · ID/EX I1
현재: C3 · 의존성 검출PC 108 · IF/ID I2 · ID/EX bubble
상태값 준비·소비
직전: C2 · 정상 진행LOAD 값은 아직 준비되지 않았습니다.
현재: C3 · 의존성 검출LOAD 값은 아직 준비되지 않았습니다.
변화와 이유
I1: ID → EX, I2: IF → ID. 두 명령의 R1 의존성을 검출합니다.
I3는 IF 요청/보류 위치에 있지만 IF/ID에 확정하지 않습니다.
끝 에지: PC·IF/ID 유지, ID/EX에는 bubble을 넣습니다.
C4 · 한 사이클 대기
ADD는 ID에서 기다리고 LOAD는 MEM으로 진행합니다. LOAD 값 7은 이번 사이클 끝에야 준비됩니다.
C4의 다섯 단계
상자 안의 대상과 화살표의 조건을 함께 읽으세요. 좁은 화면에서는 같은 관계를 세로로 재배치한 도식을 보여 줍니다.
IF·ID·EX·MEM·WB의 칸 위치는 고정입니다. 각 칸은 현재 사이클의 명령을 나타내며, 화살표는 단계 순서입니다.
직전 단계와 현재 단계
상태
직전: C3 · 의존성 검출
현재: C4 · 한 사이클 대기
상태PC · 시작값
직전: C3 · 의존성 검출108
현재: C4 · 한 사이클 대기108
상태IF/ID · 시작값
직전: C3 · 의존성 검출I2
현재: C4 · 한 사이클 대기I2
상태끝 에지 후
직전: C3 · 의존성 검출PC 108 · IF/ID I2 · ID/EX bubble
현재: C4 · 한 사이클 대기PC 112 · IF/ID I3 · ID/EX I2
상태값 준비·소비
직전: C3 · 의존성 검출LOAD 값은 아직 준비되지 않았습니다.
현재: C4 · 한 사이클 대기MEM 끝에 7 준비. 다음 EX에서 소비 가능.
변화와 이유
I2는 ID에 남고 EX는 bubble입니다. 먼저 들어간 I1은 MEM으로 이동합니다.
LOAD 값 7은 사이클 끝에 준비됩니다. 같은 사이클 시작의 EX에는 늦습니다.
끝 에지: I2를 ID/EX에 넣고 I3를 IF/ID에 저장하며 PC를 진행합니다.
C5 · 전달·재개
MEM/WB의 7을 ADD의 EX 입력으로 전달합니다. 7 + 5 = 12를 계산하고 인출·해독을 다시 진행합니다.
C5의 다섯 단계
상자 안의 대상과 화살표의 조건을 함께 읽으세요. 좁은 화면에서는 같은 관계를 세로로 재배치한 도식을 보여 줍니다.
MEM/WB에 준비된 7을 EX 입력으로 전달해 12를 계산합니다. EX 계산과 R2의 WB 기록은 다른 시점입니다.
직전 단계와 현재 단계
상태
직전: C4 · 한 사이클 대기
현재: C5 · 전달·재개
상태PC · 시작값
직전: C4 · 한 사이클 대기108
현재: C5 · 전달·재개112
상태IF/ID · 시작값
직전: C4 · 한 사이클 대기I2
현재: C5 · 전달·재개I3
상태끝 에지 후
직전: C4 · 한 사이클 대기PC 112 · IF/ID I3 · ID/EX I2
현재: C5 · 전달·재개PC 116 · IF/ID 다음 명령 · ID/EX I3
상태값 준비·소비
직전: C4 · 한 사이클 대기MEM 끝에 7 준비. 다음 EX에서 소비 가능.
현재: C5 · 전달·재개MEM/WB의 7을 EX에서 소비. R2 기록은 C7.
변화와 이유
I2: ID → EX. 현재 MEM이 아닌 MEM/WB에서 7을 전달합니다.
I3: IF 보류 → ID. bubble은 EX → MEM으로 이동합니다.
EX 결과 12는 I2의 WB인 C7에서 R2에 기록합니다.
장면별 값과 변화 (4장면)
예의 값과 변화
관찰·상황
값·보충 정보
변화·이유
C2 · 정상 진행
LOAD는 ID, ADD는 IF에 있습니다. 명령들이 한 단계씩 진행하며 아직 LOAD 값이 필요한 EX에 도착하지 않았습니다.
값·보충 정보
PC · 시작값: 104
IF/ID · 시작값: I1
끝 에지 후: PC 108 · IF/ID I2 · ID/EX I1
값 준비·소비: LOAD 값은 아직 준비되지 않았습니다.
변화·이유
I1: IF → ID. I2가 IF에 들어옵니다.
빈 슬롯에는 유효한 명령이 없으며 쓰기·저장 부작용도 없습니다.
다음 C3에서 I2와 I1의 R1 의존성을 확인합니다.
C3 · 의존성 검출
ID의 ADD는 EX의 LOAD 결과 R1을 사용합니다. 이 사이클 끝에는 PC·IF/ID를 유지하고 ID/EX에 bubble을 넣습니다.
값·보충 정보
PC · 시작값: 108
IF/ID · 시작값: I2
끝 에지 후: PC 108 · IF/ID I2 · ID/EX bubble
값 준비·소비: LOAD 값은 아직 준비되지 않았습니다.
변화·이유
I1: ID → EX, I2: IF → ID. 두 명령의 R1 의존성을 검출합니다.
I3는 IF 요청/보류 위치에 있지만 IF/ID에 확정하지 않습니다.
끝 에지: PC·IF/ID 유지, ID/EX에는 bubble을 넣습니다.
C4 · 한 사이클 대기
ADD는 ID에서 기다리고 LOAD는 MEM으로 진행합니다. LOAD 값 7은 이번 사이클 끝에야 준비됩니다.
값·보충 정보
PC · 시작값: 108
IF/ID · 시작값: I2
끝 에지 후: PC 112 · IF/ID I3 · ID/EX I2
값 준비·소비: MEM 끝에 7 준비. 다음 EX에서 소비 가능.
변화·이유
I2는 ID에 남고 EX는 bubble입니다. 먼저 들어간 I1은 MEM으로 이동합니다.
LOAD 값 7은 사이클 끝에 준비됩니다. 같은 사이클 시작의 EX에는 늦습니다.
끝 에지: I2를 ID/EX에 넣고 I3를 IF/ID에 저장하며 PC를 진행합니다.
C5 · 전달·재개
MEM/WB의 7을 ADD의 EX 입력으로 전달합니다. 7 + 5 = 12를 계산하고 인출·해독을 다시 진행합니다.
값·보충 정보
PC · 시작값: 112
IF/ID · 시작값: I3
끝 에지 후: PC 116 · IF/ID 다음 명령 · ID/EX I3
값 준비·소비: MEM/WB의 7을 EX에서 소비. R2 기록은 C7.
변화·이유
I2: ID → EX. 현재 MEM이 아닌 MEM/WB에서 7을 전달합니다.
I3: IF 보류 → ID. bubble은 EX → MEM으로 이동합니다.
EX 결과 12는 I2의 WB인 C7에서 R2에 기록합니다.
load-use: 같은 칸에서 한 사이클씩 따라가기
I1 = LOAD R1,[R4], I2 = ADD R2,R1,R3, I3 = ADD R5,R6,R7. R3 = 5, LOAD 데이터 = 7. 단계 칸은 현재 사이클, PC·IF/ID는 사이클 시작값입니다.
이 예의 조건
IF·ID·EX·MEM·WB의 5단계, 단계당 1사이클입니다. 단계 레지스터는 사이클 끝 에지에서 갱신합니다.
LOAD 주소는 EX에서 계산하고 값은 MEM 끝에 준비합니다. ADD는 EX 시작에 값을 요구합니다.
MEM/WB → EX 전달을 허용합니다. MEM에서 아직 준비하지 않은 값은 전달할 수 없습니다.
명령·데이터 메모리는 분리합니다. 캐시 실패·가변 지연·분기는 없으며 일반 ALU 결과 전달을 허용합니다.
ID의 ADD와 EX의 LOAD가 의존하면 PC·IF/ID를 한 에지 유지하고 ID/EX에 bubble을 넣습니다. 먼저 들어간 LOAD는 계속 진행합니다.
세 명령과 bubble의 전체 시간표 · C1~C8
명령 / 사이클
1
2
3
4
5
6
7
8
명령 / 사이클I1 LOAD
1IF
2ID
3EX
4MEM, 끝에 7 준비
5WB
6—
7—
8—
명령 / 사이클I2 ADD
1—
2IF
3ID, 위험 검출
4ID 유지
5EX, 전달값 7 사용
6MEM
7WB
8—
명령 / 사이클I3 독립 ADD
1—
2—
3IF, 보류
4IF 보류 유지
5ID
6EX
7MEM
8WB
명령 / 사이클빈 슬롯
1—
2—
3—
4EX bubble
5MEM bubble
6WB bubble
7—
8—
PC·IF/ID·ID/EX · 사이클 끝 에지 후
사이클 끝
PC
IF/ID 내용
ID/EX 내용
이유
사이클 끝1
PC104
IF/ID 내용I1
ID/EX 내용빈 슬롯
이유첫 인출
사이클 끝2
PC108
IF/ID 내용I2
ID/EX 내용I1
이유정상 진행
사이클 끝3
PC108
IF/ID 내용I2 유지
ID/EX 내용bubble
이유I1이 EX인 동안 I2 위험 검출; I3를 아직 확정하지 않음
사이클 끝4
PC112
IF/ID 내용I3
ID/EX 내용I2
이유LOAD 값이 끝에 준비; 다음 EX에서 쓸 수 있음
사이클 끝5
PC116
IF/ID 내용다음 명령
ID/EX 내용I3
이유정상 진행 재개
C2의 다섯 단계
상자 안의 대상과 화살표의 조건을 함께 읽으세요. 좁은 화면에서는 같은 관계를 세로로 재배치한 도식을 보여 줍니다.
IF·ID·EX·MEM·WB의 칸 위치는 고정입니다. 각 칸은 현재 사이클의 명령을 나타내며, 화살표는 단계 순서입니다.
예의 값과 변화
관찰·상황
값·보충 정보
변화·이유
C2 · 정상 진행
LOAD는 ID, ADD는 IF에 있습니다. 명령들이 한 단계씩 진행하며 아직 LOAD 값이 필요한 EX에 도착하지 않았습니다.
값·보충 정보
PC · 시작값: 104
IF/ID · 시작값: I1
끝 에지 후: PC 108 · IF/ID I2 · ID/EX I1
값 준비·소비: LOAD 값은 아직 준비되지 않았습니다.
C2의 다섯 단계
IF·ID·EX·MEM·WB의 칸 위치는 고정입니다. 각 칸은 현재 사이클의 명령을 나타내며, 화살표는 단계 순서입니다.
IF 인출
I2 ADD
정상 진행
ID 해독
I1 LOAD
EX 실행
빈 슬롯
유효 명령 없음
MEM 메모리
WB 기록
IF 인출 → ID 해독
ID 해독 → EX 실행
EX 실행 → MEM 메모리
MEM 메모리 → WB 기록
변화·이유
I1: IF → ID. I2가 IF에 들어옵니다.
빈 슬롯에는 유효한 명령이 없으며 쓰기·저장 부작용도 없습니다.
다음 C3에서 I2와 I1의 R1 의존성을 확인합니다.
C3 · 의존성 검출
ID의 ADD는 EX의 LOAD 결과 R1을 사용합니다. 이 사이클 끝에는 PC·IF/ID를 유지하고 ID/EX에 bubble을 넣습니다.
값·보충 정보
PC · 시작값: 108
IF/ID · 시작값: I2
끝 에지 후: PC 108 · IF/ID I2 · ID/EX bubble
값 준비·소비: LOAD 값은 아직 준비되지 않았습니다.
C3의 다섯 단계
I3 독립 ADD
저장 보류
R1 의존 검출
주소 계산
변화·이유
I1: ID → EX, I2: IF → ID. 두 명령의 R1 의존성을 검출합니다.
I3는 IF 요청/보류 위치에 있지만 IF/ID에 확정하지 않습니다.
끝 에지: PC·IF/ID 유지, ID/EX에는 bubble을 넣습니다.
C4 · 한 사이클 대기
ADD는 ID에서 기다리고 LOAD는 MEM으로 진행합니다. LOAD 값 7은 이번 사이클 끝에야 준비됩니다.
값·보충 정보
PC · 시작값: 108
IF/ID · 시작값: I2
끝 에지 후: PC 112 · IF/ID I3 · ID/EX I2
값 준비·소비: MEM 끝에 7 준비. 다음 EX에서 소비 가능.
C4의 다섯 단계
인출 주소 유지
한 사이클 대기
bubble
유효 비트 0
끝에 7 준비
변화·이유
I2는 ID에 남고 EX는 bubble입니다. 먼저 들어간 I1은 MEM으로 이동합니다.
LOAD 값 7은 사이클 끝에 준비됩니다. 같은 사이클 시작의 EX에는 늦습니다.
끝 에지: I2를 ID/EX에 넣고 I3를 IF/ID에 저장하며 PC를 진행합니다.
C5 · 전달·재개
MEM/WB의 7을 ADD의 EX 입력으로 전달합니다. 7 + 5 = 12를 계산하고 인출·해독을 다시 진행합니다.
값·보충 정보
PC · 시작값: 112
IF/ID · 시작값: I3
끝 에지 후: PC 116 · IF/ID 다음 명령 · ID/EX I3
값 준비·소비: MEM/WB의 7을 EX에서 소비. R2 기록은 C7.
C5의 다섯 단계
MEM/WB에 준비된 7을 EX 입력으로 전달해 12를 계산합니다. EX 계산과 R2의 WB 기록은 다른 시점입니다.
다음 명령
전달 7 + 5 = 12
R1에 7 기록
변화·이유
I2: ID → EX. 현재 MEM이 아닌 MEM/WB에서 7을 전달합니다.
I3: IF 보류 → ID. bubble은 EX → MEM으로 이동합니다.
EX 결과 12는 I2의 WB인 C7에서 R2에 기록합니다.
C1~C8 전체 시간표와 PC·IF/ID·ID/EX 끝 에지 표는 위 개념도에 함께 놓여 있습니다. 단계 칸의 명령과 PC·IF/ID의 사이클 시작값을 비교한 뒤, 끝 에지 후의 값을 읽으세요.
정지가 없으면 I2의 EX는 4사이클 시작입니다. I1의 데이터는 4사이클 끝에 준비하므로 데이터가 준비되기 전에 I2가 그 값을 요구합니다. 정지 한 번으로 I2 EX를 5사이클 시작으로 옮기면 값을 사용할 수 있습니다. 전달은 준비된 값을 빨리 가져오는 방법이지 미래 값을 가져오는 방법이 아닙니다.
주소 100·104·108에 I1·I2·I3가 있고 PC는 다음 인출 주소입니다. 개념도의 끝 에지 표는 해당 사이클 끝 에지 후의 값입니다. 끝에 IF/ID로 넣을 수 있는 정상 인출만 PC를 4 증가시킵니다.
위 개념도의 PC·IF/ID·ID/EX · 사이클 끝 에지 후 표를 확인하세요. C3 끝에는 PC=108과 IF/ID의 I2를 유지하고, C4 끝에는 PC=112와 IF/ID의 I3로 진행합니다.
첫 시간표에서 I3의 IF 표시는 요청/보류 위치이며 사이클 3 끝에는 I3를 IF/ID에 덮어쓰지 않습니다. I3를 같은 PC=108에서 다시 받아 사이클 4 끝에 저장합니다. 실제 인출 버퍼나 캐시에서는 요청을 취소하지 않고 보류할 수도 있으므로 이것은 한 가지 제어 모델입니다.
전달 경로가 없으면 ID에서 레지스터 파일의 R1을 읽어야 합니다. 추가로 WB는 사이클 앞부분에 기록하고 ID는 뒷부분에 읽을 수 있다고 가정하면 I1 WB가 5사이클일 때 I2는 그 사이클에 ID를 마치고 6사이클에 EX로 갑니다. 정지는 2회입니다. 같은 사이클 WB→ID 읽기를 허용하지 않으면 더 기다려야 합니다. 이 수치를 모든 CPU에 공통인 “LOAD 정지 공식”으로 외우지 않습니다.
분기는 어떤 사이클에 방향·목표가 확정되는지, 그 전 인출을 허용하는지, 잘못된 경로의 명령이 어디까지 왔는지에 따라 flush 비용이 달라집니다. 이 시간표에는 분기가 없으므로 “정지 1회니까 분기도 1회”라고 결론 내리지 않습니다. MIT 파이프라인 강의는 bypass 경로와 stall을 정의하지만 Beta의 단계·RF 시점은 여기와 같다고 가정하지 않습니다. 실제 ISA/CPU의 전체 예외 처리·superscalar·out-of-order·가변 메모리 응답은 이후 범위입니다.
EX는 3·4·5, 정지는 0회입니다. I3의 5사이클 시작에는 값이 준비돼 전달 가능합니다. 명령 재배치에는 데이터·제어·메모리 부작용의 의존 관계를 보존해야 하므로 아무 명령이나 틈에 넣을 수 없습니다. 다음 제어 신호는 이러한 유지·빈 슬롯을 상태 갱신 규칙으로 연결합니다.