Home > Study > CPU Design > LAB > DedicatedProcessor Adder

DedicatedProcessor Adder

DedicatedProcessor Adder


✅ 과제


⚒️ 코드 ⚒️

⚒️[DedicatedProcessor ALUOP.sv]


✅ Schematic


✅ 시뮬레이션


✅ 분석

반복별 레지스터 값

  • 1회: R1=3, R2=2, R3=3, R4=5 → Yes
  • 2회: R1=7, R2=6, R3=9, R4=15 → Yes
  • 3회: R1=15, R2=14, R3=21, R4=35 → Yes
  • 4회: R1=31, R2=30, R3=45, R4=75 → Yes
  • 5회: R1=63, R2=62, R3=93, R4=155 → Yes
  • 6회: R1=127, R2=126, R3=189, R4=59 → No ⇒ halt

➡️ 첫 번째 반복

  • 시작 값: (R1, R2, R3, R4) = (1, 0, 0, 0)
    **계산 순서**
    R2 = R1 + R1 (1 + 1 = 2)(1, **2**, 0, 0)
    R3 = R2 + R1 (2 + 1 = 3)(1, 2, **3**, 0)
    R4 = R3 - R1 (3 - 1 = 2)(1, 2, 3, **2**)
    R1 = R1 | R2 (1 | 2 = 3)(**3**, 2, 3, 2)
    R4 = R4 & R3 (2 & 3 = 2)(3, 2, 3, **2**)
    R4 = R2 + R3 (2 + 3 = 5)(3, 2, 3, **5**)
    조건 확인: R4 > R2 (5 > 2) ➞ ✅ Yes, 계속 진행
    

➡️ 두 번째 반복

시작 값: (R1, R2, R3, R4) = (3, 2, 3, 5)

**계산 순서**
R2 = R1 + R1 (3 + 3 = 6)(3, **6**, 3, 5)
R3 = R2 + R1 (6 + 3 = 9)(3, 6, **9**, 5)
R4 = R3 - R1 (9 - 3 = 6)(3, 6, 9, **6**)
R1 = R1 | R2 (3 | 6 = 7)(**7**, 6, 9, 6)
R4 = R4 & R3 (6 & 9 = 0)(7, 6, 9, **0**)
R4 = R2 + R3 (6 + 9 = 15)(7, 6, 9, **15**)
조건 확인: R4 > R2 (15 > 6) ➞ ✅ Yes, 계속 진행

➡️ 세 번째 반복

시작 값: (R1, R2, R3, R4) = (7, 6, 9, 15)

**계산 순서**
R2 = R1 + R1 (7 + 7 = 14)(7, **14**, 9, 15)
R3 = R2 + R1 (14 + 7 = 21)(7, 14, **21**, 15)
R4 = R3 - R1 (21 - 7 = 14)(7, 14, 21, **14**)
R1 = R1 | R2 (7 | 14 = 15)(**15**, 14, 21, 14)
R4 = R4 & R3 (14 & 21 = 4)(15, 14, 21, **4**)
R4 = R2 + R3 (14 + 21 = 35)(15, 14, 21, **35**)
조건 확인: R4 > R2 (35 > 14) ➞ ✅ Yes, 계속 진행

➡️ 네 번째 반복

시작 값: (R1, R2, R3, R4) = (15, 14, 21, 35)

**계산 순서**
R2 = R1 + R1 (15 + 15 = 30)(15, **30**, 21, 35)
R3 = R2 + R1 (30 + 15 = 45)(15, 30, **45**, 35)
R4 = R3 - R1 (45 - 15 = 30)(15, 30, 45, **30**)
R1 = R1 | R2 (15 | 30 = 31)(**31**, 30, 45, 30)
R4 = R4 & R3 (30 & 45 = 12)(31, 30, 45, **12**)
R4 = R2 + R3 (30 + 45 = 75)(31, 30, 45, **75**)
조건 확인: R4 > R2 (75 > 30) ➞ ✅ Yes, 계속 진행

➡️ 다섯 번째 반복

시작 값: (R1, R2, R3, R4) = (31, 30, 45, 75)

**계산 순서**
R2 = R1 + R1 (31 + 31 = 62)(31, **62**, 45, 75)
R3 = R2 + R1 (62 + 31 = 93)(31, 62, **93**, 75)
R4 = R3 - R1 (93 - 31 = 62)(31, 62, 93, **62**)
R1 = R1 | R2 (31 | 62 = 63)(**63**, 62, 93, 62)
R4 = R4 & R3 (62 & 93 = 28)(63, 62, 93, **28**)
R4 = R2 + R3 (62 + 93 = 155)(63, 62, 93, **155**)
조건 확인: R4 > R2 (155 > 62) ➞ ✅ Yes, 계속 진행

➡️ 여섯 번째 반복 (마지막)

시작 값: (R1, R2, R3, R4) = (63, 62, 93, 155)

**계산 순서**
R2 = R1 + R1 (63 + 63 = 126)(63, **126**, 93, 155)
R3 = R2 + R1 (126 + 63 = 189)(63, 126, **189**, 155)
R4 = R3 - R1 (189 - 63 = 126)(63, 126, 189, **126**)
R1 = R1 | R2 (63 | 126 = 127)(**127**, 126, 189, 126)
R4 = R4 & R3 (126 & 189 = 120)(127, 126, 189, **120**)
R4 = R2 + R3 (126 + 189 = 315)
8-bit Wrapping (오버플로우): 8비트 레지스터는 255까지만 표현 가능하므로, 315는 256을 뺀 나머지 값인 59가  된다. (315 - 256 = 59)
R4 최종 값 ➞ (127, 126, 189, **59**)
조건 확인: R4 > R2 (59 > 126) ➞ ❌ No, 중단 (Halt)