새소식

반응형
CS 지식/컴퓨터구조

[컴퓨터구조] 12. Multi-cycle MIPS

2023.10.10
  • -
반응형

Review: Processor Performance

Program Execution time

= (# instructions)(cycles/instruction)(seconds/cycle)

= # instructions x CPI x TC

 

HDL description

 

Review: Processor Performance

  • Program Execution Time= # instructions x CPI x TC
  • = (#instructions/program)(cycles/instruction)(seconds/cycle)

 

Single-Cycle Performance

Critical path

combinational logic에서 어떤 거는 데이터가 빠르게 오고 어떤 거는 느리게 올텐데 이 중 가장 느린 경로를 가진 combinational logic의 경로를 critical path라고 한다.

  • clk cycle time을 결정하는 경로

TC limited by critical path (lw)

clock period가 이를 수용할 수 있을 정도로 길어야 함.

 

Single-Cycle Performance

  • Single-cycle critical path:
    • Tc = tpcq_PC + tmem + max(tRFread, tsext + tmux) + tALU + tmem + tmux + tRFsetup
  • Typically, limiting paths are:
    • memory, ALU, register file
    • Tc = tpcq_PC + 2tmem + tRFread + tmux + tALU + tRFsetup
  • tsext : sign extention

 

Example

TC = tpcq_PC + 2tmem + tRFread + tmux + tALU + tRFsetup

= [30 + 2(250) + 150 + 25 + 200 + 20] ps

= 925ps

 

Program with 100 billion instrucitons:

Execution Time = # instructions x CPI x TC

​ = (100 x 109) (1) (925 x 10-12s)

​ = 92.5 seconds

 

Single cycle의 문제점

명령어 별로 걸리는 시간차이가 다르기 때문에(lw는 엄청 느리고, J 나 beq는 굉장히 빠르다.) 가장 긴 instruction 시간에 맞춰서 clock time을 정해야 하기 때문에 짧은 instruction은 클락이 끝나지 않았는데도 이미 벌써 끝나서 정해진 다음 클락을 기다리기 때문에 비효율적인 상황이 발생한다.

 

그래서 이를 해결하기 위한 방법 두 가지를 앞으로 소개해 보도록 하겠다.

  • Multi-Cycle
  • Pipelining

 

Multi-cycle MIPS Processor

  • Single-cycle
    • 단순함
    • 가장 긴 명령어에 의해  cycle 시간이 제한된다.(lw)
    • 2 adders/ALUs & 2 memories
  • Multi-cycle
    • single에서는 모든 명령어의 시간이 같았다면 multi는 clock을 나누어서 빨리 끝나는 명령어와 늦게 끝나는 명령어의 clock 시간이 각각 따로 있게 된다.
    • higher clock speed
    • simpler instructions run faster
    • reuse expensive hardware on multiple cycles (IM, DM, ALU 등)
    • sequencing overhead paid many times
    • 5단계로 쪼개서 진행할 거임
      • 나눴다는 얘기는 중간에 register file을 꼈다는 얘기
    • 현재 어떤 cycle에 해당하냐에 따라 control signal이 각자 다름
      • 그래서 state마다 값들이 달라야 하므로 FSM 사용->state transition diagram
  • Same design steps: datapath & control
  • faster clock이 관건
  • overhead: setup time, tpcq

Q) 그럼 multi-cycle은 CPI가 5인 것인가?

A) 다 다르기 때문에 평균으로 구함

 

Multi-cycle State Elements

  • 명령어와 data memories를 single unified memory로 대체함 - 더 현실적

 

Multi-cycle Datapath

위와 같이 나누어서 생각해 보자.(골고루 나누어야 효율적이기 때문)

그러면 중간 중간 데이터를 담아야할 register를 끼워 주어야 함(clock이 지나면 잊어버리기 때문에 저장해 놓는 것)

 

Instruction Fetch

