자막
음성

Lec 5 part2 · Lec 6 · control flow datapath 와 multi-cycle CPU(microcode)

정밀 정리 · 검증 2026-09-24 15:16

1개요

1.1전반부(Lec5 part2): single-cycle datapath 에 JAL·JALR·BEQ 를 추가하고 opcode 기반 control signal 생성, instruction 별 사용 경로 정리.
1.2후반부(Lec6): single-cycle 은 load(600 ps)가 clock 을 결정해 비효율 → 50 ps clock multi-cycle, PVSWriteEn 과 FSM.
1.3control 은 ROM microsequencer(O(2^n)) 대신 µPC 기반 microcode 로. 가정된 instruction mix 에서 2193 vs 1667 MIPS, 약 31.6% speedup.
1.4resource reuse(ALU·single memory, IR·MDR)와 새 control signal(ALUSrcA/B, IorD, IRWrite, PCSource 등)까지 진행.

2섹션별 정리 상황·문제 → 원인 → 해결

2.10:30–1:28control flow instruction datapath 시작
상황·문제R-type·I-type·load/store 까지 single-cycle datapath 구현 완료. 이제 control flow instruction(제어 흐름 명령어)을 추가한다.
p.24
2.1.1 · p.24 · 0:33
2.21:28–4:52JAL(jump and link) datapath
상황·문제지금 datapath 는 PC 를 +4 만 한다. JAL 은 target = PC + sign-extend(imm) 로 가고 rd ← PC+4 도 써야 한다.
원인datapath 에 target 을 계산하는 logic 이 없고, register file write port 로 PC+4 를 보낼 경로도 없다.
해결PC + imm 을 더하는 adder 추가, PC 앞 mux 로 PC+4 / target 선택. write data 앞 mux 로 PC+4 를 rd 에 기록.
  • target 계산용 adder 를 별도로 둔다
  • PC mux: PC+4 vs target
  • write-back mux: ALU/memory 결과 vs PC+4
p.25
2.2.1 · p.25 · 1:28
p.26
2.2.2 · p.26 · 1:33
p.27
2.2.3 · p.27 · 3:46
2.2.r.1RISC-V (Wikipedia) ↗ · jal 20-bit offset×2 + PC, JALR·branch 형식
2.2.r.2Multiplexer (Wikipedia) ↗ · select line 으로 입력 하나를 고르는 mux
2.34:52–6:48JALR(jump and link register) datapath
상황·문제JALR 은 target = GPR[rs1] + sign-extend(imm12) (최하위 bit 를 0 으로). PC 대신 register 값을 쓴다.
원인rs1 + imm 은 load/store 주소 계산과 같은 형태라 기존 ALU 가 이미 계산할 수 있다 (AND 도 ALU 안에서 처리한다고 가정).
해결ALU 출력을 PC 로 보내도록 PC mux 입력을 3개로 늘린다. rd ← PC+4 는 JAL 과 같다.
  • JALR target 은 ALU 가 계산
  • PC mux 3-input: PC+4 / PC+imm / ALU 결과
p.28
2.3.1 · p.28 · 4:59
p.29
2.3.2 · p.29 · 5:05
p.30
2.3.3 · p.30 · 6:36
2.3.r.1RISC-V (Wikipedia) ↗ · jal 20-bit offset×2 + PC, JALR·branch 형식
2.3.r.2riscv-isa-manual (GitHub) ↗ · RISC-V unprivileged ISA manual 원문 source
2.46:48–9:20conditional branch(BEQ 등) datapath
상황·문제BEQ 는 비교 결과에 따라 PC+4 와 target(PC + sign-extend(imm13)) 중 하나를 고른다.
원인target 은 JAL 용 adder 로 이미 계산된다. 비교는 ALU 에서 빼서 0 과 비교하면 된다 (BLT·BGE 등도 ALU 확장으로).
해결ALU 에서 비교 결과(bcond, 그림상 'zero') 출력을 하나 더 내어 PC mux 제어. branch 이면 RegWrite 를 끈다.
  • 비교는 ALU subtract 로
  • branch 는 register file write enable 을 disable
