프로세서 - Unpipelined Datapath[3]

임승섭·2023년 5월 11일
0

Computer Architecture

목록 보기
12/19

ALU Control (ALU 제어)

  • ALU used for
    • Load / Store : add (메모리 주소를 계산하기 위해 더하는 용도)
    • Branch : subtract (두 값을 빼서 같은지 확인한다)
    • R-type : depends on the funct field
  • Encode different instruction by 4 bits

    ALU controlFunction
    0000AND
    0001OR
    0010add
    0110subtract
    0111set - on - less - than
    1100NOR
  • 명령어의 기능 필드 (funct field)(6비트)와 2비트 제어 필드 (ALUOp)를 입력으로 갖는 조그만 제어 유닛을 만들어서 4비트 ALU 제어 입력을 발생시킨다.
    (Combinational logic derives ALU control)
    • 자세한 건 교재나 피피티 표 참고하자

The Main Control Unit (주 제어 유닛)

  • R-type

    0rsrtrdshamtfunct
    31:2625:2120:1615:1110:65:0
  • Load / Store

    35 or 43rsrtaddress
    31:2625:2120:1615:0
  • Branch

    35 or 43rsrtaddress
    31:2625:2120:1615:0
  • opcode는 항상 31:26이다.
  • rs는 읽어야 하는 레지스터이다. 25:21에 저장된다
  • rt는 Load일 때를 제외하고, 읽어야 하는 레지스터이다.
    Load일 때는 써야 하는 레지스터이다.
  • rd는 R-type일 때 써야 하는 레지스터이다.
  • address에는 branch, load, store를 위한 16비트 변위가 저장되어 있다.
  • 이처럼 목적지 레지스터(써야 하는 레지스터)는 명령어의 종류에 따라 달라지기 때문에 쓰기가 행해질 레지스터 번호로 명령어의 어떤 필드를 사용할 지 선택하기 위해 멀티플렉서를 사용해야 한다.

Datapath with Control

  • opcode(instruction[31-26])을 통해 RegDst, Branch, MemRead, MemtoReg, ALUOp, MemWrite, ALUSrc, RegWrite 값을 결정하는 Control을 추가하였다.

  • 기능

    신호 이름인가되지 않은 경우(0)인가된 경우 (1)
    RegDstrt가 Write register 가 된다rd가 Write register가 된다
    RegWriteNothingWrite register에 Write data 를 쓴다
    ALUSrcRead data2가 ALU의 두 번째 operand가 된다하위 16비트(instruction[15:0])가 sign extend된 값이 ALU의 두 번째 operand가 된다
    PCSrc
    (branch && zero)
    PC + 4가 새로운 PC값이 된다branch target이 새로운 PC 값이 된다.
    PC + 4 + target
    MemReadNothingaddress 입력이 지정하는 데이터 메모리 내용을 Read data 출력으로 내보낸다 (???)
    MemWriteNothingaddress 입력이 지정하는 데이터 메모리 내용을 Write data 입력 값으로 바꾼다
    MemtoRegALU 출력이 레지스터의 Write data 입력이 된다데이터 메모리 출력이 레지스터의 Write data 입력이 된다

R - type

add rd, rs, rt

  • control signal

    signalvaluedescription
    RegDst1rd를 select한다
    RegWrite1rd에 write가 가능하게 한다
    ALUSrc0rt가 ALU의 두 번째 operand가 되게 한다
    ALUOpOPto select an appropriate operation for ALU
    MemRead0memory를 읽지 못하게 한다
    MemWrite0memory에 쓰지 못하게 한다
    MemtoReg0ALU의 출력이 register에 write하는 값이 되게 한다
    PCSrc0다음 PC를 선택한다

I-type

Load Instruction

lw rt, rs, imm

  • control signal

    signalvaluedescription
    RegDst0rt에 write할 준비를 한다
    RegWrite1rt에 쓸 수 있게 한다
    ALUSrc1ALU의 두 번째 operand로 immediate을 선택한다
    ALUOpOPadd
    MemRead1reading memory가 가능하게 한다
    MemWrite0writing memory는 불가능하게 한다
    MemtoReg1메모리의 출력을 레지스터에 write하게 한다
    PCSrc0다음 PC를 선택한다

Store Instruction

sw rt, rs, imm

  • control signal

    signalvaluedescription
    RegDstX (Don't care)Not used
    RegWrite0writing register가 불가능하게 한다
    ALUSrc1ALU의 두 번째 operand로 immediate을 선택한다
    ALUOpOPadd
    MemRead0reading memory가 불가능하게 한다
    MemWrite1writing memory가 가능하게 한다
    MemtoRegX (Don't care)Not used
    PCSrc0다음 PC를 선택한다

Branch-on-Equal Instruction

beq rs, rt, imm

  • control signal

    signalvaluedescription
    RegDstX (Don't care)Not used
    RegWrite0writing register가 불가능하게 한다
    ALUSrc0ALU의 두 번째 operand로 rt를 선택한다
    ALUOpOPsub
    MemRead0reading memory가 불가능하게 한다
    MemWrite0writing memory가 불가능하게 한다
    MemtoRegX (Don't care)Not used
    PCSrc1PC + 4 + target으로 이동한다

Unconditional Jump Instruction

000010 (2)address
31:2625:0

(ppt)

  • jump는 word address를 이용한다
  • (??) Update PC with concatenation of
    • Top 4 bits of old PC
    • 26-bit jump address
  • (??) opcode에서 decode된 추가적인 control signal이 필요하다

(교재)

  • 점프 명령어는 어떤 면에서는 분기 명령어와 비슷하지만
    목적지 PC값 계산 방식이 다르고, 조건 분기가 아니라는 점이 다르다.
  • 점프 명령어의 목적지 주소는
    현 PC + 4의 상위 4비트에 점프 명령어의 26비트 주소 필드, 그리고 00을 하위 2비트로 연접한 값으로 구성된다

(그림)

  • Add에서 PC + 4 값을 출력한다
  • instruction[25-0]을 왼쪽으로 두 번 shift하여 00을 하위 2비트로 붙인다
  • 이 둘을 합친다. (4 + 26 + 2 = 32)
  • 마지막으로 MUX를 이용해서 Jump == 1이면 위의 주소를 다음 목적지로 잡는다
  • control signal

    signalvaluedescription
    RegDstX (Don't care)Not used
    RegWrite0writing register가 불가능하게 한다
    ALUSrcXNot used
    ALUOpXNot used
    MemRead0reading memory가 불가능하게 한다
    MemWrite0writing memory가 불가능하게 한다
    MemtoRegX (Don't care)Not used
    PCSrcXNot used
    Jump1to select next PC

Performance Issue

  • longest delay deterines clock period
    • critical path : load instruction
    • Instruction memory
      -> register file
      -> ALU
      -> data memory
      -> register file
  • Not feasible to vary period for different instructions
  • Violates design principle
    • making the common case fast
  • We will improve performance by pipelining

0개의 댓글