Study Hub

Microarchitecture / High

Single Cycle Datapath

Single-cycle datapath는 instruction 하나가 한 Takt 안에서 어떤 component를 지나고 어떤 control signal을 켜는지 추적하는 모델입니다.

Why This Matters

Datapath 문제는 그림 암기가 아니라 data movement 추적입니다. `lw`, `sw`, `add`, `beq`가 같은 hardware 그림을 쓰지만 실제로 active한 path와 write destination은 다릅니다.

시험에서는 active components, mux choices, control signals, critical path를 함께 묻습니다. 신호 이름을 외워도 `rs1`, `rs2`, `rd`, immediate의 역할을 못 나누면 표가 틀립니다.

Performance 단원과도 연결됩니다. Single-cycle에서는 가장 긴 instruction path가 전체 Taktperiode를 정합니다.

Beginner Story

Instruction을 택배 주문이라고 보면 datapath는 물건이 지나가는 컨베이어입니다. 어떤 주문은 계산대만 지나고, 어떤 주문은 창고까지 갑니다.

`lw`는 창고에서 물건을 꺼내 register에 넣는 주문입니다. `sw`는 register에 있던 물건을 창고에 넣는 주문입니다.

Control Unit은 길을 여는 신호등입니다. mux를 어느 쪽으로 둘지, register나 memory에 쓸지 결정합니다.

Glossary / Key Terms

  • Ein-Takt Prozessorinstruction 하나를 한 clock cycle 안에 끝내는 processor 모델입니다. Exam tip: fetch/decode/execute를 여러 cycle로 나누지 않습니다.
  • DatenpfadPC, memories, register file, ALU, mux를 통해 값이 이동하는 hardware path입니다. Exam tip: instruction별 active component를 표시해야 합니다.
  • Control Unitopcode/funct를 보고 mux 선택과 write enable을 만드는 block입니다. Exam tip: 계산은 ALU가 하고 Control Unit은 길을 고릅니다.
  • RegWriteRegister File write enable입니다. Exam tip: `sw`, `beq`에서는 0입니다.
  • MemReadData Memory read enable입니다. Exam tip: Instruction Memory fetch와 혼동하지 마세요.
  • MemWriteData Memory write enable입니다. Exam tip: `sw`에서만 1입니다.
  • ALUSrcALU 두 번째 입력이 register 값인지 immediate인지 고르는 signal입니다. Exam tip: `lw`, `sw`, `addi`는 immediate 쪽입니다.
  • MemToRegwriteback 값이 ALU result인지 memory data인지 고르는 mux입니다. Exam tip: `lw`만 memory data입니다.
  • PCSrc다음 PC가 `PC+4`인지 branch target인지 고릅니다. Exam tip: branch condition과 target calculation을 분리하세요.

Step-by-Step Method

  1. 1. Instruction type 분류R/I/load/store/branch 중 어디에 속하는지 정합니다.
  2. 2. Source와 destination 표시`rs1`, `rs2`, `rd`, immediate가 각각 어떤 역할인지 적습니다.
  3. 3. ALU 역할 결정arithmetic, effective address, comparison 중 하나를 고릅니다.
  4. 4. Memory와 writeback 결정Data Memory read/write 여부와 Register File write 여부를 구분합니다.
  5. 5. Control signal 채우기data movement가 정해진 뒤 RegWrite, MemRead, MemWrite, ALUSrc, MemToReg, Branch를 채웁니다.

Visual Model

InstructionActive pathRegWriteALUSrcMemReadMemWriteResultSrc
addIMem -> RegFile -> ALU -> WB1000ALU
lwIMem -> RegFile -> ALU -> DMem -> WB1110Mem
swIMem -> RegFile -> ALU -> DMem0101-
beqIMem -> RegFile -> ALU compare -> PCSrc0000-

Use this as a hand-check template before drawing mux choices or adding critical-path delays.

Active datapath/control-signal board

add, addi, lw, sw, beq의 active path와 RegWrite/MemRead/MemWrite/ALUSrc/MemToReg를 한 표로 보여 줍니다.

Instruction, Active path, RegWrite, MemRead, MemWrite, ALUSrc, MemToReg, Branch

lw critical path