STEP 1: Fetch instruciton

  • Instruction Fetch를 진행한다.
  • Instruction Register에 저장.
  • 이 때, ALU는 놀고 있기 때문에 program + 4도 진행한다.

 

lw Register Read(or instruction decode)

STEP 2a: Read source operands from RF

  • opcode를 보고 이 코드를 통해 control에서 무슨 명령어인지 파악하여 각 control signal을 보내준다.

 

STEP 2b: Sign-extend the immediate

 

lw Address(or execute operation)

STEP 3: Compute the memory address

  • + 연산을 진행하여 결과를 register에 저장.

 

lw Memory Read

STEP 4: Read Data from memory

IorD에 따라 data memory에 저장해야 하기 때문에 IorD는 1이 될 것이고 이 결과가 data memory에 저장된다.

data memory에 있는 것을 읽어서 async하게 data register에 넣어준다.

 

lw Write Register

STEP 5: Write back data block to register file

 

Increment PC

Increment PC -> 사실상 step 1에서도 가능하다 (step1(fetch)에서 ALU는 놀고있기 떄문에)

 

Multicycle Datapath: sw

Write data in rt to memory

RF에 저장할 필요가 없기 때문에 4 cycle이면 된다.

 

Multi-cycle Datapath: R-Type

  • Read from rs and rt
  • Write ALUResult to register file
  • Write to rd (instead of rt)

 

Multicycle Datapath: beq

  • rs == rt?
  • BTA = (sign-extended immediate << 2) + (PC+4)

3번째 clock에서는 ALU를 쓰고 있기 때문에(빼기 연산) BTA를 계산하는 과정을 3번째 clock에는 넣으면 안 된다.

그러므로 두 번째 cycle에서 BTA를 만들어 놓고 3번째 clock에서 두 값의 조건을 확인하는 용도로 ALU를 사용한다.

 

Multicycle Processor

Finite State Machine(FSM)이 사용됨

  • lw 명령에서는 총 5번에 해당하는 cycle이 진행되어 각 클락마다, 즉 현재 어떤 상태이냐에 따라 값이 다를 수 있기 때문에 FSM을 사용하는 것이다.

5단계로 쪼갰기 떄문에 4개의 register가 추가됨

 

Multicycle control

Control unit을 main controller와 ALU decoder 로 나누었음.

Control에는 Mux controlWrite enable 신호가 있다.

 

Main Controller FSM:

FSM: moore machine

Fetch

  • MUX select signals은 그들의 값이 중요할 때만 리스트업된다; 그렇지 않다면 그들은 don't cares.
  • Enable signals은 그들이 주장할 때만 리스트업된다.; 그렇지 않으면 그들은 0이다.

 

Fetch

IR <- Mem[PC] // IorD = 0 , IRWrite

PC <- PC + 4 //AluSrcA, ......


 

Decode

A <- RF[A1]

B <- RF[A2]

control 신호가 필요없어서 안 씀

 

Address

lw or sw

 

ALUResult <- A + Imm

ALU register에 저장

lw

  • 5 clock 걸림

Data <- Mem[ALUout] :4번째 ; data register에 저장하는 과정

RF[A3] <- Data : 5번째 ; data에 저장된 내용을 register file에 저장하는 과정

 

sw

memory에 write하고 다시 Fetch 과정으로 돌아감

 

R-Type

register write

state에 따라 각각의 control signal이 다르기 때문에 FSM 사용하는 것.

 

beq

ALUout <- PC + 4 + Imm << 2 // 두 번째 cycle에서 BTA 계산

if (A == B) PC <- ALUout //세 번째 cycle

 

 

Extended Functionality: addi

  • 하나는 A에서 하나는 immediate에서
  • 사실상 S2, S9은 같기 때문에 위처럼 해도 되고 연결을 공유해도 됨

 

Extended Functionality: j

 

Main Controller FSM: j

 

Multicycle Processor

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.