p.31
2.4.1 · p.31 · 6:50
p.32
2.4.2 · p.32 · 7:02
p.33
2.4.3 · p.33 · 8:34
2.4.r.1RISC-V (Wikipedia) ↗ · jal 20-bit offset×2 + PC, JALR·branch 형식
2.59:20–12:33control signal 생성
상황·문제datapath 가 완성됐으니 mux select, MemRead/MemWrite, RegWrite 등 control signal 을 만들어야 한다.
원인모두 instruction 의 opcode·funct bit 로 정해진다 (예: MemRead 는 load 인지만 보면 된다).
해결단일 bit signal 은 opcode 식, ALUOp 는 opcode+funct3/funct7, ImmGen 은 instruction format 에 따라 combinational logic 으로 만든다.
  • MemtoReg: load 면 memory data, 아니면 ALU 결과
  • ImmGen 은 다른 control 보다 조금 크지만 여전히 combinational
p.34
2.5.1 · p.34 · 9:27
p.35
2.5.2 · p.35 · 9:36
p.36
2.5.3 · p.36 · 10:51
p.37
2.5.4 · p.37 · 11:45
2.5.r.1Multiplexer (Wikipedia) ↗ · select line 으로 입력 하나를 고르는 mux
2.5.r.2Sign extension (Wikipedia) ↗ · two's complement 값의 sign extension
2.612:33–17:14instruction 별 datapath 사용 경로 정리
상황·문제single-cycle RISC-V CPU 완성. instruction 종류마다 datapath 의 어느 부분을 쓰는지 확인한다.
해결R-type: rs2 → ALU → RF write, PC+4 / I-type: rs2 대신 imm / LD: ALU 로 주소, MemRead, memory data → RF / SD: rs2 → memory write, MemWrite. branch taken/not taken 은 bcond 로 target vs PC+4, JAL: PC+imm, JALR: ALU 결과 → PC, 둘 다 PC+4 → rd.
  • store 는 MemWrite assert, MemRead deassert
  • JAL·JALR 모두 PC+4 를 rd 에 write-back
p.38
2.6.1 · p.38 · 12:45
p.40
2.6.2 · p.40 · 14:00
p.42
2.6.3 · p.42 · 14:59
p.46
2.6.4 · p.46 · 16:44
2.6.r.1Computer Organization and Design RISC-V Edition (Elsevier) ↗ · P&H 교재 (Ch 4, Appendix C 읽기 과제)
2.717:14–25:45single-cycle CPU 의 비효율
상황·문제single-cycle 은 ISA 의 sequential·atomic semantics 를 그대로 옮겨 직관적이다 (PVS → combinational next-state logic → PVS).
원인clock 이 고정이라 모든 instruction 이 가장 느린 instruction 만큼 걸린다. 또 한 instruction 이 병렬로 쓰는 자원(ALU + PC+4 adder)을 중복해 둬야 한다.
해결가장 느린 것은 data memory 를 접근하는 load (critical path). CISC(예: VAX polyf)라면 더 심해진다 → multi-cycle 로 해결.
  • 모든 instruction = 가장 느린 instruction 의 시간
  • worst-case 자원을 병렬로 복제
  • load 가 critical path
p.1
2.7.1 · p.1 · 17:22
p.2
2.7.2 · p.2 · 17:25
p.3
2.7.3 · p.3 · 23:15
p.4
2.7.4 · p.4 · 24:55
2.7.r.1VAX (Wikipedia) ↗ · polynomial evaluation 같은 복잡한 CISC instruction 보유
2.7.r.2Clock rate (Wikipedia) ↗ · clock frequency 와 clock period 의 역수 관계
2.825:45–28:55single-cycle datapath 지연 분석 (600 ps)
상황·문제가정: memory 200 ps, ALU 100 ps, register file 50 ps, 기타 logic 0 ps. 가장 짧은 clock period 는?
원인단계 합: R/I-type 400, LD 600, SD 550, Bxx 350, JAL 350, JALR 400 ps. LD 가 최대.
해결clock period ≥ 600 ps. clock 을 instruction 마다 바꿀 수는 없다 (OS 가 긴 시간 단위로 frequency 를 바꾸는 것은 가능, 수업에선 고정 clock 가정).
  • LD 600 ps 가 clock period 를 결정
  • fine-grained variable clock 은 불가
p.5
2.8.1 · p.5 · 25:41
2.8.r.1Dynamic frequency scaling (Wikipedia) ↗ · 부하에 따라 clock frequency 를 on-the-fly 로 바꾸는 power 관리 (강의 Q&A)
2.8.r.2Clock rate (Wikipedia) ↗ · clock frequency 와 clock period 의 역수 관계
2.928:55–38:20multi-cycle 구현 Ver 1.0 과 state machine
상황·문제instruction 마다 필요한 만큼만 시간을 쓰게 하자: 50 ps clock, instruction 별로 다른 cycle 수.
원인여러 cycle 에 걸쳐 실행해도 PVS 는 atomic 하게 한 번만 갱신돼야 한다.
해결PVSWriteEn 을 마지막 cycle 에만 assert. IF 4개(200/50), ID 1개, EX 2개, MEM 4개, WB state 로 FSM 구성 → ADD 8, LD 12, JAL 7 cycle.
  • PVSWriteEn == 0 이면 architectural state 불변
  • JAL 은 ID 를 건너뛰고 EX 로
  • store 는 WB 없음, 쓰기는 MEM4 마지막 rising edge 에 (Q&A)