PC부터 Data Memory와 writeback mux까지 이어지는 longest path를 시각화합니다.

PC, IMem, RegFile, ALU, DMem, WB mux, RegFile setup

Interactive Visual

Single-Cycle Control Lab

instruction을 고르면 active path와 control signal이 즉시 바뀝니다.

ready

JavaScript가 켜져 있으면 이 영역이 조작 가능한 visual lab으로 바뀝니다.

Worked Examples

lw active path

Problem: `lw t0, 8(sp)`의 active components와 control signals를 쓰세요.

  1. `rs1=sp`, `rd=t0`, immediate=8입니다.
  2. ALU가 `Reg[sp]+8`로 effective address를 만듭니다.
  3. Data Memory를 읽고 memory data를 `t0`에 씁니다.
  4. RegWrite=1, MemRead=1, MemWrite=0, ALUSrc=1, MemToReg=1입니다.

address calculation, memory read, rd writeback이 모두 있어야 합니다.

sw vs lw

Problem: `sw t0, 8(sp)`가 `lw`와 다른 점은 무엇인가요?

  1. address 계산은 `Reg[sp]+8`로 같습니다.
  2. `rs2=t0` 값이 Data Memory write data입니다.
  3. Register File writeback은 없습니다.
  4. RegWrite=0, MemWrite=1, MemRead=0입니다.

store에서 `rd`를 쓰면 틀립니다.

beq PC choice

Problem: `beq s1, s2, label`에서 `s1==s2`이면 next PC는?

  1. Register File에서 `s1`, `s2`를 읽습니다.
  2. ALU가 equality를 비교합니다.
  3. branch target은 `PC + branch immediate`입니다.
  4. condition true이면 PC mux가 branch target을 고릅니다.

condition comparison과 target calculation을 따로 적습니다.

Common Mistakes

  • `MemRead`를 instruction fetch로 해석함control table에서는 Data Memory read를 뜻한다고 표시합니다.
  • `ALUSrc`를 ALU 사용 여부로 해석함ALU input B의 source 선택 signal이라고 적습니다.
  • `sw`에 `RegWrite=1`을 줌store의 목적지는 register가 아니라 memory입니다.

Active Recall

  • `lw`에서 `ALUSrc=1`인 이유는?Hint: address 계산
    정답 확인

    ALU input B가 `rs2`가 아니라 immediate offset이기 때문입니다.

  • `sw`에서 `rs2`의 역할은?Hint: address가 아닙니다.
    정답 확인

    memory에 쓸 write data입니다.

  • `beq` 답안에서 분리해야 하는 두 계산은?Hint: condition과 target
    정답 확인

    register comparison과 branch target address calculation입니다.

  • Single-cycle critical path는 무엇이 정하나요?Hint: worst case
    정답 확인

    가장 긴 active instruction path가 정합니다.

Exam Connection

Übung 6은 instruction별 control signal과 critical path 계산을 직접 묻습니다.

Datapath mode에서는 active component, mux choice, writeback destination을 signal보다 먼저 말해야 합니다.

Performance 문제에서는 single-cycle Taktperiode가 `lw` 같은 longest path에 의해 정해집니다.

Source Grounding

Grounding entries are course-file and source-window hints for study. When a problem needs an exact page number, branch penalty, address, or formula convention, verify the cited PDF window before finalizing the answer.

Full beginner lecture

Single Cycle Datapath

Beginner Intuition

Single-cycle datapath(Ein-Takt Datenpfad)는 instruction 하나가 한 clock cycle 안에서 fetch, decode, execute, memory, writeback을 모두 끝내는 모델입니다. 처음 그림을 보면 box와 선이 많아서 복잡하지만, 시험에서 묻는 질문은 보통 같습니다. "이 instruction은 어디에서 값을 읽고, 어디에서 계산하고, 어디에 결과를 쓰는가?"

add, lw, sw, beq를 같은 그림 위에서 실행하지만 active path는 다릅니다. add는 register file과 ALU 중심입니다. lw는 ALU로 effective address를 만든 뒤 Data Memory를 읽고 rd에 씁니다. sw는 address 계산은 lw와 비슷하지만 memory에 쓰고 register writeback은 없습니다. beq는 register 두 값을 비교하고 PC source를 고릅니다.