p.6
2.9.1 · p.6 · 29:01
p.7
2.9.2 · p.7 · 31:02
p.8
2.9.3 · p.8 · 32:41
p.9
2.9.4 · p.9 · 33:06
2.9.r.1Finite-state machine (Wikipedia) ↗ · state diagram, Moore/Mealy output
2.9.r.2Mealy machine (Wikipedia) ↗ · output 이 current state 와 input 둘 다에 의존하는 FSM
2.1038:20–44:50MicroSequencer Ver 1.0: ROM lookup table
상황·문제각 state 마다 control signal 을 내야 한다. opcode + current state 를 address 로 하는 truth table(ROM)에서 control 과 next state 를 읽는다.
원인ROM 크기는 출력 수 m 에 O(m), address 폭 n 에 O(2^n). 10 bit 면 2^10 row. R-type × memory state 처럼 invalid 조합, 안 쓰는 opcode 값도 모두 row 를 차지한다.
해결state 는 10개 넘어 4 bit 필요, opcode 5 bit 중 실제로 쓰는 값은 10개 미만 → 이 방식은 비효율적이다.
  • ROM = combinational lookup table
  • size O(2^n)·O(m)
  • 대부분 row 가 무효 조합
p.10
2.10.1 · p.10 · 38:54
2.10.r.1Read-only memory (Wikipedia) ↗ · ROM 에 microcode·lookup table 저장
2.10.r.2Finite-state machine (Wikipedia) ↗ · state diagram, Moore/Mealy output
2.1144:50–50:25microcoding 과 microcode controller (µPC)
상황·문제table 은 state 간 flow control 도 구현한다: IF4 뒤 ID(JAL 은 EX1), EX2 뒤 instruction 별 분기. R-type 8 cycle, LD 12 cycle.
원인대부분의 transition 은 '다음 state 로 진행'이고 가끔만 jump 한다.
해결유효 row 만 담은 ROM 을 µPC 로 index. adder 로 µPC+1, 분기 때만 작은 lookup table 로 target 선택 → microprogramming. CISC 구현 방식이며 RISC ISA 의 영감이 됨.
  • µPC 는 대부분 1씩 증가
  • 읽기 과제: P&H Appendix C (multi-cycle lab 에 도움)
p.11
2.11.1 · p.11 · 44:48
p.12
2.11.2 · p.12 · 46:56
2.11.r.1Microcode (Wikipedia) ↗ · microsequencer, horizontal/vertical microcode, nanocode·millicode 설명
2.11.r.2Control unit (Wikipedia) ↗ · multicycle, hardwired vs microprogrammed control unit
2.11.r.3Reduced instruction set computer (Wikipedia) ↗ · microcode 복잡도(VAX, 68k)가 RISC 동기가 된 역사
2.11.r.4Computer Organization and Design RISC-V Edition (Elsevier) ↗ · P&H 교재 (Ch 4, Appendix C 읽기 과제)
2.1250:25–56:50performance analysis: single vs multi-cycle
상황·문제multi-cycle 은 얼마나 빠른가? wall-clock time = instruction 수 × CPI × clock period (iron law).
원인같은 ISA·compiler·program 이면 instruction 수 고정. multi-cycle 은 clock 이 짧지만 CPI 가 커진다 → MIPS = IPC × f_clk 로 비교.
해결single: 1 × 1,667 MHz = 1667 MIPS. multi: mix 25% LD·10% SD·45% ALU·15% Bxx·3% JAL·2% JALR 로 CPI(WAM)=9.12, IPC≈0.1096, ×20,000 MHz = 2193 MIPS → 약 31.6% speedup.
  • instruction mix 는 compiler 가 만든 assembly 에서 셀 수 있다
  • 20 GHz 는 비현실적이지만 가정