Active Datapath Board

Common fetch:
PC -> Instruction Memory -> instruction bits
PC -> PC+4 adder -> PC mux

add rd, rs1, rs2:
Reg[rs1], Reg[rs2] -> ALU -> WB mux(ALU) -> Reg[rd]

lw rd, imm(rs1):
Reg[rs1] + SignExt(imm) -> ALU address
Data Memory[address] -> WB mux(memory) -> Reg[rd]

sw rs2, imm(rs1):
Reg[rs1] + SignExt(imm) -> ALU address
Reg[rs2] -> Data Memory[address]
no rd writeback

beq rs1, rs2, imm:
Reg[rs1] vs Reg[rs2] -> ALU compare
PC + branch immediate -> PC mux if condition true

Control-Signal Board

InstructionRegWriteMemReadMemWriteALUSrcMemToReg/ResultSrcBranch/PCSrc
add rd, rs1, rs21000ALU0
addi rd, rs1, imm1001ALU0
lw rd, imm(rs1)1101Memory0
sw rs2, imm(rs1)0011X0
beq rs1, rs2, imm0000Xcondition-dependent

이 표는 외우기보다 질문 순서로 채우세요.

  1. register에 쓰는가? 그러면 RegWrite=1.
  2. Data Memory를 읽는가? lwMemRead=1.
  3. Data Memory에 쓰는가? swMemWrite=1.
  4. ALU input B가 register rs2인가 immediate인가? immediate면 ALUSrc=1.
  5. register에 쓰는 값이 ALU result인가 memory data인가?
  6. PC가 PC+4가 아닌 target으로 갈 가능성이 있는가?

Worked Example 1: lw t0, 8(sp)

문제: sp = 0x1000, memory[0x1008] = 0xABCD1234일 때 active path와 control signal을 적으세요.

rs1 = sp, rd = t0, immediate = 8
ALU address = Reg[sp] + 8 = 0x1008
Data Memory read = memory[0x1008] = 0xABCD1234
Reg[t0] <- 0xABCD1234

Control:

RegWrite=1
MemRead=1
MemWrite=0
ALUSrc=1
MemToReg=1
Branch=0

검산: lw 답안에는 address calculation, memory read, rd writeback이 모두 있어야 합니다.

Worked Example 2: sw t0, 8(sp)

문제: sp = 0x1000, t0 = 0xABCD1234일 때 active path와 control signal을 적으세요.

rs1 = sp, rs2 = t0, immediate = 8
ALU address = Reg[sp] + 8 = 0x1008
memory[0x1008] <- Reg[t0] = 0xABCD1234
Register writeback: none

Control:

RegWrite=0
MemRead=0
MemWrite=1
ALUSrc=1
MemToReg=X
Branch=0

검산: sw에서 rd를 만들거나 RegWrite=1을 쓰면 store의 의미를 거꾸로 본 것입니다.

Worked Example 3: beq s1, s2, label

PC = 0x2000
s1 = 42
s2 = 42
branch immediate = 0x10

beqs1 == s2이면 taken입니다. 따라서 condition은 true이고 next PC는 0x2000 + 0x10 = 0x2010입니다. 이때 register writeback과 data memory access는 없습니다. 답안에는 condition comparison과 target calculation을 분리해서 적어야 합니다.

Critical Path

Single-cycle에서는 모든 instruction이 같은 clock을 씁니다. 그래서 clock period는 평균 instruction이 아니라 가장 느린 active path가 정합니다.

T_c >= max(path delay of add, addi, lw, sw, beq, ...)

보통 lw path가 깁니다.

PC -> Instruction Memory -> Register File
-> ALU address -> Data Memory -> WB mux -> Register File setup

Common Mistakes

Active Recall

  1. lwsw가 공통으로 사용하는 datapath 구간은 무엇인가요?
  2. add에서 Data Memory가 active하지 않은 이유는 무엇인가요?
  3. ALUSrc=1이 되는 대표 instruction 세 개를 말해 보세요.
  4. Single-cycle에서 addlw가 정한 긴 clock을 쓰는 이유는 무엇인가요?

Source Grounding