p.13
2.12.1 · p.13 · 50:23
p.14
2.12.2 · p.14 · 53:09
2.12.r.1Iron law of processor performance (Wikipedia) ↗ · Time = Instructions/Program × Cycles/Instruction × Time/Cycle
2.12.r.2Cycles per instruction (Wikipedia) ↗ · instruction mix 로 가중한 평균 CPI
2.12.r.4Instructions per second (Wikipedia) ↗ · MIPS 정의와 instruction mix 에 따른 한계
2.12.r.5Weighted arithmetic mean (Wikipedia) ↗ · weight 로 가중한 평균 Σwx/Σw
2.12.r.6Harmonic mean (Wikipedia) ↗ · weighted harmonic mean 정의
2.1356:50–1:05:06Q&A: state 가 여러 개 필요한 이유, ROM·µPC 재설명
상황·문제질문: state 하나에 counter 를 두면 안 되나? instruction 별 소요 시간을 정확히 알아야 하나?
원인counter 값이 다르면 그것이 곧 다른 state. memory 접근 등 단계마다 해야 할 일이 달라 여러 state 가 필요하다.
해결(한국어) ROM 은 n-bit address 마다 row 가 있어 쓰지 않는 조합까지 담는다. 대부분 +1 진행이니 adder + mux + 작은 ROM 으로 필요한 row 만 둔다고 재설명.
  • counter = state 의 다른 표현
  • 각 instruction 의 소요 cycle 을 설계 시 알아야 한다
p.10
2.13.1 · p.10 · 1:00:11
p.12
2.13.2 · p.12 · 1:03:44
2.141:05:06–1:09:33resource reuse 로 datapath 축소
상황·문제multi-cycle 에선 자원을 cycle 별로 재사용해 중복을 없앨 수 있다.
원인PC+4 adder 와 ALU 는 같은 cycle 에 쓰지 않으면 하나로 충분. 여러 cycle 동안 instruction 을 계속 fetch 하지 않으려면 보관할 곳이 필요.
해결ALU 로 PC+4 계산(다른 cycle 에), 마지막 IF state 에서 IR 에 latch. instruction/data memory 를 하나로 합치고 data 는 MDR 에. read port 를 하나로 줄이는 것도 가능하나 cycle 증가라 채택 안 함.
  • 같은 cycle 에 ALU 두 번 사용 불가
  • IR·MDR 로 값을 다음 cycle 까지 유지
  • single memory: IorD 로 instruction/data 선택
p.15
2.14.1 · p.15 · 56:56
p.16
2.14.2 · p.16 · 1:05:16
p.17
2.14.3 · p.17 · 1:07:33
2.14.r.1Instruction register (Wikipedia) ↗ · 현재 실행·decode 중인 instruction 을 담는 register
2.14.r.2Memory buffer register (Wikipedia) ↗ · MDR: memory 와 주고받는 data 를 임시 보관
2.14.r.3Harvard architecture (Wikipedia) ↗ · instruction/data memory 분리 vs von Neumann 단일 memory
2.151:09:33–1:13:23multi-cycle control point 와 control signal
상황·문제자원을 cycle 마다 다르게 쓰려면 instruction type 과 state 에 따른 control signal 이 필요하다.
해결ALUSrcA(PC vs register A), IorD(PC vs ALUOut 주소), IRWrite(IF 마지막 cycle), PCSource, PCWrite/PCWriteCond(branch), ALUSrcB(B / 4 / imm). 기존 RegWrite·MemRead·MemWrite·MemtoReg 유지.
  • ALUSrcB 는 3가지 선택 (11 미사용)
  • PCWriteCond 로 branch 조건부 PC write
p.18
2.15.1 · p.18 · 1:09:33
p.19
2.15.2 · p.19 · 1:10:11
p.20
2.15.3 · p.20 · 1:12:48
p.21
2.15.4 · p.21 · 1:12:41
2.15.r.1Multiplexer (Wikipedia) ↗ · select line 으로 입력 하나를 고르는 mux
2.15.r.2Register-transfer level (Wikipedia) ↗ · register 사이 data 흐름과 그 사이 logic 으로 회로를 기술
2.161:13:23–1:15:15마무리 (행정)
상황·문제질문 확인, Zoom 반응(손들기) 버튼 안내. 이해 못한 부분은 다음 시간 시작 때 복습. p22 synchronous register transfer 는 화면만 띄우고 종료.
p.22
2.16.1 · p.22 · 1:13:16

3핵심 개념

3.1critical path(임계 경로)
single-cycle 에서 가장 긴 조합 경로 = load (IF→ID→EX→MEM→WB, 600 ps). clock period 를 결정.
3.1.r.1Clock rate (Wikipedia) ↗ · clock frequency 와 clock period 의 역수 관계
3.2PVSWriteEn(프로그래머 가시 상태 쓰기 허용)
instruction 의 마지막 cycle 에만 assert 해 PC·RF·memory 를 atomic 하게 한 번 갱신.
3.3Mealy FSM(밀리 FSM)
output 이 current state 와 input(opcode) 둘 다에 의존. multi-cycle sequential control 이 이 형태.
3.3.r.1Mealy machine (Wikipedia) ↗ · output 이 current state 와 input 둘 다에 의존하는 FSM
3.3.r.2Finite-state machine (Wikipedia) ↗ · state diagram, Moore/Mealy output
3.4microsequencer(마이크로 시퀀서)
opcode + state 를 ROM address 로 control·next state 를 읽는 구조. ROM 크기 O(2^n).
3.4.r.1Read-only memory (Wikipedia) ↗ · ROM 에 microcode·lookup table 저장
3.4.r.2Microcode (Wikipedia) ↗ · microsequencer, horizontal/vertical microcode, nanocode·millicode 설명
3.5microprogram counter µPC(마이크로프로그램 카운터)
유효 microinstruction row 만 두고 µPC 를 대부분 +1, 분기 때만 작은 table 로 jump.
3.5.r.1Microcode (Wikipedia) ↗ · microsequencer, horizontal/vertical microcode, nanocode·millicode 설명
3.6iron law(철의 법칙)
T = instruction 수 × CPI × clock period. 같은 ISA·program 이면 CPI·T_clk 만 비교.
3.6.r.1Iron law of processor performance (Wikipedia) ↗ · Time = Instructions/Program × Cycles/Instruction × Time/Cycle
3.7weighted arithmetic mean of CPI(CPI 가중 산술 평균)
instruction mix 비율을 weight 로 한 평균 CPI (예 9.12). IPC 는 그 역수.
3.7.r.1Cycles per instruction (Wikipedia) ↗ · instruction mix 로 가중한 평균 CPI
3.7.r.2Weighted arithmetic mean (Wikipedia) ↗ · weight 로 가중한 평균 Σwx/Σw
3.8IR / MDR(명령어 레지스터 / 메모리 데이터 레지스터)
여러 cycle 동안 instruction 과 memory data 를 보관해 memory 를 하나로 합칠 수 있게 함.
3.8.r.1Instruction register (Wikipedia) ↗ · 현재 실행·decode 중인 instruction 을 담는 register
3.8.r.2Memory buffer register (Wikipedia) ↗ · MDR: memory 와 주고받는 data 를 임시 보관

4스스로 확인

4.1JALR 의 target 계산에 새 adder 가 필요 없는 이유는?
답
rs1 + sign-extend(imm12) 는 load/store 주소 계산과 같은 형태라 기존 ALU 출력을 PC mux 로 보내면 된다.
4.2memory 200 ps, ALU 100 ps, RF 50 ps 일 때 single-cycle 최소 clock period 는?
답
LD = 200+50+100+200+50 = 600 ps.
4.350 ps clock multi-cycle 에서 LD 와 ADD 는 몇 cycle?
답
LD 12 (IF4+ID1+EX2+MEM4+WB1), ADD 8 (MEM 생략).
4.4microsequencer ROM 이 비효율적인 이유 두 가지는?
답
address 폭 n 에 O(2^n) 로 커지고, R-type × memory state 같은 invalid 조합과 안 쓰는 opcode 값도 row 를 차지한다.
4.5CPI 9.12, 20,000 MHz 일 때 MIPS 와 single-cycle(1667 MIPS) 대비 speedup 은?
답
20,000/9.12 ≈ 2193 MIPS, 2193/1667 ≈ 1.316 → 약 31.6% 빠름.

5참고 자료

5.1Computer Organization and Design RISC-V Edition (Elsevier) ↗ · P&H 교재 (Ch 4, Appendix C 읽기 과제)
5.2riscv-isa-manual (GitHub) ↗ · RISC-V unprivileged ISA manual 원문 source
5.3Microcode (Wikipedia) ↗ · microsequencer, horizontal/vertical microcode, nanocode·millicode 설명
5.4Iron law of processor performance (Wikipedia) ↗ · Time = Instructions/Program × Cycles/Instruction × Time/Cycle

7한국어판 강의자료

단축키
Ctrl K · s자료 검색
[ ]이전·다음 강의
Space영상 재생·정지
j k다음·이전 section
n p다음·이전 slide
b강의 목록 접기·펴기
t맨 위
/강의 검색
Esc닫기